24
1.9.1 1.9: Gestione della Memoria Secondaria Struttura logica dei dischi Scheduling del disco Gestione dei dischi Gestione della zona di swap

1.9: Gestione della Memoria Secondaria · ogni disco logico come un disco autonomo, su cui eventualmente creare un file system (o una zona di swap). ... – Accelera le ricerche su

Embed Size (px)

Citation preview

1.9.1

1.9: Gestione della Memoria Secondaria● Struttura logica dei dischi

● Scheduling del disco

● Gestione dei dischi

● Gestione della zona di swap

1.9.2

Struttura Logica dei Dischi● Un disco fisico è spesso diviso in più partizioni o dischi logici, ciascuno 

dei quali comprende un gruppo di cilindri contigui.

● Questa divisione è nota solo al device driver: il resto del Kernel vede ogni disco logico come un disco autonomo, su cui eventualmente creare un file system (o una zona di swap).

● Vantaggi:

– Diversi file system possono supportare usi differenti

– Migliore affidabilità

– Può migliorare l'efficienza variando i parametri del file system a seconda degli usi

● Ad es., in Unix con mkfs(8) si può specificare il rapporto tra dimensione totale del file system e dimensione della i­list (molti file piccoli; pochi file grandi)

– Evita che un programma usi tutto lo spazio disponibile con unico grande file

– Accelera le ricerche su nastri di backup, e i tempi di ripristino di partizioni da nastro.

1.9.3

Struttura Logica dei Dischi (Cont.)● Ogni disco logico è gestito dal S.O. come un array (monodimensionale) 

di blocchi logici; ogni blocco logico è la più piccola unità di trasferimento dati, dal punto di vista del S.O.

– Blocco logico = multiplo della corrispondente unità fisica, cioè il settore di un disco; es.: settori da 512 byte, blocchi logici da 1 Kbyte

● Valori comuni della dimensione di un blocco logico: da 512 byte a          4 Kbyte

● I blocchi logici sono mappati nei settori fisici in modo sequenziale (per ciascun disco logico, dal primo settore della prima traccia del cilindro più esterno all'ultimo settore dell'ultima traccia del cilindro più interno).

● In Unix/Linux, è compito del device driver realizzare questa "vista canonica" del disco, che astrae dalle sue caratteristiche fisiche: il Kernel non ha nessuna conoscenza di tracce, cilindri etc. (ma il device driver sì).

● I device driver sono l'unica parte del Kernel che è al corrente delle peculiarità fisiche di ciascun particolare disco.

1.9.4

Scheduling del Disco● Il S.O. deve assicurare un uso efficiente dell'hardware; per i disk drive,  

ciò significa massimizzare

– Tempo di accesso

– Banda passante (velocità di trasferimento dati).● Come gran parte delle risorse hardware di un sistema, l'accesso al 

disco è sottoposto a scheduling.● Scheduling del disco (disk scheduling): ordinare le richieste di I/O in 

modo da ottenere le migliori prestazioni possibili.– N.B. ­  in un generico istante di tempo, per un dato disco vi sono N richieste 

di I/O accodate (coda di richieste); i processi interessati ad esse sono tutti andati a dormire, e formano la coda di dispositivo (device queue) relativa a quel disco.

● Tempo di accesso: due componenti principali– Tempo di posizionamento (seek time) ­  tempo che impiegano le testine per 

posizionarsi sul cilindro che contiene il settore cercato– Latenza rotazionale (rotational latency) ­  tempo aggiuntivo di attesa che il 

disco ruoti fino a posizionare il settore cercato sotto le testine.

1.9.5

Scheduling del Disco (Cont.)● La latenza rotazionale non è controllabile dal software; lo scopo primario 

dello scheduling del disco è minimizzare il tempo di posizionamento.● Tempo di posizionamento: è circa proporzionale alla distanza di 

spostamento (seek distance) ­  spazio intercorrente tra la posizione attuale della testina e quella del cilindro che contiene il settore cercato; può essere misurata in numero di cilindri.

● Banda passante (disk bandwidth): si riferisce alla velocità di trasferimento globale del sistema ­  numero totale di byte trasferiti, diviso tempo totale tra l'inoltro della prima richiesta di I/O e il completamento del trasferimento relativo all'ultima richiesta.

1.9.6

Scheduling del Disco (Cont.)● Esistono diversi algoritmi di scheduling delle richieste di I/O su disco.

● Metriche prestazionali:

– distanza di spostamento totale ­  somma delle distanze di spostamento per tutte le richieste di I/O accodate, ovvero percorso totale effettuato dalle testine nel soddisfare tutte le richieste della coda (MIN).

– tempo d'attesa della singola richiesta ­  tempo che intercorre tra l'inoltro di una richiesta e il suo completamento (MIN).

● Del tempo d'attesa interessa spesso minimizzare la varianza (tempo d'attesa più uniforme possibile).

● Il Kernel sottopone al device driver una serie di richieste di I/O, espresse in termini di blocchi logici da leggere o scrivere; il device driver sa individuare il cilindro che corrisponde a un dato blocco logico.

● Si consideri un disco con 200 cilindri, numerati da 0 a 199, ed una coda di richeste pendenti sui seguenti cilindri:

98, 183, 37, 122, 14, 124, 65, 67La posizione delle testine è sul cilindro 53.

1.9.7

FCFS● Scheduling  FCFS = First Come, First Served  (algoritmo FIFO).

● Ogni nuova richiesta è posta in fondo alla coda di richieste.

● Distanza di spostamento totale = 640 cilindri.

1.9.8

SSTF● Scheduling SSTF = Shortest Seek Time First.

● La prossima richiesta da servire è quella col minimo tempo di posizionamento rispetto alla posizione attuale delle testine.

● SSTF è una forma di scheduling analoga a SJF (cfr. scheduling della CPU); pertanto può portare al blocco indefinito (starvation) di alcune richieste di I/O.

1.9.9

SSTF (Cont.)

● Distanza di spostamento totale = 236 cilindri.

1.9.10

SCAN● Scheduling SCAN: il braccio delle testine parte da un'estremità del 

disco, e si muove continuamente verso l'estremità opposta, servendo richieste man mano che ne incontra; giunto all'estremità del disco, il movimento del braccio è invertito e l'algoritmo continua.

● Chiamato talvolta algoritmo dell'ascensore (elevator algorithm, lift algorithm).

1.9.11

SCAN (Cont.)

– Distanza di spostamento totale = 208 cilindri.

1.9.12

C­SCAN● Problema con l'algoritmo SCAN: al giungere ad un'estremità, le richieste 

pendenti sono concentrate soprattutto verso l'estremità opposta del disco, e queste sono quelle che stanno aspettando da più tempo; rovesciando la direzione di spostamento delle testine, queste richieste attenderanno ancor più a lungo ⇒ tempo d'attesa molto variabile.

● Algoritmo C­SCAN: Circular Scan ­  fornisce un tempo d'attesa più uniforme (bassa varianza).

● Il braccio delle testine si sposta da un'estremità all'altra, servendo richieste come per SCAN. Quando raggiunge un'estremità, ritorna immediatemente all'inizio del disco senza servire richieste nel suo viaggio di ritorno.

1.9.13

C­SCAN (Cont.)

1.9.14

LOOK, C­LOOK● LOOK = variante di SCAN.

● Il braccio delle testine avanza solo fino all'ultima richiesta nella direzione attuale, poi inverte la direzione senza andare fino alla fine del disco.

● C­LOOK: variante di C­SCAN, con funzionamento analogo a LOOK.

1.9.15

LOOK, C­LOOK (Cont.)● C­LOOK:

● 60 cilindri in meno rispetto a C­SCAN (da 183 a 199 e viceversa; da 14 a 0 e viceversa).

1.9.16

Implementazione degli Algoritmi● Nella pratica, il codice di implementazione di un dato algoritmo lavora in 

questo modo:

– Arriva una nuova richiesta R, relativa a un dato blocco logico B, che deve essere accodata secondo l'algoritmo usato.

– Se la coda delle richieste è vuota, inserisci la richiesta come primo (e ultimo) elemento e termina.

– Altrimenti: calcola il cilindro C relativo al blocco logico B, e inseriscilo nella coda al posto giusto, secondo i criteri di ordinamento dell'algoritmo.

● Ad esempio, per FCFS, inserisci comunque R in fondo alla coda delle richieste

● Per  SCAN (posizione testine = 53; movimento attuale a scendere):– Se 0 <= C <= 53, inserisci R  in ordine di cilindro C nella prima parte 

della coda;– Se 53 < C <= 199, inserisci R in ordine di cilindro C nella seconda 

parte della coda.

1.9.17

Implementazione degli Algoritmi (Cont.)● disksort(queue, request);     ­­­­     algoritmo SCAN

37              14                65                67               98               122             124              183

103

queue  

request  

37            14             65             67             98            103          122              124              183

queue  

1. parte  2. parte 

1.9.18

Scelta dell'Algoritmo● Le prestazioni dipendono dal numero e tipi di richieste.

● Le richieste possono essere influenzate dal metodo di allocazione dei file nel file system (allocazione contigua o indicizzata, posizionamento fisico della i­list, etc.)

● SSTF è abbastanza comune e rappresenta una scelta "naturale".

● SCAN e C­SCAN hanno migliori prestazioni per sistemi con grosso carico sul disco.

● Il codice di implementazione dello scheduling del disco dovrebbe costituire un modulo separato del Kernel, chiamato dai vari driver di disco, che permetta di passare da un algoritmo a un altro se necessario (ad esempio con una chiamata di sistema, riservata al super­user, per la selezione di un algoritmo tra N supportati).

● Sia SSTF che C­LOOK possono essere scelte ragionevoli per l'algoritmo di default.

1.9.19

Gestione dei Dischi● Formattazione a basso livello (low­level formatting), o formattazione 

fisica (physical formatting): organizzare un disco fisico (insieme di superfici magnetizzate) in settori numerati, che il controller del disco possa leggere o scrivere.

– Unix, Windows etc.: format(8), fdformat(8), etc.● Per gestire file su un disco, il S.O. deve ancora memorizzare delle 

apposite strutture di dati sul disco.– Divisione del disco in uno o più  dischi logici  (v. oltre).

● Unix, Windows etc.: fdisk(8), divvy(8), etc.–  Formattazione logica o creazione di un file system.

● Unix: mkfs(8)

1.9.20

Gestione dei Dischi (Cont.)Blocco di bootstrap:● Il primo blocco fisico del primo disco, detto blocco di boot (boot block), 

serve a inizializzare il sistema all'accensione.– Questo è il motivo per cui in un file system Unix, il primo blocco non è 

utilizzato ma è lasciato libero.– All'accensione il sistema esegue del codice di bootstrap, memorizzato in 

memoria ROM, che legge il blocco di boot, lo carica in RAM e gli passa il controllo.

● N.B. ­  ciò significa riuscire ad impartire istruzioni adeguate al controller del disco (a questo stadio del sistema, non esistono ancora device driver attivabili)

– Il codice così eseguito (512 byte di codice in tutto) è detto caricatore del programma d'avvio (bootstrap loader), e a sua volta carica un programma dal file system, che è il vero programma d'avvio (in Linux, questo programma si chiama LILO ­  Linux Loader).

– Questo programma è in grado di caricare e avviare una o più versioni disponibili del Kernel.

1.9.21

Gestione dei Dischi (Cont.)Gestione dei blocchi difettosi (bad block):● All'uscita dalla fabbrica, o nel corso del tempo di vita del disco, alcuni 

settori possono risultare difettosi (non sono in grado di memorizzare correttamente le informazioni) e vanno sostituiti con altri settori.

● Oggi la maggior parte dei controller sono in grado di occuparsi di questo compito, così il Kernel può considerare il disco come se fosse perfetto. Tuttavia è il sistema, o l'utente, che deve poter segnalare al controller che un certo settore (o blocco logico intero) va sostituito.– Scenario: il Kernel chiede un I/O su un blocco logico, che comprende un 

settore difettoso; il driver, o il controller, effettua trasparentemente l'operazione sul settore di sostituzione.

● Tecnica utilizzata: accantonamento di settori (sector sparing).● Normalmente, viene accantonato un certo numero di settori per cilindro

– È fondamentale conservare lo stesso cilindro nella sostituzione di blocchi,altrimenti tutti gli algoritmi di scheduling del disco non avrebbero più alcun senso.

1.9.22

Gestione della Zona di Swap● Sia lo swapping che la paginazione usano spazio disco come 

un'estensione della memoria primaria.

● La zona disco deputata a tale compito è la zona di swap; può essere ricavata all'interno del file system normale, o risiedere in una partizione dedicata.

● Gestione dello spazio di swap: in Unix 4.3BSD, lo spazio è allocato a ciascun processo mediante 2 mappe di swap (swap map), gestite dal Kernel, una per la regione di codice e l'altra per quelle di dati:– 2 swap map per processo attivo

– Mappa per regione di codice (dimensione invariabile): blocchi da 512 Kbyte, salvo l'ultimo blocco in incrementi da 1 Kbyte

– Mappa per regioni di dati (dimensione variabile durante l'esecuzione): blocchi di dimensione variabile, ciascuno il doppio del precedente, a partire da 16 Kbyte e fino a 2 Mbyte: dimensione blocco i = 2i × 16 Kbyte

● Se un processo cresce, gli viene allocato un blocco grande il doppio del precedente.

1.9.23

Gestione della Zona di Swap (Cont.)● Mappa di swap per regione testo:

● Mappa di swap per regioni dati:

1.9.24

Gestione della Zona di Swap (Cont.)● Vantaggi delle swap map di 4.3BSD:

● Piccoli processi usano solo blocchi piccoli● Minimizza la frammentazione● I blocchi dei processi grandi possono essere trovati rapidamente● Le swap map rimangono piccole (prendono poco spazio).

● Linux (così come Solaris e altri sistemi Unix) permette l'uso di più zone di swap, che possono essere abilitate/disabilitate nel corso del funzionamento del sistema; ciò può migliorare sensibilmente le flessibilità e le prestazioni del sistema.

– I comandi swapon(8) e swapoff(8) sono usati per abilitare/disabilitare individualmente zone di swap.

– Ogni zona può essere una partizione o un file su disco, con spazio preallocato.

# dd if=/dev/zero of=swapfile bs=1024k count=128

# swapon swapfile