20Aug
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?
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 b1 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 BA 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 1111Pontosan ú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.