Confuso sulla memoria virtuale per tutti i processi

2

Spero che questo sia il posto giusto. Questo è un compito a casa per il mio corso di Sistemi Operativi e devo implementare un sistema di memoria virtuale funzionante in C ++ in modo che la programmazione sia direttamente coinvolta.

Ho letto alcune fonti su Paging e memoria virtuale ora (Tanenbaum, Ciò che ogni programmatore dovrebbe sapere sulla memoria, ecc.) e ho notato che tutti iniziano con la frase

Every process gets its own virtual memory.

Poi vanno in un'analisi dettagliata delle dimensioni della pagina, degli algoritmi di sostituzione delle pagine, della MMU e del TLB, ecc. In realtà, nella mia mente sono cose abbastanza buone, ciò che non ha senso è il concetto di memoria virtuale. / p>

Se ho quattro processi in esecuzione contemporaneamente e ogni processo utilizza il proprio spazio di indirizzamento virtuale, come viene protetta la memoria fisica? La MMU ha tradotto lo stesso indirizzo virtuale 0 indipendentemente dal processo uno, due, tre o quattro.

Fammi fare un esempio:

Ogni processo ha uno spazio degli indirizzi virtuali a 32 bit che può essere utilizzato. Ogni processo inizia allo stesso modo

MOVI 10, 0  // r10 = 0 
LOAD 11, 10 // r11 = MEM[r10]; value at address 0x00000000

Semplicemente non capisco questo concetto di distinto spazio di indirizzi virtuali se ogni processo tenta di chiamare lo stesso indirizzo virtuale che sarà tradotto nello stesso modo dalla MMU. Quindi tutti e quattro i processi riceveranno gli stessi dati?

Abbiamo una tabella di pagine che mantiene un indice di ogni pagina mappata e non mappata su una cornice di pagina. Se ogni voce di pagina è univoca, come può tenere conto dello spazio di indirizzi virtuale duplicato di ogni processo?

Sono al punto in cui ho scritto bozze di progetto per MMU, TLB e la Page Table, ma non posso continuare fino a quando non capisco correttamente come viene definito lo spazio virtuale heck per ogni processo.

    
posta IAE 22.01.2012 - 19:57
fonte

1 risposta

8

The MMU translated the virtual address 0 the same whether it comes from process one, two, three or four.

No, non lo è. L'intero punto degli indirizzi virtuali è che attraversano un altro livello di riferimento indiretto. Ogni processo ha una tabella di pagina individuale che indica alla CPU (o al sistema operativo, ho dimenticato) come tradurre ogni indirizzo virtuale. Se non vi è alcuna voce nella tabella della pagina per l'indirizzo virtuale per quel processo, o la pagina non ha i diritti richiesti (RWX), allora è ciò che è una violazione di accesso / SIGSEGV. Due processi possono avere due indirizzi virtuali separati mappati allo stesso indirizzo fisico per la comunicazione tra processi o la condivisione di codice o anche a qualcosa di completamente diverso, ad esempio pagine di scambio, pagine di guardia, ecc. Tuttavia, poiché il sistema operativo ha il controllo totale e completo sul tabella delle pagine, è impossibile per qualsiasi applicazione accedere alla memoria fisica oltre a quanto consentito dal sistema operativo o alla memoria virtuale di qualsiasi altro processo.

La memoria fisica è protetta perché ogni accesso deve passare attraverso la tabella delle pagine e il sistema operativo può controllare le voci bene. Non puoi semplicemente creare un puntatore casuale e de-fare riferimento perché non ci sarà alcuna voce della tabella di pagina.

    
risposta data 22.01.2012 - 20:04
fonte

Leggi altre domande sui tag