Anteprima
Vedrai una selezione di 27 pagine su 128
Sintesi del Corso di Sistemi Operativi Pag. 1 Sintesi del Corso di Sistemi Operativi Pag. 2
Anteprima di 27 pagg. su 128.
Scarica il documento per vederlo tutto.
Sintesi del Corso di Sistemi Operativi Pag. 6
Anteprima di 27 pagg. su 128.
Scarica il documento per vederlo tutto.
Sintesi del Corso di Sistemi Operativi Pag. 11
Anteprima di 27 pagg. su 128.
Scarica il documento per vederlo tutto.
Sintesi del Corso di Sistemi Operativi Pag. 16
Anteprima di 27 pagg. su 128.
Scarica il documento per vederlo tutto.
Sintesi del Corso di Sistemi Operativi Pag. 21
Anteprima di 27 pagg. su 128.
Scarica il documento per vederlo tutto.
Sintesi del Corso di Sistemi Operativi Pag. 26
Anteprima di 27 pagg. su 128.
Scarica il documento per vederlo tutto.
Sintesi del Corso di Sistemi Operativi Pag. 31
Anteprima di 27 pagg. su 128.
Scarica il documento per vederlo tutto.
Sintesi del Corso di Sistemi Operativi Pag. 36
Anteprima di 27 pagg. su 128.
Scarica il documento per vederlo tutto.
Sintesi del Corso di Sistemi Operativi Pag. 41
Anteprima di 27 pagg. su 128.
Scarica il documento per vederlo tutto.
Sintesi del Corso di Sistemi Operativi Pag. 46
Anteprima di 27 pagg. su 128.
Scarica il documento per vederlo tutto.
Sintesi del Corso di Sistemi Operativi Pag. 51
Anteprima di 27 pagg. su 128.
Scarica il documento per vederlo tutto.
Sintesi del Corso di Sistemi Operativi Pag. 56
Anteprima di 27 pagg. su 128.
Scarica il documento per vederlo tutto.
Sintesi del Corso di Sistemi Operativi Pag. 61
Anteprima di 27 pagg. su 128.
Scarica il documento per vederlo tutto.
Sintesi del Corso di Sistemi Operativi Pag. 66
Anteprima di 27 pagg. su 128.
Scarica il documento per vederlo tutto.
Sintesi del Corso di Sistemi Operativi Pag. 71
Anteprima di 27 pagg. su 128.
Scarica il documento per vederlo tutto.
Sintesi del Corso di Sistemi Operativi Pag. 76
Anteprima di 27 pagg. su 128.
Scarica il documento per vederlo tutto.
Sintesi del Corso di Sistemi Operativi Pag. 81
Anteprima di 27 pagg. su 128.
Scarica il documento per vederlo tutto.
Sintesi del Corso di Sistemi Operativi Pag. 86
Anteprima di 27 pagg. su 128.
Scarica il documento per vederlo tutto.
Sintesi del Corso di Sistemi Operativi Pag. 91
Anteprima di 27 pagg. su 128.
Scarica il documento per vederlo tutto.
Sintesi del Corso di Sistemi Operativi Pag. 96
Anteprima di 27 pagg. su 128.
Scarica il documento per vederlo tutto.
Sintesi del Corso di Sistemi Operativi Pag. 101
Anteprima di 27 pagg. su 128.
Scarica il documento per vederlo tutto.
Sintesi del Corso di Sistemi Operativi Pag. 106
Anteprima di 27 pagg. su 128.
Scarica il documento per vederlo tutto.
Sintesi del Corso di Sistemi Operativi Pag. 111
Anteprima di 27 pagg. su 128.
Scarica il documento per vederlo tutto.
Sintesi del Corso di Sistemi Operativi Pag. 116
Anteprima di 27 pagg. su 128.
Scarica il documento per vederlo tutto.
Sintesi del Corso di Sistemi Operativi Pag. 121
Anteprima di 27 pagg. su 128.
Scarica il documento per vederlo tutto.
Sintesi del Corso di Sistemi Operativi Pag. 126
1 su 128
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

S.O.

nella ROM

Programma

utente Programma

utente

Programma

utente

S.O.

nella ROM S.O.

nella RAM

0 0 0

a b c

4.1.2 Multiprogrammazione con partizioni fisse

Quasi tutti i sistemi di elaborazione consentono ai diversi processi di girare contemporaneamente

sulla CPU, nel senso che, quando un processo è bloccato (in attesa di risorsa) la CPU viene

assegnata ad un altro processo.

Il modo più semplice per realizzare la multiprogrammazione è di dividere la memoria in n partizioni

di dimensioni diverse.

Come definire e quando effettuare la partizione: la partizione può essere effettuata quando il

sistema sta per attivarsi ed è l'operatore di sistema che può definire le partizioni.

Come agisce il processo sulla partizione: il gestore della memoria assegna al processo la più

piccola partizione di memoria utile per farlo lavorare, poichè la partizione non è dinamica, al

processo sarà assegnata una parte di memoria non utilizzata.

Svantaggio delle code multiple: la partizione della memoria in aree diverse, ciascuna con una

dimensione diversa dall'altra, implica che, in certi momenti, alcune partizioni non sono utilizzate in

quanto prive di processi in coda mentre altre saranno estremamente affollate.

Prima alternativa: una singola coda per i processi in attesa della memoria, ogni volta che si libera

una partizione, il job più vicino alla testa della coda che può entrare nella partizione è caricato.

Poichè non è desiderabile sprecare partizioni grandi per processi piccoli (cosa frequente in questa

alternativa), allora un'altra opzione è data da una seconda alternativa.

Seconda alternativa: scegliere tra la coda dei processi in attesa della memoria il processo più

grande che può entrare. Lo svantaggio di tale strategia è quello di non agevolare i processi piccoli,

che di solito sono quelli interattivi e che quindi dovrebbero essere più agevolati.

Terza alternativa: due code, una per i processi piccoli e l'altra per i processi più grandi.

Quarta alternativa: assegnare a un job un valore numerico che stabilisce il numero di volte che il

processo è stato messo da parte. Superata una soglia, il processo viene eseguito.

Un gestore della memoria per la multi-programmazione basato su partizioni fisse, qualsiasi sia

l'alternativa utilizzata, è impensabile negli attuali sistemi di elaborazione.

4.1.3 Rilocazione e protezione

L'attività di programmazione introduce 2 problemi essenziali che devono essere risolti: rilocazione

e protezione.

Ad esempio, quando viene effettuato un link, il linker deve conoscere l'indirizzo dove sarà caricato

il programma.

Soluzione 1: cambiare l'indirizzo ad ogni istruzione. Ai programmi caricati nella partizione 1 si

somma il valore 100, a quelli in posizione 2 il valore 200, ....

La rilocazione non risolve i problemi della protezione!

La protezione fu risolta, sul 360 dell'IBM, assegnando ad ogni partizione di 2KB un codice di 4 bit

PSW che il gestore della memoria controlla ogni volta che un processo effettua un accesso ad una

specifica locazione di memoria.

Soluzione 2: sono stati definiti 2 registri hardware (base, limite) che rappresentano il campo di

azione del programma e contengono rispettivamente l'indirizzo dove il programma è stato caricato e

il suo limite di azione (indirizoo finale). Tale soluzione risolve contemporaneamente i problemi di

rilocazione e di protezione.

L'hardware protegge i registri base e limite per evitare che qualcuno li possa modificare.

4.2 Un'astrazione della memoria: gli spazi degli indirizzi

Esporre la memoria fisica ai processi presenta tanti inconvenienti:

se i programmi utente possono indirizzare ogni byte della memoria, allora possono

– facilmente spazzar via il SO, intenzionalmente o accidentalmente, conducendo il sistema a

un brusco stop;

con questo modello è difficile che siano eseguiti contemporaneamente molteplici

– programmi.

Sui personal computer è normale avere parecchi programmi aperti contemporaneamente. Poichè è

difficile ottenere una simile situazione della memoria fisica, occorre fare qualcosa.

4.2.1 Nozione di spazio degli indirizzi

Per permettere a molteplici applicazioni di risiedere in memoria contemporaneamente senza

interferire l'un l'altra, devono essere risolti 2 problemi: la protezione e il riposizionamento.

Una soluzione primitiva, usata sull'IBM 360, è quella di etichettare grossi pezzi di memoria con una

chiave di protezione e confrontare la chiave del processo in esecuzione con quella di ogni parola di

memoria prelevata. Tuttavia, quest'approccio non risolve il problema del riposizionamento, sebbene

si possano riposizionare i programmi quando vengono caricati, ma si tratta di una soluzione lenta e

complicata.

Una soluzione migliore è inventare una nuova astrazione per la memoria: lo spazio degli indirizzi.

Uno spazio degli indirizzi è l'insieme degli indirizzi che un processo può usare per indirizzare la

memoria. Ogni processo ha il suo spazio degli indirizzi personale, indipendente da quello

appartenente ad altri processi.

Il concetto di uno spazio degli indirizzi è molto generale ed è appropriato in molti contesti. Per

esempio, per un numero di 7 cifre, lo spazio degli indirizzi va da 0000000 a 9999999, gli indirizzi

32

IPv4 sono numeri a 32 bit, così il loro spazio degli indirizzi va da 0 a 2 -1.

Gli spazi degli indirizzi non devono essere numerici. Anche l'insieme dei domini Internet .com è

uno spazio degli indirizzi. Questo spazio consiste di tutte le stringhe da 2 a 63 caratteri che possono

essere creati usando lettere, numeri e trattini, seguiti da .com.

Una cosa difficile invece è dare a ogni programma il suo spazio degli indirizzi: l'indirizzo 28 in un

programma significa una locazione fisica diversa dall'indirizzo 28 in un altro programma.

Registri base e registri limite

Questa soluzione si basa su una versione particolarmente semplice della rilocazione dinamica.

Quello che fa è mappare lo spazio degli indirizzi di ogni processo su di una parte diversa di

memoria fisica in modo semplice.

La soluzione classica è quella di equipaggiare ogni CPU con 2 registri hardware speciali,

solitamente chiamati registro base e registro limite. Quando sono usati questi registri, i programmi

sono caricati in posizioni di memoria consecutive dovunque vi sia spazio e senza riposizionamento

durante il caricamento. Al momento dell'esecuzione di un processo, il registro base è caricato con

l'indirizzo fisico dove comincia il suo programma in memoria e il registro limite è caricato con la

lunghezza del programma.

Ogni volta che un processo consulta la memoria, sia per prelevare un'istruzione sia per leggere o

scrivere una parola dati, prima di inviare l'indirizzo sul bus di memoria, l'hardware della CPU

aggiunge automaticamente il valore di base all'indirizzo generato tramite il processo.

Contemporaneamente controlla se l'indirizzo offerto sia uguale o maggiore del valore nel registro

limite, nel cui caso è generato un errore e l'accesso viene interrotto.

Così, nel caso qui sotto, il processo esegue l'instruzione , ma l'hardware la tratta come se

JMP 28

fosse , così si dirige sull'istruzione come previsto:

JMP 16412 CMP 0 32764

.

.

CMP 16412

16408

16404

16400

16396

16392

16388

JMP 28 16384

0 16380 0 16380 0 16380

. . .

. . .

ADD 28 CMP 28 ADD 28

MOV 24 24 MOV 24

20 20 20

16 16 16

12 12 12

8 8 8

4 4 4

JMP 24 0 JMP 28 0 JMP 24 0

a b c

Poichè ad ogni indirizzo di memoria, generato automaticamente, viene aggiunto il contenuto del

registro base prima di essere spedito alla memoria, l'impiego di registri limite e base è un modo

semplice per attribuire a ciascun processo il suo spazio degli indirizzi.

In molte implementazioni i registri limite e base sono protetti in modo che solo il SO possa

modificarli.

Uno svantaggio della rilocazione per mezzo dei registri limite e base è la necessità di eseguire una

somma e un confronto per ogni riferimento alla memoria. I confronti possono avvenire

velocemente, ma le somme sono lente a causa del tempo di propagazione, a meno che non siano

usati circuiti speciali per la somma.

4.2.2 Swapping

Problema: immaginiamo che la dimensione del codice da eseguire sia maggiore della dimensione

della memoria centrale libera e, più in generale, immaginiamo di avere un numero di processi tale

che la somma delle dimensioni del loro codice sia maggiore della memoria centrale disponibile.

In questi casi il SO non è in grado di caricare il processo, sia nel primo sia nel secondo caso dovrà

attendere la fine di qualche processo per liberare la memoria.

Soluzione: la soluzione tipica per evitare questi problemi è abilitare il SO a trasferire il contenuto di

un'area di memoria centrale in un'area della memoria di massa (tipicamente della area di swap) al

fine di rendere disponibile la memoria resa libera.

Questa tenica, denominata tecnica di swapping, generalmente è applicata ai processi che sono in

attesa.

Nei sistemi timesharing o nei personal computer, in generale, la memoria centrale non è sufficiente

a mantenere tutti i processi che richiedono di andare in esecuzione.

La soluzione a tale problema è quella di spostare i processi attivi e in attesa sul disco e di reinserirli

quando necessitano della CPU.

Lo swapping carica in memoria l'intero processo da mandare in esecuzione per un tempo minore o

uguale al suo quanto di tempo, quindi lo sposterà in una speciale memoria sul disco chiamata swap

disco.

La memoria virtuale consente di caricare in memoria centrale solo porzioni del processo.

C C C C C

B B B B A

A A A D D D

S.O. S.O. S.O. S.O. S.O. S.O. S.O.

a b c d e f g

Nota: in questo contesto il S.O. sta nella parte bassa della memoria

In questo esempio:

a. il processo A viene caricato in memoria;

b,c. i processi B e C sono anch'essi caricati in memoria (dinamicità della memoria);

d. il processo A viene scaricato dalla memoria per fare posto ad altri processi;

e. viene caricato il processo D;

f. il processo B viene scaricato liberando una porzione di memoria in cui può essere

caricato il processo A;

g. viene caricato il processo A in una posizione diversa da quella originale.

La flessibilità è data dal non essere legati alla specifica dimensione della partizione della memoria

ma alle dimensioni del processo:

la flessibilità crea qualche problema di rilocazione e di rilascio della memoria;

– si deve tener conto di quale parte della memoria è stata resa

Dettagli
Publisher
A.A. 2017-2018
128 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher astrex di informazioni apprese con la frequenza delle lezioni di Sistemi operativi e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Palermo o del prof Tegolo Domenico.