Sei sulla pagina 1di 8

1

L'unit a disco
Introduzione.
In un sistema a microprocessore, la memoria centrale usata per l'esecuzione dei programmi e, la parte RAM volatile.
All'avvio del sistema, il P in grado di eseguire solo il programma residente nella ROM.
La memoria di massa usata per conservare le informazioni in assenza di alimentazione, ma da sottolineare che questa
consente esclusivamente le operazioni di trasferimento delle registrazioni tra memoria centrale e supporto magnetico:
tutte le altre operazioni che la CPU intende svolgere, su programmi o su dati, sono possibili solo nella memoria centrale.
Struttura fisica di un'unit a disco.
Un disco formato da un insieme di piatti sovrapposti e concentrici, la cui superficie ricoperta con uno strato di
biossido di ferro, e tenuto in rotazione, tramite una cinghia e una puleggia, da un motore eletrico.
Sui piatti si possono posizionare, muovendosi in direzione radiale, le testine di Superfici
lettura/scrittura, che sono azionate da un braccio portatestine, al quale sono braccio
magnetizzabili
portatestine
solidali. Cio le testine si spostano, tutte insieme, dall'esterno verso l'interno (o
viceversa) del disco, fino a giungere in una posizione ove si fermano mentre il
disco continua a ruotare.
Nelle unit a floppy disk, il piatto ruota solo quando richiesto un accesso al
disco, e le testine sono a diretto contatto con la superficie del dischetto. Nelle
testine
unit ad hard disk invece, i piatti sono sempre in rotazione e, data l'elevata
velocit di rotazione, le testine non possono essere tenute a contatto con la
superficie del disco per evitare l'attrito.
Il sistema di posizionamento delle testine usa un motore passo passo nelle unit a floppy disk, e un servomotore nelle
unita con hard disk. In entrambi i casi il posizionamento non continuo, ma predisposto per un numero finito di
posizioni delle testine. Ad esempio nei floppy disk, il motore passo passo pu portare le testine in 80 posizioni. Un
numero maggiore di posizioni produrrebbe registrazioni talmente vicine che si pertuberebbero a vicenda.
cilindro Quando le testine stazionano in una certa posizione, vedono passare 2n circonferenze, una
su ciascuna delle facce degli n dischi. Ad esempio su un hard disk con 6 piatti, vi sono 12
superfici registrabili, sulle quali si affacciano 12 testine. L'insieme delle circonferenze
accessibili senza movimento delle testine detto cilindro, mentre ciascuna circonferenza
detta traccia. Una traccia una linea chiusa e, quindi, per essa necessario scegliere un
riferimento che permetta di fissare un punto dal quale si deve considerare che abbia inizio
una traccia.
ottu ratore automatico
Nei floppy disk da 3"+ questo riferimento realizzato tramite una tacca
sull'anello di aggancio. Un sensore, fisso nel drive, posto in prossimit Fines tra
dell'anello di aggancio, rileva la riflessione della parte piena dell'anello di accesso
aggancio e origina un segnale Low; quando poi passa la parte vuota, il dischetto
sensore non riceve la riflessione e commuta il segnale a livello High.
Questo segnale denominato "index pulse", cio segnalazione di inizio
traccia.
L'accesso alle informazioni diretto sia per quanto riguarda il foro index Anello di
p ulse aggancio
posizionamento del braccio portatestine sul cilindro desiderato che la
selezione della testina corrispondente al piatto indirizzato, ma
sequenziale durante la lettura o scrittura sul disco in rotazione.
L'elevata lunghezza della traccia degraderebbe le prestazioni del disco se
venisse trasferita completamente. Per consentire il trasferimento parziale foro per dischetti ad alta foro protezione da
della traccia necessario marcare dei punti intermedi. densit scrittura

La formattazione.
Il segnale index pulse indica l'inizio di una traccia, e occorrerebbero altri segnali per indicare l'inizio dei settori interni
alla traccia. In alternativa a questa tecnica, si affida alla controller del disco il compito di marcare l'inizio dei settori. Il
procedimento di formattazione il seguente:
a) alla ricezione dell'index pulse la controller registra un record contenente i dati identificativi del settore, cio
- il numero del cilindro (C),
- il numero della testina (H),
- il numero stesso del settore (S),
- e la quantit di byte contenuti nell'area dati del settore;
la registrazione del numero del cilindro e del numero della testina sono registrati per un riscontro di affidabilit
dell'operazione di accesso; il numero del settore invece usato per l'effettiva ricerca del settore indirizzato.
b) Nel normale uso del disco la ricerca di un settore consiste nella lettura del record di identificazione e nel suo
confronto con quello cercato; durante il tempo in cui la controller esegue questo confronto sotto la testina passato

Appunti di sistemi
2 - Lunit a disco

un arco di settore che non potr pi venire recuperato, pertanto dopo questo record di identificazione esiste un'area
inutilizzabile denominata GAP.
c) Passato questo spazio, la controller pronta per eseguire l'operazione, di lettura o di scrittura, e quindi in fase di
formattazione lascia spazio per memorizzare 512 byte di dati (=1 settore).
d) La controller lascia ancora un GAP perch dopo aver registrato i dati, calcola un codice, detto CRC (controllo
ciclico di ridondanza), che registra immediatamente dopo i dati, e che utilizza poi in fase di lettura: lo ricalcola e lo
confronta con quello registrato, per verificare la correttezza dei dati letti.
e) Per questa operazione di confronto richiesto ancora un certo tempo e, quindi esister ancora un GAP.
Nella stessa sequenza si continua a registrare ancora altri settori sulla traccia, cio il record di identificazione, un GAP,
lo spazio per i dati, un altro GAP, il CRC, e un altro GAP, fino a completare la traccia.
La formattazione prepara una traccia formando i campi illustrati nella figura seguente:
GAP
dopo record area record ...........
l'index identificazione GAP dati GAP CRC GAP identificazione
pulse settore N 1 settore N 2
L'ampiezza dei GAP variabile e dipende dal tempo necessario a compiere l'operazione richiesta dal campo precedente.
Operazioni di accesso al disco.
Per trattare le informazioni sul disco occorre riservare nella memoria centrale lo spazio sufficiente a contenere i dati
relativi al numero di settori che si intende trasferire. Il settore la minima quantit di byte che la controller pu gestire,
infatti con la formattazione non sono state marcate frazioni di settori.
La controller non riesce a indirizzare dinamicamente la zona della memoria centrale coinvolta nel trasferimento, ma il
sistema operativo le indica una zona fissa, un buffer lungo esattamente un settore e in quest'area simula la lettura o la
scrittura sul disco, che avverranno poi realmente quando il buffer stato completamente esaurito in lettura o in scrittura.
Il programma che intende accedere a uno specifico settore, dopo aver preparato lo spazio destinato a contenere i settori
da trasferire, deve comunicare alla controller, tramite il sistema operativo, le seguenti informazioni:
- l'identificativo del drive,
- il numero del cilindro su cui posizionarsi,
- la testina da selezionare nell'ambito di tutte le tracce del cilindro,
- il numero del settore all'interno della traccia,
Questo procedimento, estremamente dettagliato, pu essere semplificato introducendo una numerazione logica dei
settori e delegando al sistema operativo il compito di calcolare l'indirizzo fisico del settore. Al primo settore del primo
cilindro del lato superiore si assegna l'indirizzo logico 0, al settore successivo si assegna l'indirizzo logico 1, e cos via.
Dopo l'ultimo settore di questo lato si prosegue la numerazione logica con il primo settore del lato sottostante e cos di
seguito fino a completare tutti i settori di uno stesso cilindro. Si prosegue poi, per tutti i cilindri, con il primo settore del
cilindro successivo.
Per effettuare l'associazione tra l'indirizzo logico e quello fisico il sistema di archiviazione deve conoscere:
- il numero di tracce per cilindro,
- il numero di settori per traccia.
Queste e altre informazioni dipendono dalla formattazione, e il sistema operativo le registra nel settore di BOOT.
Questa numerazione permette di immaginare che il disco sia un array di settori, e per un dischetto da 720KB, formato da
2 lati, 40 cilindri, e 18 settori per traccia, apparirebbe la seguente corrispondenza tra il numero logico del settore e la sua
posizione fisica sul disco:
Cilindro 0 Cilindro 1 Nel cilindro 0 la testina 0 vede i settori da 1 a 18, mentre la testina
1 vede i cilindri da 19 a 36. Nel cilindro 1 la testina 0 vede i settori
4 5 6 7 numerati da 37 a 54 ecc.
3 8
2 9
Esempio: per calcolare le coordinate CHS (Cilindro, Testina e
1 10 Settore) del settore logico numero 128, si divide 128 per 36 (il
18 11
17 16 12 numero di settori in un cilindro):
15 14 13
128 : 36 = 3 con resto 20.
Il quoziente 3 indica il numero del cilindro in cui contenuto il settore logico indirizzato, mentre il resto 20 viene diviso
per 18 (il numero di settori in una traccia):
20 : 18 = 1 con resto 2
Il quoziente rappresenta il numero della testina, mentre il resto il numero fisico del settore all'interno della traccia. Le
coordinate del settore logico 128 quindi sono C=3, H=1 e S=2.

Organizzazione logica del disco.


Alla fine della formattazione il sistema operativo organizza il disco in quattro zone, tutte, tranne la prima, hanno una
dimensione, in settori, che dipende dalla capacit del disco:
- Nel settore 1 del cilindro 0 sulla superficie vista dalla testina 0 viene registrato il settore di boot,

Appunti di sistemi
L'unit a disco - 3

- subito dopo il settore di boot vengono riservati alcuni settori per contenere due FAT (File Allocation Table),
- dopo le due FAT si lascia lo spazio per la directory radice,
- tutta la parte restante serve per contenere i dati.
Il settore di BOOT.
Nei floppy disk il sistema operativo riserva il primo settore per contenere le seguenti informazioni di servizio:
offset tipo campo Significato del valore contenuto
istruzione di salto all'indirizzo specificato nella word. Da tale indirizzo inizia il programma di avviamento del sistema,
1 1 byte + semprech il dischetto contiene la parte residente (COMMAND.COM) del sistema operativo.
1 word
4 8 caratteri nome del programma che ha inizializzato il dischetto.
12 1 word numero di byte componenti un settore.
numero di settori che il sistema operativo usa per ogni operazione di trasferimento (blocco o cluster).
14 1 byte
15 1 byte numero di FAT.
16 1 word numero massimo di elementi che si possono inserire nella directory.
18 1 word numero totale di settori presenti sul disco.
20 1 byte codice identificativo del tipo di disco (360KB, 720 ....).
21 1 word numero di settori riservati a ciascuna FAT.
23 1 word numero di settori in ciascuna traccia.
25 1 word numero di testine per cilindro.
(2,3) programma di avviamento.
Per quanto riguarda l'hard disk, il settore di BOOT pi articolato, in previsione della possibilit di operare con pi di
un sistema operativo.
La FAT (la Tabella di Allocazione dei File).
L'area del disco che segue il settore di BOOT, trattata come una tabella di puntatori a blocchi di settori e, per meglio
comprenderne il significato conviene introdurre un esempio.
Un dischetto da 1.44KB contiene circa 2880 settori. Il sistema operativo, nelle sue operazioni sui file, non accede a un
singolo settore ma a blocchi di settori denominati blocchi (o cluster). Nella discussione seguente si fa l'ipotesi che 1
blocco contenga 2 settori.
I blocchi dell'area dati sono numerati progressivamente. La FAT pu essere considerata un array di word (FAT a 16 bit),
parallelo all'array dei blocchi di dati, ci vuol dire che l'elemento numero 1 della FAT associato al blocco dati numero
1 e cos via. Se la FAT fosse grande 4 settori allora potrebbe contenere 4x512 byte cio 1024 word.
Si supponga che, dopo aver inizializzato un dischetto, si registri un archivio 'A' lungo 800 byte. Per questo file
necessario 1 blocco, quindi 1024-800=224 byte del blocco non saranno utilizzabili.
Sul dischetto nuovo tutti gli elementi della FAT contengono il valore 0, per indicare che tutti i blocchi sono disponibili,
quindi il sistema operativo decider di registrare il file nel blocco numero 1 (il primo che trova libero).
Per accedere al file il sistema operativo registra nella directory il File A 1 Dati
nome del file e, accanto a questo, il puntatore 1 al blocco dati. directory Blocco 1 FAT[1]
Nella posizione numero 1 della FAT viene scritto il puntatore
Null () (codice FFFF).
Un secondo file 'B' lungo 1600 byte, per il quale sono quindi richiesti due blocchi (quindi con uno spreco di 448 byte),
sar registrato nei blocchi 2 e 3 dell'area dati
File B 2 Dati 3 Dati
Directory Blocco 2 FAT[2] Blocco 3 FAT[3]
Nella directory sar scritto il nome del file e il puntatore 2 al blocco iniziale del file. Nell'elemento numero 2 della FAT
viene invece scritto il puntatore al blocco successivo (3). Nell'elemento numero 3 della FAT viene infine scritto il codice
Null, per indicare che il blocco 3 l'ultimo della lista.
Il numero del primo blocco dal quale inizia il file scritto in un campo del record all'interno della directory riservato a
contenere una descrizione del file (nome, estensione, data e ora di registrazione, lunghezza, attributi). Poich un file pu
variare in dimensione, la sua registrazione su disco organizzata in una lista di blocchi, in cui i puntatori ai blocchi sono
contenuti nella FAT:
directory Area dati FAT
File A 1 Blocco 1 FFFF Fine file A
File B 2 Blocco 2 3 Prossimo blocco di B
Blocco 3 FFFF Fine file B
Se il file A cancellato definitivamente il sistema operativo non si preoccupa di cancellare realmente i dati, ma si limita
a sostituire al nome del file nella directory una marca di file cancellato e a mettere a zero tutte le posizioni della FAT in
cui erano contenuti i puntatori ai blocchi componenti il file. Adesso sul disco sono presenti solo i blocchi del file B.
Directory Area dati FAT
File cancellato 1 Blocco 1 0 Blocco libero
File B 2 Blocco 2 3 Prossimo blocco di B
Blocco 3 FFFF Fine file B

Appunti di sistemi
4 - Lunit a disco

Se, in questa situazione, si registra un nuovo file C, lungo 3 blocchi, il sistema operativo, dopo aver verificato che nella
directory non esista un file con lo stesso nome, usa lo spazio occupato dal file cancellato per registrare il primo dei 3
blocchi, e usa i blocchi 4 e 5 per registrare gli altri due. La situazione finale rappresentata in figura:
Directory Area dati FAT
File C 1 Blocco 1 4 Prossimo blocco di C
File B 2 Blocco 2 3 Prossimo blocco di B
Blocco 3 FFFF Fine file B
Blocco 4 5 Prossimo blocco di C
Blocco 5 FFFF Fine file C
Cio in seguito a operazioni di cancellazione, creazione o aggiunta di dati ai file, le informazioni di uno stesso file sono
registrate in settori sparsi per il disco e sono tenute collegate dai puntatori raccolti nella FAT.
Il comando defrag (defragmentation) ridispone i vari blocchi dei file in modo da collocarli sullo stesso cilindro o su
cilindri contigui.
Gestione software del disco.
La meccanica di accesso al disco governata dalla circuiteria della scheda controller. Il sistema operativo si colloca tra
le richieste di operazioni sul disco avanzate dal programma applicativo e il controller.
L'elaborazione delle informazioni avviene tramite funzioni e operatori che prescindono dalla meccanica dell'unit a
disco.
Programma leggi il Lettura da: Unit
S. O. Controller a
Applicativo disco
record N - cilindro,
dall'archivio A - settore,
- testina.

Il programma applicativo chiede al sistema operativo un accesso al disco, fornendo un identificatore di archivio e un
codice per la selezione di un record, il sistema operativo, poi, sincarica di calcolare e comunicare alla controller, il
cilindro, la testina e il settore su cui posizionarsi.
Moduli del sistema operativo.
CREAZIONE ARCHIVIO: il comando per la creazione di un archivio comunica al sistema operativo, il nome con cui si
intende identificare l'archivio e gli attributi per il suo impiego.
Creat(nome archivio, attributi)

Cerca nella directory un record avente il


campo nome uguale a quello fornito e una
posizione di archivio cancellato

NO l'archivio SI
esiste?

Trovato NO
record libero

SI Ritorna errore:
Directory piena
Annota nella directory:
Nome, Estensione,
data, ora e attributi Ritorna errore:
dell'archivio. Archivio esistente

Ritorna:
Operazione riuscita

Il compilatore traduce questo comando nelle seguenti richieste al S.O.:


1 - accesso all'unit a disco specificata,
2 - avanzamento nelle directory, fino a raggiungere quella cercata, e
3 - ricerca del nome di archivio corrispondente, per accertarsi che non esista.
Prima di ciascuna operazione, la procedura di creazione esegue il relativo controllo di verifica, in seguito al quale
potrebbe ritornare con il corrispondente messaggio di errore:
1 - unit non pronta,
2 - percorso non trovato, oppure
3 - file gi esistente.

Appunti di sistemi
L'unit a disco - 5

Se non si verifica nessuna condizione di errore, il nome dell'archivio viene registrato nella directory in una posizione
disponibile, occupata da un file cancellato, oppure in coda all'elenco dei file, con l'aggiunta del campo degli attributi,
della data, dell'ora di creazione e della lunghezza, inizializzato a 0. Anche in questo caso si pu verificare un eventuale
errore per mancanza di spazio nella directory.
Si ritiene necessario chiarire che il sistema operativo comunica le sue segnalazioni di errore al programma applicativo,
depositandone il codice in una variabile. Se il programma applicativo non interroga la variabile, per assicurarsi che
l'operazione sia riuscita, proceder ritenendo erroneamente di operare come previsto, ma in realt tutte le successive
operazioni sull'archivio vengono respinte all'insaputa dell'utilizzatore del programma.
Questa precisazione sar valida per tutti i casi di errore che si verificano dopo una richiesta al sistema operativo.
L'eccezione a questa regola data dagli errori denunciati dai dispositivi periferici, ad esempio manca il dischetto nel
drive, la stampante spenta ecc....
APERTURA ARCHIVIO. Dopo che un archivio stato creato, si presume che si voglia anche inizializzarlo, pertanto la
procedura di creazione provvede automaticamente anche all'apertura del file stesso. L'operazione di apertura di un file
ha lo scopo di stabilire un collegamento tra il programma applicativo, che usa il file, e il sistema operativo, che deve
gestire le risorse hardware e software dell'elaboratore.
Nei sistemi operativi che gestiscono l'esecuzione di pi applicazioni, un programma apre un archivio per ottenere l'uso
esclusivo del file, cio per impedire ad altri programmi di aggiornare l'archivio mentre esso usato.
Quando un programma apre un archivio, deve comunicare al sistema operativo il nome e il modo in cui intende
utilizzarlo, con un comando della forma:
OPEN ( nome archivio, tipo accesso ).
Open(nome archivio, modo access o)

Cerca il nome nella directory

SI NO
Trovato?

Cerca nella tabella dei Ritorna errore:


Archivio non trovato
descrittori una posizione libera

NO
Trovata?

SI Ritorna errore:
Su perato il massimo
Componi il descrittore numero di archivi aperti
con le informazioni
prese dalla directory e
con l'accesso chiesto

Ritorna il file handle

Per gestire gli accessi agli archivi usati da un programma, il sistema operativo aggiorna una "tabella dei descrittori di
archivi aperti", nella quale, per ogni archivio aperto registra un descrittore, e comunica al programma che ha richiesto
l'apertura, un valore. Questo detto puntatore al file, se l'archivio usato in modo testo, altrimenti un numero intero,
detto file handle (gestore del file).
Il programmatore deve usare il puntatore al file, o il file handle, immaginando che esso indichi, in ogni momento, la
posizione sul file dalla quale inizier la prossima operazione di lettura o di scrittura.
Il puntatore al file, o il file handle, l'unica informazione sull'archivio che il programma possiede. Questo potr
richiedere le operazioni di lettura o di scrittura di record nel file, specificando questo valore, il sistema operativo lo
user per identificare il descrittore dell'archivio e verificare la legittimit delle operazioni richieste su di esso.
Un descrittore di archivio aperto un record e tra i principali campi che deve contenere vi sono:
- identificatore del drive, percorso, nome ed estensione dell'archivio,
- numero del blocco contenente il settore,
- indirizzo del byte da cui inizier la prossima operazione di lettura o di scrittura,
- lunghezza, in byte, dell'archivio,
- marca di raggiungimento della fine del file,
- diritti di accesso.
Il campo <nome del file> contiene tutte le informazioni necessarie a trovare il file sul disco, in tal modo si stabilisce una
separazione tra il programma e i suoi dati, infatti lo stesso programma potr operare le stesse elaborazioni su archivi

Appunti di sistemi
6 - Lunit a disco

diversi, in quanto comunicher al sistema operativo il <file handle>, e questo ne tradurr il riferimento al file effettivo a
cui si vuole accedere.
I campi <numero del blocco> e <indirizzo del byte (all'interno del blocco)> su cui avverr la successiva operazione di
lettura o di scrittura, tengono conto di due possibili casi:
I - si accede allarchivio con la tecnica random,
II - si avvicendano accessi ad archivi diversi.
In entrambi i casi, il sistema operativo, prima di accedere a un archivio sul disco, deve poter risalire alla posizione in cui
disporre le testine, se il blocco non gi disponibile nella DTA.
Il campo <marca di fine file> posto a un valore logico vero, quando dopo un'operazione di lettura o dopo un
posizionamento random, si superata l'ultima registrazione del file.
il campo <lunghezza> contiene il numero di byte effettivamente registrati nel file.
Il campo <diritti di accesso> contiene le modalit d'uso dell'archivio, specificate al momento dell'apertura, e sono gestite
dal sistema operativo come un controllo di sicurezza contro errori involontari del programmatore.
Il compilatore offre opportune funzioni per entrare a conoscenza, o in taluni casi anche per modificare, i valori contenuti
nei campi del descrittore, queste comprendono:
- <filelength> per conoscere la lunghezza del file,
- <eof> per verificare lo stato della marca di fine file,
- <lseek> per impostare un nuovo indirizzo logico di record su cui operare la prossima lettura o scrittura.
- <chmod> per cambiare il modo di accesso in lettura, in scrittura, ecc...
Cos come compito del programma acquisire il codice di errore prima di continuare a usare il file, anche compito del
programma recuperare in una variabile intera il <file handle> restituito dalla funzione di apertura archivio. Infatti,
questo dovr essere specificato per ogni riferimento all'archivio.
LETTURA (O SCRITTURA) DI RECORD. Il programma applicativo richiede al sistema operativo di leggere un record
dall'archivio tramite una funzione della forma:
LEGGI RECORD( file handle, indirizzo di variabile, numero di byte),
dove <file handle> la variabile in cui si memorizzato il numero intero restituito dalla funzione di apertura, <indirizzo
di variabile> l'indirizzo della memoria centrale dove si vuole trasferire il record da leggere dal disco, e <numero di
byte> la lunghezza del record da leggere.
Read(file handle, indirizzo di variabile, numero di byte) Per soddisfare la richiesta di lettura, il
sistema operativo controlla il valore
del file handle, per assicurarsi che
SI NO l'archivio aperto, poi verifica, nel
file handle>0? descrittore dell'archivio, se ammesso
l'accesso in lettura; se lo controlla se
Accesso al descrittore Ritorna errore: si raggiunta la fine del file. A questo
Archivio non aperto punto, il sistema operativo, assicuratosi
consentito NO di poter accedere al file, traduce i
leggere? campi <numero del blocco> e
Ritorna errore: <indirizzo logico del record>,
SI
Lettura negata contenuti nel descrittore, in un
La marca di SI indirizzo fisico per accedere al file.
EOF set?
Si possono verificare due casi:
Ritorna errore:
NO I - il record richiesto contenuto nella
Superata lunghezza
il record SI DTA, e allora trasferito direttamente
nel buffer? da questa all'indirizzo di memoria
NO specificato, oppure
II - bisogna aggiornare la DTA con il
Accedi al disco e trasferisci blocco di settori contenente il record
il settore nel buffer. cercato.
Come ultima operazione, la funzione
Trasferisci dal buffer alla di lettura, prima di tornare al
variabile, incrementa il programma, incrementa il campo
numero logico di record e ritorna <indirizzo logico del record>,
presumendo che il prossimo accesso al
file avvenga, in modo sequenziale, sul record successivo, che molto probabilmente gi disponibile nella DTA (il
programmatore deve immaginare, invece, che il puntatore al file si fermi all'inizio del record successivo a quello letto).
Per derogare allassunzione implicita di accesso sequenziale, e impiegare la tecnica di accesso random, bisogna far uso
della funzione <lseek>.

Appunti di sistemi
L'unit a disco - 7

L'operazione di scrittura record nel file del tutto complementare a quella di lettura, pertanto la sua funzionalit non
descritta, perch facilmente deducibile.
POSIZIONAMENTO. Il programma che accede ai record dell'archivio con la tecnica random, deve sempre premettere,
all'istruzione di lettura o di scrittura del record, la funzione di posizionamento all'inizio del record da trasferire, tramite
una richiesta al sistema operativo della forma:

Lseek( file handle, numero relativo di byte, riferimento)

SI NO
file handle > 0?

Calcola il riferimento Ritorna erro re


tramite il descrittore Archivio non aperto

Aggiorna i campi del descrittore


calcolando il settore (o il blocco )
e la posizione del byte entro il
settore in cui avverr la prossima
operazione di I/O.

po sizione < NO
Lungh. file?
Poni SET
SI la flag di EOF

Ritorna
dove <file handle> il numero intero di identificazione del descrittore di archivio, mentre il parametro <numero relativo
di byte> indica di quanti byte si intende spostarsi rispetto al punto indicato con il parametro <riferimento>.
Il riferimento pu assumere i tre valori:
- inizio del file (SEEK_SET).
- posizione attuale (SEEK_CUR),
- fine del file (SEEK_END).
L'esecuzione del comando, come al solito, comporta la verifica del file handle; se questo esiste allora avviene l'accesso
al descrittore per determinare il valore del riferimento specificato, cio il blocco di inizio dell'archivio, il blocco
corrente o il blocco di settori dove finisce l'archivio.
A questo riferimento si deve sommare algebricamente il numero di blocchi che corrispondono alla distanza in byte
specificata nel comando. Il risultato verr inserito nel descrittore dell'archivio, nel campo <numero del blocco> e la
parte residua nel campo <indirizzo del record> dove si eseguir la prossima operazione di lettura o di scrittura.
Esempio: si consideri il comando lseek(handle, -10L, SEEK_END), con il quale si chiede di posizionarsi a 10 byte (la L
dopo il 10 sta per rappresentazione long int) dalla fine dell'archivio. Supponendo che l'archivio sia lungo 2060 byte, e
che un blocco comprenda 1024 byte, per individuare la fine del file, basta osservare che l'archivio occupa 3 blocchi
(1024 byte sul primo blocco + 1024 byte sul secondo blocco + 12 byte sul terzo blocco). La posizione cercata si trova
quindi nel terzo blocco di allocazione del file, a partire dal secondo byte. La procedura SEEK aggiorner il descrittore
dell'archivio scrivendo 3 nel campo <numero del blocco> e 2 nel campo <indirizzo del record>.
CHIUSURA ARCHIVIO. Per soddisfare questa richiesta il sistema operativo accede al descrittore per controllare se su
quell'archivio si stava operando in aggiornamento, nel qual caso il contenuto della DTA viene trasferito sul disco, nel
blocco la cui posizione relativa contenuta nel descrittore. Lo spazio occupato dal descrittore, nella tabella dei
descrittori di archivi aperti, viene reso disponibile per eventuali descrittori successivi e si marca il file handle a un valore
convenzionale per riconoscere che l'archivio non aperto.
CANCELLAZIONE ARCHIVIO. Le azioni corrispondenti alla richiesta di cancellazione di un archivio dal disco, sono
gi state anticipate nell'esempio dell'organizzazione della FAT, resta da precisare che anche in questo caso, il sistema
operativo svolge dei controlli di sicurezza. In particolare, si accerta che l'archivio non abbia l'attributo di sola lettura.
Questo attributo ha infatti lo scopo di prevenire la cancellazione involontaria di un archivio.

Appunti di sistemi
8 - Lunit a disco

La directory radice.
Subito dopo i settori riservati alle FAT il programma di inizializzazione lascia alcuni settori destinati alla directory.
Quest'area suddivisa in record, nei quali sono contenute informazioni controllate dal sistema operativo durante le
operazioni di ricerca degli archivi.
La directory paragonabile al sommario di un libro, dove un lettore consulta i nomi dei capitoli e, in corrispondenza,
trova la pagina dalla quale inizia il capitolo cercato. Per ogni archivio che si registra sul disco, il sistema operativo cerca
nella directory un record disponibile dove annotare le seguenti informazioni.
N Lunghezza
Contenuto
Campo in byte
Nome dell'archivio (in codice ASCII)
1 8 Il sistema operativo considera il carattere spazio come
fine nome, per cui lo spazio non utilizzabile come
parte del nome di un archivio.
2 3 Estensione dell'archivio (in codice ASCII)
3 1 Attributi dell'archivio.
4 10 Campo riservato
5 2 Ora di creazione dell'archivio
6 2 Data di creazione dell'archivio
Numero del primo blocco da cui inizia la registrazione
7 2
dell'archivio.
8 4 Dimensione in byte dell'archivio.
Per cercare una posizione libera, il S. O. legge il primo byte del campo nome di ciascun record della directory; vi sono 4
casi possibili:
Valore 00 esadecimale: il record libero, ed l'ultimo della directory.
Valore E5 esadecimale: record occupato da un archivio cancellato.
Valore 2E esadecimale (carattere punto): indica che il record contiene informazioni relative alla sottodirectory corrente;
ma se anche il carattere adiacente il codice ASCII del punto, allora indica le informazioni per reperire la sottodirectory
precedente a quella corrente.
Ogni altro valore considerato come il nome di un archivio.
Il campo attributi dell'archivio specifica per ognuno dei suoi otto bit posti a livello uno le seguenti caratteristiche
dell'archivio:
bit Significato.
numero
0 L'archivio di sola lettura.
1 L'archivio nascosto.
2 L'archivio del sistema operativo
I campi nome ed estensione (11 caratteri) specificano la LABEL o
3
etichetta del disco
Sottodirectory. Su un disco possono essere contenute pi
sottodirectory, nello spazio destinato ai dati, e non nella directory
radice, e la loro dimensione non limitata come la directory radice.
Il campo nome lidentificatore della sottodirectory, e il campo
4 indirizzo contiene il numero del primo blocco da cui inizia l'elenco
degli archivi registrati nella sottodirectory. Il primo record di questo
elenco il carattere "." che serve per indirizzare la sottodirectory
stessa, mentre il nome ".." serve per indirizzare la sottodirectory
precedente.
5 Archivio.
6e7 non usati.
Il campo lunghezza dell'archivio denota il numero di byte contenuti nell'archivio, chiaro che la differenza tra la
capacit del disco e la somma delle lunghezze di tutti gli archivi non corrisponde allo spazio libero. Infatti un archivio
occupa un blocco intero anche se contiene solo pochi byte.

Appunti di sistemi

Potrebbero piacerti anche