Datora atmiņa

thumb|DDR4 SDRAM modulis. No 2021. gada vairāk nekā 90 procenti no personālajos datoros un serveros izmantotās datora atmiņas bija šāda veida.
Datorā **atmiņa** ir ierīce vai sistēma, ko izmanto, lai saglabātu informāciju tūlītējai lietošanai datorā vai saistītā datora aparatūrā un digitālās elektroniskās ierīcēs. Termins *atmiņa* bieži ir sinonīms terminam *primārā krātuve* vai *galvenā atmiņa*. Arhaisks atmiņas sinonīms ir **glabātuve** .

Datora atmiņa darbojas ar lielāku ātrumu, salīdzinot ar krātuvi, kas ir lēnāka, bet lētāka un lielāka. Papildus atvērto programmu glabāšanai datora atmiņa kalpo kā diska kešatmiņa un rakstīšanas buferis, lai uzlabotu gan lasīšanas, gan rakstīšanas veiktspēju. Operētājsistēmas aizņem RAM ietilpību kešatmiņas saglabāšanai, kamēr tas nav nepieciešams programmatūrai. Ja nepieciešams, datora atmiņas saturu var pārsūtīt uz krātuvi. Izplatīts veids, kā to izdarīt, ir atmiņas pārvaldības tehnika, ko sauc par *virtuālo atmiņu* .

Mūsdienu atmiņa tiek realizēta kā pusvadītāju atmiņa, kur dati tiek glabāti atmiņas šūnās, kas veidotas no MOS tranzistoriem un citiem integrētās shēmas komponentiem. Ir divi galvenie pusvadītāju atmiņas veidi - gaistošā un nepastāvīgā. Negaistošās atmiņas piemēri ir zibatmiņa un ROM, PROM, EPROM un EEPROM atmiņa. Nepastāvīgās atmiņas piemēri ir dinamiskā brīvpiekļuves atmiņa (DRAM), ko izmanto primārajai krātuvei, un statiskā brīvpiekļuves atmiņa (SRAM), ko izmanto CPU kešatmiņai .

Lielākā daļa pusvadītāju atmiņas ir sakārtotas atmiņas šūnās, kurās katrā ir viens bits (0 vai 1). Zibatmiņas organizācija ietver gan vienu bitu katrā atmiņas šūnā, gan daudzlīmeņu šūnu, kas spēj saglabāt vairākus bitus vienā šūnā. Atmiņas šūnas ir sagrupētas vārdos ar fiksētu vārda garumu, piemēram, 1, 2, 4, 8, 16, 32, 64 vai 128 biti. Katram vārdam var piekļūt, izmantojot *N* bitu bināro adresi, tādējādi ļaujot atmiņā saglabāt 2 *N* vārdus.

## Vēsture
[thumb| Detaļa no [ENIAC daļas aizmugures, kurā redzamas vakuuma caurules .]]
[thumb| 8[Baits|GB microSDHC karte virs 8baitu magnētiskā kodola atmiņas (1kodols ir 1bits).]]
1940. gadu sākumā atmiņas tehnoloģija bieži pieļāva dažu baitu ietilpību. Pirmais elektroniski programmējamais digitālais dators ENIAC, izmantojot tūkstošiem vakuumlampu, varēja veikt vienkāršus aprēķinus, iekļaujot vakuuma lampās saglabātos 20 ciparus ar desmit decimāldaļām.

Nākamais nozīmīgais sasniegums datora atmiņas attīstībā radās ar akustiskās aizkaves līnijas atmiņu, ko 1940. gadu sākumā izstrādāja J. Prespers Ekerts. Pateicoties stikla caurulei, kas piepildīta ar dzīvsudrabu un abos galos savienota ar kvarca kristālu, aizkaves līnijas varēja uzglabāt informācijas bitus skaņas viļņu veidā, kas izplatās caur dzīvsudrabu, un kvarca kristāli darbojas kā devēji bitu lasīšanai un rakstīšanai. Aizkaves līnijas atmiņa bija ierobežota līdz dažiem tūkstošiem bitu.

Divas alternatīvas aizkaves līnijai, Williams caurule un Selectron caurule, radās 1946. gadā, un abas izmantoja elektronu starus stikla caurulēs kā uzglabāšanas līdzekli. Izmantojot katodstaru lampas, Freds Viljamss izgudroja Viljamsa lampu, kas bija pirmā brīvpiekļuves datora atmiņa. Williams caurule varēja uzglabāt vairāk informācijas nekā Selectron caurule (Selectron bija ierobežota līdz 256 bitiem, savukārt Williams caurule varēja uzglabāt tūkstošiem bitu) un bija lētāka. Tomēr Williams caurule bija ļoti jutīga pret vides traucējumiem.

Centieni izveidot nepastāvīgu atmiņu sākas 1940. gadu sākumā. Magnētiskā kodola atmiņa ļāva atsaukt atmiņu pēc strāvas zuduma. To 1940. gadu beigās izstrādāja Frederiks V. Vīhe un Ans Vans, bet 50. gadu sākumā to uzlaboja Džejs Foresters un Jans A. Rajčmans, pirms to 1953. gadā sāka komercializēt ar Whirlwind datoru. Magnētiskā kodola atmiņa bija dominējošā atmiņas forma līdz MOS pusvadītāju atmiņas attīstībai 1960. gados.

Pirmā pusvadītāju atmiņa tika ieviesta kā flip-flop ķēde 1960. gadu sākumā, izmantojot bipolārus tranzistorus. Pusvadītāju atmiņu, kas izgatavota no diskrētām ierīcēm, 1961. gadā Texas Instruments pirmo reizi nosūtīja Amerikas Savienoto Valstu gaisa spēkiem. Tajā pašā gadā lietojumprogrammu inženieris Bobs Normans uzņēmumā Fairchild Semiconductor ierosināja integrētās shēmas (IC) mikroshēmas cietvielu atmiņas koncepciju. Pirmā bipolārā pusvadītāju atmiņas IC mikroshēma bija SP95, ko IBM ieviesa 1965. gadā. Lai gan pusvadītāju atmiņa piedāvāja labāku veiktspēju salīdzinājumā ar magnētisko kodolu atmiņu, tā joprojām bija lielāka un dārgāka, un tā nepārvietoja magnētisko kodolu atmiņu līdz 1960. gadu beigām.

### MOS atmiņa
Metāla-oksīda-pusvadītāju lauka efekta tranzistora (MOSFET) izgudrojums ļāva praktiski izmantot metāla-oksīda-pusvadītāju (MOS) tranzistorus kā atmiņas šūnu krātuves elementus. MOS atmiņu izstrādāja Džons Šmits uzņēmumā Fairchild Semiconductor 1964. gadā. Papildus augstākai veiktspējai MOS pusvadītāju atmiņa bija lētāka un patērēja mazāk enerģijas nekā magnētiskā kodola atmiņa. 1965. gadā Dž. Vuds un R. Bols no Royal Radar Establishment ierosināja digitālās glabāšanas sistēmas, kas papildus MOSFET barošanas ierīcēm barošanai izmanto CMOS (komplementārās MOS) atmiņas šūnas, komutētu šķērssavienojumu, slēdžus un aizkaves līniju krātuvi. Silikona vārtu MOS integrētās shēmas (MOS IC) tehnoloģijas izstrāde, ko Federiko Fagins veica Fērčildā 1968. gadā, ļāva ražot MOS atmiņas mikroshēmas. NMOS atmiņu 1970. gadu sākumā komercializēja IBM. 70. gadu sākumā MOS atmiņa apsteidza magnētisko kodolu atmiņu kā dominējošo atmiņas tehnoloģiju.

Divi galvenie mainīgās brīvpiekļuves atmiņas (RAM) veidi ir statiskā brīvpiekļuves atmiņa (SRAM) un dinamiskā brīvpiekļuves atmiņa (DRAM). Bipolāro SRAM izgudroja Roberts Normans uzņēmumā Fairchild Semiconductor 1963. gadā, kam sekoja MOS SRAM izstrāde, ko veica Džons Šmits uzņēmumā Fairchild 1964. gadā. SRAM kļuva par alternatīvu magnētisko kodolu atmiņai, taču katram datu bitam ir nepieciešami seši tranzistori. SRAM komerciāla izmantošana sākās 1965. gadā, kad IBM ieviesa savu SP95 SRAM mikroshēmu System/360 Model 95.

Toshiba ieviesa bipolārās DRAM atmiņas šūnas savam Toscal BC-1411 elektroniskajam kalkulatoram 1965. gadā. Lai gan tas piedāvāja uzlabotu veiktspēju, bipolārais DRAM nevarēja konkurēt ar zemāku cenu par toreiz dominējošo magnētisko kodolu atmiņu. MOS tehnoloģija ir mūsdienu DRAM pamats. 1966. gadā Roberts H. Dennards IBM Tomasa J. Vatsona pētniecības centrā strādāja pie MOS atmiņas. Pētot MOS tehnoloģijas raksturlielumus, viņš atklāja, ka ir iespējams izveidot kondensatorus un ka MOS kondensatora lādiņa vai lādiņa neuzglabāšana var attēlot bitu 1 un 0, savukārt MOS tranzistors var kontrolēt lādiņa ierakstīšanu kondensators. Tā rezultātā viņš izstrādāja viena tranzistora DRAM atmiņas šūnu. 1967. gadā Denards iesniedza patentu viena tranzistora DRAM atmiņas šūnai, kuras pamatā ir MOS tehnoloģija. Tā rezultātā 1970. gada oktobrī tika izveidota pirmā komerciālā DRAM IC mikroshēma Intel 1103. Sinhronā dinamiskā brīvpiekļuves atmiņa (SDRAM) vēlāk debitēja ar Samsung KM48SL2000 mikroshēmu 1992. gadā.

Termins *atmiņa* bieži tiek lietots arī, lai apzīmētu pastāvīgo atmiņu, tostarp lasāmatmiņu (ROM), izmantojot mūsdienu zibatmiņu. Programmējamo lasāmatmiņu (PROM) 1956. gadā izgudroja Vens Tsings Čovs, strādājot Amerikas Bosch Arma Corporation Arma nodaļā. 1967. gadā Dawon Kahng un Simon Sze no Bell Labs ierosināja, ka MOS pusvadītāju ierīces peldošos vārtus varētu izmantot pārprogrammējamas ROM šūnai, kā rezultātā Dovs Frohmans no Intel 1971. gadā izgudroja EPROM (dzēšamo PROM). EEPROM (elektriski dzēšams PROM) izstrādāja Yasuo Tarui, Yutaka Hayashi un Kiyoko Naga Elektrotehniskajā laboratorijā 1972. gadā. Zibatmiņu 80. gadu sākumā izgudroja Fudžio Masuoka uzņēmumā Toshiba. Masuoka un kolēģi prezentēja NOR zibspuldzes izgudrojumu 1984. gadā un pēc tam NAND zibspuldzi 1987. gadā. Toshiba komercializēja NAND zibatmiņu 1987. gadā.

Tehnoloģiju attīstība ir padarījusi iespējamu tā saukto lielapjoma atmiņas (VLM) datoru attīstību.

## Nepastāvīga atmiņa
thumb|Dažādi atmiņas moduļi, kas satur dažāda veida DRAM (no augšas uz leju): DDR SDRAM, SDRAM, EDO DRAM un FPM DRAM
Gaistošā atmiņa ir datora atmiņa, kurai ir nepieciešama jauda, lai uzturētu saglabāto informāciju. Lielākā daļa mūsdienu pusvadītāju nepastāvīgās atmiņas ir vai nu statiskā RAM (SRAM) vai dinamiskā RAM (DRAM). DRAM dominē galddatoru sistēmas atmiņā. SRAM tiek izmantota CPU kešatmiņai. SRAM ir atrodama arī mazās iegultās sistēmās, kurām nepieciešams maz atmiņas.

SRAM saglabā savu saturu tik ilgi, kamēr ir pievienota barošana, un var izmantot vienkāršāku interfeisu, taču katram bitam ir nepieciešami seši tranzistori. Dinamiskā RAM ir sarežģītāka saskarei un kontrolei, jo ir nepieciešami regulāri atsvaidzināšanas cikli, lai nezaudētu tās saturu, taču tā izmanto tikai vienu tranzistoru un vienu kondensatoru uz bitu, ļaujot tai sasniegt daudz lielāku blīvumu un izmaksas par bitu ir daudz lētākas.

## Negaistoša atmiņa
Negaistošā atmiņa var paturēt saglabāto informāciju pat tad, ja tā netiek darbināta. Negaistošās atmiņas piemēri ir lasāmatmiņa, zibatmiņa, lielākā daļa magnētisko datoru atmiņas ierīču veidu (piemēram, cietie diski, disketes un magnētiskās lentes), optiskie diski un agrīnas datora uzglabāšanas metodes, piemēram, papīra lente un perfokartes.

Izstrādājamās pastāvīgās atmiņas tehnoloģijas ietver feroelektrisko RAM, programmējamu metalizācijas elementu, griešanās momenta magnētisko RAM, SONOS, rezistīvo brīvpiekļuves atmiņu, sacīkšu trases atmiņu, nanoRAM, 3D XPoint un tūkstošpēdu atmiņu.

## Daļēji nepastāvīga atmiņa
Trešā atmiņas kategorija ir *daļēji nepastāvīga*. Šis termins tiek lietots, lai aprakstītu atmiņu, kurai ir ierobežots nemainīgs ilgums pēc strāvas padeves atslēgšanas, bet pēc tam dati tiek zaudēti. Tipisks mērķis, izmantojot daļēji gaistošu atmiņu, ir nodrošināt augstu veiktspēju un ilgmūžību, kas saistīta ar nepastāvīgām atmiņām, vienlaikus nodrošinot dažas nepastāvīgās atmiņas priekšrocības.

Piemēram, daži nepastāvīgās atmiņas veidi rakstīšanas laikā nolietojas. *Nolietotai* šūnai ir palielinājusies nepastāvība, bet citādi tā turpina darboties. Datu atrašanās vietas, kas tiek ierakstītas bieži, tādējādi var tikt novirzītas uz nolietotu ķēžu izmantošanu. Kamēr atrašanās vieta tiek atjaunināta zināmā glabāšanas laikā, dati paliek spēkā. Pēc laika perioda bez atjaunināšanas vērtība tiek kopēta uz mazāk nolietotu ķēdi ar ilgāku saglabāšanu. Vispirms ierakstot nolietotajā zonā, tiek nodrošināts augsts rakstīšanas ātrums, vienlaikus izvairoties no nenolietoto ķēžu nodiluma.

Kā otru piemēru var minēt, ka STT-RAM var padarīt nepastāvīgu, veidojot lielas šūnas, taču tas palielina bitu izmaksas un jaudas prasības un samazina rakstīšanas ātrumu. Mazu elementu izmantošana uzlabo izmaksas, jaudu un ātrumu, bet rada daļēji nepastāvīgu uzvedību. Dažās lietojumprogrammās palielināto nepastāvību var pārvaldīt, lai nodrošinātu daudzas nemainīgas atmiņas priekšrocības, piemēram, atvienojot strāvu, bet piespiežot aktivizēties, pirms dati tiek zaudēti, vai kešatmiņā saglabājot tikai lasāmus datus un atmetot kešatmiņā saglabātos datus, ja izslēgšanas laiks pārsniedz nemainīgo slieksni.

Termins daļēji nepastāvīgs tiek izmantots arī, lai aprakstītu daļēji nepastāvīgu uzvedību, kas veidota no citiem atmiņas veidiem. Piemēram, var apvienot gaistošu un nemainīgu atmiņu, kur ārējs signāls kopē datus no gaistošas atmiņas uz nemainīgo atmiņu, bet, ja barošana tiek atvienota pirms kopēšanas, dati tiek zaudēti. Vai arī ar akumulatoru nodrošināta nepastāvīgā atmiņa, un, ja tiek zaudēta ārējā barošana, ir zināms periods, kurā akumulators var turpināt darbināt gaistošu atmiņu, taču, ja barošana ir izslēgta ilgāku laiku, akumulators izlādējas un dati tiek zaudēti.

## Vadība
Pareiza atmiņas pārvaldība ir ļoti svarīga, lai datorsistēma darbotos pareizi. Mūsdienu operētājsistēmām ir sarežģītas sistēmas, lai pareizi pārvaldītu atmiņu. Ja tas netiek darīts, var rasties kļūdas, lēna veiktspēja vai vīrusi un ļaunprātīga programmatūra.

### Kļūdas
Nepareiza atmiņas pārvaldība ir izplatīts kļūdu cēlonis. Piemēri:

* Atmiņas noplūde rodas, ja programma pieprasa atmiņu no operētājsistēmas un nekad neatgriež atmiņu, kad tā ir pabeigta. Programmai ar šo kļūdu pakāpeniski būs nepieciešams arvien vairāk atmiņas, līdz programma pārstāj darboties, jo operētājsistēma vairs nespēj piegādāt atmiņu.
* Segmentācijas kļūda rodas, ja programma mēģina piekļūt atmiņai, kurai tai nav atļaujas piekļūt. Parasti programmas darbību, kas to dara, operētājsistēma pārtrauks.
* Bufera pārpilde notiek, kad programma ieraksta datus līdz tai piešķirtās atmiņas kapacitātes beigām un pēc tam turpina rakstīt datus atmiņā, kas ir piešķirta citiem mērķiem. Tas var izraisīt nepareizu programmas darbību, tostarp atmiņas piekļuves kļūdas, nepareizus rezultātus, avāriju vai sistēmas drošības pārkāpumu. Tādējādi tas novājina programmas darbību un var tikt ļaunprātīgi izmantota.

### Agrīnās datorsistēmas
Agrīnās datorsistēmās programmas parasti noteica vietu, kur ierakstīt atmiņu un kādus datus tur ievietot. Šī atrašanās vieta bija fiziska atrašanās vieta faktiskajā atmiņas aparatūrā. Agrīnajos datoros nebija sarežģītas atmiņas pārvaldības sistēmas, ko izmanto mūsdienās.

Šai pieejai ir savas nepilnības. Ja norādītā atrašanās vieta nav pareiza, dators ierakstīs datus citā programmas daļā. Šādas kļūdas sekas ir neparedzamas. Dažos gadījumos kļūda var pārrakstīt operētājsistēmas izmantoto atmiņu. Hakeri var izmantot šo aizsardzības trūkumu, lai radītu vīrusus un ļaunprātīgu programmatūru .

### Virtuālā atmiņa
Virtuālā atmiņa ir sistēma, kurā fizisko atmiņu pārvalda operētājsistēma, parasti ar atmiņas pārvaldības vienības palīdzību. Tas ļauj izmantot vairāku veidu atmiņu. Piemēram, dažus datus var saglabāt RAM, bet citus datus glabā cietajā diskā (piemēram, mijmaiņas failā), kas darbojas kā kešatmiņas hierarhijas paplašinājums. Tas piedāvā vairākas priekšrocības. Datorprogrammētājiem vairs nav jāuztraucas par to, kur fiziski tiek glabāti viņu dati un vai lietotāja datoram pietiks atmiņas. Operētājsistēma aktīvi izmantotos datus ievietos RAM, kas ir daudz ātrāka nekā cietie diski. Ja RAM apjoms nav pietiekams visu pašreizējo programmu palaišanai, var rasties situācija, ka dators pavada vairāk laika, pārvietojot datus no RAM uz disku un atpakaļ, nekā veicot uzdevumus.

### Aizsargāta atmiņa
Aizsargātā atmiņa ir sistēma, kurā katrai programmai tiek piešķirts atmiņas apgabals, kas jāizmanto, un tai neļauj iziet ārpus šī diapazona. Ja operētājsistēma konstatē, ka programma ir mēģinājusi mainīt atmiņu, kas tai nepieder, programma tiek pārtraukta (vai citādi ierobežota vai novirzīta). Tādā veidā pārstāj darboties tikai pārkāpjošā programma, un nepareiza darbība (nejauša vai tīša) neietekmē citas programmas. Aizsargātas atmiņas izmantošana ievērojami uzlabo gan datorsistēmas uzticamību, gan drošību.

Bez aizsargātas atmiņas kļūda vienā programmā var ietekmēt citas programmas izmantoto atmiņu. Tā var izraisīt citas programmas darbību ārpus bojātas atmiņas, novedot pie neparedzamiem rezultātiem. Ja operētājsistēmas atmiņa ir bojāta, visa datorsistēma var avarēt un tā būs jāpārstartē. Dažkārt programmas apzināti maina citu programmu izmantoto atmiņu. To veic vīrusi un ļaunprātīga programmatūra, lai pārņemtu datoru darbību. To var arī labvēlīgi izmantot vēlamās programmas, kas paredzētas citu programmu modificēšanai, kā arī atkļūdotāji, piemēram, lai ievietotu pārtraukumpunktus vai āķus.

## Skatīt arī

* Atmiņas ģeometrija
* Atmiņas hierarhija
* Atmiņas organizācija
* Procesora reģistri glabā datus, bet parasti tos neuzskata par atmiņu, jo tajos tiek saglabāts tikai viens vārds un nav iekļauts adresācijas mehānisms.
* Pusvadītāju atmiņa
* Informācijas vienības

## Atsauces