Sartomiki.net

  • Aumenta dimensione caratteri
  • Dimensione caratteri predefinita
  • Diminuisci dimensione caratteri
Home Appunti Progetto di sistemi operativi Scheduling e gestione del disco

Scheduling e gestione del disco

E-mail Stampa PDF
Valutazione attuale: / 3
ScarsoOttimo 

Scheduling del disco
L'OS deve garantire dei tempi di I/O contenuti tutte le volte che viene effettuata un'operazione di questo tipo. Nel momento in cui si fa un accesso alla memoria secondaria, si impartisce al sistema operativo una chiamata di sistema, che contiene diverse informazioni:
-tipo di richiesta (lettura o scrittura).
-indirizzo del disco sul quale effettuare il trasferimento.
-indirizzo di memoria all'interno del disco sul quale effettuare il trasferimento.
-numero di byte da trasferire.
Nel momento in cui avviene una richiesta di I/O se il dispositivo è disponibile, essa viene immediatamente soddisfatta, ma nel caso in cui ci sia un'altra richiesta in esecuzione essa viene messa in coda.
Siccome in un trasferimento sono molti i parametri che potranno influire sulla durata è difficile per il sistema operativo trovare un algoritmo ottimale per garantire prestazioni uniformi/ottime per tutti i file. La maggior parte degli algoritmi che il sistema operativo utilizza si basano sul seek time dei dischi, che statisticamente è minore se è minore la distanza che il braccio deve compiere. Per aumentare l'ampiezza di banda si potrebbe utilizzare anche la latenza di rotazione, ma questo non è possibile, in quanto i dischi non forniscono in tempo reale la posizione del disco.

Algoritmi di scheduling
Per gestire la coda di trasferimento esistono diversi algoritmi:
-FCFS, prevede di gestire la coda come una coda FIFO. E' un algoritmo equo, nel senso che garantisce tempi medi di uscita dalla coda uniformi. Tuttavia non è sicuramente il metodo ottimo.
-SSTF, prevede che vengano servite le richieste in base alla posizione del braccio: la richiesta in coda più rapida da svolgere viene svolta, mentre le altre vengono lasciate in coda. Lo scheduling SSTF è una forma di scheduling per brevità e quindi può condurre a tempi di attesa infinita per alcuni membri della coda (starvation). Questo algoritmo non è equo e neanche ottimale.
-SCAN, prevede che il braccio del disco continui a muoversi avanti e indietro, servendo le richieste mentre attraversa i cilindri. Questo algoritmo viene detto algoritmo dell'ascensore.
-C-SCAN (SCAN circolare), prevede che il braccio del disco continui a muoversi in avanti, scrivendo nei cilindri che raggiunge, e poi torni indietro senza servire le richieste. In questo modo è più probabile, rispetto all'algoritmo SCAN semplice, che richieste cronologicamente più vecchie vengano esaudite prima.
-LOOK e C-LOOK sono uguali a SCAN e C-SCAN, ma prevedono che prima di arrivare in fondo ai cilindri, il braccio del disco torni indietro nel caso in cui non ci siano richieste.

Analisi delle prestazioni degli algoritmi di scheduling
La scelta di un algoritmo migliore è difficile, in quanto dipende molto dal tipo delle richieste e dalla loro densità. Un algoritmo SCAN o C-SCAN da migliori prestazioni in sistemi che sfruttano molto le unità a disco, perché non portano a situazioni di attesa indefinita. Nel caso in cui invece non ci siano richieste simultaneo (e quindi la coda sia quasi sempre vuota), tutti gli algoritmi si comportano come l'FCFS.
Il tipo e la quantità di richieste variano molto a seconda dal metodo con cui sono allocati i file, dalla posizione delle directory e dalla posizione dei blocchi indice.
Molti dischi incorporano degli algoritmi di scheduling automatici, che consentono al SO di non preoccuparsi del problema. In questo caso però non è detto che si ottengano le prestazioni migliori, in quanto non tutte le richieste di I/O hanno lo stesso peso. Ad esempio una richiesta per una pagina di memoria virtuale dovrebbe essere svolta molto prima rispetto ad una richiesta di trasferimento di un file.
Per garantire una certa robustezza del file system è importante che le richieste siano svolte in ordine, in modo da non creare problemi di incoerenza in caso di malfunzionamenti o crolli del sistema.

Formattazione del disco
Nel momento in cui viene prodotto, un disco magnetico non contiene ancora le informazioni necessarie per il suo funzionamento. E' necessaria una formattazione fisica di basso livello, che divida il disco in settori, composti da intestazione, area dati e coda. L'intestazione e la coda contengono informazioni usate dal controllore del disco, come il codice ECC per la correzione degli errori.
La formattazione fisica è comunemente eseguita dal produttore, che quindi decide a priori la dimensione di ciascun settore. La dimensione più comune è 512B, anche se è possibile trovare dischi con altre dimensioni.
Il sistema operativo per rendere utilizzabile il disco deve ancora salvare sul disco alcune strutture dati.
Può innanzitutto dividere il disco in uno o più gruppi di cilindri, detti partizioni. Successivamente deve procedere alla formattazione logica di ciascuna partizione, che consiste nel salvataggio delle strutture dati necessarie al file system per funzionare. Per garantire una migliore efficienza alcuni file system accorpano i blocchi in gruppi, detti cluster, in modo da rendere l'accesso più lineare possibile.
Alcuni OS permettono di utilizzare alcune parti di disco non formattate logicamente (ras disk). Questo accesso di basso livello permette ad alcune strutture dati, ad esempio, di gestire in modo diretto il luogo dove vengono memorizzate le informazioni.

Avviamento dell'OS
Prima di caricare un sistema operativo, nella fase di accensione di un calcolatore, è necessario compiere alcune operazioni. L'elenco di queste operazioni è raccolto in una parte del disco apposita o in una memoria separata. Normalmente nei sistemi è presente una ROM, contenente le informazioni relative al bootstrap loader, il cui compito è quello di caricare da un disco il programma di avviamento completo. Il programma di avviamento completo si trova in una parte del disco detta disco di sistema che è in grado di caricare in memoria il o gli OS.

Gestione dei blocchi difettosi
I dischi soffrono spesso di problemi più o meno gravi. Alcuni malfunzionamenti comportano guasti irreparabili, ma spesso si compromette il funzionamento solo di alcune piccole parti come i settori.
In alcuni casi, come nel caso del controllore IDE, questi guasti vengono gestiti manualmente dall'operatore.
In altri casi un programma speciale (ad esempio chkdsk) viene eseguito con l'obiettivo di "isolare" i settori danneggiati.
Unità disco più complesse, come i dischi SCSI, dispongono di alcune tecniche di recupero dei blocchi danneggiati, in modo da non perdere le informazioni contenute. Esistono principalmente due tecniche:
-sector sparing o sector forwarding, che prevede che un settore difettoso venga sostituito con un altro. Per non compromettere l'efficacia degli algoritmi di scheduling vengono tenuti liberi alcuni settori per ogni cilindro o cilindri interi.
-traslazione dei settori, che recede l'esistenza di una serie di settori liberi nella parte finale della traccia, in modo da permettere la traslazione di tutti i settori che intercorrono tra il punto del guasto e la fine della traccia.
Normalmente la sostituzione di un settore non è del tutto automatica, in modo da garantire il recupero dei file contenenti il blocco danneggiato.

Gestione dell'area di avvicendamento
Nel momento in cui la memoria principale si sta esaurendo e si raggiunge la soglia della zona critica, alcuni processi vengono spostati in memoria secondaria. In realtà i sistemi operativi eseguono questa operazione, ma solo su alcune pagine e non su interi processi.
La gestione dell'area di avvicendamento è in mano direttamente al sistema operativo. Alcuni sistemi considerano la paginazione e l'avvicendamento la stessa cosa.
A seconda dei meccanismi di gestione della memoria, i sistemi operativi utilizzano tecniche diverse per la gestione dell'area di avvicendamento. Ne consegue che le dimensioni di quest'area cambino a seconda del SO.
E' possibile collocare l'area di avvicendamento in due parti del disco:
-all'interno di un file system dove risiede il SO. Questo metodo è semplice da implementare, in quanto non è necessaria alcuna chiamata di sistema particolare, ma è estremamente inefficiente, in quanto si crea una grossa frammentazione esterna ed è necessario molto tempo per allocare lo spazio in maniera dinamica all'interno delle directory.
-all'interno di una partizione apposita, formattata in modo adeguato, che però crea problemi di programmazione e frammentazione interna (non è un grosso problema, poiché i file hanno vita breve).
Alcuni sistemi operativi, come Linux, permettono entrambi i metodi.
Un esempio di uso dell'area di avvicendamento è dato dai sistemi UNIX.  
Inizialmente il kernel UNIX spostava nell'area di avvicendamento interi processi.
In Solaris 1 le pagine che dovevano essere espulse dalla memoria principale venivano direttamente eliminate, in quanto una scrittura in memoria secondaria al momento del caricamento e una successiva rilettura (in caso di necessità) erano più inefficienti di una semplice rilettura per ricaricare la pagina. Nell'area di avvicendamento venivano messe solo la pila e l'heap di sistema (memoria anonima).
Nelle versioni più recenti di Solaris l'area di avvicendamento è allocata solo quando una pagina è espulsa dalla memoria fisica, anziché nel momento del caricamento in memoria.
In Linux l'area di avvicendamento è utilizzata soltanto per la memoria anonima e per le aree condivise tra molti processi. Essa può essere implementata sia all'interno di file di avvicendamento (swap file) o attraverso la creazione di una partizione apposita. Un'area di avvicendamento è formata da blocchi di 4KB (slot delle pagine), la cui funzione è quella di conservare le pagine scambiate ed è munita di una swap map, contenente una serie di contatori. Se il contatore corrispondente a uno slot è uguale a 0, lo slot è disponibile, altrimenti indica che esso è occupato da una pagina condivisa tra n processi diversi.


blog comments powered by Disqus
 

http://sartomiki.net/modules/mod_fuofb/assets/it/find-us-on-facebook-1.png

Follow me

Amici

Chi è online

 3 visitatori online

Siti amici

Banner

Notizie flash

Sono online un po' di appunti! A partire da calcolatori elettronici, proseguendo per introduzione alle reti telematiche e passando infine per sistemi operativi. Scrivetemi se trovate qualche errore... A breve saranno aggiunti nuovi appunti e completati quelli attuali!

PUBBLICITA'