Begreper & formler
Alle nøkkelbegrepene og formlene fra Filsystemer, journaling og crash consistency, samlet på én side. Bruk denne som oppslag når du leser, øver flashcards eller tar quiz.
Begreper
Sentrale begreper fra kapittelet med korte definisjoner.
Metadataobjekt som beskriver en fil: størrelse, peker(e) til data, rettigheter og annen administrativ informasjon.
Mekanismer for å holde oversikt over hvilke blokker som er ledige.
Minnebuffer som holder nylig brukte diskblokker for å redusere I/O.
Egenskapen at filsystemet etter et krasj fortsatt er i en gyldig tilstand.
File system checker; verktøy som går gjennom metadata og prøver å reparere inkonsistenser etter krasj.
Teknikk der planlagte oppdateringer logges før de skrives til sine hjemsteder.
Filsystem som i stor grad skriver sekvensielt til en logg og rydder senere med garbage collection.
Lite heltall som peker inn i prosessens åpne-filer-tabell. Returneres av open(). Per-prosess-konsept — to prosesser kan ha samme fd-tall som peker på ulike filer.
Reserverte file descriptors 0, 1 og 2 i alle Unix-prosesser. Derfor returnerer første open() typisk 3.
Menneskelesbar identifikator for en fil, f.eks. /usr/test.txt. Mappes til en inode via katalog-data-blokker. Én fil kan ha flere paths (hardlenker), men typisk én primær.
Metadata om hele filsystemet: størrelse, antall inodes, antall datablokker, hvor inode-tabellen starter. Leses tidlig ved montering.
Bit-array der hver bit indikerer om en inode er ledig (0) eller i bruk (1). Brukes ved file create/delete for å finne/frigjøre inodes raskt.
Tilsvarende bit-array for datablokker. Allokering av en ny blokk = sett bit til 1; frigjøring = sett til 0.
Per-prosess-array i PCB (struct proc i xv6) som mapper file descriptor → struct file. Indeksen er fd, verdien er en peker til den åpne filens tilstand (offset, inode, modus).
Datastruktur som lagrer all metadata om én fil (eier, rettigheter, størrelse, timestamps, pekere til datablokker). Hver fil har én unik inode på disk. Filnavnet er IKKE i inoden — det ligger i katalogen.
Formler
Hver formel: hva den heter, hvordan den ser ut, og hva symbolene betyr.
Skriveorden i journaling
Write-ahead logging krever at loggen er trygt lagret før hovedstrukturen oppdateres.
Filsystemoperasjon som blokksekvens
Mange filsystemfeil oppstår fordi disse delene ikke skrives atomisk eller i riktig rekkefølge.
Usable space
Ikke all rå lagringsplass kan brukes til filinnhold; metadata og reserverte strukturer må også få plass.
Block-sekvens for open(/foo/test.txt)
Traverse fra rot, slå opp katalognavn for å finne neste inode. Det siste trinnet stopper ved inoden — selve test.txt-data leses først ved read().
Block-sekvens for create(/test.txt)
Mange skrivninger: én for å allokere inode, én for inoden selv, én for å oppdatere katalogen, én for å oppdatere root-inodens mtime. Derfor er filopprettelse dyrt.
fd-konvensjon
Eksamenstrick: «open() returnerer 5 — hvor mange filer var åpne før?» Svar: 5 - 3 = 2 (stdio teller ikke som «åpnet av prosessen»).
Læringsmål
Hva du skal kunne etter å ha lest kapittelet.
- 01Beskrive rollen til inode, katalog, superblock og bitmaps i et tradisjonelt filsystem
- 02Spore blokksekvensen for både open() og create() og forklare hvorfor filopprettelse er dyrt
- 03Forklare crash consistency-problemet og hvordan journaling/WAL garanterer atomisitet via skriveorden
- 04Sammenligne journaling og log-strukturerte filsystemer og deres avveininger mot fsck