Gestione della Memoria

Da TPSIT.
Vai alla navigazioneVai alla ricerca

Gestione della memoria

Con memoria intendiamo la memoria RAM.

La gestione della risorsa memoria si basa su due scelte: - La quantità di memoria da affidare ad un processo. - Come dare tale memoria a tale processo.

Anche in questo caso, come nel caso della Gestione della CPU, è il sistema operativo ad effettuare tale gestione.

Inoltre, bisogna ben capire la differenza tra Programma e Processo.

Ance in questo caso, si parla di gestione della risorsa rispetto a processi.

Caricamento di un programma

Un programma quando viene avviato diventa processo, e passa da una forma statica salvata in un dispositivo a memoria permanente ad una forma dinamica, situata nella memoria RAM.

Come nel caso dello scheduling, quando si ha a che fare con una risorsa limitata il SO crea delle code per gestire i vari processi che richiedono accesso a tale risorsa.

Un programma avviato viene messo in una coda di entrata la quale verrà a mano a mano svuotata dal così detto loader che caricherà ogni singolo programma in coda nella RAM. Un processo avviato lascia la coda in entrata per la lista dei 'processi pronti (Ready List - RL).

Indirizzi di un programma

Gli indirizzi di un programma sono quegli indirizzi che vengono creati dal compilatore in fase di compilazione.

Un compilatore prende il codice sorgente e lo traduce in un codice binario eseguibile dalla macchina per cui è stato configurato.

Ogni variabile definita nel codice sorgente, ha necessità di essere caricata in RAM durante l'esecuzione del processo. Ogni variabile definita ha quindi, per permettere l'accesso al valore in essa contenuto e alla sua eventuale modifica, un indirizzo alla propria locazione in RAM.

Questi indirizzi, fintanto che il programma non diventa processo, non possono esistere (il processo non esiste quindi non è in RAM).

Allora in fase di compilazione avremo:

  • Indirizzi relativi (indirizzi logici): indirizzi che hanno senso solo all'interno del programma e che non puntano a nessuna cella della memoria RAM.
  • Indirizzi assoluti (indirizzi fisici): quegli indirizzi logici di un programma trasformati in indirizzi reali di un processo, quindi che puntano ad una cella della memoria RAM.

Esempio

La memoria RAM può essere vista come un insieme di max celle di memoria: la prima cella ha indirizzo 0, l'ultima cella ha indirizzo max1.

Un programma ha ogni variabile con un proprio indirizzo logico uguale a p.

Quando un programma diventa processo, questo passa in RAM, ed ogni indirizzo logico diventa un indirizzo fisico. Facciamo finta che al processo 𝒫 venga assegnata una porzione di memoria che va da 543 a 978. La prima cella assegnata al processo 𝒫 è quindi la cella 543, e tale numero viene anche chiamato offset.

L'indirizzo logico presente nel programma verrà trasformato in indirizzo fisico con questa semplice formula:

  • indirizzo fisico = indirizzo logico + offset

Template:Code

Metodi di allocazione della memoria

Vedremo i seguenti metodi di allocazione della memoria: