Esplora E-book
Categorie
Esplora Audiolibri
Categorie
Esplora Riviste
Categorie
Esplora Documenti
Categorie
Inizialmente i sistema operativi erano Monotasking quindi potevano fare una sola
attività alla volta. Quando l’utente non faceva nulla, loro aspettavano.
Oggi il computer (nominato MultiTasking anche se non fai nulla, fa anche lui
qualcosa (ad esempio scrivere un testo,nel mentre scrivo una parola il computer
svolge altre attività).
Nei sistema operativi di oggi ogni processo ha un suo lasso di tempo chiamato
quanto di tempo. Quell’asso di tempo è dedicato alla CPU, appena finisce viene
eseguito un altro processo. Quest’asso di tempo è per noi impercettibile e quindi
sembra che i processi vengano eseguiti contemporaneamente (quando in realtà
vengono eseguiti singolarmente).
I Processi sono dei progammi (i progammi si trovano sull hard disk,sono statici e solo
quando vengono avviati diventano processi) in esecuzione. Il processo è un entità
dinamica perché si evolve in stati
Ogni processo ha necessità di avere un PC ( progam counter, ovvero un registro
interno alla CPU che tende ad eseguire la prossima istruzione).
Ogni istruzione del processo passa per i vari fetch (fetch, fetch operandi, fetch
decode e fetch esecuzione.). Se un processo viene interrotto, riprende dall’ultima
istruzione al quale stata interrotta.
La fase che permette di passare da un processo all’altro si chiama “Context Switch”
(cambio di contesto), inoltre salva il PCB.
Ci sono 3 Macro(sottoinsiemi) Modelli di processi:
indipendenti, dove ogni processo lavora in modo autonomo
cooperativi, dove più processi lavorano insieme per risolvere un problema
coompetitivi, dove, fra due processi, lavorano per fare qualcosa prima dell’altro.
Ogni processo si divide in stati:
PS: “Una risorsa non è alro che l’insieme dei software e degli hardware che mi
permettono l’avanzamento del processo”
STATO PROCESSI
New (Nuovo), stato del processo appena creato, ma prima di farlo si controlla lo
spazio e le risorse necessarie. Viene quindi creata una struttura PCB, e quindi far
sapere dell’aggiunta di un nuovo processo.
Ready (Pronto), si passa in questo stato quando il processo ha tutte le risorse e lo
spazio per andare avanti.
Da pronto può successivamente andare in:
--Running (Esecuzione), dove se è il turno del processo si esegue, altrimenti ritorna
nella cosa dei processi pronti(stato pronto) (avente tutte le risorse necessarie).
Quando finisce il tempo o nel caso di un processo più importante, il processo ritorna
nello stato di pronto rifacendo la cosa da capo.
Una coda, esempio del supermercato: noi(processi) siamo in cosa per pagare un
prodotto, mentre la cassiera è il processore
--Waiting (Attesa), possiamo andare in questo stato sia dallo stato esecuzione che
da pronto. Da questo stato poi ritorniamo in pronto.
Quando al processo gli è stato tolto o gli manca qualcosa(o risorse), entra in questo
stato
MEMORIA
PARTIZIONAMENTO
Il modo più semplice per allocare la RAM nei sistemi multiprogammati è
quello di dividere in partizioni, ognuna delle quali viene assegnata ad un
progamma in base alla sua dimensione
SCHEMA A PARTIZIONE FISSA
Nello schema a partizione fissa, si creano delle partizioni le cui dimensioni
vengono scelte dal sistema operativo (durante l’inizializzazione)oppure
dall’utente durante il suo avvio, e quindi sono statiche; si crea inoltre una
tabella dove viene memorizzato quali sono libere o occupate
Per ogni partizione, poiché ognuna ha una diversa dimensione, viene
gestita una coda di processi in attesa.
Possono però verificarsi dei problemi:
-Il problema della frammentazione interna (si verifica quando la
memoria viene suddivisa in blocchi di dimensioni fisse), che capita
quando le partizioni sono di grandi dimensioni.
Questo causa uno spreco di memoria, quando dobbiamo eseguire
processi che necessitano poca RAM,
ESEMPIO: Se abbiamo solo partizioni di grandi dimensioni e bisogna
eseguire un processo di piccole dimensioni, questo andrà nella coda dei
processi in attesa nella partizione di grande dimensioni, tuttavia, poiché il
processo richiede poca memoria, il restante non usato verrà sprecato.
Tuttavia questo problema si può risolvere usando una singola coda di
ingressi e, quando una partizione si libera, il job può:
-percorrere la coda dalla testa fino a trovare un job della giusta
dimensione, per essere contenuto nella partizione.
-percorrere la coda individuando il job più grande; facendo questo però si
vanno a discriminare i job di piccole dimensioni.
- Il problema della frammentazione esterna (si verifica quando la
memoria viene suddivisa in blocchi di dimensioni variabili), che capita
quando le partizioni sono di piccole dimensioni.
Con questo problema, poiché le partizioni sono tutte di piccole
dimensioni, non si riesce ad eseguire un progamma che richiede più
memoria
ESEMPIO: se dobbiamo eseguire un processo di grandi dimensioni e
abbiamo diverse partizioni di memoria di piccole dimensioni, dal
momento che le partizioni non riescono a soddisfare la richiesta di
memoria RAM del progamma e, dal momento che il progamma non si
può dividere in pezzi e dividerlo nelle varie allocazioni, questo non si
potrà eseguire
AREA DI SWAP
L’area di swap è un meccanismo di simulazione della memoria RAM
sull’hard disk.
La memoria RAM simulata viene chiamata memoria virtuale.
ESEMPIO
Se un processo in esecuzione passa nello stato di wait perché necessita di
un dato di input, questo dal momento che il processo ora ha bisogno di
questo dato, occupa memoria RAM inutilmente; per liberare la memoria
RAM si sposta il processo nella memoria virtuale sul hard disk; quando il
processo ha nuovamente le risorse necessarie per continuare, si sposta
nella memoria RAM
Swap out = Indica lo spostamento del processo dalla memoria RAM
all’area di swap
Swap in = Indica lo spostamento del processo dall’area di swap alla
memoria RAM
La memoria virtuale viene realizzata con tecniche di paginazione,
segmentazione e tecniche ibride.
PAGINAZIONE
Le tecniche di allocazione della memoria sono dette di allocazione
contigua, per indicare il fatto che, per assegnare la memoria ad un
processo, occorre trovare uno spazio di memoria libero abbastanza
grande per contenerlo completamente. Però a causa della
frammentazione si formano molti spazi liberi in memoria di piccole
dimensioni che non sono in grado di accogliere alcun processo. Per
superare i limiti dell'allocazione contigua si devono utilizzare tecniche di
allocazione che permettono di distribuire un processo in zone della
memoria anche non contigue.
La paginazione è realizzata nel seguente modo:
Il progamma e la RAM vengono divisi in pagine di dimensione fisse:
- La RAM viene divisa in blocchi chiamati frame o pagine fisiche;
- Il progamma viene diviso in blocchi chiamati pagina o pagina logica di
stessa dimensione.
La dimensione dipende dallo specifico sistema di gestione della memoria;
Il numero di pagine logiche (la loro somma indica la dimensione del
progamma) può essere diverso dal numero di pagine fisiche (la loro
somma indica la dimensione della RAM), e quindi:
- Se il numero di pagine logiche è minore del numero di pagine fisiche
libere (RAM disponibile), il programma può essere caricato tutto in
memoria;
PAGE-FAULT
Sono presenti dei bit di validità che indicano se la pagina appartiene o
meno allo spazio logico del processo: Se viene fatto riferimento a
un’istruzione sconosciuta alla memoria,LA MMU determina un’eccezione
della CPU al S.O. Quest’azione viene detta P.F.T.
Viene rimpiazzata la pagina + bassa con una pagina che non è stata ancora
aggiornata.
WORKING SET
Essendo la memoria secondaria molto lenta ,lo swap dei processi e il rimpiazzo delle
pagine causano un grande rallentamento del sistema,impegnato in operazioni di
input-output e per nulla reattivo ai nostri comandi. Questo fenomeno è detto
TRASHING. Una vera è proprio degnerazione. Per prevenire questa situazione
bisogna assicurarsi che il processo abbia a disposizioe un RESIDENT SET per evolvere
e il modello di riferimento chiamato WORKING SET.
IL WORKING SET è IN POCHE PAROLE L’APPROSSIMAZIONE DELLA DIMENSIONE
DELL’AREA DEL PROGRAMMA
SEGMENTAZIONE
Per evitare di caricare piu’ volte lo stesso codice utilizziamo LA
SEGMENTAZIONE. La segmentazione è uno schema di gestione della
memoria centrale che mantiene la separazione tra memoria logica e fisica
ma suddivide la memoria fisica in segmenti di varie dimensioni.
Riassumendo:L’idea di base è quella di suddividere la memoria centrale
nello stesso modo in cui sono divisi i programmi,ovvero,in entità di
diverse funzioni e associare ad ogni modulo software un segmento di
memoria che puo’ contenere un array,una procedura,uno stack o un
insieme di variabili.Ogni segmento è associato ad un numero che
permette di indiduarlo e la sua lunghezza. Inoltre è tipizzato ed è caricato
in un frame della stessa dimensione.
La memoria centrale è divisa in FRAME.
Lo spazio di indirizzamento del processo in SEGMENTI LOGICI
L’hardware dedicato per la segmentazione è la MMU.
VANTAGGI:
La gestione delle strutture dati è semplificata.
Viene facilitata la possibilità di condivisione di segmenti tra processi.
Linking semplificato.
Ogni segmento puo’ avere tipi diversi di protezione.
Si mantiene una “consistenza” tra vista utente e fisica della memoria.
SVANTAGGI:
È richiesta l’allocazione della memoria.
Si è soggetti ad una frammentazione esterna.