Domanda Address bus e quantità di memoria.

Gz9812

Utente Iron
3 Aprile 2022
2
2
0
7
Ciao a tutti, premetto che ho appena iniziato a studiare sistemi e reti, ma mi è già sorta qualche domanda.



Considerando un pc con 64 address bus e sapendo che la quantità di memoria vale 2^64 che è circa 18e+18 byte. Questo significa che ho una memoria totale di 18e+9 Gigabyte ??? mi sembra troppo come risultato. dove fallisco nel ragionamento e/o nel calcolo??

Grazie
Gz9812
 
Immagino tu ti stia riferendo a x64, ad esempio.

In teoria la memoria indirizzabile con 64bit sarebbe di 16Exabytes (2^64 bytes). Nella pratica poi la memoria virtuale non fa uso di tutti i 64bit, ma solo di 48. Quindi la memoria reale sarebbe di 256TB. Gli altri bit vengono proprio ignorati (in raltà devono essere in quella che viene chiamata "forma canonica", ovvero tutti i bit dal 64 al 48 devono avere lo stesso valore del bit in posizione 47). Questo è dovuto al modo in cui viene implementata la memoria virtuale, e al modo in cui viene resa disponibile dall'hardware.
Ne avevo parlato qui Memoria Virtuale: x64 Virtual Address Translation, nei primi paragrafi. Riporto il secondo:

La memoria virtuale è lo spazio di indirizzi che può essere indirizzato dalla CPU: su una CPU x86 (32bit) è possibile indirizzare virtualmente 2^32 bytes di memoria (4GB); questo valore può essere inferiore o superiore alla memoria fisica (RAM) disponibile sulla macchina. In effetti il valore è quasi sempre maggiore: i più giovani sono forse abituati a tagli da 8-16GB di RAM, ma solo 10-15 anni fa 4GB non erano poi tanto comuni.

In base a quanto detto per x86, lo spazio di indirizzamento virtuale di una CPU a 64bit sarà quindi di 2^64 bytes di memoria, che corrispondono a circa 16-GB di GB (16 Exabytes). Vedremo tra poco però che in realtà non sono utilizzati tutti i 64bit, ma solo 48 di essi.


Non stai sbagliando nel calcolo comunque, in sè quello che hai fatto è corretto, solo che non funziona esattamente in quel modo poichè subentrano astrazioni e non accedi direttamente alla memoria come avveniva ad esempio in 8086 quando specificavi un indirizzo (appunto gli indirizzi sono virtuali, e ogni programma ha uno spazio di indirizzi virtuale, che è "solo suo", e garantisce l'isolamento di ogni programma in esecuzione in user mode (eg. ogni programma ha un suo spazio di indirizzi)).

Spero di non aver introdotto ulteriore confusione, chiedi pure chiarimenti ad ogni modo.
 
  • Mi piace
Reazioni: 0xbro