Newsgroup: it.comp.lang.c++
Titolo: OT: Memoria virtuale... come funziona?!

Perdonatemi se l'argomento non è molto attinente, però sono sicuro che
voi mi potete aiutare...
Per l'esame di Calcolatori Elettronici ho dovuto studiare il
funzionamento della Memoria Virtuale (in termini generali). 
Quello che mi sembra di aver capito è:
la memoria virtuale è la gerarchia di memoria costituita da Memoria
principale e memoria secondaria (RAM e HD ad esempio) quando vengono
utilizzate come un'unica risorsa. 
La CPU genera cioè indirizzi virtuali costituiti da un offset ed un
indirizzo base (virtuale). Questo indirizzo base viene utilizzato per
indicizzare una tabella chiamata Memory Map da cui si ricava
l'indirizzo base fisico che può essere sia in memoria principale che
in memoria secondaria. Questo indirizzo base viene sommato all'offset
per ricavare l'indirizzo fisico del dato che interessa. Se il dato si
trova in memoria secondaria, tutto il blocco contenente quel dato
viene trasferito alla memoria principale.
Ora, come si traduce tutto questo in termini di Windows 95 / 98?
Immagino infatti che utilizzi la memoria virtuale... Io ho pensato ad
una cosa del genere:
quando scrivo un programma, il file .obj contiene dei riferimenti ai
dati sotto forma di spiazzamento (offset). Quando lancio il programma
il S.O. assegna ad ogni blocco di dati del mio programma un indirizzo
base virtuale (che immagino vada a finire in uno dei registri di
segmento...). Quando la CPU incontra un dato nel mio programma, emette
un indirizzo virtuale costituito dall'indirizzo base virtuale +
offset. Allora il S.O. (o no?!) va a vedere nella Memory Map (ma dove
si trova, in RAM?) a quale indirizzo fisico corrisponde l'indirizzo
base virtuale. Se questo blocco è già in RAM, bene, se invece è sul
disco lo porta in RAM. 
Inoltre in ogni momento il S.O. può decidere di spostare i blocchi tra
memoria principale e secondaria e viceversa (magari per far posto ad
un nuovo processo) cambiando anche l'indirizzo contenuto nella Memory
Map.
Funziona veramente così?!
GRAZIE
Daniele.

Ma se gia' sai che la domanda e' O.T. perche' la posti sul ng sbagliato?
Prova su it.scienza.informatica
Ciao

Ciao
...perchè so che it.scienza.informatica non c'entra niente:
scienza.informatica dovrebbe riguardare scienza dell'informazione e
non un argomento tecnologico come la gestione della memoria.
Grazie lo stesso.
Daniele.

non un argomento tecnologico come la gestione della memoria.
Guarda che la gestione della memoria e` un argomento piu` che
degno della scienza dell'informazione.
Paolo
-----------------------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
-----------------------------------------------------------------

Funziona veramente cosě?!
Non esattamente. (mi riferisco ora a processori iAPX86)
Il processore accede in memoria con due dati, uno che e' (piu' o meno)
l'indice di pagina e uno che e' l'offset nella pagina.
Fuori del processore (in teoria, oggi si fa dentro) ma prima della RAM ci
sta la MMU che traduce la coppia pagina-offset in un indirizzo fisico.
Questo indirizzo fisico va sul bus e, cache a parte, la RAM risponde
mandando il dato.
Di tutto questo il SO ne sa ben poco. Be', qualcosa in realta' lo sa perche'
la MMU prima di mandare l'indirizzo sul bus degli indirizzi controlla che la
pagina sia valida (cioe' sia effettivamente in memoria) controllando la
tabella delle pagine. Se si bene, senno' fa partire un interrupt che il SO
si deve preoccupare di gestire caricando in memoria la pagina richiesta.
La gestione della tabella delle pagine, se non sbaglio, comunque e' a carico
del SO, che puo' decidere di liberare una pagina scrivendola sul disco, se
necessario, per soddisfare una richiesta.
Marco

Paolo

...in questo caso chiedo umilmente scusa.
Ciao
Daniele.