Obiettivi del SO

Nell'ambito della gestione della memoria, gli obietti del SO:

  1. allocare più processi in memoria, per avere parallelismo, e migliorare così la performance del sistema
  2. proteggere la memoria dei processi, impedendo che ciascuno di essi acceda alle aree degli altri processi

Se il SO offre la memoria virtuale, all'obbiettivo 1 si aggiunge la possibilità di eseguire al tempo stesso pù processi di quanti ce ne starebbero in RAM

Traduzione, linking e loading

Il passaggio da programma sorgente a programma binario in memoria è composto da tre fasi: traduzione, linking e loading

Untitled

  1. Source program: il programma sorgente, scritto in un linguaggio come assembly, C, ecc. (non in linguaggio macchina)
  2. Il translator (assembler/compilatore) riceve in input il programma sorgente e produce un object module (modulo oggetto): un programma in linguaggio macchina che solitamente non è ancora eseguibile, in quanto può contenere riferimenti a funzoni/dati definiti in altri moduli e/o librerie, i cui indirizzi non sono ancora noti.
  3. Il linker collega i vari moduli oggetto e le librerie, producendo il programma eseguibile. In questa fase, gli indirizzi in memoria assegnati dal traduttore possono essere rilocati (cambiati), per evitare overlapping con gli indirizzi di altri moduli/librerie.
  4. Quando si vuole eseguire il programma, il loader lo carica in memoria, associandolo a un processo. Può essere necessario effettuare un'ulteriore rilocazione degli indirizzi di memoria generati dal linker, per evitare overlapping con altri programmi già presenti in memoria.

Osservazioni

Per questi motivi, la rilocazione (sia in fase di linking, che di loading) è indispensabile.

Rilocazione e linking dinamici