Hurd traducător

Un traducător  este orice server care rulează pe sistemul de operare Hurd care oferă o interfață de bază a sistemului de fișiere . Sistemul de operare Hurd vă permite să instalați traducătorul pe orice fișier sau director la care utilizatorul care instalează traducătorul are drepturi de acces. Obiectele de sistem de fișiere traduse - inoduri sunt o încrucișare între legăturile simbolice și punctele de montare, care sunt cunoscute în sistemele de operare asemănătoare Unix .

O prezentare generală a sistemului de fișiere normal într-un sistem de operare asemănător Unix

Înainte de a încerca să vă dați seama ce este un traducător, trebuie să vă familiarizați cu ce este un sistem de fișiere obișnuit (FS). Sistemul de fișiere este un set de directoare și fișiere construite ierarhic .

Pentru a accesa orice fișier, se folosește un șir de text, care nu este altceva decât o cale către fișier. În plus, există o tehnologie pentru crearea și utilizarea legăturilor simbolice , care vă permit să accesați un singur fișier din directoare situate în locuri diferite în arborele de directoare ierarhice prin ele însele, este, de asemenea, posibil să creați legături hard , care vă permit să atribuiți mai multe nume într-un singur fișier simultan. Există, de asemenea, fișiere speciale de dispozitiv pentru comunicarea cu driverele de dispozitiv aflate în nucleu și există și directoare care servesc ca puncte de montare pentru partițiile hard disk și alte dispozitive de stocare. Și există și fișiere care aparțin tipului FIFO .

Deși aceste obiecte diferă unele de altele, toate au proprietăți comune, de exemplu, toate au un proprietar și un grup cu care sunt asociate, precum și permisiuni adecvate ( permisiuni ). Toate aceste informații sunt stocate într-un fișier special, notat cu termenul - inode ( inode ). Aceasta este o proprietate comună a obiectelor sistemului de fișiere : Fiecare obiect are un inod asociat ( link-urile hard sunt neobișnuite în acest sens, deoarece setul de legături hard asociate cu un fișier partajează același inod). Uneori, un inod conține intrări suplimentare. De exemplu, un inod poate conține calea către un fișier indicat de o legătură simbolică .

Cu toate acestea, aceste proprietăți comune nu sunt de obicei utilizate direct în programe, datorită faptului că există interfețe de programare abstracte pentru aceasta . Orice inod poate fi accesat apelând funcții POSIX , cum ar fi funcțiile read() și write() . De exemplu, pentru a adăuga suport pentru noi tipuri de obiecte în FS (de exemplu, un nou tip de legături) la un nucleu unix monolitic obișnuit , va trebui să rescrieți codurile sursă separat pentru fiecare tip de sistem de fișiere utilizat.

În sistemul Hurd, totul este diferit. Deși un server special de sistem de fișiere din sistemul Hurd poate funcționa cu proprietăți speciale ale tipurilor standard de obiecte, cum ar fi legături (cu „legături rapide” ( link-uri rapide ) în sistemul de fișiere ext2 , de exemplu), nucleul sistemului Hurd are un nucleu generic. interfață care vă permite să adăugați noi caracteristici în sistem fără a recurge la modificarea textelor sursă ale sistemului.

Trucul este să plasați programul de traducere între conținutul real al fișierului de traducere și programul utilizatorului și, în consecință, utilizatorul care accesează fișierul. Un astfel de program de retransmitere se numește translator deoarece este capabil să proceseze cererile primite într-o varietate de moduri. Cu alte cuvinte, un traducător este un server care rulează pe sistemul Hurd care oferă o interfață de bază a sistemului de fișiere.

Traducătorii au proprietăți interesante. Din punctul de vedere al nucleului, acestea sunt doar procese utilizator. Aceasta înseamnă că traducătorii pot fi gestionați de orice utilizator. Utilizatorul nu are nevoie de privilegii de superutilizator pentru a instala sau modifica traducătorul, tot ceea ce este necesar sunt drepturi de acces la inodul (fișierul) care este tradus. Mulți traducători nu necesită fișiere pentru a traduce și a lucra, ei pot oferi informații generate de ei înșiși. Acesta este motivul pentru care informațiile traducătorului sunt stocate în inoduri.

Traducătorii trebuie să participe la toate operațiunile sistemului de fișiere care afectează inodurile pe care le traduc. Datorită faptului că nu se limitează la lista de obiecte FS obișnuite ( fișiere dispozitiv , link-uri etc.), ei pot returna date pe care dezvoltatorul le consideră necesare ca rezultate ale muncii lor. Vă puteți gândi la un traducător care se comportă ca un director atunci când este accesat cu ls sau cd și, în același timp, se comportă ca un fișier când este accesat cu cat .

Exemple

Puncte de montare

Punctul de montare poate fi considerat ca un fel de inod tradus de un server special. Scopul său este de a traduce operațiunile sistemului de fișiere într- un punct de montare care aparține unui alt sistem de fișiere, de exemplu, unei alte partiții de disc.

De fapt, așa este implementat sistemul de fișiere în sistemul de operare Hurd. Sistemul de fișiere este un traducător. Acest traducător ia ca argument un dispozitiv de stocare și este capabil să gestioneze operațiunile sistemului de fișiere într-un mod complet transparent.

Fișierele dispozitivului

Există multe fișiere de dispozitiv diferite, iar pe sistemele cu un nucleu monolitic, toate funcționează datorită suportului pentru kernel. În sistemul Hurd, toate fișierele dispozitivului sunt acceptate de traducători. Același traducător poate accepta multe fișiere similare de dispozitiv, cum ar fi toate partițiile de disc. Astfel, numărul de traducători necesari este destul de mic. Rețineți, totuși, că se rulează o sarcină de traducător separată pentru a accesa fiecare fișier al dispozitivului. Dar pentru că Hurd este un sistem cu adevărat multi-tasking, nu vine cu o mulțime de cheltuieli.

Când este nevoie de acces la hardware-ul computerului, traducătorul începe de obicei să vorbească cu nucleul pentru a obține date de pe dispozitive. Cu toate acestea, dacă accesul la dispozitivele hardware nu este necesar, nu este nevoie să accesați nucleul de sistem. De exemplu, dispozitivul /dev/zero nu necesită acces la hardware și poate fi implementat complet în spațiul de execuție al programului utilizatorului.

Legături simbolice

O legătură simbolică poate fi considerată și ca un traducător. O încercare de a accesa o legătură simbolică va declanșa traducătorul corespunzător, care va transmite cererile primite către sistemul de fișiere care conține fișierul către care trimite această legătură.

Cu toate acestea, de dragul unei performanțe mai bune, sistemele de fișiere care au suport nativ pentru legăturile simbolice pot folosi această caracteristică a lor pentru a implementa mecanismul de legare în mod diferit, intern și, prin urmare, accesul prin intermediul unei legături simbolice nu va începe un proces de traducător separat. Cu toate acestea, acesta va arăta în continuare ca un apel către un traducător pasiv către utilizator (vezi mai jos pentru o explicație a ceea ce este un traducător pasiv).

Sistemul Hurd aduce cu el un traducător de linkuri simbolice , ceea ce înseamnă că orice server pentru lucrul cu diferite tipuri de sisteme de fișiere (ext2, etc.) care are suport pentru lucrul prin traducători obține automat capacitatea de a lucra cu linkuri simbolice (atât link- uri ferme , cât și fișiere de dispozitiv). etc.). Aceasta înseamnă că puteți accesa rapid fișierele și puteți adăuga mai târziu suport pentru link-uri simbolice și alte funcții prin intermediul serverului însuși.

Traducători pasivi, traducători activi

Există două tipuri de traducători: pasivi și activi. Acestea sunt într-adevăr două tipuri diferite de traducători, așa că nu este indicat să le confundați între ele, dar cele două tipuri de programe interacționează.

Traducători activi

Un traducător activ este un proces de traducător care rulează, așa cum este descris mai sus. Puteți seta sau elimina traducătorul activ folosind comanda settrans -a . Opțiunea -a este necesară pentru a spune settrans că traducătorul activ trebuie modificat.

Comanda settrans poate lua trei tipuri de argumente. În primul rând, puteți seta opțiuni pentru comanda settrans în sine , cum ar fi comutatorul -a , pentru a modifica traducătorul activ. Apoi trebuie să specificați inodul care trebuie modificat. Amintiți-vă că un traducător este întotdeauna asociat cu un inod situat într-un arbore de directoare și fișiere. Puteți modifica doar un inod la un moment dat. Dacă nu mai sunt trimise argumente către settrans , acesta va încerca să elimine traducătorul existent. Cât de atent elimină translatorul depinde de opțiunea de ștergere forțată specificată (dacă traducătorul este utilizat de un proces, va apărea un mesaj de eroare „dispozitiv sau resursă ocupată” , cu excepția cazului în care traducătorul este descărcat prin forță brută).

Dar dacă sunt specificate argumente suplimentare, acestea vor fi interpretate ca o linie de comandă pentru a porni traducătorul. Aceasta înseamnă că următorul argument este numele traducătorului executabil. Toate argumentele ulterioare sunt opțiuni pentru traducător în sine, nu pentru comanda settrans.

De exemplu, pentru a monta o partiție ext2fs, puteți rula settrans -a -c /mnt /hurd/ext2fs /dev/hd2s5 . Opțiunea -c va crea un nou punct de montare dacă nu există deja. Apropo, punctul de montare nu trebuie să fie un director. Pentru a-l demonta înapoi, trebuie să rulați comanda settrans -a /mnt .

Traducători pasivi

Traducătorul pasiv este instalat și modificat cu aceeași sintaxă ca și traducătorul activ (dar fără comutatorul -a ), adică tot ceea ce s-a spus mai sus se aplică în totalitate traducătorilor pasivi. Cu toate acestea, există diferențe: traducătorii pasivi nu încep imediat.

Acest lucru are sens, deoarece este exact ceea ce este necesar de obicei. Nu este nevoie să montați o partiție de disc, cu excepția cazului în care fișierele de pe acea partiție sunt de fapt accesate. Nu este nevoie să activați interfața de rețea și rețeaua, cu excepția cazului în care există schimb de date prin canale de comunicație și așa mai departe.

În schimb, atunci când este invocat un traducător pasiv, acesta este citit automat din inod și rulat ca un traducător activ, folosind comenzi din linia de comandă stocată în inod. Acest lucru este similar cu modul în care este proiectat și funcționează sistemul de montare automată Linux . Cu toate acestea, acesta nu este un bonus suplimentar pe care trebuie să îl instalați singur, ci o parte integrantă a sistemului. Deci instalarea unui traducător pasiv întârzie lansarea și execuția traducătorului până în momentul în care este cu adevărat nevoie de el. În plus, dacă un traducător activ lansat printr-un traducător pasiv moare dintr-un motiv oarecare, data viitoare când este accesat inodul corespunzător, traducătorul va fi lansat din nou.

Există și mai multe diferențe: un traducător activ poate muri sau se poate pierde. Odată ce procesul de rulare al unui traducător activ este oprit (de exemplu, deoarece computerul a fost repornit ), acesta va fi pierdut iremediabil. Traducătorii pasivi nu sunt descărcați și rămân în inode în timpul repornirii exact până când sunt modificați folosind programul settrans sau până când inodul la care sunt atașați este îndepărtat. Aceasta înseamnă că nu este nevoie să aveți un fișier de configurare cu date despre punctul de montare pe sistem.

Și încă ceva: dacă aveți deja instalat un traducător pasiv, puteți instala în continuare un alt traducător activ. Numai dacă traducătorul a fost pornit automat și nu exista un proces de traducător activ care rulează deja când a fost accesat inodul, doar atunci este invocat traducătorul pasiv.

Managementul traducătorilor

După cum am discutat mai devreme, puteți utiliza comanda settrans pentru a seta traducători pasivi și activi. Există multe opțiuni pentru a schimba comportamentul comenzii settrans în cazul în care ceva nu merge bine și pentru a defini ce ar trebui să facă. Iată exemple de utilizare obișnuită a acestei comenzi:

Montează o partiție de disc, traducătorul va fi salvat după repornire.

Montează sistemul de fișiere în interiorul fișierului de date, traducătorul va dispărea dacă moare sau după repornirea computerului.

Determină oprirea traducătorului.

De asemenea, puteți utiliza comanda showtrans pentru a vedea dacă un traducător este atașat la un inod sau nu. Cu toate acestea, această comandă va afișa doar informații despre traducătorii pasivi.

De asemenea, puteți modifica opțiunile pentru modul de operare al translatorului activ (sistem de fișiere) folosind comanda fsysopts fără a reîncărca translatorul. Este foarte confortabil. De exemplu, puteți face ceea ce Linux numește „remontarea unei partiții numai în citire” prin simpla lansare a comenzii fsysopts /mntpoint --readonly . Dacă poate, traducătorul activ care rulează își va schimba comportamentul în funcție de solicitarea pe care o primește. Comanda fsysopts /mntpoint , apelată fără opțiuni, arată setările curente.

Link -uri