Introducing 

Prezi AI.

Your new presentation assistant.

Refine, enhance, and tailor your content, source relevant images, and edit visuals quicker than ever before.

Loading…
Transcript

Jarid Rida, Pinna Matteo, Dobrota Dorin, Perini Michele, Pierandrei Mattias, Ricco Marco

ALLOCAZIONE

L'allocazione è il processo con cui un programma in esecuzione viene allocato in memoria centrale.

Lo spazio in memoria deve però essere condiviso tra più processi.

PARTIZIONAMENTO

ALLOCAZIONE

E

PARTIZIONAMENTO

Il partizionamento è un metodo di allocazione dei processi.

Lo spazio di memoria viene diviso in partizioni, ovvero una serie di spazi di memoria che insieme vanno a completare la memoria centrale.

Può essere:

-PARTIZIONE FISSA

-PARTIZIONE DINAMICA

PARTIZIONE FISSA

Con questo metodo ogni partizione deve contenere un solo processo.

Quando un processo termina la sua esecuzione, la partizione si libera, e può essere occupata da un nuovo processo.

Il processo che andrà a occupare la partizione, si troverà nella coda dei processi con lo stato di pronto.

Il numero e la grandezza delle partizioni sono modificabili a freddo, ovvero all'accensione del sistema.

PROBLEMI PARTIZIONE FISSA

PROBLEMI

I problemi sono 2:

-Uso inefficiente della memoria a causa della frammentazione interna.

I processi devono essere più piccoli delle partizioni, creando così spazi liberi di memoria che non possono essere occupati.

-La grandezza dei processi eseguibili è limitata, perchè non deve superare la grandezza della partizione.

PARTIZIONE DINAMICA

Nella partizione dinamica, gli spazi di memoria non utilizzati in una partizione possono essere recuperati attraverso la compattazione della memoria, che consiste nello spostare i processi in memoria centrale in modo da creare un unico spazio libero in fondo, potendone quindi allocare un altro.

Ci sono 3 tipi di partizione dinamica.

PARTIZIONE DINAMICA

TIPI DI PARTIZIONE DINAMICA

FIRST-FIT

Si assegna al processo il primo buco abbastanza grande. E' il metodo più veloce.

WORST-FIT

Si assegna al processo il buco più grande disponibile. Questo crea maggiori spazi inutilizzati

BEST-FIT

Alloca il buco più piccolo che può contenere il processo. Come dice il nome, è il metodo migliore.

La Memoria Virtuale

MEMORIA VIRTUALE

Per sopperire al problema che impone la quantità reale di memoria RAM installata, sia per quanto riguarda la dimensione dei processi, sia per il grado di multiprogrammazione, è stato pensato di eseguire processi i quali non si trovino del tutto in memoria centrale.

Questa possibilità possiede molti vantaggi, tra cui: la possibilità dei processi di non essere vincolati alla dimensione massima della memoria, l’aumento di efficienza e un grado di multiprogrammazione indipendente dalla RAM.

Come lavora

Funzionamento a Paginazione

Solitamente la memoria virtuale viene realizzata con la paginazione su richiesta, così facendo si trasferisce in memoria centrale solo ciò che occorre, lasciando in memoria secondaria tutto ciò che non è necessario.

Questo avviene mediante lo swapping delle pagine: il sistema esegue il processo e, alla necessità, vengono inserite nella memoria centrale quelle pagine necessarie a continuare l'esecuzione, sostituendo quelle non più necessarie.

L'errore che segue dalla mancanza della pagina si chiama fault page.

Funzionamento a Segmenti

Memoria virtuale è considerata a segmenti se il processo è suddiviso in parti aventi dimensione diversa.

Limite indirizzi virtuali

Limite degli indirizzi virtuali

Con la memoria virtuale la dimensione di un processo è limitata dalla capacità di indirizzamento del processore. Se il processore prevede istruzioni macchina con indirizzi di n bit, è possibile indirizzare una memoria virtuale di 2^n parole. Tale memoria costituisce lo spazio di memoria virtuale del processo che è composto da un certo numero di pagine aventi tutte la stessa dimensione.

Nel caso di processori a 32bit: 2^32 byte = 4 GB

Nel caso di processori a 64bit: 2^64 byte = 16 milioni di TB

Questi sono anche i limiti fisici della memoria installata.

I limiti della Memoria Virtuale

I limiti della memoria virtuale

L'efficienza della memoria virtuale è influenzata dalla qualità delle scelte effettuate dal S.O. durante l'allocazione delle pagine in memoria:

  • se il numero di frame assegnati a un processo è troppo basso ci sono molti fault di pagina, con elevati costi di sistema che possono portare a una condizione di thrashing. In questa condizione il sistema dedica più tempo a spostare pagine tra la memoria e il disco che ad eseguire istruzioni.
  • Se invece il numero di frame assegnati a un processo è eccessivo, si riduce il grado di multiprogrammazione del sistema, senza che ci sia un'apprezzabile riduzione della percentuale di fault di pagina.

Per contrastare il trashing è possibile utilizzare tecniche di pre-paginzione. Tra queste tecniche è presente pure quella di Working Set che riduce il page fault.

PAGINAZIONE E SEGMENTAZIONE

SEGMENTAZIONE

La segmentazione è una tecnica di allocazione non contigua dei processi in memoria in cui i processi sono suddivisi in blocchi, detti segmenti, di differente dimensione.

LE DIFFERENZE

La segmentazione differisce dalla paginazione poiché i blocchi derivati dalla suddivisione dei processi in memoria, sono di diverse dimensioni. Inoltre ,analogamente a quanto succede alle pagine con la paginazione, un processo segmentato è allocato in memoria per segmenti non necessariamente adiacenti.

Con la segmentazione un processo è suddiviso in blocchi secondo criteri logici che riflettono l’organizzazione del software: prendendo in esempio un programma questo potrebbe venir segmentato con un segmento per i dati , uno per il programma principale e un altro per quelli secondari.

I VANTAGGI

Viene semplificata la gestione degli spazi di memoria condivisi, in quanto i dati (o il codice) da condividere possono essere inseriti in un unico segmento, che viene condiviso tra i processi. Inoltre la protezione della memoria può essere effettuata in base alle esigenze e alle caratteristiche del funzionamento del singolo segmento. È più semplice gestire strutture dati dinamiche allocandole in un segmento perché, se nell’esecuzione del processo lo spazio occupato dai dati aumenta, basta aumentare la dimensione di quello specifico segmento, nel caso della paginazione è invece impossibile aumentare la dimensione delle pagine, ed è più complicato inserirne di nuove tra quelle assegnate al processo, per allocare i dati che possono crescere sino a superare lo spazio inizialmente previsto.

SEGMENTAZIONE

LA TABELLA DEI SEGMENTI

Per collocare un segmento in memoria, il sistema operativo deve trovare una zona libera, di dimensione uguale a quella del segmento.

Le informazioni sul posizionamento dei segmenti di un processo in memoria sono inserite in una struttura dati simile alla tabella delle pagine, chiamata tabella dei segmenti, usata dalla MMU per creare l’indirizzo fisico di una cella di memoria.

Ogni riga della tabella dei segmenti contiene, oltre ai bit di controllo e l’indirizzo di base del segmento, anche la sua dimensione. L’indirizzo di base e la dimensione del segmento servono a identificare lo spazio di memoria fisica occupato.

Nella costruzione dell’indirizzo fisico ci sono due possibili situazioni anomale: una in cui l'offset abbia un valore maggiore della dimensione del segmento, e l'altra nel caso in cui il segmento sia assente in memoria.

La MMU, una volta rilevata la condizione di errore, la segnala con un’interruzione, la quale provoca l’intervento del sistema operativo per portare il segmento mancante in memoria, o per interrompere l’esecuzione del programma per violazione della memoria.

PAGINAZIONE

La paginazione (o paging) è la tecnica con la quale il sistema operativo, per mezzo dei rispettivi algoritmi, suddivide la memoria in parti di dimensioni minori, e la alloca al programma da eseguire, usando pagine come blocco minimo di lavoro.

La paginazione è così realizzata: lo spazio di memoria (memoria fisica) è suddiviso in blocchi, aventi tutta la stessa dimensione, detti frame. Lo spazio di memoria dei processi (memoria logica) è suddiviso in blocchi di dimensione uguale a quella dei frame, detti pagine.

Le pagine logiche di un programma potranno essere collocate nei blocchi liberi della memoria, non necessariamente contigui.

La gestione paginata della memoria prevede che lo spazio degli indirizzi di ogni programma sia suddiviso in una pagina logica di dimensione fissa predefinita (es : 4kb).

Per gestire una memoria con paginazione il gestore di memoria del S.O. utilizzerà:

  • Una Memory Block Table (MBT, Tabella dei Blocchi di Memoria), contenente tanti elementi quanti sono i blocchi fisici della memoria.
  • Più Page Map Table (PMT, Tabella di Mappa delle Pagine), una per ciascun programma in esecuzione, contenente tanti elementi quante sono le pagine logiche richieste dal programma.

PMT E MBT

La PMT associa a ciascuna pagina logica del programma il corrispondente blocco in cui la pagina è caricata.

La MBT associa a ciascun blocco di memoria il suo stato di allocazione (ad es: libero o occupato) ed eventualmente l'identificativo del processo a cui il blocco è assegnato.

Al momento del caricamento in memoria di un nuovo programma, il gestore verifica la disponibilità di un numero sufficiente di blocchi (pagine fisiche) liberi. In caso positivo il programma viene caricato e le tabelle vengono aggiornate. Quando un programma termina i blocchi di memoria da esso occupati vengono resi nuovamente disponibili.

ESEMPIO

La figura seguente mostra la situazione di tre processi allocato in una memoria fisica di 16 frame. Le frecce che collegano le pagine del processo P2 con i frame della memoria fisica visualizzano il mapping tra pagine e frame ed evidenziano la non contiguità delle pagine di p2 in memoria. Anche p3 non è allocato in pagine contigue: la pagina 0 di P3 è collocata nel frame 11, mentre la pagina 1 è in memoria nel frame 15.

Per tener conto dell'allocazione delle pagine nei frame e dello stato della memoria servono opportune tabelle che descrivono il mapping tra pagine e frame. Di conseguenza, per ogni processo, occorre abbinare al numero di pagina logica il frame in cui essa è inserita.

Ad ogni processo è associata una tabella delle pagine che può essere rappresentata con un array di puntatori al frame delle pagine fisiche.

Nel caso dei tre processi si avranno le seguenti page table:

MAPPA DI BIT

L'elenco dei frame liberi può essere gestito con una mappa di bit : si utilizza un array di bit, uno per frame, con la conversione che uno nell'array identifica un frame occupato, mentre 0 rappresenta un frame libero.

Con riferimento all'esempio precedente, la mappa di bit mostra che i frame 4,8,12,13 e 14 sono liberi, mentre nei rimanenti sono allocati dei processi.

In alternativa si possono elencare i frame liberi per blocchi di frame contigui, tramite un elenco composto da una coppia di valori che descrivono il blocco con la posizione del primo frame e dal numero di frame di un blocco. Per esempio, una memoria dove sono liberi i frame : 4,6,8,12,13,14, è descritta dall'elenco: (4,1) (6,1) (8,1) (12,3)

Binding

Ad ogni indirizzo logico (o simbolico) viene fatto corrispondere un indirizzo fisico: l’associazione tra indirizzi simbolici e indirizzi assoluti viene detta binding.

Il binding può essere effettuato:

•staticamente

•dinamicamente

BINDING

BINDING STATICO

BINDING STATICO

• a tempo di compilazione: in questo caso il compilatore genera degli indirizzi assoluti (es: file .com del DOS).

• a tempo di caricamento: il compilatore genera degli indirizzi relativi che vengono convertiti in indirizzi assoluti dal loader (codice rilocabile).

BINDING DINAMICO

BINDING DINAMICO

• A tempo di esecuzione: durante l’esecuzione un processo può

essere spostato da un’area all’altra.

•Riguarda l'impossibilità di stabilire, a tempo di compilazione, quale sarà il matedo da legare in chiamata.

•L’associazione tra indirizzi logici e fisici viene effettuata a run-time:

• possibilità di spostare processi in memoria

• supporto allo swapping

SCHEDULING

Che cos'è lo Scheduler?

Lo scheduler è un programma che implementa un algoritmo di scheduling, tradotto letteralmente "mettere in coda", il quale, dato un insieme di richieste di accesso ad una risorsa, stabilisce un ordinamento temporale per l'esecuzione di tali richieste, privilegiando quelle che rispettano determinati parametri secondo una certa politica di scheduling, in modo da ottimizzare l'accesso a tale risorsa e consentire così l'espletamento del servizio/istruzione o processo desiderato.

L'attenzione posta su alcuni parametri piuttosto che su altri differenzia la cosiddetta politica di scheduling all'interno della gestione dei processi dando vita a code di priorità.

Tecniche di Scheduling

Quando lo scheduler decide di mandare in esecuzione un programma, deve raggiungere un obiettivo specifico:

-Massimizzare l’utilizzo della CPU;

-Massimizzare il Throughput: numero di processi completati in media nell'unità di tempo;

-Minimizzare il Tempo di attesa.

Per riuscire quindi a completare uno degli obiettivi lo scheduler decide di mettere in atto una delle seguenti tecniche:

-FIFO: Il primo che entra è il primo ad uscire;

-SJF: Il processo che richiede meno tempo viene eseguito per primo;

-Round Robin: Ogni processo ha disponibile una piccola quantità di tempo, prefissato e uguale per tutti. Se entro quell'arco di tempo il processo rimane sulla CPU, viene interrotto e inserito in una coda;

-Priority Schedulig: Viene associato un valore di priorità ad ogni processo, quindi quelli con numeri più alti verranno eseguiti per primi.

Learn more about creating dynamic, engaging presentations with Prezi