20Aug

Hány memóriacíme lehet a RAM memóriája a számítógépemen?

click fraud protection

Néha jó szórakozást keresni a számítástechnikai tapasztalatok felszíni szintjében, és más napokban szórakoztató a belső működésben. Ma megnézzük a számítógép memóriájának szerkezetét, és mennyi anyagot csomagolhatunk egy RAM memóriába.

A mai kérdés &A válaszüzenet a SuperUser - a Stack Exchange megosztottságának köszönhetően - a Q & A webhelyek közösségi szintű csoportosítása.

A kérdés

SuperUser olvasó Johan Smohan küzd a feldolgozó típusával és a memória méretével együtt, hogy összesen címeket adjon ki.Így írja:

Hány memóriacímet érhetünk el egy 32 bites processzorral és 1 GB-os RAM-mal és hány 64 bites processzorral?

Úgy gondolom, hogy ez valami ilyesmi:

1 GB RAM osztva akár 32 bit 4 bit( ?), Hogy a memória címek száma?

A Wikipédián olvastam, hogy 1 memóriacím 32 bit széles vagy 4 oktett( 1 oktett = 8 bit), összehasonlítva egy 64 bites processzorral, ahol 1 memóriacím vagy 1 egész 64 bites vagy 8 oktett. De nem tudom, hogy helyesen megértettem-e.

Ezek olyan kérdések, amelyek éjszaka megtarthatják a kíváncsi gúnyt. Hány címet kapnak Johan hipotetikus rendszerei alatt?

instagram viewer

A válasz

SuperUser közreműködő A Gronostaj betekintést nyújt a RAM megosztásának és használatának módjához:

Rövid válasz: Az elérhető címek száma megegyezik a kisebb értékekkel:

  • Memória mérete bájtban
  • A legmagasabb unsigned integer, amely menthetőa CPU gépi szóban

Hosszú válasz és a fentiek magyarázata:

A memória bájtokból áll( B).Minden byte 8 bitből áll( b).

1 B = 8 b

1 GB RAM valójában 1 GiB( gibibyte, nem gigabájt).A különbség:

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

A memória minden bájtjának saját címe van, függetlenül attól,.Például. Az Intel 8086 processzor 16 bites volt, és a memóriát bájtokkal címezte, így a modern 32 bites és 64 bites CPU-kat. Ez az első korlátozás oka - nem lehet több cím, mint memóriabájt.

A memóriacím csak egy sor bájt, amellyel a CPUnak el kell hagynia a memória elejétől a keresetthez.

  • Az első bájt eléréséhez 0 byte-ot kell hagynia, ezért az első bájt címe 0.
  • A második bájt eléréséhez 1 bájtot kell kihagynia, ezért a címe 1.
  • ( és így tovább. ..)
  • Aaz utolsó byte, a CPU 1073741823 bájtot hagy, így a címe 1073741823.

Most már tudnia kell, hogy mi a 32 bit. Mint korábban említettem, ez egy gépi szó mérete.

A gépi szó az a memória mennyisége, amelyet a CPU a számok tárolására használja( RAM, gyorsítótár vagy belső regiszter).A 32 bites processzor 32 bitet( 4 bájt) használ a számok tárolására. A memóriacímek számok is, ezért 32 bites CPU-n a memóriacím 32 bitből áll.

Most gondoljon erre: ha van egy bitje, akkor két értéket menthetsz: 0 vagy 1. Adjon még egy bitet, és négy értéke van: 0, 1, 2, 3. Három bittel menthetsz nyolcértékek: 0, 1, 2. .. 6, 7. Ez valójában egy bináris rendszer, és így működik:

Bináris Decimális 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

Pontosan úgy működik, mint a szokásos kiegészítés, de a maximális számjegy 1, nem 9. A decimális 0 0000, akkor 1-et adsz hozzá és kapsz 0001-et, adj hozzá egyet, és 0010-el.itt van olyan, mint a decimális 09-es számmal és egy hozzáadásával: 9-től 0-ig változik, és növekszik a következő számjegy.

A fenti példából láthatjuk, hogy mindig van egy maximális érték, amelyet állandó számbillentyűben tarthatunk - mert ha minden bit 1 és megpróbálja növelni az értéket 1-gyel, az összes bit 0 lesz, így törika szám. Ez az egész túlcsordulásnak számít, és sok kellemetlen problémát okoz mind a felhasználóknak, mind a fejlesztőknek.

  • 1 bit esetén a legnagyobb érték 1,
  • 2 bit - 3,
  • 3 bit - 11111111 = 255 + 1 ----------- 100000000 = 0( 9 bit itt,7,
  • 4 bit - 15

A legnagyobb lehetséges szám mindig 2 ^ N-1, ahol N a bitek száma. Amint azt korábban mondtam, a memóriacím egy szám, és van egy maximális értéke is. Ezért a gépi szó mérete a rendelkezésre álló memóriacímek számára is korlátozott - néha a CPU nem képes olyan számokat feldolgozni, amelyek elég nagyok ahhoz, hogy több memóriát kezeljenek.

Így a 32 bitre a számokat 0 és 2 ^ 32-1 között lehet tárolni, és ez a 4 294 967 295. Ez több, mint a legnagyobb cím 1 GB RAM-ban, így a konkrét esetben a RAM mennyisége lesz a korlátozó tényező.

A 32 bites CPU RAM-értéke elméletileg 4 GB( 2 ^ 32) és 64 bites CPU esetén 16 EB( exabájt, 1 EB = 2 ^ 30 GB).Más szóval, a 64 bites CPU az egész internetet 200-szor címezheti meg;)( becslése: WolframAlpha).

A valós operációs rendszerekben azonban a 32 bites processzorok körülbelül 3 GiB RAM-ot tudnak kezelni. Az operációs rendszer belső architektúrájának köszönhetően - egyes címeket más célokra tartanak fenn. Az ún. 3 GB-os akadályról többet tud olvasni a Wikipédiából. Ezt a korlátot a Physical Address Extension segítségével fel lehet emelni.

A memóriakezelésről szólva kevés dologra kell emlékeztetnem: virtuális memória , szegmentáció és paging .

Virtuális memória

Ahogy @Daniel R Hicks rámutatott egy másik válaszra, az operációs rendszerek virtuális memóriát használnak. Ez azt jelenti, hogy az alkalmazások valójában nem működnek valós memória címeken, hanem az operációs rendszertől.

Ez a technika lehetővé teszi az operációs rendszer számára, hogy bizonyos adatokat áthelyezjen a RAM-ból egy úgynevezett Pagefile( Windows) vagy Swap( * NIX) fájlba. A merevlemez néhány nagysága lassabb a RAM-nál, de ez nem jelent komoly problémát a ritkán elérhető adatok esetében, és lehetővé teszi az operációs rendszerek számára, hogy több RAM-ot nyújtsanak az alkalmazásokhoz, mint amennyit ténylegesen telepítettek.

Paging

Amit eddig beszéltünk, az úgynevezett lapos címzési rendszer.

A keresési módszer egy alternatív címzési séma, amely lehetővé teszi több memória kezelését, amelyet normális esetben egyetlen gépi szóval lehet lapos modellben használni.

Képzelj el egy 4 betűs szavakkal teli könyvet. Tegyük fel, hogy 1024 szám van minden oldalon. Szám hívásához két dolgot kell tudnia:

  • Az oldalszám, amelyen a szó nyomtatódik.
  • Melyik szó az oldalon keresett.

Most már pontosan az, ahogy a modern x86 CPU-k kezelik a memóriát.4 KB-os oldalakra osztva( 1024 gépi szó), és ezek az oldalak száma.(valójában az oldalak is 4 MiB nagy vagy 2 MiB PAE-val).Ha meg akarja címezni a memóriakártyát, akkor az oldal számát és címét kell megadnia. Ne feledje, hogy minden memóriacella pontosan egy pár számra hivatkozik, ami nem lesz a szegmentáció esetében.

Szegmentáció

Nos, ez nagyon hasonlít a lapozáshoz. Az Intel 8086-ban használták, hogy csak egy példát említsünk. A címcsoportokat mostantól memória szegmensnek nevezik, nem pedig oldalaknak. A különbség, hogy a szegmensek átfedhetnek egymással, és sok mindent átfednek. Például 8086-ra a legtöbb memóriakártya 4096 különböző szegmensből állt rendelkezésre.

Példa:

Tegyük fel, hogy 8 bájtnyi memóriával rendelkezünk, mindegyik zérót tart, kivéve a 4. bájtot, amely 255-nek felel meg.

Illusztráció lapos memória modellhez:

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

Az lapozott memória illusztrációja 4 bájtos oldalakkal:

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

Az szegmentált memória ábrázolása 4 bájtos szegmensekkel 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 |----- ----- ----- -----

Ahogy láthatja, a 4. bájt négyféleképpen kezelhető:( címzés 0-tól)

  • 0. szegmens, offset 3
  • 1. szegmens,offset 2
  • 2. szegmens, offset 1
  • 3. szegmens, offset 0

Mindig ugyanaz a memóriacella.

A való életben a szegmensek több mint 1 bájtra tolódnak( 8086-ra 16 bájt).

A szegmentálással kapcsolatos probléma az, hogy bonyolult( de úgy gondolom, hogy ezt már tudjátok;). Mi a jó, hogy néhány okos technikát használhat moduláris programok létrehozására.

Például egyes modulokat betölthetsz egy szegmensbe, majd megtedd, hogy a szegmens kisebb, mint valójában( csak elég kicsi ahhoz, hogy a modulot tartsa), majd válasszon olyan első szegmenst, amely nem átfedi az álszülöttet, és betöltikövetkező modul, és így tovább. Alapvetően ez a változó méretű oldalak.

Van valami, amit hozzá lehet adni a magyarázathoz? Hangzik ki a megjegyzésekben. Szeretne többet válaszolni a többi technikus-tudós Stack Exchange felhasználóiról? Nézze meg a teljes vitafonalat itt.