Kapitel 11: Implementation av filsystem
E N D
Presentation Transcript
Bakgrund • Filsystemet tillhandahåller mekanismer för lagring och access till program och data • Består av en samling filer och en katalogstruktur • Ligger på sekundärminne, oftast en disk • Två designproblem: • Hur ska filsystemet se ut för användaren? • Hur ska vi mappa det logiska filsystemet till den fysiska disken? • Ett filsystem består oftast av många olika lager
Logical file system: hanterar metadata (katalogstruktur, filstruktur mm) File-organization module: översätter logiska blockadresser till fysiska, hanterar ledigt utrymme Basic file system: generiska kommandon (t ex läs drive 1, cylinder 73, track 2, sector 10) I/O control: drivrutiner, avbrottshanterare Layered File System
Olika filsystem • Många olika filsystem används idag • Diskbaserade filsystem: • UNIX – UFS • Windows – FAT, FAT32, NTFS • Linux – ext2, ext3 + minst 40 andra • Filsystem för DVD, CD-ROM • Distribuerade filsystem
Implementation av filsystem Många strukturer används för att implementera filsystem På disk: • Boot control block innehåller information om hur OS bootas från den volymen • Volume control block innehåller detaljer om volymen (blockstorlek, antal block mm) • Katalogstruktur – organiserar filerna • File Control Block (FCB) innehåller många detaljer om en fil I minnet: • System-wide open-file table – innehåller en kopia av FCB:n för varje öppen fil • Per-process open-file table – innehåller pekare till system-wide open-file table
Skapa och öppna en fil • Skapa en ny fil: • Logiska filsystemet allokerar en ny FCB • Katalogen läses in i minnet och uppdateras • Öppna en fil: • Open() skickar ett filnamn till det logiska filsystemet • Först söks system-wide open-file table igenom • Om filen hittas – skapa en pekare i per-process open-file table • Om filen ej hittas – sök igenom katalogstrukturen efter rätt FCB och lägg i system-wide open-file table först • Open() returnerar en pekare till filens rad i per-process open-file table • Alla filoperationer görs sen genom denna pekare
Virtuella filystem • Hur kan flera filsystem integreras i en katalogstruktur? • Virtuella filsystem (VFS) använder OO-tekniker för att implementera filsystem • VFS använder samma systemanropsgränssnitt (API) till alla filsystem • API:et är till VFS-gränssnittet, som separerar operationerna från deras implementation.
Implementation av kataloger • Linjär lista med filnamn med pekare till datablocken • Enkel att programmera • Tidskrävande att exekvera • Hashtabell – linjär lista med en hash-datastruktur. • Minskar söktiden • Kollisioner– situationer där två filer hashar till samma ställe • Fast storlek
Allokeringsmetoder • Hur ska plats på disken allokeras till filerna? • Sammanhängande (contiguous) allokering • Länkad allokering • Indexerad allokering
Sammanhängande allokering (forts) • Varje fil ligger samlad på ett ställe • Enkel, kort söktid • Lider av extern fragmentering • Hur mycket plats ska vi allokera?
Länkad Allokering Varje fil är en länkad lista med diskblock: blocken kan vara utspridda varsomhelst på disken Katalogen har en pekare till första och sista diskblocken Varje block har en pekare till nästa block Fördelar: Ingen extern fragmentering Inget problem att filer växer Nackdelar: Bara sekventiell access Pekarna tar plats Sårbart om en pekare förstörs
Indexerad Allokering • Alla pekare läggs i ett index block • Varje fil har sitt eget indexblock (en array) Fördelar: • Ingen extern fragmentering • Random access • Filer kan växa Nackdel: • Overhead från indexblocken
Hantering av ledigt utrymme • Bitvektor (n block) 0 1 2 n-1 … 0 block[i] ledigt 1 block[i] upptaget bit[i] =