20Aug

Koľko pamäťových adries môže pamäť RAM v počítači držať?

V niektorých prípadoch je zábavné pozrieť sa na povrchovú úroveň počítačového zážitku a ďalšie dni je zábavné sa ponoriť priamo do vnútorného fungovania. Dnes sme sa pozrieť na štruktúru pamäte počítača a koľko vecí môžete zabaliť do palice RAM.

dnešná otázka &Odpoveď na zasadnutie nám príde s láskavým dovolením SuperUser - subdivíziu Stack Exchange, komunitne riadeného zoskupenia webových stránok Q & A.

Otázka Otázka

Čítačka SuperUser Johan Smohan sa zaoberá tým, ako typ procesora a veľkosť pamäte pracujú spoločne, aby sa získal celkový počet adries. Píše:

Koľko pamäťových adries môžeme získať pomocou 32-bitového procesora a 1GB pamäte a koľko je so 64-bitovým procesorom?

Myslím, že je to niečo takéto:

1GB rama delený buď 32 bitmi 4 bitov( ?), Aby sa dostal počet pamäťových adries?

som čítal na Wikipédii, že 1 adresy pamäte sú 32 bitov alebo 4 oktety( 1 oktet = 8 bitov) v porovnaní so 64 bitovým procesorom, kde 1 pamäťová adresa alebo 1 celé číslo je 64 bitov široké alebo 8 oktetov. Ale neviem, či som to správne pochopil.

Toto sú druhy otázok, ktoré môžu v noci udržiavať zvedavý nadšenec. Koľko adries je k dispozícii v každom z hypotetických systémov Johana?

Odpovedačka

SuperUser prispievateľ Gronostaj ponúka nejaký pohľad na rozdelenie a využitie pamäte RAM:

Krátka odpoveď: Počet dostupných adries sa rovná menším z týchto:

  • Veľkosť pamäte v bajtoch
  • Veľké nepísané celé číslo, ktoré možno uložiťv strojovom slove CPU

Dlhá odpoveď a vysvetlenie vyššie:

Pamäť sa skladá z bajtov( B).Každý bajt pozostáva z 8 bitov( b).

1 B = 8 b

1 GB pamäte RAM je skutočne 1 GiB( gibibyte, nie gigabajt).Rozdiel je:

1 GB = 10 ^ 9 B = 1 000 000 000 B 1 GiB = 2 ^ 30 B = 1 073 741 824 B

Každý bajt pamäte má svoju vlastnú adresu bez ohľadu na to,,Napr. Procesor Intel 8086 bol 16-bitový a zaoberal sa pamäťou bajtami, takže moderné 32-bitové a 64-bitové CPU.To je príčina prvého limitu - nemôžete mať viac adries ako pamäťové bajty.

Pamäťová adresa je len niekoľko bajtov, ktoré procesor musí preskočiť od začiatku pamäte, aby sa dostal k tej, ktorú hľadá.

  • Prístup k prvému bajtu musí preskočiť 0 bajtov, takže adresa prvého bajtu je 0.
  • Ak chcete získať prístup k druhému bajtu, musí preskočiť 1 bajt, takže jeho adresa je 1.
  • ( a tak ďalej. ..)
  • Prístup kposledný bajt CPU preskočí 1073741823 bajtov, takže jeho adresa je 1073741823.

Teraz musíte vedieť, čo 32-bit skutočne znamená.Ako som už spomenul, je to veľkosť strojového slova.

Strojové slovo je množstvo pamäte, ktoré CPU používa na zadávanie čísel( v pamäti RAM, vyrovnávacej pamäti alebo vnútorných registroch).32-bitový procesor používa 32 bitov( 4 bajty) na držanie čísel. Pamäťové adresy sú aj číslice, takže na 32-bitovom CPU sa pamäťová adresa skladá z 32 bitov.

Teraz premýšľajte o tom: ak máte jeden bit, môžete uložiť dve hodnoty: 0 alebo 1. Pridajte ešte jeden bit a máte štyri hodnoty: 0, 1, 2, 3. Na troch bitoch môžete uložiť osemHodnoty: 0, 1, 2. .. 6, 7. Toto je vlastne binárny systém a funguje takto:

Binárny desatinný 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 10 1010 111011 12 1100 13 1101 14 1110 15 1111

Funguje presne ako obvykle, ale maximálna číslica je 1, nie 9. Decimal 0 je 0000, potom pridajte 1 a získajte 0001, pridajte ešte raz a máte 0010. Čostalo sa tu ako s desiatkovým 09 a pridaním jedného: zmeníte 9 na 0 a zvyšujete ďalšiu číslicu.

Z vyššie uvedeného príkladu môžete vidieť, že vždy existuje maximálna hodnota, ktorú môžete udržiavať v čísle s konštantným počtom bitov - pretože keď sú všetky bity 1 a pokúsite sa zvýšiť hodnotu o 1, všetky bity sa stanú 0, čím sa zlomíčíslo. Nazýva sa to celočíselný pretek a spôsobuje veľa nepríjemných problémov pre používateľov i vývojárov.

11111111 = 255 + 1 ----------- 100000000 = 0( 9 bitov tu, takže 1 je orezaný)
  • Pre 1 bit je najväčšia hodnota 1,
  • 2 bity - 3,
  • 3 bity -7,
  • 4 bity - 15

Najväčšie možné číslo je vždy 2 ^ N-1, kde N je počet bitov. Ako som už povedal, pamäťová adresa je číslo a má tiež maximálnu hodnotu. Preto je veľkosť stroja obmedzená aj na počet dostupných adries pamäte - niekedy CPU jednoducho nedokáže spracovať čísla dostatočne veľké na to, aby adresovali viac pamäte.

Takže na 32 bitoch môžete uchovávať čísla od 0 do 2 ^ 32-1, a to je 4 294 967 295. Je to viac než najväčšia adresa v 1 GB RAM, takže vo vašom konkrétnom prípade bude limitná hodnota RAM.

Limit RAM pre 32-bitový CPU je teoreticky 4 GB( 2 ^ 32) a pre 64-bitový CPU je to 16 EB( exabytes, 1 EB = 2 ^ 30 GB).Inými slovami, 64-bitový procesor by mohol riešiť celý internet. .. 200 krát;)( odhaduje WolframAlpha).

V operačných systémoch v reálnom živote však 32-bitové procesory môžu riešiť približne 3 GB RAM.Je to kvôli vnútornej architektúre operačného systému - niektoré adresy sú vyhradené pre iné účely. Viac informácií o tejto tzv. 3 GB bariére nájdete na Wikipédii. Tento limit môžete zdvihnúť pomocou rozšírenia fyzickej adresy.

Keď hovoríme o adresovaní pamäte, je niekoľko vecí, ktoré by som spomenul: virtuálnu pamäť , segmentáciu a paging .

Virtuálna pamäť

Ako @Daniel R Hicks poukázal na inú odpoveď, operačné systémy používajú virtuálnu pamäť.Čo to znamená, že aplikácie skutočne nefungujú na skutočných adresách pamäte, ale tie, ktoré poskytuje operačný systém.

Táto technika umožňuje operačnému systému presunúť niektoré údaje z pamäte RAM na takzvaný súbor Pagefile( Windows) alebo Swap( * NIX).HDD je málo magnitudes pomalšie ako RAM, ale to nie je vážny problém pre zriedkavo prístupné dáta a umožňuje OS poskytovať aplikácie viac pamäte RAM ako ste skutočne nainštalovali.

Paging

To, o čom sme sa doteraz rozprávali, sa nazýva schéma plochého adresovania.

Paging je alternatívna schéma adresovania, ktorá umožňuje adresovať viac pamäte, ktoré ste normálne mohli dosiahnuť jedným slovom stroja v plochom modeli.

Predstavte si knihu plnú 4-písmenových slov. Povedzme, že na každej stránke je 1024 čísel. Ak chcete adresovať číslo, musíte poznať dve veci:

  • Počet stránok, na ktorých je vytlačené toto slovo.
  • Ktoré slovo na tejto stránke je ten, ktorý hľadáte.

Teraz presne to, ako moderné procesory x86 spracovávajú pamäť.Je rozdelená na 4 KiB stránky( 1024 strojových slov) a tieto stránky majú čísla.(vlastne stránky môžu byť tiež 4 MiB veľké alebo 2 MiB s PAE).Ak chcete adresovať bunku pamäte, potrebujete číslo stránky a adresu na tejto stránke. Všimnite si, že každá pamäťová bunka je odkazovaná presne na jednu dvojicu čísiel, čo nebude v prípade segmentácie.

Segmentácia

No, toto je veľmi podobné stránkovaniu. Bolo použité v procesore Intel 8086, len aby som uviedol jeden príklad. Skupiny adries sa teraz nazývajú segmenty pamäte, nie stránky. Rozdiel je, že segmenty sa môžu prekrývať a veľmi sa prekrývajú.Napríklad na 8086 boli väčšina pamäťových buniek k dispozícii z 4096 rôznych segmentov.

Príklad:

Povedzme, že máme 8 bajtov pamäte, pričom všetky sú nulami okrem 4. bajtu, čo sa rovná 255.

Ilustrácia modelu s plochou pamäťou:

_____ |0 ||0 ||0 ||255 ||0 ||0 ||0 ||0 |-----

Ilustrácia stránkovej pamäte so 4-bajtovými stránkami:

PAGE0 _____ |0 ||0 ||0 |PAGE1 |255 |_____ ----- |0 ||0 ||0 ||0 |-----

Obrázok pre segmentovanú pamäť s segmentmi 4 bajtov posunutými o 1:

SEG 0 _____ SEG 1 |0 |_____ SEG 2 |0 ||0 |_____ SEG 3 |0 ||0 ||0 |_____ SEG 4 |255 ||255 ||255 ||255 |_____ SEG 5 -----0 ||0 ||0 ||0 |_____ SEG 6 ----- |0 ||0 ||0 ||0 |_____ SEG 7 ----- |0 ||0 ||0 ||0 |_____ ----- |0 ||0 ||0 ||0 |----- ----- ----- -----

Ako vidíte, štvrtý byte je možné riešiť štyrmi spôsobmi:( adresovanie od 0)

  • Segment 0, ofset 3
  • Segment 1,offset 2
  • Segment 2, ofset 1
  • Segment 3, ofset 0

Je to vždy tá istá pamäťová bunka.

V implementáciách v reálnom živote sú segmenty posunuté o viac ako 1 bajt( pre 8086 to bolo 16 bajtov).

Čo je zlé pri segmentácii je to, že je to zložité( ale myslím, že už to viete;) Čo je dobré, je, že môžete použiť nejaké šikovné techniky na vytvorenie modulárnych programov.

Napríklad môžete načítať niektorý modul do segmentu a potom predstierať, že segment je menší než je skutočne( je dostatočne malý, aby držal modul), potom si vyberte prvý segment, ktorý sa nepresahuje s týmto pseudo-menším a načíta saďalší modul a podobne. V podstate to, čo dostanete týmto spôsobom, sú stránky s premenlivou veľkosťou.

Máte čo pridať k vysvetleniu? Zvuk vypnúť v komentároch. Chcete si prečítať viac odpovedí od iných používateľov technológie Stack Exchange? Pozrite sa na celý diskusný príspevok tu.