Hurd översättare

En översättare  är vilken server som helst som körs på Hurd OS som tillhandahåller ett grundläggande filsystemgränssnitt . Hurd OS låter dig installera översättaren på vilken fil eller katalog som helst som användaren som installerar översättaren har åtkomsträttigheter till. Översatta filsystemobjekt - inoder är en korsning mellan symboliska länkar och monteringspunkter, som är kända i Unix - liknande operativsystem .

En översikt över det normala filsystemet i ett Unix-liknande operativsystem

Innan du försöker ta reda på vad en översättare är måste du bekanta dig med vad ett vanligt filsystem (FS) är. Filsystemet är en uppsättning hierarkiskt uppbyggda kataloger och filer .

För att komma åt vilken fil som helst används en textsträng, som inte är något annat än en sökväg till filen. Vidare finns det en teknik för att skapa och använda symboliska länkar , som låter dig komma åt en enda fil från kataloger som finns på olika platser i det hierarkiska katalogträdet genom sig själva, det är också möjligt att skapa hårda länkar , som låter dig tilldela flera namn till en enda fil på en gång. Det finns också speciella enhetsfiler för att kommunicera med enhetsdrivrutiner som finns i kärnan, och det finns också kataloger som fungerar som monteringspunkter för hårddiskpartitioner och andra lagringsenheter. Och det finns också filer som tillhör typen FIFO .

Även om dessa objekt skiljer sig från varandra har de alla gemensamma egenskaper, till exempel har de alla en ägare och grupp som de är associerade med, samt lämpliga behörigheter ( behörigheter ). All denna information lagras i en speciell fil, betecknad med termen - inode ( inode ). Detta är en gemensam egenskap för filsystemobjekt : Varje objekt har en inod associerad med sig ( hårda länkar är ovanliga i detta avseende, eftersom uppsättningen hårda länkar som är associerade med en fil överhuvudtaget delar samma inod). Ibland innehåller en inod ytterligare poster. Till exempel kan en inod innehålla sökvägen till en fil som pekas på av en symbolisk länk .

Dessa gemensamma egenskaper används dock vanligtvis inte direkt i program på grund av att det finns abstrakta programmeringsgränssnitt för detta . Alla inoder kan nås genom att anropa POSIX- funktioner som read() och write() -funktionerna . Till exempel, för att lägga till stöd för nya typer av objekt i FS (till exempel en ny typ av länkar) till en vanlig monolitisk unix-kärna, måste du skriva om källkoderna separat för varje typ av filsystem som används.

I Hurd-systemet är allt annorlunda. Även om en speciell filsystemserver i Hurd-systemet kan arbeta med speciella egenskaper för standardobjekttyper, såsom länkar (med "snabblänkar" ( snabblänkar ) i ext2 -filsystemet , till exempel), har Hurd-systemkärnan en generisk gränssnitt som låter dig lägga till nya funktioner i systemet utan att behöva ändra systemets källtexter .

Tricket är att placera översättningsprogrammet mellan det faktiska innehållet i översättningsfilen och användarprogrammet och följaktligen användaren som kommer åt filen. Ett sådant vidarebefordransprogram kallas en översättare eftersom det kan behandla inkommande förfrågningar på en mängd olika sätt. Med andra ord är en översättare en server som körs på Hurd-systemet som tillhandahåller ett grundläggande filsystemgränssnitt.

Översättare har intressanta egenskaper. Ur kärnans synvinkel är de bara användarprocesser. Detta innebär att översättare kan köras av alla användare. Användaren behöver inte superanvändarprivilegier för att installera eller modifiera översättaren, allt som krävs är åtkomsträttigheter till inoden (filen) som översätts. Många översättare kräver inte filer för att översätta och arbeta, de kan tillhandahålla information som genereras av dem själva. Det är därför översättarinformation lagras i inoder.

Översättare måste delta i alla filsystemoperationer som påverkar inoderna de översätter. På grund av det faktum att de inte är begränsade till listan över vanliga FS-objekt ( enhetsfiler , länkar, etc.), kan de returnera data som utvecklaren anser vara nödvändiga som resultat av deras arbete. Du kan tänka på en översättare som beter sig som en katalog när den nås med ls eller cd , och som samtidigt beter sig som en fil när den nås med cat .

Exempel

Monteringspunkter

Monteringspunkten kan ses som en sorts inod översatt av en speciell server. Dess syfte är att översätta filsystemoperationer till en monteringspunkt som tillhör ett annat filsystem, säg till en annan diskpartition.

Det är faktiskt så här filsystemet implementeras i Hurd OS. Filsystemet är en översättare. Denna översättare tar någon lagringsenhet som ett argument och kan hantera filsystemoperationer på ett helt transparent sätt.

Enhetsfiler

Det finns många olika enhetsfiler, och på system med en monolitisk kärna fungerar de alla på grund av kärnstöd. I Hurd-systemet stöds alla enhetsfiler av översättare. Samma översättare kan stödja många liknande enhetsfiler, till exempel alla diskpartitioner. Således är antalet nödvändiga översättare ganska litet. Observera dock att en separat översättaruppgift körs för att komma åt varje enhetsfil. Men eftersom Hurd är ett verkligt multi-tasking-system, kommer det inte med mycket omkostnader.

När åtkomst till datorns hårdvara behövs börjar översättaren vanligtvis prata med kärnan för att få data från enheterna. Men om åtkomst till hårdvaruenheter inte krävs, finns det inget behov av att komma åt systemkärnan. Till exempel kräver inte enheten /dev/zero åtkomst till hårdvaran och kan implementeras fullt ut i användarprogrammets exekveringsutrymme.

Symboliska länkar

En symbolisk länk kan också ses som en översättare. Ett försök att komma åt en symbolisk länk kommer att utlösa motsvarande översättare, som skickar inkommande förfrågningar till filsystemet som innehåller filen som denna länk pekar på.

Men för bättre prestandas skull kan filsystem som har inbyggt stöd för symboliska länkar använda denna funktion för att implementera länkmekanismen på ett annat sätt internt, och därmed kommer åtkomst via en symbolisk länk inte att starta en separat översättningsprocess. Detta kommer dock fortfarande att se ut som ett anrop till en passiv översättare för användaren (se nedan för en förklaring av vad en passiv översättare är).

Hurd-systemet tar med sig en symlink translator , vilket innebär att vilken server som helst för att arbeta med olika typer av filsystem (ext2, etc.) som har stöd för att arbeta genom översättare automatiskt får möjlighet att arbeta med symlinks (både fasta länkar och enhetsfiler). etc.). Det innebär att du snabbt kan komma åt filer och lägga till stöd för symboliska länkar och andra funktioner via själva servern senare.

Passiva översättare, aktiva översättare

Det finns två typer av översättare: passiva och aktiva. Dessa är egentligen två olika typer av översättare, så det är inte tillrådligt att blanda ihop dem med varandra, men de två typerna av program samverkar.

Aktiva översättare

En aktiv översättare är en pågående översättningsprocess, enligt beskrivningen ovan. Du kan ställa in eller ta bort den aktiva översättaren med kommandot settrans -a . Alternativet -a behövs för att tala om för settrans att den aktiva översättaren behöver modifieras.

Kommandot settrans kan ta tre typer av argument. Först kan du ställa in alternativ för själva settrans- kommandot , såsom -a- omkopplaren för att modifiera den aktiva översättaren. Sedan måste du ange vilken inod som ska modifieras. Kom ihåg att en översättare alltid är associerad med en inod som finns i ett träd med kataloger och filer. Du kan bara ändra en inod åt gången. Om inga fler argument skickas till settrans kommer den att försöka ta bort den befintliga översättaren. Hur noggrant det tar bort översättaren beror på det angivna alternativet för tvångsradering (om översättaren används av någon process kommer det att visas ett "enhet eller resurs upptagen" felmeddelande , om inte översättaren laddas ur med brute force).

Men om ytterligare argument anges kommer de att tolkas som en kommandorad för att starta översättaren. Detta betyder att nästa argument är namnet på den körbara översättaren. Alla efterföljande argument är alternativ för översättaren själv, inte för kommandot settrans.

Till exempel, för att montera en ext2fs-partition, kan du köra settrans -a -c /mnt /hurd/ext2fs /dev/hd2s5 . Alternativet -c kommer att skapa en ny monteringspunkt om den inte redan finns. Förresten, monteringspunkten behöver inte vara en katalog. För att avmontera tillbaka den måste du köra kommandot settrans -a /mnt .

Passiva översättare

Den passiva översättaren installeras och modifieras med samma syntax som den aktiva översättaren (men utan -a- omkopplaren ), det vill säga allt som sägs ovan gäller passiva översättare fullt ut. Det finns dock skillnader: passiva översättare börjar inte omedelbart.

Detta är vettigt eftersom det är precis vad som vanligtvis krävs. Det finns inget behov av att montera en diskpartition, såvida inte filer på den partitionen faktiskt nås. Det finns inget behov av att aktivera nätverksgränssnittet och nätverket, såvida det inte sker datautbyte över kommunikationskanaler och så vidare.

Istället, när en passiv översättare anropas, läses den automatiskt från inoden och körs som en aktiv översättare, med hjälp av kommandon från kommandoraden som är lagrad i inoden. Detta liknar hur Linux automounter är designad och fungerar . Detta är dock inte någon extra bonus som du måste installera själv, utan en integrerad del av systemet. Så att installera en passiv översättare fördröjer lanseringen och utförandet av översättaren till det ögonblick då den verkligen behövs. Dessutom, om en aktiv översättare som lanserats genom en passiv översättare dör av någon anledning, nästa gång motsvarande inod används, kommer översättaren att startas igen.

Det finns ännu fler skillnader: en aktiv översättare kan dö eller gå vilse. När den pågående processen för en aktiv översättare har dödats (till exempel för att datorn startades om ) kommer den att gå förlorad oåterkalleligt. Passiva översättare laddas inte ur och förblir i inoden under omstart exakt tills de modifieras med hjälp av settrans- programmet eller tills inoden som de är anslutna till tas bort. Detta innebär att det inte finns något behov av att ha en konfigurationsfil med monteringspunktsdata på systemet.

Och en sak till: Om du redan har en passiv översättare installerad kan du fortfarande installera en annan aktiv översättare. Endast om översättaren startades automatiskt och det inte fanns någon aktiv översättningsprocess som redan kördes när inoden öppnades, först då anropas den passiva översättaren.

Översättarhantering

Som diskuterats tidigare kan du använda kommandot settrans för att ställa in passiva och aktiva översättare. Det finns många alternativ för att ändra beteendet för settrans-kommandot om något går fel, och för att definiera vad det ska göra. Här är exempel på vanlig användning av detta kommando:

Monterar en diskpartition, översättaren kommer att sparas efter omstart.

Monterar filsystemet inuti datafilen, översättaren försvinner om den dör eller efter omstart av datorn.

Får översättaren att stängas av.

Du kan också använda kommandot showtrans för att se om en översättare är kopplad till en inod eller inte. Detta kommando visar dock endast information om passiva översättare.

Du kan också ändra alternativen för den aktiva (filsystemet) översättarens funktionssätt med kommandot fsysopts utan att ladda om översättaren. Det är väldigt bekvämt. Till exempel kan du göra vad Linux kallar "remontera en partition skrivskyddad" genom att helt enkelt utfärda kommandot fsysopts /mntpoint --readonly . Om den kan, kommer den aktiva översättaren att ändra sitt beteende enligt förfrågan den tar emot. Kommandot fsysopts /mntpoint , anropat utan alternativ, visar de aktuella inställningarna.

Länkar