Domanda

Si consideri un sistema di memoria virtuale con un indirizzo di byte virtuali 38-bit, da 1 KB pagine e 512 MB di memoria fisica. Qual è la dimensione totale della tabella delle pagine per ogni processo su questa macchina, assumendo che le, protezione, sporchi e sull'uso bit validi ricevono un totale di 4 bit, e che tutte le pagine virtuali sono in uso? (Supporre che su disco indirizzi non vengono memorizzati nella tabella pag.)

È stato utile?

Soluzione

Bene, se la domanda è semplicemente "ciò che è la dimensione della tabella delle pagine?" indipendentemente dal fatto che si inserisce nella memoria fisica, la risposta può essere calcolato così:

Per prima memoria fisica. Ci sono 512K pagine di memoria fisica (512M / 1K). Ciò richiede 19 bit per rappresentare ogni pagina. Aggiungi che per i 4 bit di informazioni contabili e si ottiene 23 bit.

Ora la memoria virtuale. Con uno spazio di indirizzamento 38-bit e una dimensione di pagina 10-bit (1K), avete bisogno di 2 28 voci nella tabella pagina.

Pertanto, 2 28 voci della tabella pagine a 23 bit ciascuno è 6,174,015,488 bit o 736m.

Questa è la dimensione massima necessaria per un singolo livello VM sottosistema per ogni processo .

Ora, ovviamente, che di non andare a lavorare se si hanno solo 512 MB di RAM fisica in modo da avere un paio di opzioni.

  1. È possibile ridurre il numero di pagine fisiche. Ad esempio, consentire solo metà della memoria da sottoporre a paging, mantenendo l'altra metà residente in ogni momento. Ciò farà risparmiare un bit per l'ingresso, non è davvero sufficiente a fare la differenza.

  2. Aumentare la dimensione della pagina, se possibile . Una pagina di 1K su uno spazio di indirizzamento 38-bit è la ragione per le tabelle di pagina molto grosso. Per esempio, penso che il '386, con il suo spazio di indirizzamento a 32 bit, utilizza 4K pagine. Ciò si tradurrebbe in un milione di voci della tabella pagine, molto meno rispetto al 260 milioni di richiesta qui.

  3. Go multi-livello. Un po 'più avanzato, ma fondamentalmente significa che la pagina tavoli stessi sono oggetto di paging. Dovete tenere il primo livello di pagina tabelle residenti in memoria fisica, ma il secondo livello può andare dentro e fuori, se necessario. Ciò notevolmente ridurre i requisiti fisici ma a costo di velocità, poiché due livelli di errori di pagina possono verificarsi per arrivare a una pagina processo effettivo (uno per le tabelle di paginazione secondari quindi una per la pagina di processo).


Diamo un'occhiata un po 'più da vicino l'opzione 3.

Se permettiamo 32M per la tabella di paginazione primaria e dare ogni voce 4 byte (32 bit: solo 23 sono necessari ma possiamo arrotondare per efficienza qui)., Ciò consentirà 8.388.608 pagine per la tabella delle pagine secondario

Poiché ciascuna di tali pagine secondarie tabella pagine è 1K lungo (ci permette di memorizzare 256 voci della tabella pagine secondarie a 4 byte ciascuno), possiamo risolvere un totale di 2,147,483,648 pagine virtuali.

Ciò consentirebbe 8.192 a pieno carico (vale a dire, usando tutto il loro spazio di indirizzamento a 28 bit) i processi per eseguire fianco a fianco, a patto di avere un bel pezzo di spazio su disco per memorizzare le pagine non residenti.

Ora, ovviamente tabella primaria paginazione (e il sottosistema VM, e, probabilmente, una buona fetta del resto del sistema operativo) deve rimanere residente in ogni momento. Non si può essere consentito di pagina in una delle pagine principali in quanto si può ben bisogno di quella pagina in modo da riportarlo in: -)

Ma questo è un costo residente solo 32M della 512M per la tabella di paginazione primaria, molto meglio della (almeno, per un processo completamente caricato) di 736m.

Altri suggerimenti

dimensione della tabella delle pagine = no totale di voci della tabella pagine * dimensione della voce della tabella pagina

FASE 1: Trovare il NO di voci nella tabella a pagina:

no of page table entries=virtual address space/page size

=2^38/2^10=2^28

quindi ci sono 2 ^ 28 voci nella tabella delle pagine

STEP2: NO DEI TELAI IN FISICA MEMORIA:

no of frames in the physical memory=(512*1024*1024)/(1*1024)=524288=2^19

così abbiamo bisogno 19 bits e 4 bits aggiuntivo per valida, la protezione, sporco e utilizzare i bit totalmente 23 bit = 2.875 byte

size of the page table=(2^28)*2.875=771751936B=736MB

1 KB pagine = 2 ^ 10, 512 = 2 ^ 29 => Offset = 29 -. 10 = 19 bit

virtuale comprende due parti: pagina in frame + offset => pagina telaio + 'sporco = 38 - 19 = 29 bit. 29 bit comprende 4 bit sporca (sopra) => 25 bit per la struttura reale di pagina, ogni frame pagina ha 10 bit lungo.

Quindi, la pagina dimensione della tabella:. 2 ^ 25 * 10 = 320M

Spero che questo corretto.

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