File system / Cluster Il file system è la parte di SO che, usando il driver dei dischi, fornisce e supporta le astrazioni di file e directory gerarchiche. Il file system del DOS è accessibile attraverso le funzioni di int 21 Per fornire l astrazione di file, il SO implementa un associazione nome file sequenza di settori contenenti l informazione del file. Il disco è allocato ai file a (blocchi di) settori, non byte, per semplicità: l accesso al settore è l operazione HW elementare sul disco lo spreco da settori parzialmente sfruttati è trascurabile nei file di dimensioni più comuni (p.es. 9.5K+1byte=20 settori, spreco=5%) Un file non può avere tutti i settori contigui, o sarebbe un problema farlo crescere e recuperarne i settori se cancellato. D altra parte non è desiderabile un eccessiva frammentazione (p.es. nemmeno una coppia di settori consecutivi contigui). Compromesso: il file system alloca spazio per i file in blocchi o cluster di n settori contigui, ma non assicura contiguità tra cluster; n può valere 2,4,8,16,32,64 (max DOS); p.es. n=16 cluster = 8K Ovviamente, valgono le relazioni: 1. dimensione cluster 2. numero max file 3. frammentazione 4. utilizzazione disco Esempio (4): cluster=16 settori=8k; un file di 1 byte ne spreca 8191! Purtroppo in DOS il n. di settori per cluster non è dettato dall ottimizzazione di 1-4, ma dai 2 byte delle FAT entry (vedi oltre) Dischi e file system- 03/16/06 11:57 PM 1/8
File system DOS - Partizioni I settori del disco si possono dividere tra al più 4 partizioni contigue, ognuna con un file system, anche non DOS (p.es. UNIX). Il master boot sector o MBR (cilindro 0, superficie 0, settore 1) contiene una tabella delle partizioni o partition table intero disco: MBR Partizione 1 Partizione 2 Partizione 3 Partizione 4 Formato (logico) della partition table Starting Location Ending Location Relative Number of Type Boot Side Cylind Sector Side Cylind Sector Start Sec. Sectors -------------------------------------------------------------------------- BIGDOS Yes 0 9 1 11 901 63 6804 675108 unused No 0 0 0 0 0 0 0 0? No 1 0 1 11 8 63 63 6741 unused No 0 0 0 0 0 0 0 0 NB: partizioni allineate con i cilindri, ma traccia 0 del cilindro 0 (con il MBR) non usata. Il DOS può gestire al più 2 partizioni; avranno rispettivamente type: 06H (BIGDOS); è la partizione primaria ( 2GB, ospita unità c:) 05H (EXTENDED); ospita unità u 1... u n (u 1 d:) implementazione: i settori di una partizione estesa sono visti come un disco a parte: il settore 0 ospita una partition table secondaria, che divide la partizione estesa in: - partizione ospitante unità u 1 ; ha type 1 (Dos12,<16M), 4 (Dos16,< 32M), 6 (BigDos) NB: usa le tracce della partizione estesa da 1 in poi (non la traccia del settore 0); - ulteriore partizione estesa per le unità u 2...u n ; cioè p. es.: disco rigido c: (primaria) d: e: part. estesa (I livello) part. estesa (II livello) Formato partizione BIGDOS: System area FAT1 e FAT2 (copia) (p.es. 165 sec. ciascuna) Root Dir (32 sec.) Cluster 2 (es. 16 s.) Data area Cluster 3 boot sector = parte codice boot + informazioni su partizione Dischi e file system- 03/16/06 11:57 PM 2/8
Boot sector Formato (logico) dell informazione nel boot sector di una partizione: esempio: partizione primaria (BIGDOS) OEM ID MSWIN4.0 Bytes per sector 512 Sectors per cluster 16 (1 byte, valore max 64 cluster 32K max) Reserved sectors at beginning 1 FAT Copies 2 Root directory entries 512 Total number of sectors Unused 2 bytes (used for Dos16 unità<64ks=32m) Media descriptor byte F8 Hex Sectors per FAT 165 Sectors per track 63 Sides 12 Special hidden sectors 6804 n. relativo (nel disco) settore boot Big total number of sectors 675108 4 bytes max n. settori = 4G (2KGB); non raggiungibili per il limite di 64K cluster Physical drive number 128 Extended Boot Record Signature 29 Hex Volume Serial Number 154E0BCF Volume Label File System ID FAT16 numero cluster a 16 bit (max 64K) esempio: unità logica (DOS-12) in partizione estesa OEM ID MSDOS5.0 Bytes per sector 512 Sectors per cluster 8 cluster=4kb (max per FAT12) Reserved sectors at beginning 1 FAT Copies 2 Root directory entries 512 Total number of sectors 21105 2B (max 32MB, irraggiungibile con FAT12) Media descriptor byte F8 Hex Sectors per FAT 8 Sectors per track 63 Sides 12 Special hidden sectors 63 n. relativo (in p. estesa) settore boot Big total number of sectors Unused 4 bytes (inutilizzato per Dos12/16) Physical drive number 128 Extended Boot Record Signature 29 Hex Volume Serial Number 0B1E0FF2 Volume Label File System ID FAT12 numero cluster a 12 bit (max 4K 16MB) Dischi e file system- 03/16/06 11:57 PM 3/8
Root Dir Dopo le FAT (ampiezza nota da boot sector), la system area è conclusa da un area che descrive il contenuto logico della root dir. L area contiene una tabella di 512 elementi (entries) di 32 byte (512 da boot sector, 32=costante di sistema area root=32 settori). Una entry non nulla descrive un file o dir contenuto nella root così: 16 bit Nome file (8 byte) Estensione (3 byte) A D V S H R Riservati (10 byte) Time Date Numero 1 cluster Dimensione file (4 byte) Attributi Read-only Hidden System Volume Directory Archive formato little-endian La word Time si interpreta come: hhhhhmmmmmmsssss; p.es.: 4e40 01001 110010 00000 9:50:00 La word Date si interpreta come: yyyyyyymmmmddddd; p.es.: 1f18 0001111 1000 11000 15 (1995-1980), 8, 24 Il numero del 1 cluster del file si riferisce alla numerazione dei cluster da 2 in su nella data area della partizione. IO.SYS e MSDOS.SYS, se presenti, sono le prime 2 entry della root. Dischi e file system- 03/16/06 11:57 PM 4/8
Sottodirectory Subdirectory: file contenente una tabella di entry come per la root; ma il file-subdir ha dimensione arbitraria numero entry > 512. Le prime due entry hanno nome. (1 cluster quello della subdir) e.. (1 cluster quello della dir padre o 0 - non esiste ma denota \). FAT (File Allocation Table) La FAT è una tabella di entry (elementi) di 16 bit: FAT[0] vale sempre fff8 (per FAT su hard disk); FAT[1] vale sempre ffff (inutilizzato); FAT[n] (n 2) indica l uso del cluster n; - 0000 cluster inutilizzato - fff7 cluster con bad sector - ffff ultimo cluster di un file - n ( precedenti) n è il cluster seguente n nel file di n Quindi le directory specificano per ogni file/dir il 1 cluster, sia n 2; eventuali altri cluster sono specificati da FAT[n], FAT[FAT[n]],... NB: i cluster non si numerano partendo da 0 perché: 1. per convenzione la FAT si fa iniziare con le 2 word fff8 ffff (anche se queste non hanno alcuna relazione cluster) 2. dato (1), si descriverebbe il cluster n in 0... con FAT[n+2]; ma è più semplice/efficiente descrivere il cluster n in 2... con FAT[n]. Dischi e file system- 03/16/06 11:57 PM 5/8
Grandezze caratteristiche e FAT Il DOS indirizza i cluster con 16 bit, nella FAT come nelle directory; quindi una partizione ha max 64K cluster -{0, 1, fff7..ffff}. Questa caratteristica, intrinseca del DOS, ne influenza molte altre. Col n. settori/cluster determina la max dimensione della data area: Settori in un cluster Max data area (settori) Max data area (byte) 1 64K 32M 2 128K 64M 4 256K 128M 8 512K 256M 16 1M 512M 32 2M 1G 64 4M 2G NB: 2GB = max dimensione prevista per partizione DOS (4.0) in fase di configurazione si fissa la dimensione della partizione; da questa e dalla tabella n. di settori per cluster necessario; p.es. partizione 330M cluster=16 settori. Calcolo FAT (NB: X = dimensione X): Partition = SystemArea + DataArea = BootSector + 2 FAT + RootDir + DataArea BootSector + 2 NFATEntries FATEntry + RootDir + Cluster (NFATEntries-2) qui solo NFATEntries è incognita (le altre sono date o già valutate); o più semplicemente (SystemArea>>DataArea, NFATEntries>>2): NFATEntries Partition / Cluster FAT = NFATEntries FATEntry = 2 NFATEntries Byte Esempio: Partition = 330MB, Cluster = 8KB NFATEntries 41K; FAT NFATEntries FATEntry = 82KB = 164 settori Infine, il max numero di file Nf si ha se ogni file è 1 cluster Nf<64K Dischi e file system- 03/16/06 11:57 PM 6/8
Implementazione del file system Il file system usa, oltre alle strutture dati già viste: Memoria programma FHT Stato handle 0 Stato handle i Memoria DOS MSFT Descr. file aperto Descr. file aperto Stato handle max File Handle Table, nel PSP di ogni programma; FHT è un array[0..19] of byte; FHT[n] dà lo stato della handle n; FHT[n]=FF handle n unused; altrimenti FHT[n] è un indice in: Master System File Table: per ogni file aperto ha una entry con: 1 cluster, posizione corrente, dimensione corrente. Open(p:TNomeFile; var h:thandle). Cerca una handle libera h in FHT e una entry libera in MSFT; se p ha la forma \d1\...\n si cerca d1 nella root dir, d2 in d1...; trovata dir entry n, copia 1 cluster e dim. in MSFT e restituisce h. Read(h;handle; var buf:array of char; n:word). Copia in buf n byte del file dalla pos. corrente (in MSFT) e la aggiorna Seek(h:THandle; n:integer). Occorre trovare il cluster in cui si trova il byte n del file: partendo dal 1 cluster (in MSFT), si segue la lista di cluster nella FAT. Delete(p:TNomeFile). Se p=\d1\...\n, nella dir entry n rende E5 (σ) il 1 char del nome; inoltre nella FAT marca 0000 (liberi) i cluster che erano di p. Quesito: come funziona undelete? Dischi e file system- 03/16/06 11:57 PM 7/8
Svantaggi del file system DOS 1.Nomi file troppo brevi (formato delle directory entry) 2.Max numero di cluster limitato da ampiezza FAT entry (64K cluster per FAT16, con entry a 16 bit) 3.Max numero file piccolo (64K), ancora a causa del limite massimo di 64K cluster. 4.Dimensione cluster eccessiva per partizioni grandi; p.es. 2GB suddivisi in 64K cluster danno cluster di 64 settori-32k; allocazione dello spazio poco efficiente. 5.Partizioni limitate a 2GB, per non aggravare (4). 6.Il concetto di FAT non è ben scalabile: le FAT con entry a 12 bit non si possono gestire come le nuove FAT con entry a 16 bit; ulteriori incrementi sono poco pratici (vedi p.es. 7). 7.La FAT è troppo grossa per stare tutta in memoria RAM; p.es. con 40K entries da 16 bit occupa 80Kbyte. Questo problema si può mitigare dividendo il disco in partizioni con piccole FAT e aumentando in CONFIG.SYS il n. di BUFFERS (memoria di scambio DOS-disco). Ancora più efficace è l uso di una disk cache software (p.es. SMARTDRV). 8.Random file access poco efficiente per la necessità di seguire la catena di link in FAT: Tempo di accesso a blocco dati B nel file F Distanza in cluster tra B e l inizio di F Dischi e file system- 03/16/06 11:57 PM 8/8