20Aug
Jednom je zabavno gledati na površinsku razinu računalnog iskustva, a ostale dane je zabavno probiti se u unutrašnji rad. Danas pregledavamo strukturu memorije računala i koliko stvari možete pakirati u štapić RAM-a.
Današnje pitanje &Sesija odgovora nam dolazi zahvaljujući SuperUseru - podjele Stack Exchange, grupiranjem zajednice Q & A web stranica.
Pitanje
Čitač SuperUser Johan Smohan se bori s načinom rada procesora i veličine memorije kako bi se dobio ukupan broj adresa. On piše:
Koliko memorijskih adresa možemo dobiti s 32-bitnim procesorom i 1GB RAM-om i koliko s 64-bitnim procesorom?
Mislim da je nešto slično ovome:
1GB ram podijeljen s bilo 32 bita 4 bita( ?) Da biste dobili broj memorijskih adresa?
Čitao sam na Wikipediji da je 1 memorijska adresa 32 bit široka ili 4 okteta( 1 oktet = 8 bitova), u usporedbi s 64 bitnim procesorom u kojem su 1 memorijske adrese ili 1 cijeli broj 64 bit široka ili 8 okteta. Ali ne znam jesam li to i ispravno razumio.
To su vrste pitanja koja mogu zadržati znatiželjne geek gore noću. Koliko je adresa dostupna pod svakim Johanovim hipotetskim sustavima?
Odgovor
SuperUser suradnik Gronostaj pruža uvid u način dijeljenja i korištenja RAM-a:
Kratki odgovor: Broj dostupnih adresa jednak je manjem od onih:
- Veličina memorije u bajtovima
- Najveći nepotpisani integer koji se može spremitiu procesorskoj riječi stroja
Dugi odgovor i objašnjenje gore navedenog:
Memorija se sastoji od bajtova( B).Svaki bajt se sastoji od 8 bita( b).
1 B = 8 b1 GB RAM-a je zapravo 1 GiB( gibibit, a ne gigabajt).Razlika je:
1 GB = 10 ^ 9 B = 1 000 000 000 B 1 GiB = 2 ^ 30 B = 1 073 741 824 BSvaki bajt memorije ima vlastitu adresu, bez obzira na veličinu stroja, Npr. Intel 8086 CPU je bio 16-bitni i bavi se adresiranjem memorije, pa moderni 32-bitni i 64-bitni procesori. To je uzrok prvog ograničenja - ne možete imati više adresa od memorijskih bajtova.
Memorijska adresa je samo broj bajtova koje CPU mora preskočiti od početka memorije do onoga što traži.
- Da biste pristupili prvom bajtu, mora preskočiti 0 bajta, tako da je adresa prvog bajtova 0.
- Da bi pristupio drugom bajtu, mora preskočiti 1 bajt, stoga je adresa 1.
- ( i tako dalje. ..)
- Da biste pristupilizadnji bajt, CPU prelazi 1073741823 bajtova, pa je adresa 1073741823.
Sada morate znati što 32-bitno zapravo znači. Kao što sam već spomenula, to je veličina strojne riječi.
Strojna riječ je količina memorije koju CPU koristi za držanje brojeva( u RAM-u, predmemoriji ili internim registrima).32-bitni CPU koristi 32 bita( 4 bajta) za držanje brojeva. Memorijske adrese su i brojevi, pa na 32-bitnom procesoru memorijska adresa sadrži 32 bita.
Sada razmislite o ovom: ako imate jedan bit, možete spremiti dvije vrijednosti na njega: 0 ili 1. Dodaj još jedan bit i imate četiri vrijednosti: 0, 1, 2, 3. Na tri bita možete spremiti osamVrijednosti: 0, 1, 2. .. 6, 7. To je zapravo binarni sustav i tako funkcionira:
Binarni decimalni 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 1111Djeluje točno kao i uobičajeno dodavanje, ali maksimalna znamenka je 1, a ne 9. Decimale 0 je 0000, zatim dodate 1 i dobivate 0001, dodajte još jednom i imate 0010. Štoovdje se događa kao da ima decimalni broj 09 i dodate: promijenite 9 do 0 i povećajte sljedeću znamenku.
Iz gornjeg primjera možete vidjeti da uvijek postoji maksimalna vrijednost koju možete zadržati u broju sa stalnim brojem bitova - jer kada su svi bitovi 1 i pokušate povećati vrijednost za 1, svi bitovi će postati 0, čime će se slomitibroj. Zove se cijeli preljev i uzrokuje mnoge neugodne probleme, kako za korisnike tako i za programere.
- Za 1 bit najveća vrijednost je 1,
- 2 bita - 3,
- 3 bita - 11111111 = 255 + 1 ----------- 100000000 = 0( 9 bitova ovdje,7,
- 4 bita - 15
Najveći mogući broj je uvijek 2 ^ N-1, gdje je N broj bitova. Kao što sam već rekao, memorijska adresa je broj i također ima maksimalnu vrijednost. Zato je veličina strojne riječi također ograničenje broja dostupnih memorijskih adresa - ponekad vaš CPU ne može jednostavno obrađivati brojeve dovoljno velik da bi se obraćao više memorije.
Dakle na 32 bita možete zadržati brojeve od 0 do 2 ^ 32-1, a to je 4 294 967 295. To je više od najveće adrese u 1 GB RAM-a, tako da u vašem konkretnom slučaju količina RAM-a će biti ograničavajući faktor.
RAM ograničenje za 32-bitni CPU je teoretski 4 GB( 2 ^ 32) i za 64-bitni CPU je 16 EB( exabajt, 1 EB = 2 ^ 30 GB).Drugim riječima, 64-bitni CPU mogao bi adresirati cijeli Internet. .. 200 puta;)( procjenjuje WolframAlpha).
Međutim, u stvarnom životu operativni sustavi 32-bitni procesori mogu adresirati oko 3 GiB RAM-a. To je zbog unutarnje arhitekture operacijskog sustava - neke su adrese rezervirane u druge svrhe. Više o ovoj tzv. Barijeri od 3 GB možete pročitati na Wikipediji. Ograničenje možete podići s proširenjem fizičke adrese.
Govoreći o adresiranju memorije, postoji nekoliko stvari koje treba spomenuti: virtualna memorija , segmentacija i paging .
Virtualna memorija
Kao što je @Daniel R Hicks istaknuo u drugom odgovoru, operacijski sustavi koriste virtualnu memoriju.Što znači da aplikacije zapravo ne funkcioniraju na stvarnim memorijskim adresama, već onima koje pruža OS.
Ova tehnika omogućava operacijskom sustavu da premjestiti neke podatke iz RAM-a na tzv. Pagefile( Windows) ili Swap( * NIX).Tvrdi disk je nekoliko veličina sporiji od RAM-a, ali to nije ozbiljan problem za rijetke podatke koji se mogu pristupiti i omogućuje OS-u da aplikacijama pruža više RAM-a nego što ste zapravo instalirali.
Paging
O čemu smo govorili do sada se naziva ravna shema adresiranja.
Paging je alternativna shema adresiranja koja omogućuje adresiranje više memorije koju inače možete imati s jednom strojnom riječi u ravnom modelu.
Zamislite knjigu napunjenu 4 slova. Pretpostavimo da na svakoj stranici postoji 1024 brojeva. Da biste riješili broj, morate znati dvije stvari:
- Broj stranice na kojoj se ta riječ tiska.
- Koja je riječ na toj stranici koju tražite?
Sada je upravo to kako moderni procesori x86 obrađuju memoriju. Podijeljen je na 4 kilo stranice( svaka 1024 strojnih riječi), a te stranice imaju brojeve.(zapravo stranice mogu biti 4 MiB velika ili 2 MiB s PAE).Kada želite pristupiti memorijskoj ćeliji, na toj stranici trebate broj stranice i adresu. Imajte na umu da se svaka memorijska ćelija poziva na točno jedan par brojeva, što neće biti slučaj za segmentaciju.
Segmentacija
Pa, ovo je prilično slično onom straničnom. Koristio se u Intel 8086, samo da spomenemo jedan primjer. Grupe adresa sada se nazivaju segmentima memorije, a ne stranicama. Razlika je da se segmenti mogu preklapati i oni se mnogo preklapaju. Na primjer, na 8086 najveći broj memorijskih ćelija dostupan je iz 4096 različitih segmenata.
Primjer:
Recimo da imamo 8 bajta memorije, a svi imaju nula, osim za 4. bajt, koji je jednak 255.
Ilustracija za model ravne memorije:
_____ |0 ||0 ||0 ||255 ||0 ||0 ||0 ||0 |-----Ilustracija za paged memoriju s 4 bajtnim stranicama:
PAGE0 _____ |0 ||0 ||0 |PAGE1 |255 |_____ ----- |0 ||0 ||0 ||0 |-----Ilustracija za segmentiranu memoriju sa 4 bajtnim segmentima pomaknutim za 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 |----- ----- ----- -----Kao što vidite, 4. bajt se može riješiti na četiri načina:( adresiranje od 0)
- Segment 0, offset 3
- Segment 1,offset 2
- Segment 2, offset 1
- Segment 3, offset 0
Uvijek je ista stanica memorije.
U realnim implementacijama segmenti su pomaknuti za više od 1 bajta( za 8086 to je 16 bajta).
Što je loše u segmentaciji je to što je komplicirano( ali mislim da već znate to;) Što je dobro, to je da možete koristiti neke pametne tehnike za stvaranje modularnih programa.
Na primjer, možete učitati neki modul u segment, a zatim pretvarati da je segment manji nego što je stvarno( samo dovoljno mali da zadrži modul), a zatim odaberite prvi segment koji se ne preklapa s tom pseudo- manjom i učitavasljedeći modul i tako dalje. U osnovi, ono što dobivate na taj način su stranice veličine promjenjive veličine.
Imate li nešto za objašnjenje? Zvuči u komentarima.Želite li pročitati više odgovora od drugih tehnoloških korisnika Stack Exchangea? Pogledajte ovdje cijelu raspravu.