Ett virtuellt filsystem ( engelsk virtuellt filsystem - VFS) eller en virtuell filsystemswitch ( engelsk virtuell filsystemswitch ) är ett abstraktionslager över en specifik filsystemimplementering . Syftet med VFS är att ge enhetlig åtkomst för klientapplikationer till olika typer av filsystem. VFS kan användas för att komma åt lokala enheter och filer ( fat32 , ext4 , ntfs ), nätverksenheter och filer på dem ( nfs ) och icke-datalagringsenheter ( procfs [1] ). VFS deklarerar ett programmeringsgränssnitt mellan kärnan och ett visst filsystem, så att lägga till stöd för ett nytt filsystem kräver inga ändringar av operativsystemets kärna .
Ett av de första virtuella filsystemen i Unix-liknande operativsystem implementerades av Sun Microsystems i SunOS 2.0 1985 . Detta gjorde det möjligt för Unix-systemanrop att transparent åtkomst till lokal UFS och fjärr -NFS . Av denna anledning kopierade Unix-leverantörer som licensierade NFS-kod ofta Suns VFS-design. Andra filsystem kan monteras på samma sätt: det fanns en implementering av MS-DOS FAT -filsystemet utvecklat av Sun som använde SunOS VFS, även om det inte skickades som en produkt förrän SunOS 4.1. SunOS-implementeringen är kärnan i VFS-mekanismen i System V Release 4 .
John Heidemann utvecklade en staplad VFS under SunOS 4.0 för det experimentella filsystemet Ficus . Detta projekt involverade kodåteranvändning över filsystem med olika men liknande semantik (till exempel kan ett krypterat filsystem använda ett namnsystem och kod för att lagra data från ett okrypterat filsystem). I sin avhandling anpassade Heidemann detta arbete för användning i 4.4BSD. Ättlingar till denna kod ligger till grund för implementeringarna av moderna filsystem i BSD -härledda operativsystem , inklusive Mac OS X.
Som nämnts tidigare är huvudsyftet med modern VFS att organisera ett enda användargränssnitt för åtkomst till olika filsystem, vars drivrutiner är inlästa i datorns minne. För att uppnå detta mål kräver operativsystemets kärna skapandet av ett enda programmeringsgränssnitt för interna kärnanrop. Detta gränssnitt bör vara tillräckligt brett vad gäller funktionalitet, eftersom det kommer att användas för att komma åt ett mycket stort antal olika (när det gäller egenskaper och funktionalitet) filsystem. Utöver de vanliga öppna/stängnings- och läs/skrivanrop för filer krävs att VFS har ett gränssnitt för revalidering (från engelska revalidation ) data, arbete med cachar , sändning av specialförfrågningar (IOCTL - Input/Output Control ) samt som för att organisera den aktuella sessionen med en öppen fil.
För att arbeta med VFS måste filsystemdrivrutinen implementera de angivna programanropen, med hänsyn till detaljerna i arbetet med detta filsystem. Drivrutinen kan endast stödja en del av VFS API-anrop, i vilket fall OS-kärnan bör korrekt "muta" motsvarande obehandlade förfrågningar från användaren.
Faktum är att VFS-gränssnittet som tillhandahålls för filsystemdrivrutiner kan vara en definition för själva konceptet med ett filsystem. Alla drivrutiner som implementerar VFS API-funktionalitet och är korrekt inlästa i kärnan blir en filsystemdrivrutin, oavsett om den används för filåtkomst eller inte. Dessutom kanske själva filsystemets funktionalitet inte ens finns i drivrutinen, utan i användarutrymmet . Ett slående exempel på detta tillvägagångssätt är filsystemet i användarutrymmet ( Filesystem in Userspace - FUSE ).
På OS/2 och Microsoft Windows kallas den virtuella filsystemmekanismen för ett Installerbart filsystem .
På Linux är VFS-mekanismen, som all kärnkod, öppen källkod. Detta gör att filsystemutvecklare kan skriva sina drivrutiner så effektivt som möjligt. Som ett resultat har Linux stöd för montering av de allra flesta moderna filsystem.
På Unix inkluderar filsystem filsystemväxeln i System V Release 3 och i Ultrix .
E. Tanenbaum, H. Bos Moderna operativsystem. - 4:e uppl. - St. Petersburg: Peter, 2018.
Filsystem ( lista , jämförelse ) | |||||||
---|---|---|---|---|---|---|---|
Disk |
| ||||||
Distribuerat (nätverk) | |||||||
Särskild |
|
av operativsystem | Aspekter|||||
---|---|---|---|---|---|
| |||||
Typer |
| ||||
Kärna |
| ||||
Processledning _ |
| ||||
Minneshantering och adressering | |||||
Ladda och initieringsverktyg | |||||
skal | |||||
Övrig | |||||
Kategori Wikimedia Commons Wikibooks Wiktionary |