Hurd překladatel

Překladač  je jakýkoli server běžící na Hurd OS , který poskytuje základní rozhraní souborového systému . Hurd OS umožňuje nainstalovat překladač do libovolného souboru nebo adresáře, ke kterému má uživatel, který překladač instaluje, přístupová práva. Objekty přeloženého systému souborů - inody jsou křížencem mezi symbolickými odkazy a body připojení, které jsou známé v operačních systémech podobných Unixu .

Přehled normálního systému souborů v OS typu Unix

Než se pokusíte zjistit, co je to překladač, musíte se seznámit s tím, co je běžný souborový systém (FS). Souborový systém je sada hierarchicky vytvořených adresářů a souborů .

Pro přístup k libovolnému souboru se používá textový řetězec, který není ničím jiným než cestou k souboru. Dále existuje technologie pro vytváření a používání symbolických odkazů , které umožňují přistupovat k jedinému souboru z adresářů umístěných na různých místech hierarchického stromu adresářů přes sebe, je také možné vytvářet pevné odkazy , které umožňují přiřadit několik jména do jednoho souboru najednou. Existují také speciální soubory zařízení pro komunikaci s ovladači zařízení umístěné v jádře a také adresáře, které slouží jako přípojné body pro oddíly pevného disku a další úložná zařízení. A nechybí ani soubory typu FIFO .

Přestože se tyto objekty od sebe liší, všechny mají společné vlastnosti, například všechny mají vlastníka a skupinu, se kterou jsou spojeny, a také příslušná oprávnění ( oprávnění ). Všechny tyto informace jsou uloženy ve speciálním souboru, označeném pojmem - inode ( inode ). Toto je společná vlastnost objektů souborového systému : Každý objekt má přiřazen jeden inode ( pevné odkazy jsou v tomto ohledu neobvyklé, protože sada pevných odkazů přidružených k souboru sdílí vůbec stejný inode). Někdy inode obsahuje další položky. Například inode může obsahovat cestu k souboru, na který ukazuje symbolický odkaz .

Tyto společné vlastnosti se však obvykle nepoužívají přímo v programech, protože pro to existují abstraktní programovací rozhraní . K libovolnému inodu lze přistupovat voláním funkcí POSIX , jako jsou funkce read() a write() . Chcete-li například přidat podporu pro nové typy objektů ve FS (například nový typ odkazů) do běžného monolitického unixového jádra, budete muset přepsat zdrojové kódy zvlášť pro každý typ použitého souborového systému.

V systému Hurd je vše jinak. Ačkoli speciální server souborového systému v systému Hurd může pracovat se speciálními vlastnostmi standardních typů objektů, jako jsou odkazy (například s „rychlými odkazy“ ( fast links ) v systému souborů ext2 ), jádro systému Hurd má generický rozhraní, které vám umožňuje přidávat do systému nové funkce, aniž byste museli upravovat zdrojové texty systému.

Trik spočívá v umístění překládacího programu mezi skutečný obsah překládacího souboru a uživatelský program a podle toho i uživatele, který k souboru přistupuje. Takový přenosový program se nazývá překladač , protože je schopen zpracovávat příchozí požadavky různými způsoby. Jinými slovy, překladač je server běžící na systému Hurd, který poskytuje základní rozhraní souborového systému.

Překladače mají zajímavé vlastnosti. Z pohledu jádra jsou to jen uživatelské procesy. To znamená, že překladače může spouštět každý uživatel. Uživatel nepotřebuje práva superuživatele k instalaci nebo úpravě překladače, vše, co je potřeba, jsou přístupová práva k inodu (souboru), který je překládán. Mnoho překladatelů nepotřebuje k překladu a práci soubory, mohou poskytnout informace, které si sami vygenerují. To je důvod, proč jsou informace překladatele uloženy v inodech.

Překladatelé se musí účastnit všech operací souborového systému, které ovlivňují přeložené inody. Vzhledem k tomu, že se neomezují na seznam běžných objektů FS ( soubory zařízení , odkazy atd.), mohou vracet data, která vývojář považuje za nezbytná jako výsledky své práce. Můžete si představit překladač, který se chová jako adresář při přístupu pomocí ls nebo cd a zároveň se chová jako soubor při přístupu pomocí cat .

Příklady

Montážní body

Přípojný bod lze považovat za jakýsi inode přeložený speciálním serverem. Jeho účelem je přeložit operace souborového systému do bodu připojení , který patří jinému souborovému systému, řekněme, jinému diskovému oddílu.

Ve skutečnosti je takto souborový systém implementován v Hurd OS. Systém souborů je překladač. Tento překladač bere jako argument nějaké úložné zařízení a je schopen zpracovávat operace souborového systému zcela transparentním způsobem.

Soubory zařízení

Existuje mnoho různých souborů zařízení a na systémech s monolitickým jádrem všechny fungují díky podpoře jádra. V systému Hurd jsou všechny soubory zařízení podporovány překladači. Stejný překladač může podporovat mnoho podobných souborů zařízení, jako jsou všechny diskové oddíly. Počet potřebných překladatelů je tedy poměrně malý. Pamatujte však, že pro přístup ke každému souboru zařízení je spuštěna samostatná úloha překladače. Ale protože Hurd je skutečně multitaskingový systém, nepřichází s ním mnoho režií.

Když je potřeba přístup k hardwaru počítače, překladač obvykle začne mluvit s jádrem, aby získal data ze zařízení. Pokud však není vyžadován přístup k hardwarovým zařízením, není třeba přistupovat k jádru systému. Například zařízení /dev/zero nevyžaduje přístup k hardwaru a může být plně implementováno v prostoru provádění uživatelského programu.

Symbolické odkazy

Symbolický odkaz lze také chápat jako překladatel. Pokus o přístup k symbolickému odkazu spustí příslušný překladač, který předá příchozí požadavky systému souborů, který obsahuje soubor, na který tento odkaz ukazuje.

V zájmu lepšího výkonu však souborové systémy, které mají nativní podporu pro symbolické odkazy, mohou tuto svou vlastnost využít k implementaci spojovacího mechanismu odlišně, interně, a tak přístup přes symbolický odkaz nespustí samostatný proces překladatele. Stále to však bude pro uživatele vypadat jako volání pasivního překladače (vysvětlení toho, co je pasivní překladač, viz níže).

Systém Hurd s sebou přináší překladač symbolických odkazů , což znamená, že jakýkoli server pro práci s různými typy souborových systémů (ext2 atd.), který má podporu pro práci přes překladače, automaticky získá možnost pracovat se symbolickými odkazy (jak pevnými odkazy, tak soubory zařízení atd.). To znamená, že můžete později rychle přistupovat k souborům a přidat podporu pro symbolické odkazy a další funkce prostřednictvím samotného serveru.

Pasivní překladatelé, aktivní překladatelé

Existují dva typy překladatelů: pasivní a aktivní. Ve skutečnosti se jedná o dva různé druhy překladačů, takže není vhodné je vzájemně zaměňovat, ale tyto dva typy programů se vzájemně ovlivňují.

Aktivní překladatelé

Aktivní překladač je běžící překladatelský proces, jak je popsáno výše. Aktivního překladače můžete nastavit nebo odebrat pomocí příkazu settrans -a . Volba -a je potřebná, aby sdělila settrans, že je třeba upravit aktivní překladač.

Příkaz settrans může mít tři typy argumentů. Nejprve můžete nastavit možnosti pro samotný příkaz settrans , jako je přepínač -a , abyste mohli upravit aktivní překladač. Poté musíte zadat inode, který se má upravit. Pamatujte, že překladač je vždy spojen s inodem umístěným ve stromu adresářů a souborů. Najednou můžete upravit pouze jeden inode. Pokud do settrans nejsou odeslány žádné další argumenty , pokusí se odstranit existující překladač. Jak pečlivě odstraní překladač, závisí na zadané možnosti vynutit odstranění (pokud je překladač používán nějakým procesem, zobrazí se chybová zpráva „zařízení nebo zdroj je zaneprázdněn“ , pokud není překladač uvolněn hrubou silou).

Pokud jsou však zadány další argumenty, budou interpretovány jako příkazový řádek pro spuštění překladače. To znamená, že dalším argumentem je název spustitelného překladače. Všechny následující argumenty jsou volbami pro samotný překladač, nikoli pro příkaz settrans.

Chcete-li například připojit oddíl ext2fs, můžete spustit settrans -a -c /mnt /hurd/ext2fs /dev/hd2s5 . Volba -c vytvoří nový přípojný bod, pokud ještě neexistuje. Mimochodem, bod připojení nemusí být adresář. Chcete-li jej odpojit zpět, musíte spustit příkaz settrans -a /mnt .

Pasivní překladače

Pasivní překladač se instaluje a upravuje se stejnou syntaxí jako aktivní překladač (ale bez přepínače -a ), to znamená, že vše výše uvedené platí pro pasivní překladače v plném rozsahu. Existují však rozdíly: pasivní překladatelé se nespustí okamžitě.

To dává smysl, protože to je přesně to, co se obvykle vyžaduje. Není potřeba připojovat diskový oddíl, pokud nejsou soubory na tomto oddílu skutečně přístupné. Není potřeba aktivovat síťové rozhraní a síť, pokud nedochází k výměně dat přes komunikační kanály a podobně.

Místo toho, když je vyvolán pasivní překladač, je automaticky přečten z inodu a spuštěn jako aktivní překladač pomocí příkazů z příkazového řádku uloženého v inodu. Je to podobné tomu, jak je navržen a funguje linuxový automounter . Nejedná se však o nějaký bonus navíc, který si musíte nainstalovat sami, ale o nedílnou součást systému. Instalace pasivního překladače tedy zdržuje spuštění a provedení překladače až do okamžiku, kdy je skutečně potřeba. Kromě toho, pokud aktivní překladač spuštěný prostřednictvím pasivního překladače z nějakého důvodu zemře, při příštím přístupu k příslušnému inodu se překladač spustí znovu.

Rozdílů je ještě více: aktivní překladatel může zemřít nebo se ztratit. Jakmile je spuštěný proces aktivního překladače zabit (například proto, že byl počítač restartován ), bude nenávratně ztracen. Pasivní překladače nejsou vyloženy a zůstávají v inodu během restartu přesně, dokud nejsou upraveny pomocí programu settrans nebo dokud není odstraněn inode, ke kterému jsou připojeny. To znamená, že není potřeba mít v systému konfigurační soubor s daty přípojného bodu.

A ještě jedna věc: Pokud již máte nainstalovaný pasivní překladač, stále můžete nainstalovat další aktivní překladač. Pouze v případě, že byl překladač spuštěn automaticky a při přístupu k inodu již nebyl spuštěn žádný aktivní překladač, je vyvolán pasivní překladač.

Správa překladatelů

Jak již bylo zmíněno dříve, můžete použít příkaz settrans k nastavení pasivních a aktivních překladačů. Existuje mnoho možností, jak změnit chování příkazu settrans v případě, že se něco pokazí, a jak definovat, co má dělat. Zde jsou příklady běžného použití tohoto příkazu:

Připojí diskový oddíl, překladač se po restartu uloží.

Připojí systém souborů do datového souboru, překladač zmizí, pokud zemře nebo po restartu počítače.

Způsobí vypnutí překladače.

Můžete také použít příkaz showtrans , abyste zjistili, zda je překladač připojen k inodu nebo ne. Tento příkaz však zobrazí pouze informace o pasivních překladačích.

Můžete také změnit volby pro režim provozu aktivního (systému souborů) překladače pomocí příkazu fsysopts , aniž byste překladač znovu načítali. Je to velmi pohodlné. Můžete například provést to, co Linux nazývá „přepojení oddílu pouze pro čtení“ pouhým zadáním příkazu fsysopts /mntpoint --readonly . Pokud je to možné, běžící aktivní překladač změní své chování podle požadavku, který obdrží. Příkaz fsysopts /mntpoint volaný bez voleb zobrazuje aktuální nastavení.

Odkazy