210 likes | 401 Views
Kapitel 11: Implementation av filsystem. 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?
E N D
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] =