Filsystem API - File system API
Et filsystem API er et applikasjonsprogrammeringsgrensesnitt som et verktøy eller et brukerprogram ber om tjenester av et filsystem. Et operativsystem kan gi abstraksjoner for tilgang til forskjellige filsystemer transparent.
Noen filsystem API-er kan også inkludere grensesnitt for vedlikeholdsoperasjoner, for eksempel opprette eller initialisere et filsystem, verifisere filsystemet for integritet og defragmentering .
Hvert operativsystem inkluderer APIene som er nødvendige for filsystemene den støtter. Microsoft Windows har APIer for filsystemer for NTFS og flere FAT- filsystemer. Linux- systemer kan inkludere APIer for ext2 , ext3 , ReiserFS og Btrfs for å nevne noen.
innhold
Historie
Noen tidlig operativsystemer var i stand til å håndtere bare tape og disk filsystemer . Disse ga det mest grunnleggende av grensesnitt med:
- Skriv, les og plasser
Mer koordinering, for eksempel enhetsallokering og omlokalisering, krevde tillegg av:
- Åpne og lukke
Ettersom filsystemer ga flere tjenester, ble flere grensesnitt definert:
- Metadatahåndtering
- Vedlikehold av filsystem
Etter hvert som flere filsystemtyper økte hierarkistrukturen og støttede medier, trengte tilleggsfunksjoner noen spesialiserte funksjoner:
- Directory management
- Datastrukturstyring
- Record management
- Ikke-datoperasjoner
Flerbrukersystemer krevde API-er for:
- Deling
- Begrense tilgangen
- kryptering
API-oversikter
Skriv, les og plasser
Å skrive brukerdata til et filsystem leveres for bruk direkte av brukerprogrammet eller kjøretidsbiblioteket. Kjørtidsbiblioteket for noen programmeringsspråk kan gi typekonvertering, formatering og blokkering. Noen filsystemer gir identifikasjon av poster etter nøkkel og kan inkludere omskriving av en eksisterende post. Denne operasjonen kalles noen ganger PUTeller PUTX(hvis posten eksisterer)
Lesing av brukerdata, noen ganger kalt GET , kan omfatte en retning (fremover eller bakover) eller i tilfelle av et tastet filsystem, en spesifikk nøkkel. Som med å skrive kjøretidsbiblioteker kan komme til å gå inn for brukerprogrammet.
Posisjonering inkluderer justering av plasseringen til neste post. Dette kan omfatte å hoppe fremover eller bakover, så vel som plassering til begynnelsen eller slutten av filen.
Åpne og lukke
Den åpne API kan eksplisitt be om eller implisitt påberopes ved utstedelse av den første operasjonen ved en prosess på et objekt. Det kan føre til montering av flyttbare medier, etablering av en forbindelse til en annen vert og validering av objektets plassering og tilgjengelighet. Den oppdaterer systemstrukturer for å indikere at objektet er i bruk.
Vanlige krav for å be om tilgang til et filsystemobjekt inkluderer:
- Objektet som skal nås (fil, katalog, media og plassering)
- Den tiltenkte typen operasjoner som skal utføres etter åpningen (leser, oppdaterer, sletter)
Ytterligere informasjon kan være nødvendig, for eksempel
- et passord
- en erklæring om at andre prosesser kan få tilgang til det samme objektet mens åpningsprosessen bruker objektet (deling). Dette kan avhenge av intensjonen med den andre prosessen. I kontrast til det, en erklæring om at ingen andre prosesser kan få tilgang til objektet uavhengig av de andre prosessene (eksklusiv bruk).
Disse blir bedt om via et programmeringsspråkbibliotek som kan gi koordinering mellom moduler i prosessen i tillegg til å videresende forespørselen til filsystemet.
Det må forventes at noe kan gå galt under behandlingen av open.
- Objektet eller intensjonen kan være feil spesifisert (navnet kan inneholde et uakseptabelt tegn, eller intensjonen blir ikke anerkjent).
- Prosessen kan være forbudt å få tilgang til objektet (det er kanskje bare tilgjengelig av en gruppe eller spesifikk bruker).
- Filsystemet kan ikke være i stand til å opprette eller oppdatere strukturer som kreves for å koordinere aktiviteter blant brukerne.
- Når det gjelder et nytt (eller erstattende) objekt, kan det hende at det ikke er tilstrekkelig kapasitet på media.
Avhengig av programmeringsspråk, kan ytterligere spesifikasjoner i det åpne etablere modulene for å håndtere disse forholdene. Noen biblioteker spesifiserer en bibliotekmodul til filsystemet som tillater analyse dersom åpningsprogrammet ikke kan utføre noen meningsfylt handling som et resultat av en feil. Hvis for eksempel feilen er på forsøket på å åpne den nødvendige inndatafilen, kan den eneste handlingen være å rapportere feilen og avbryte programmet. Noen språk returnerer ganske enkelt en kode som indikerer hvilken type feil som alltid må sjekkes av programmet, som bestemmer hva som skal rapporteres og om det kan fortsette.
Lukk kan føre til at demonterbare medier demonteres eller kastes ut og oppdatering av bibliotek- og filsystemstrukturer for å indikere at objektet ikke lenger er i bruk. Den minimale spesifikasjonen for nær referanser objektet. I tillegg gir noen filsystemer en spesifisering av en disposisjon av objektet som kan indikere at objektet skal kasseres og ikke lenger være en del av filsystemet. I likhet med det åpne må det forventes at noe kan gå galt.
- Spesifikasjonen av objektet kan være feil.
- Det kan være at det ikke er tilstrekkelig kapasitet på media til å lagre data som blir bufret, eller til å sende ut en struktur som indikerer at objektet ble oppdatert.
- Det kan oppstå en enhetsfeil på mediet der objektet er lagret mens du skriver buffrede data, kompletteringsstrukturen eller oppdaterer metadata relatert til objektet (for eksempel siste tilgangstid).
- En spesifikasjon for å frigjøre objektet kan være i samsvar med andre prosesser som fortsatt bruker objektet.
Hensynet til å håndtere en svikt ligner de som er åpne.
Metadatahåndtering
Informasjon om dataene i en fil kalles metadata.
Noen av metadataene vedlikeholdes av filsystemet, for eksempel dato for siste endring (og forskjellige andre datoer avhengig av filsystemet), plassering av begynnelsen av filen, størrelsen på filen og om filsystemets sikkerhetskopieringsverktøy har lagret den gjeldende versjonen av filene. Disse elementene kan vanligvis ikke endres av et brukerprogram.
Ytterligere metadata som støttes av noen filsystemer kan inkludere eieren av filen, gruppen som filen tilhører, samt tillatelser og / eller tilgangskontroll (dvs. Hvilken tilgang og oppdateringer forskjellige brukere eller grupper kan utføre), og om filen er normalt synlig når katalogen er oppført. Disse elementene kan vanligvis endres av filsystemverktøy som kan utføres av eieren.
Noen applikasjoner lagrer flere metadata. For bilder kan metadataene omfatte kameramodell og innstillinger som brukes til å ta bildet. For lydfiler kan metadataene inkludere albumet, artisten som spilte inn innspillingen og kommentarer om innspillingen som kan være spesifikke for en bestemt kopi av filen (dvs. forskjellige kopier av samme innspilling kan ha forskjellige kommentarer som oppdatering av eieren av filen). Dokumenter kan inneholde elementer som sjekket av, godkjent av etc.
Directory management
Å gi nytt navn til en fil, flytte en fil (eller en underkatalog) fra en katalog til en annen og slette en fil er eksempler på operasjoner som filsystemet gir for styring av kataloger.
Metadataoperasjoner som tillater eller begrenser tilgang til en katalog av forskjellige brukere eller grupper av brukere er vanligvis inkludert.
Vedlikehold av filsystem
Siden et filsystem brukes kataloger, kan filer og poster legges til, slettes eller endres. Dette forårsaker vanligvis ineffektivitet i den underliggende datastrukturen. Ting som logisk sekvensielle blokker fordelt over media på en måte som forårsaker overdreven omplassering, delvis brukt til og med tomme blokker inkludert i koblede strukturer. Ufullstendige strukturer eller andre uoverensstemmelser kan være forårsaket av enhets- eller mediefeil, utilstrekkelig tid mellom deteksjon av forestående tap av strøm og faktisk strømtap, feil systemstans eller fjerning av media, og i svært sjeldne tilfeller filsystemkodingsfeil.
Spesialiserte rutiner i filsystemet er inkludert for å optimalisere eller reparere disse strukturene. De påkalles vanligvis ikke direkte av brukeren, men utløses i selve filsystemet. Interne tellere av antall nivåer av strukturer, antall innsatte objekter kan sammenlignes med terskler. Dette kan føre til at brukertilgang blir suspendert til en spesifikk struktur (vanligvis til misnøye for brukeren eller brukerne som blir utført) eller kan startes som asynkrone oppgaver med lav prioritet, eller de kan bli utsatt til en tid med lav brukeraktivitet. Noen ganger blir disse rutinene påkalt eller planlagt av systemansvarlig eller som i tilfelle av defragmentering .
Kernel-API
API-en er "kjernenivå" når kjernen ikke bare gir grensesnitt for filsystemutviklerne, men også er plassen der filsystemkoden ligger.
Det skiller seg med det gamle skjemaet ved at kjernen selv bruker sine egne fasiliteter for å snakke med filsystemdriveren og omvendt, i motsetning til at kjernen er den som håndterer filsystemoppsettet og filsystemet den som har direkte tilgang til maskinvaren.
Det er ikke den reneste ordningen, men løser vanskene med stor omskriving som har den gamle ordningen.
Med modulære kjerner tillater det å legge til filsystemer som en hvilken som helst kjernemodul, til og med tredjeparts. Med ikke-modulære kjerner krever det imidlertid at kjernen rekompileres med den nye filsystemkoden (og i lukkede kilder gjør dette tredjeparts filsystem umulig).
Unixer og Unix-lignende systemer som Linux har brukt dette modulære skjemaet.
Det er en variant av dette skjemaet som brukes i MS-DOS (DOS 4.0 og videre) og kompatible enheter for å støtte CD-ROM- og nettverksfilsystemer. I stedet for å legge til kode til kjernen, som i det gamle skjemaet, eller bruke kjernefasiliteter som i det kjernebaserte skjemaet, feller det alle anrop til en fil og identifiserer om den skal omdirigeres til kjernens tilsvarende funksjon eller om den må håndteres av den spesifikke filsystemdriveren, og filsystemdriveren "direkte" får tilgang til diskinnholdet ved å bruke BIOS- funksjoner på lavt nivå .
Driverbasert API
APIen er "driverbasert" når kjernen gir fasiliteter, men filsystemkoden ligger helt utenfor kjernen (ikke engang som en modul i en modulær kjerne).
Det er et renere skjema, ettersom filsystemkoden er helt uavhengig, den lar filsystemer opprettes for lukkede kilder og online filsystemtillegg eller fjerning fra systemet.
Eksempler på denne ordningen er Windows NT og OS / 2 respektive IFS .
Mixed kernel-driver-basert API
I dette APIet er alle filsystemer i kjernen, som i kjernebaserte API-er, men de blir automatisk fanget av et annet API, som er driverbasert, av OS.
Denne ordningen ble brukt i Windows 3.1 for å gi en FAT-filsystemdriver i 32-bits beskyttet modus, og hurtigbufret, (VFAT) som omgått DOS FAT-driveren i kjernen (MSDOS.SYS) fullstendig, og senere i Windows 9x-serien ( 95 , 98 og Me ) for VFAT, ISO9660-filsystemdriveren (sammen med Joliet), nettverksandeler og tredjeparts filsystemdrivere, samt legge til de originale DOS API-ene LFN API (som IFS-drivere ikke bare kan avskjære de allerede eksisterende DOS-fil-API-er, men legger også til nye fra den kjørbare 32-biters beskyttede modusen).
Imidlertid var ikke APIen fullstendig dokumentert, og tredjeparter befant seg i et "gjør det-selv-scenario" enda verre enn med kjernebaserte API-er.
Brukerplass-API
API-en er i brukerområdet når filsystemet ikke bruker kjernefasiliteter direkte, men får tilgang til disker ved å bruke operativsystemfunksjoner på høyt nivå og gir funksjoner i et bibliotek som en serie verktøy bruker for å få tilgang til filsystemet.
Dette er nyttig for å håndtere diskbilder.
Fordelen er at et filsystem kan gjøres bærbart mellom operativsystemer, da operasjonssystemfunksjonene på høyt nivå det bruker kan være like vanlig som ANSI C, men ulempen er at API er unik for hver applikasjon som implementerer en.
Eksempler på dette skjemaet er hfsutils og adflib .
Interoperabilitet mellom filsystem API-er
Ettersom alle filsystemer (i det minste diskens) trenger like funksjoner levert av kjernen, er det mulig å enkelt port en filsystemkode fra ett API til et annet, selv om de er av forskjellige typer.
For eksempel er ext2-driveren for OS / 2 ganske enkelt en innpakning fra Linux's VFS til OS / 2s IFS og Linuxens ext2-kjerne-baserte, og HFS-driveren for OS / 2 er en port av hfsutils til OS / 2s IFS. Det finnes også et prosjekt som bruker en Windows NT IFS-driver for å få NTFS til å fungere under Linux.
Se også
- Sammenligning av filsystemer
- Filsystem
- Filnavnutvidelse
- Arkivering av åpen tjenestegrensesnittdefinisjon (OSID)
- Installerbart filsystem (IFS)
- Liste over filsystemer
- Virtuelt filsystem
referanser
kilder
- O'Reilly - Windows NT File System Internals, A Developer's Guide - Av Rajeev Nagar - ISBN 1-56592-249-2
- Microsoft Press - Inne i Windows NT filsystem - Av Helen Custer - ISBN 1-55615-660-X
- Wiley - UNIX Filesystems: Evolution, Design and Implementation - Av Steve D. Pate - ISBN 0-471-16483-6
- Microsoft Press - Inne i Windows NT - Av Helen Custer - ISBN 1-55615-481-X