Përshëndetje të gjithëve! Po vazhdojmë lançimet e kanaleve të reja për kurset që ju kanë pëlqyer, dhe tani jemi të lumtur të njoftojmë se po fillon një grup i ri për kursin , i cili do të nisë në fund të prillit. Në lidhje me këtë ngjarje, do të publikohet një njoftim i ri. Mund të .
Sistemet virtuale të skedarëve shërbejnë si një lloj abstraksioni magjike që lejon filozofinë e Linux të thotë se "gjithçka është një skedar".

Çfarë është një sistem skedarësh? Duke u mbështetur në fjalët e një nga kontributorëve të parë dhe autorëve të Linux , "Sistemi i skedarëve është një ruajtje hierarkike të dhënash, e organizuar sipas një strukture të caktuar". Çfarëdo që të ndodhi, kjo përkufizim është po aq i përshtatshëm për VFAT (Virtual File Allocation Table), Git dhe (). Çfarë e përcakton atë koncept, si "sistemi i skedarëve"?
Bazat e sistemit të skedarëve
Nuk i Linux ka kërkesa të caktuara për entitetin që mund të merret si sistem skedarësh. Ai duhet të implementojë metodat open(), read() dhe write() për objektet që kanë emra. Nga pikëpamja e programimit orientuar në objekte, , bërthama përcakton sistemin e përgjithshëm të skedarëve (generic filesystem) si një ndërfaqe abstrakte, dhe këto tre funksione të mëdha konsiderohen "virtuale" dhe nuk kanë një përkufizim konkret. Si rrjedhojë, implementimi i sistemit të skedarëve të paracaktuar quhet sistemi i skedarëve virtual (VFS).

Nëse mund të hapim, lexojmë dhe shkruajmë në një entitet, atëherë ky entitet konsiderohet si një skedar, siç shohim nga shembulli në konsolën lart.
Fenomeni VFS thekson vetëm vëzhgimin tipik për sistemet Unix-like, i cili thotë se "gjithçka është një skedar". Mendoni sa e çuditshme është që ai shembull i vogël lart me \/dev\/console tregon se si funksionon në të vërtetë konsola. Në figurë është një seancë interaktive e Bash. Dërgimi i një vargu në konsolën (virtual console device) e paraqet atë në ekranin virtual. VFS ka pronësi të tjera, edhe më të çuditshme. Për shembull, ajo mundëson kërkimin në .
Sistemet që ne njohim, si ext4, NFS dhe \/proc kanë tri funksione të rëndësishme në strukturën e të dhënave në C, e cila quhet . Përveç kësaj, disa sisteme skedarësh zgjerojnë e rinovohet funksione të VFS në një mënyrë objektivisht të zakonshme. Siç shprehet Robert Love, abstraksioni VFS lejon përdoruesit e Linux të kopjojnë skedarë në ose nga sisteme të jashtme operuese ose entitete abstrakte, si pipes, pa u shqetësuar për formatin e tyre të brendshëm të të dhënave. Nga ana e përdoruesit (userspace), me thirrjen e sistemit, procesi mund të kopjojë nga një skedar në strukturat e të dhënave të bërthamës duke përdorur metodën read() e një sistemi skedarësh dhe më pas të përdorë metodën write () të një sistemi skedarësh tjetër për daljen e të dhënave.
Përkufizimet e funksioneve, të cilat i përkasin llojeve bazike të VFS, ndodhen në skedarët të kodit burimor të bërthamës, ndërsa në nën-katalogje fs/ ndodhin sistemet skedarësh të veçanta. Në bërthamë gjithashtu ka entitete, të tilla si cgroups, /dev dhe tmpfs, të cilat janë të nevojshme gjatë procesit të ngarkesës dhe për këtë arsye janë përkufizuar në nën-katalogun e bërthamës init\/. Vini re se, cgroups, /dev dhe tmpfs nuk thërrasin "të tre" funksionet file_operations, por lexojnë dhe shkruajnë drejtpërdrejt në memorie.
Në diagramin e mëposhtëm tregohet se si userspace komunikon me lloje të ndryshme sistemesh skedarësh, të cilat zakonisht montohen në sistemet Linux. Nuk janë treguar konstruksione të tilla si pipes, dmesg dhe oraret POSIX, të cilat gjithashtu implemtojnë strukturën file_operations, aksesimi i të cilave ndodh përmes shtresës VFS.

VFS është "shtresa e mbrojtjes" midis thirrjeve të sistemit dhe realizimeve të caktuara file_operations, siç janë ext4 dhe procfs. Funksionet file_operations mund të ndërveprojnë ose me drejtuesit e pajisjeve, ose me pajisjet e aksesit në memorie. tmpfs, devtmpfs dhe cgroups nuk përdorin file_operations, ato kërkojnë që të drejtohen drejtpërdrejt në memorie.
Prania e VFS siguron mundësinë e ribashkimit të kodit, pasi metodat themelore që lidhen me sistemet e skedarëve nuk duhet të ri-implementohen nga çdo lloj sistemi skedarësh. Ribashkimi i kodit është një praktikë e zakonshme për inxhinierët softuerikë! Sidoqoftë, nëse kodi i ribashkuar përmban , të gjitha implementimet që trashëgojnë metodat e zakonshme do të vuajnë.
/tmp: Простая подсказка
Një mënyrë e thjeshtë për të zbuluar se VFS është i pranishëm në sistem është të shkruani mount | grep -v sd | grep -v :\/, që do të tregojë të gjitha sistemet e skedarëve të montuara (mounted) që nuk janë rezidente në disk dhe nuk janë NFS, e cila është e vërtetë për shumicën e kompjuterëve. Një nga montimet e listuara (mounts) VFS, pa dyshim, do të jetë /tmp, e vërtetë?

Të gjithë e dinë se ruajtja / tmp në një mbajtës fizik është çmenduri! .
Pse është e papërshtatshme të ruhet /tmp në një mbajtës fizik? Sepse skedarët në /tmp janë temporarë, ndërsa pajisjet e ruajtjes janë më të ngadalta se memoria ku krijohet tmpfs. Më tepër, mbajtësit fizikë janë më të prirur ndaj konsumit gjatë ridhektimit sesa memoria. Në fund, skedarët në /tmp mund të përmbajnë informacion të ndjeshëm, kështu që zhdukja e tyre me çdo ri-ngarkim është një funksion i rëndësishëm.
Fatkeqësisht, disa skripte instalimi të shpërndarjeve Linux krijojnë /tmp në pajisjen e ruajtjes si parazgjedhje. Mos u dëshpëroni nëse kjo ndodhi me sistemin tuaj. Zbatoni disa udhëzime të thjeshta nga , për ta rregulluar këtë, dhe kujdesuni që memoria e dedikuar për tmpfs behet e papërshtatshme për qëllime të tjera. Me fjalë të tjera, një sistem me tmpfs të madh dhe skedarë të mëdhenj atje mund të shpenzojë të gjithë memorien dhe të bjerë. Një këshillë tjetër: gjatë redaktimit të skedarit /etc/fstab, kujdesuni që ai të përfundojë me një rresht të ri, përndryshe sistemi juaj nuk do të ngarkohet.
/proc и /sys
Përveç /tmp, VFS (sistemet virtuale të skedarëve), të cilat janë më të njohura për përdoruesit e Linux – janë /proc dhe /sys. (/dev në memorien e përbashkët dhe nuk kanë file_operations). Pse pikërisht këta dy komponentë? Le të hedhim një vështrim në këtë çështje.
procfs bën një snapshot të gjendjes së menjëhershme të bërthamës dhe proceseve që ai kontrollon për userspace. Në /proc bërthama rendit informacionin mbi burimet e saj siç janë ndërprerjet, memoria virtuale dhe planifikuesi. Për më tepër, /proc/sys – është vendi ku parametrat e konfiguruar me komandën sysctl, janë të disponueshëm për userspace. Statusi dhe statistikat e proceseve të veçanta shfaqen në katalogët /proc/.

Këtu /proc/meminfo – është një skedar i zbrazët, që megjithatë përmban informacion të vlefshëm.
Përveç kësaj /proc skedarët tregojnë se sa të ndryshme mund të jenë sistemet e skedarëve VFS. Nga ana njohëse, /proc/meminfo përmbajnë informacionin që mund të shihet me komandën free. Nga ana tjetër, aty është bosh! Si është e mundur kjo? Situata përfaqëson artikullin e njohur të titulluar , e shkruar nga profesori i fizikës në Universitetin Cornell David Mermin në vitin 1985. Esenca është se bërthama mbledh statistika të memories kur ka një kërkesë për /proc, dhe në fakt skedarët /proc nuk kanë asgjë kur askush nuk shikon atje. Siç tha , «Doktrina themelore kuantike thotë se matja, përgjithësisht, nuk zbulohet një vlerë të mëparshme të pronës që matet.» (Mund ta mendoni për pyetjen e hënës si një detyrë shtëpie!)
Dukja e dukshme boshllëk procfs ka kuptim, sepse informacioni aty është dinamik. Një situatë disi ndryshe është me sysfs. Le të krahasojmë se sa skedarë me një madhësi prej së paku një byte ka në /proc dhe në /sys.

Procfs ka një skedar, konkretisht konfigurimin e eksportuar të bërthamës, e cila është një përjashtim, pasi duhet të gjenerohet vetëm një herë për ngarkim. Nga ana tjetër, në /sys ka shumë skedarë më të mëdhenj, shumë prej të cilëve marrin një faqe të plotë të memories. Zakonisht skedarët sysfs përmbajnë saktësisht një numër ose një rresht, për ndryshim nga tabelat e informacionit të marra duke lexuar skedarë të tillë si /proc/meminfo.
Qëllimi sysfs – ofron pronat e disponueshme për lexim dhe shkrim të asaj që bërthama e quan «kobjects» në userspace. Qëllimi i vetëm i kobjects është numërimi i referencave: kur hiqet referenca e fundit për kobject, sistemi do të rikuperojë burimet që lidhen me të. Megjithatë, /sys përbën pjesën më të madhe të njohur të bërthamës, e cila asnjëherë, në asnjë rast, nuk mund të Kjo nuk do të thotë se skedarët në sysfs janë statikë, që do të kundërshtonte numërimin e referencave për objektet jo-stabile.
Interface stabile binar i aplikacioneve të bërthamës (kernel’s stable ABI) kufizon atë që mund të shfaqet në /sys, dhe jo atë që është në të vërtetë prezent në momentin konkret. Lista e lejeve të skedarëve në sysfs ofron një kuptim të asaj se si parametrat e pajisjeve, moduleve, sistemeve të skedarëve etj. mund të konfigurohen ose lexohen. Arrijmë në një konkluzion logjik se procfs gjithashtu është një pjesë e stable ABI të bërthamës, megjithëse kjo nuk është shprehur qartë në .

Skedarët në sysfs përshkruajnë një pronë të veçantë për çdo entitet dhe mund të jenë të lexueshëm, të rishkruash ose edhe të dyja menjëherë. «0» në skedarin tregon që SSD nuk mund të fshihet.
Pjesën e dytë të përkthimit do ta fillojmë me atë se si të vëzhgojmë VFS me ndihmën e mjeteve eBPF dhe bcc, dhe tani presim komentet tuaja dhe tradicionalisht ju ftojmë në , e cila do të mbahet më 9 prill nga mësuesi ynë — .
Burimi: habr.com
