2010-07-10 12 views
15

Sto leggendo "Capire il kernel di Linux".Perché il sistema operativo non può utilizzare interi 64 bit per l'indirizzamento? Perché solo i 48 bit?

paging per architetture a 64 bit

Come abbiamo visto nelle precedenti sezioni, due livelli di paging è comunemente utilizzato da microprocessori a 32-bit. L'impaginazione a due livelli, tuttavia, non è adatta per computer che adottano un'architettura a 64 bit . Utilizziamo un esperimento di pensiero per spiegare il motivo:

Iniziare assumendo una dimensione di pagina standard di 4 KB. Perché 1 KB copre una gamma di indirizzi, 4 KB copre 2 indirizzi, in modo che il campo Offset è di 12 bit. Questo lascia fino a 52 bit dell'indirizzo lineare da distribuire tra i campi Tabella e Directory . Se ora decidiamo di utilizzare solo 48 dei 64 bit per l'indirizzamento (questa restrizione ci lascia con un comodo spazio di indirizzamento 256 TB!), i restanti 48-12 = 36 bit sarà devono essere diviso tra la tabella e i campi della directory . Se ora decidiamo di riserva 18 bit per ciascuno di questi due campi, sia la pagina Directory e le Tabelle Pagina di ogni processo deve includere voci che è, più di 256.000 voci.

  1. "Se ora decidiamo di utilizzare solo 48 dei 64 bit per l'indirizzamento". Perché? & Perché solo 48 bit? Perché non un altro numero?

  2. Beh, sono solo un normale utente di PC & programmatore. È difficile per me credere che l'indirizzamento a 32 bit, ovvero 4 GB (2 GB/3 GB per essere più corretto), lo spazio di indirizzamento per processo sia un limite. Se si in realtà riscontrato questo limite. Per favore, dammi un esempio

  3. Qual è questo limite per Windows?

  4. So che la memoria virtuale! = Memoria fisica I pin di indirizzo del processore & non hanno nulla a che fare con la memoria virtuale. Questa è una domanda completamente diversa. Come conoscere il numero di pin di indirizzo (= dimensione del bus indirizzo) per un processore. Le specifiche http://ark.intel.com di un processore non includono questa specifica.

Risposta:

Vedi Paul Betts's answer per risposta ragionevole per il 1 ° domanda.

+0

Vedere anche http://stackoverflow.com/questions/3196684/memory-addressing e http://stackoverflow.com/questions/132930/32-vs-64-bits-whats-the-big-deal – claws

risposta

6

"Se ora decidiamo di utilizzare solo 48 dei 64 bit per l'indirizzamento". Perché?& Perché solo 48 bit? Perché non un altro numero?

Gli architetti di sistema fanno i compromessi. 256 TB sembra più che sufficiente spazio per lo spazio degli indirizzi di 1 processo. Ricorda indirizzo virtuale! = Indirizzo fisico, e in generale, ogni processo ha il proprio spazio di indirizzamento.

Fintanto che i puntatori sono a 64 bit, questo è più un problema di prestazioni rispetto a qualsiasi altra cosa. Se & quando 48 bit diventano una limitazione, il sistema operativo potrebbe essere ottimizzato per utilizzare più bit dello spazio di indirizzamento a 64 bit senza rompere l'incompatibilità dell'applicazione. Per ora, gli architetti si stanno semplicemente comprando una quantità di tempo molto comoda.

Potrebbe avere a che fare con le funzionalità di indirizzamento virtuale sul lato processore, poiché molti processori ora hanno memory management units per gestire la virtual -> mappatura della memoria fisica.

Come conoscere il numero di pin di indirizzo (= dimensione del bus indirizzo) per un processore. Le specifiche http://ark.intel.com di un processore non includono questa specifica.

Questo è per la maggior parte irrilevante. È un modo per un processore di implementare vari schemi di indirizzamento fisico. Un processore a 64 bit può ottenere bus di indirizzi/dati esterni per il proprio spazio di indirizzamento completo con 64, 32, 16, 8, 4, 2 o 1 pin di indirizzo se il bus è sincrono e i bit di indirizzo vengono multiplati in tempo. Di nuovo, indirizzo virtuale! = Indirizzo fisico; L'indirizzamento virtuale a 64 bit potrebbe essere implementato con indirizzi fisici a 48 bit o 32 bit (solo che sarebbe limitato a 2 o 2 parole di memoria).

aggiornamento: se si vuole veramente sapere, è necessario consultare la scheda tecnica di ciascun processore in questione. Per esempio. Intel Core 2 Duo - la sezione 4.2 della scheda tecnica parla dei segnali - il bus indirizzo è largo 36 bit (ma è in realtà 33 linee di segnale, la larghezza dei dati è 64 bit = 8 byte, quindi le altre 3 linee probabilmente non sono necessarie con allineamento dati)

Beh, sono solo un programmatore regolare per PC utente &. È difficile credere che l'indirizzamento a 32 bit, ad esempio ... 4GB (2 GB/3 GB per essere più corretto) lo spazio di indirizzamento per processo sia un limite. Se hai veramente incontrato questo limite. Per favore, dammi un esempio

due parole: memory-mapped files.

+0

' Ricorda indirizzo virtuale! = Indirizzo fisico'. Sì, ora lo recito anche nei miei sogni. : P. Sì, 256 TB sembra essere grande, ma per ora sembra grande. Una volta che 1 MB ha pensato di essere più che sufficiente e gli indirizzi IP a 32 bit sono esauriti in pochissimo tempo. Quando questo 256 TB sarà un limite. La gente dice "ora è il momento di passare a 64-bit". Dannazione! Lo odio. – claws

+0

:-) Dal punto di vista di un programmatore, finché i puntatori sono a 64 bit non ha importanza. –

+0

Jason: Da un punto di vista della ricompilazione, certo. Ma è solo * veramente * vero fintanto che il programmatore non ha fatto supposizioni che siano vere a 48 ma non a 64. :-) Sembra pazzesco che chiunque scriva codice che funzioni a 48 ma non 64, ma poi, Ho pensato che la stessa cosa per ogni parola-lunghezza e endianness cambia mai. – Ken

5

Nessun disegno corrente x86-64 usa più di 48 bits per questo - quindi è un numero conveniente da selezionare, ed è automaticamente lo stesso limite anche per Windows.

2

È difficile credere che l'indirizzamento a 32 bit, ad esempio .. 4 GB (2 GB/3 GB per essere più corretto) lo spazio di indirizzamento per processo è un limite. Se hai veramente incontrato questo limite. Per favore, dammi un esempio

È più efficiente (più veloce) ottenere dati dalla RAM piuttosto che ottenerli dal disco.

La velocità del server SQL dipende in parte dalla quantità di dati (ad esempio quanti dei suoi indici e pagine di dati) è in grado di conservare nella RAM anziché sul disco.

Quindi, i database SQL (ad esempio) possono essere più veloci su macchine con più di 4 GB di RAM.

Lo stesso vale per altri tipi di server (ad esempio file server, proxy HTTP, ecc.), Che possono essere più veloci se possono avere cache RAM più grandi.

+0

Se hai bisogno di più RAM. Intel ha offerto PAE molto tempo fa. Quale potrebbe supportare 64 GB di RAM. Il che significa che c'è meno bisogno di scambiare pagine su disco e tutte le 4GB di pagine possono essere salvate nella memoria principale. Più oltre, nel mercato attuale penso che 8 GB siano la RAM massima supportata da una scheda. In che modo lo spostamento a 64 bit ha risolto il problema? – claws

+0

@claws - Dell PowerEdge R910 ad esempio supporta fino a 1 TB di RAM. – ChrisW

+0

Grazie. Non sapevo che animali come questo esistessero. http://www.dell.com/us/en/enterprise/servers/rack_optimized/cp.aspx?refid=rack_optimized&s=biz&cs=555 – claws

2

Penso che la risposta più semplice sia la legge di Moore.

La legge di Moore dice fondamentalmente che gli IC si dimezzano di costo ogni 18 mesi. Ci sono alcuni modi per interpretarlo: la quantità di memoria installata in un PC tende a raddoppiare ogni 18 mesi. La velocità effettiva raddoppia (almeno se si prendono i core * i MHz anziché solo i MHz).

In ogni caso, abbiamo appena esaurito lo spazio di indirizzamento a 32 bit, quindi un salto da 32 a 48 significa che, dal lato hardware, abbiamo allocato lo spazio di espansione per circa 16 iterazioni della legge di Moore - che funziona a circa 20 anni.

Sono abbastanza sicuro che mentre alcuni PC potrebbero essere spinti al segno dei 10 anni, 20 anni di espansione headroom sembra un compromesso decente: i computer tra 20 anni saranno diversi - non useranno le stesse CPU e bus RAM, proprio come erano diversi 20 anni fa. Progettare più di 20 anni di headroom in un'interfaccia è semplicemente una sciocchezza per l'ingegneria che non verrà mai vista in alcun modo.

E non è così breve che l'hardware esistente corre il rischio reale di essere obsoleto troppo presto.

7

Nessuna di queste risposte è corretta, la ragione per cui i sistemi operativi non utilizzano i 64 bit completi è perché le tabelle delle pagine sarebbero molto più grandi (a 64 bit sono già presenti fino a 3 livelli di tabelle di pagina) e nessun motivo per pagare l'indiretta in più necessaria, 48 bit sono sufficienti. 48-bit è anche conveniente perché si ottengono alcuni bit extra per memorizzare i flag in (puntatore)

+0

+1 Beh, questa è una spiegazione ragionevole. Grazie. – claws

+0

Anche la tua risposta è sbagliata. L'architettura amd64 impone esplicitamente tutti i bit non utilizzati a 1 per assicurarsi che nessuno stia memorizzando i flag con l'indirizzo e che le tabelle delle pagine possano essere semplicemente aumentate in base alla dimensione della pagina. Le dimensioni delle pagine da 1 GB sono molto buone perché rendono il paging virtuale e rendono i programmi molto veloci (puoi misurarlo su HP-UX) – Lothar

+1

@Lothar Ovviamente non puoi * usare * il puntatore mentre ha i flag, ma a 32-bit , non hai alcun bit "conosciuto" che puoi mascherare prima di usare il puntatore. –

1

È difficile credere che l'indirizzamento a 32 bit, ad esempio .. 4 GB (2 GB/3 GB per essere più corretti) lo spazio di indirizzamento per processo è un limite. Se hai veramente incontrato questo limite. Per favore, dammi un esempio

Non esiste più (tranne che su alcuni vecchi computer personali dei dipendenti) ma ho lavorato su una suite di software chiamata RealiMation alla fine degli anni '90/primi anni 2000. Era un motore 3D in tempo reale per la visualizzazione e la simulazione. Uno dei nostri clienti ha regolarmente creato modelli altamente dettagliati che hanno raggiunto il limite di memoria di 2 GB. Carichiamo le texture al volo come e quando necessario e abbiamo dovuto aggiungere del codice per verificare l'errore di allocazione della memoria in modo da poter continuare a visualizzare il modello, anche se non strutturato.

0

Da una prospettiva hardware, un'altra considerazione è l'allineamento.

Una volta che è necessario un tipo di dati di più di 4 byte, ad esempio 6, è necessario posizionarli su limiti di 8 byte per recuperarli in una singola istruzione. Se non si allinea, è necessario eseguire la mascheratura e lo spostamento dei bit e aggiungere controlli per questo nel codice (di assieme).

Molte persone erano infastidite dal passaggio a 64 bit che i loro programmi consumavano molta più memoria. Avrebbero voluto puntatori a 48 bit e, se non esistessero le restrizioni sull'allineamento, i produttori di CPU avrebbero probabilmente realizzato un'architettura a 48 bit.

Nota che se sei così affamato di memoria che vuoi che i puntatori siano 6 byte ci sono modi per farlo. Ma c'è una penalità per il tempo di esecuzione.

Problemi correlati