Domanda

Se un Sistema Operativo a 32bit funziona con una memoria segmentata modello di loro ancora una 4GB limite?

Stavo leggendo il Processore Intel Pentium Famiglia Manuale dello Sviluppatore e si afferma che con una memoria Segmentata modello che è possibile associare fino a 64TB di memoria.

"Segmentato, modello di memoria organizzazione, l'indirizzo logico lo spazio si compone di 16,383 segmenti di fino a 4 gb ciascuna, o un totale grandi come 2^46 byte (64 terabyte).Il processore mappe 64 terabyte di spazio di indirizzi logici su l'indirizzo fisico di spazio dal indirizzo meccanismo di traduzione descritto nel Capitolo 11.Applicazione i programmatori possono ignorare i dettagli della questa mappatura.Il vantaggio del segmentato modello è che l'offset all'interno ogni spazio di indirizzi separatamente controllato e l'accesso ad ogni segmento possono essere singolarmente controllato.

alt text

Questa non è una domanda complessa.Voglio solo essere sicuro che ho capito correttamente il testo.Se Windows o qualsiasi altro sistema operativo che ha lavorato in modo segmentato modello piuttosto che di un modello piatto sarebbe il limite di memoria di essere 64TB?


Aggiornamento:

alt text

Intel 3-2 3a Documentazione del Sistema.


alt text

http://pdos.csail.mit.edu/6.828/2005/readings/i386/c05.htm


Il Registro di Segmento NON dovrebbe essere pensato come nella tradizionale Modalità Reale senso.Il Registro di Segmento agisce come un SELETTORE per la Tabella dei Descrittori Globali.

In modalità Protetta, si utilizza un indirizzo logico in forma di:a B di memoria di indirizzo.Come in Modalità Reale, è Un segmento che parte e B è l'offset all'interno di quel segmento.I registri in > modalità protetta sono limitato a 32 bit.32 bit possono rappresentare qualsiasi numero intero compreso tra 0 e 4 gb.Perché B può essere un qualsiasi valore tra 0 e 4 gb nostri segmenti ora hanno una dimensione massima di 4 gb (Stesso ragionamento in modalità reale).Ora, per la differenza.In modalità protetta non è Un valore assoluto per il segmento.In modalità protetta, Una è un selettore.Un selettore rappresenta un offset in una tabella di sistema denominata Global Descriptor Table (GDT).Il GDT contiene un elenco di descrittori.Ciascuno di questi descrittori contiene informazioni che descrivono le caratteristiche di un segmento.

Il Selettore di Segmento offre una protezione supplementare che non può essere raggiunto con il paging.

Entrambi questi metodi [Segmentazione e Paginazione]hanno i loro vantaggi, ma l'impaginazione è molto meglio.La segmentazione è, anche se ancora utilizzabile, diventando obsoleti come metodo di protezione della memoria e memoria virtuale.Infatti, l'architettura x86-64 richiede un modello di memoria flat a (un segmento con una base di 0 a un massimo di 0xFFFFFFFF) per alcune istruzioni per il corretto funzionamento.

La segmentazione è, tuttavia, completamente integrato nell'architettura x86.E ' impossibile ottenere intorno ad esso.Così qui stiamo andando a mostrare come impostare il proprio Global Descriptor Table - un elenco dei descrittori di segmento.

Come detto prima, stiamo andando a cercare di avere un modello di memoria flat a.Il segmento della finestra dovrebbe iniziare a 0x00000000 ed estendere a 0xFFFFFFFF (la fine della memoria).Tuttavia, c'è una cosa che la segmentazione può fare di paging non è possibile e che il livello della suoneria.

-http://www.jamesmolloy.co.uk/tutorial_html/4.-The%20GDT%20and%20IDT.html

Un GDT per esempio, elenca i vari utenti, i loro livelli di accesso e le aree di accesso alla memoria:

Esempio di Tabella GDT

GDT[0] = {.base=0, .limit=0, .type=0};             
// Selector 0x00 cannot be used
GDT[1] = {.base=0, .limit=0xffffffff, .type=0x9A}; 
// Selector 0x08 will be our code
GDT[2] = {.base=0, .limit=0xffffffff, .type=0x92}; 
// Selector 0x10 will be our data
GDT[3] = {.base=&myTss, .limit=sizeof(myTss), .type=0x89}; 
// You can use LTR(0x18)

http://wiki.osdev.org/GDT_Tutorial#What_should_i_put_in_my_GDT.3F

Il Paging parte è ciò che le mappe in memoria fisica.(PAE) è quello che fornisce addtional di memoria fino a 64GB.

Così, in breve.La risposta è no, non si può avere più di 4GB di memoria logici.Ritengo che la richiesta di 64TB un refuso nel Processore Intel Pentium Famiglia Manuale dello Sviluppatore.

È stato utile?

Soluzione

Edit: La mia risposta presuppone che entro il "limite di 4 gb" si fa riferimento alla dimensione massima di un lineare (virtuale) l'indirizzo di spazio, piuttosto che di spazio per l'indirizzo fisico.Come spiegato nei commenti qui sotto, quest'ultimo non è in realtà limitato a 4GB, anche quando si utilizza un modello di memoria flat a.


Ripetere il preventivo con enfasi:

il logico indirizzo spazio consiste come molti come 16,383 segmenti di 4 gigabyte

Ora, citando "Intel® 64 e IA-32 Architetture Software Developer Manuale del Volume 1:Architettura di base" (in formato PDF disponibile qui):

Internamente, tutti i segmenti che sono definito un sistema vengono mappati in il processore lineare spazio di indirizzi.

È questo lineare spazio di indirizzamento (su un processore a 32 bit) è limitata a 4GB.Così, a memoria segmentata modello ancora soggetto al limite.

Altri suggerimenti

Ti ricordi i vecchi tempi? DOS su x86 in modalità reale con segmenti 64KB? puntatori FAR? HMA? XMS? Come la quantità di memoria è cresciuto, hanno trovato modi per utilizzare più memoria di processore potrebbe normalmente affrontare. Ma è stato brutto.

Certo che potrebbe utilizzare la segmentazione per 32 bit, ma perché? Non c'era bisogno. Quando i processori a 32 bit è apparso il limite di 4 GB era più che sufficiente, quindi la decisione di utilizzare il modello piatto è stato fatto.

Inoltre, un sistema operativo a 32 bit può utilizzare più di 4 Gb, è il processo che si limita a 4 GB di spazio indirizzo (anche 2 o 3 su Windows).

L'affermazione è 64TB di spazio di indirizzi logici. Fanalino memoria fisica limitazioni è irrilevante perché abilitando paging di memoria, una lattina bypass limiti fisici.

Tuttavia, questo è ancora una pretesa un po 'fuorviante perché il campo l'indice del selettore segmento è di 16 bit, meno 1 bit per Indicatore tavolo e 2 bit per Richiesta Livello di protezione, lasciando un totale di 8.192 (13 bit) segmenti selettori . Con 8.192 segmenti 4GB uno potrebbe avere accesso solo a 32 TB di memoria logica sia nel GDT (Global Descriptor Table) o LDT (Local Descriptor Table). Per poter accedere 64 TB di memoria logica, bisognerebbe utilizzare pienamente l'GDT LDT e con 16.384 segmenti univoci.

Indipendentemente da ciò, la prima domanda è stata: "c'è un limite di 4 GB", e la risposta è "no". Su un sistema a 32-bit sia con Segmentazione e Paging abilitati, si potrebbe, ad esempio, assegnare 512MB al segmento di codice (CS), 1 GB per il segmento di stack (SS), e 4GB per il segmento di dati (DS).

La risposta alla seconda domanda se il sistema operativo sarebbe limitato a 64 TB, se ha usato un modello di memoria segmentata è meno semplice. E 'il lavoro del sistema operativo per fornire il gestore della memoria. Ovviamente ci sarebbe una limitazione fisica di 32GB di RAM. Linux a 32 bit, perché utilizza il paging, in grado di fornire ogni applicazione con uno spazio di indirizzi flat 4GB (ignorando i kernel / dettagli utente split). E, ogni processo ritiene di avere 4 GB di spazio di indirizzamento fisico.

In breve sintesi, penso che tu stai confondendo i limiti di segmentazione con le limitazioni di paging. Paging consente a un sistema o applicazione per utilizzare più RAM di ciò che è fisicamente disponibile. Segmentazione consente un processo per mappare in più 32 bit segmenti logicamente indirizzabili. La sua chiave di notare che la modalità anche piatta utilizza la segmentazione, ma tutti i registri di segmento sono mappati allo stesso indirizzo di base.

Per quanto ne so, la risposta è 'non necessariamente', a causa di altre limitazioni del sistema operativo. Si può decidere di mantenere la dimensione massima di memoria giù bene al di sotto del limite teorico, perché questo potrebbe rendere alcune delle strutture di memoria interna più piccoli e più performante. Ma io davvero non lo so ... Io non sono un Mark Russinovich ...

Date un'occhiata a PAE . I pensare questo è ciò che si sta parlando, ma da quando ho laureato ai puntatori a 64 bit, ho deciso di uccidere le cellule cerebrali che trattavano con i modelli di memoria a finestre con Kentucky bourbon .

Il modello segmentato di Intel è limitata a 16.384 segmenti. Questo è il numero uno troppo piccolo per fare davvero le cose conveniente. Quale sarebbe stato molto più bello sarebbe stato se il sistema potrebbe passare rapidamente tra due o quattro miliardi di segmenti. Questo è quello che avrei voluto vedere, piuttosto che un 64-bit lineari di spazio. Un disegno che potrebbe efficacemente mettere ogni oggetto allocato in un segmento diverso consentirebbe di controllo non-extra overhead gamma su ogni oggetto allocato individuo, trasferimento oggetto con un impatto minimo sulla esecuzione di codice (supponendo che la CPU possa notare quando un segmento correntemente selezionato era invalidato), ecc mentre solo riferimenti a oggetti che richiedono di prendere la metà dello spazio nella cache come un puntatore a 64 bit.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top