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.