HPFS (förkortning från engelska High performance file system ) är ett filsystem utvecklat av Microsoft och IBM -specialister baserat på IBMs erfarenhet av att skapa MVS , VM- filsystem och en virtuell åtkomstmetod. För Microsoft leddes projektet av erfarne Gordon Letwin
HPFS-stöd dök först upp i OS /2 version 1.2. Sedan dess har inbyggt stöd för HPFS funnits i alla versioner av OS/2 . Windows NT hade stöd för HPFS upp till och med version 3.51 (även om det finns framgångshistorier för att använda den gamla HPFS-drivrutinen i Windows NT 4.0 och Windows 2000). Därefter övergav Microsoft HPFS till förmån för sitt eget NTFS -filsystem , vars utveckling tog hänsyn till erfarenheten av att skapa HPFS.
På OS/2 finns det en serverversion av HPFS-drivrutinen som heter HPFS386 som har några ytterligare funktioner.
En disk i HPFS är uppdelad i sektorer med en fast storlek (512 byte i den aktuella implementeringen, medan sektornumret eller antalet sektorer kodas internt som ett 4-byte osignerat heltal, vilket tillåter adressering av diskar upp till 2 32 * 512 = 2 terabyte i storlek ).
Det finns flera kontrollblock i början av skivan:
För att avgöra om en sektor är ledig eller upptagen använder HPFS bitmappar , där varje bit motsvarar en sektor. Om biten innehåller 1 betyder det att sektorn är upptagen, annars är den ledig. Om det bara fanns en bitmapp på hela disken, för att byta ut den, skulle du behöva flytta läs-/skrivhuvudena i genomsnitt genom halva disken. För att undvika detta delar HPFS upp skivan i "band" (eller grupper , från engelska band ) 8 megabyte långa och lagrar bitmappar av fria sektorer i början eller slutet av varje remsa. I det här fallet är bitmapparna för intilliggande band placerade sida vid sida:
±----------- 16 MB -----------+ *** - Använd/fri sektor bitmapp. | | ±-|-------------±-----------±--|--±-----±-- ---- ----+ |*** Band 0 | Fil 1 ***|*** Fil 2 | Band 3 ***| ±---------------±--------------±----------------±- - ------------+ 0MB 8MB 16MB 24MB 32MBAvståndet mellan två bitmappar är 16 MB. Randstorleken (8 MB) kan komma att ändras i framtida versioner av HPFS, eftersom det inte finns några direkta länkar till den. HPFS bestämmer randstorleken vid läsning av kontrollblock från disk under en FSHelperAttach-operation.
Bitmappsstorleken är 2K (8MB/512/8 = 2K).
Remsan i mitten av skivan används för att lagra kataloger. Detta band kallas för Directory Band. Men om den blir full kommer HPFS att börja placera filkataloger i andra körfält.
Filer och kataloger i HPFS är baserade på ett grundläggande objekt som kallas FNode . Varje FNod upptar en sektor och ligger i HPFS alltid nära sin fil eller katalog (vanligtvis omedelbart före filen eller katalogen). FNoden innehåller längden och de första 15 tecknen i filnamnet, statistik om filåtkomst, intern information, utökade attribut och ACL:er (eller bara en del om de är mycket stora), associativ information om filens plats och underordning, etc. .
Längden på namnen på filer och kataloger med full substitution (från roten) bör inte överstiga 260 tecken, medan varje komponent i sökvägen inte bör vara längre än 255 tecken. Följande tecken är inte tillåtna i filnamn:
0h-1Fh , 7Fh , /, |, \, *, ?, ", <, >Efterföljande mellanslagssekvenser ignoreras, om en punkt är i slutet av filen, ignoreras den också (för programkompatibilitet). Inuti filnamnet är punkten samma tecken som resten. Det finns inga problem med ryska bokstäver. När en fil skapas kommer HPFS ihåg stavningen av dess namn, även om den inte särskiljer skiftläge i andra operationer än de som returnerar information om filen.
Namn exempel:
Ur ett platsperspektiv behandlas filer, kataloger och deras utökade attribut (om de inte passar i en FNod) av HPFS som utsträckningsuppsättningar . Omfattningen är den del av filen som ligger i på varandra följande sektorer. Varje utsträckning beskrivs av två siffror: numret på den första sektorn och längden (i sektorer). Två på varandra följande omfattningar slås alltid samman till en av HPFS. Minsta storlek är en sektor. Eftersom avståndet mellan angränsande bitmappar av fria sektorer är 16 MB, är storleken på den maximala omfattningen 16 MB. Om filen består av åtta omfattningar eller mindre, lagras hela dess beskrivning i FNoden.
Om filen består av mer än åtta omfattningar, kan dess beskrivning uppta flera sektorer som ligger närmare filen, medan dessa sektorer inte innehåller en lista, utan ett sammanfogat balanserat B + träd av omfattningar. Trädet är konstruerat på ett sådant sätt att dess obalans aldrig överstiger 1/3 i volym, och det skiljer sig inte från den optimala med mer än en nivå. Trädets rot är i FNode och kan innehålla upp till 12 element. Varje ytterligare sektor, som är en trädgren, innehåller upp till 60 element, och ett löv innehåller 40 element. Således, om en fil består av en sektoromfattning (det kommer aldrig att hända!) och har en storlek på 2 GB, kommer den att kräva ett träd med följande struktur för att beskriva den: 12*60*60*60*40=53 MB av löv och 1,7 MB grenar. För slumpmässig åtkomst till någon del av filen kommer detta att kräva (i värsta fall) 5 läsningar av kontrollstrukturer.
Verkliga filer består av 1-3 omfattningar.
Den maximala filstorleken i HPFS är nu 2 GB, men detta bestäms bara av storleken på filstorleksfältet och filpekaren (4 byte) i själva OS / 2 och dess API . Detta är inte HPFS-gränsen. Man bör komma ihåg att HPFS inte har konceptet med ett kluster, en fil kan uppta 1, 2, 3, 4 eller något annat antal sektorer.
När du skapar/expanderar filer försöker HPFS att minimera antalet omfattningar med hjälp av statistik, fria sektorbitmappar och annan information. Till exempel försöker HPFS att villkorligt reservera minst 4 kilobyte utrymme i slutet av filer som växer. Ett annat knep är att placera kompetitivt växande filer eller filer som öppnas av olika kedjor eller processer i olika diskremsor.
Kataloger i HPFS, som i FAT , bildar en trädstruktur. Men samtidigt, inne i katalogen, bygger HPFS ett balanserat B *-träd baserat på filnamn för att snabbt söka efter en fil efter namn i katalogen. Till exempel, om en katalog innehåller 4096 filer, kommer FAT att läsa i genomsnitt 64 sektorer för att hitta en fil i katalogen, medan HPFS kommer att läsa 2-4 sektorer och hitta filen.
Blockstorleken för vilka kataloger som tilldelas är 2 KB i den aktuella versionen av HPFS. Storleken på en post som beskriver en fil beror på storleken på filnamnet. Om namnet är 13 byte (8.3), så rymmer ett 2-kilobyte block 41 fildeskriptorer. Block är listsydda (liksom omfattningsbeskrivningar) för att underlätta sekventiell genomgång.
HPFS har inte FATs problem med att "läcka" diskutrymme när man tar bort ett stort antal filer i en katalog.
Att byta namn på en fil kan resultera i ombalansering av trädet. Denna operation kan kräva allokering av ytterligare block på en full disk. I det här fallet tas blocken från en speciell pool, vars pekare ligger i SpareBlocket.
Utökade attribut och deras variant ACL HPFS lagras i FNode. Om de inte passar in i FNoden, lagrar HPFS dem nästan som en fil genom att bygga ett B±Tree för det. Utökade attributnamn före HPFS386 var inte uppradade i ett B-träd.
HPFS386 är en drivrutin för HPFS -filsystemet , som är designat för serversystem med stor belastning på diskoperationer. HPFS386-drivrutinen levereras med LAN-server för OS/2 .
De viktigaste skillnaderna mellan HPFS386 och standard HPFS-drivrutinen i OS/2 :
API:er | OS/2 -komponenter och|
---|---|
Main | |
Management Services | |
Spel |
|
OS kärna | |
Filsystem | |
Grafiskt delsystem |
|
Objektmodell | SOM
|
Kompatibilitet |
|
Filsystem ( lista , jämförelse ) | |||||||
---|---|---|---|---|---|---|---|
Disk |
| ||||||
Distribuerat (nätverk) | |||||||
Särskild |
|