Hej alla! Vi fortsÀtter att lansera nya flöden för de kurser ni redan Àlskar, och nu Àr vi glada att meddela att vi startar en ny kurs , som börjar i slutet av april. I samband med detta kommer en ny publikation att publiceras. Den ursprungliga texten kan ni .
Virtuella filsystem fungerar som en slags magisk abstraktion som gör att Linux-filosofin kan pÄstÄ att "allt Àr en fil".

Vad Àr ett filsystem? Baserat pÄ orden frÄn en av de första bidragsgivarna och författarna till Linux , "Ett filsystem Àr ett hierarkiskt datalager som Àr organiserat enligt en viss struktur." Hur som helst passar denna definition lika bra för VFAT (Virtual File Allocation Table), Git och (). SÄ vad definierar ett begrepp som "filsystem"?
Grunderna för filsystemet
Linux-kÀrnan har vissa krav pÄ en entitet som kan betraktas som ett filsystem. Den mÄste implementera metoderna open(), read() och write() för permanenta objekt som har namn. Ur ett objektorienterat , definierar kÀrnan ett generiskt filsystem som en abstrakt grÀnssnitt, och dessa tre stora funktioner betraktas som "virtuella" och har ingen konkret definition. DÀrmed kallas standardimplementeringen av ett filsystem för ett virtuellt filsystem (VFS).

Om vi kan öppna, lÀsa och skriva till en entitet, betraktas denna entitet som en fil, som vi ser i exemplet i konsolen ovan.
Fenomenet VFS betonar bara en observation som Àr karaktÀristisk för Unix-liknande system, som sÀger att "allt Àr en fil". TÀnk pÄ hur konstigt det Àr att det lilla exemplet ovan med /dev/console visar hur konsolen egentligen fungerar. Bilden visar en interaktiv Bash-session. Att skicka en rad till konsolen (virtuell konsolenhet) visar den pÄ den virtuella skÀrmen. VFS har andra, Ànnu mer mÀrkliga egenskaper. Till exempel möjliggör den att söka i .
De system som vi kÀnner till, sÄsom ext4, NFS och /proc har tre viktiga funktioner i C-strukturer som kallas . Dessutom utökar och ÄsidosÀtter vissa filsystem VFS-funktioner pÄ ett bekant objektorienterat sÀtt. Som Robert Love pÄpekar gör VFS-abstraktionen att Linux-anvÀndare utan bekymmer kan kopiera filer till eller frÄn andra operativsystem eller abstrakta entiteter som pipes, utan att behöva oroa sig för deras interna dataformat. FrÄn anvÀndarsidan kan en process via systemanrop kopiera frÄn en fil till kernelstrukturer med metoden read() frÄn ett filsystem, och sedan anvÀnda metoden write () frÄn ett annat filsystem för att skriva ut data.
Definitioner av funktioner som tillhör grundtyperna i VFS finns i filerna i kÀrnans kÀllkod, medan undermapparna fs/ innehÄller specifika filsystem. I kÀrnan finns Àven enheter sÄsom cgroups, /dev och tmpfs, som krÀvs under uppstartsprocessen och dÀrför definieras i kÀrnans undermapp init/. Observera att cgroups, /dev och tmpfs de inte anropar 'de stora tre' funktionerna file_operations, utan lÀser och skriver direkt till minnet.
I diagrammet nedan visas hur anvÀndarrummet interagerar med olika typer av filsystem som vanligtvis monteras i Linux-system. Konstruktioner sÄsom pipes, dmesg och POSIX-klockor, som ocksÄ implementerar strukturen, visas inte, och Ätkomsten sker genom VFS-lagret. file_operationsVFS Àr ett 'skal' mellan systemanrop och implementationer av specifika

procfs. file_operations, sÄsom ext4 och Funktionerkan interagera antingen med enhetsdrivrutiner eller med minnesÄtkomstenheter. file_operations devtmpfs tmpfs, anvÀnder inte och cgroups , utan adresserar minnet direkt. file_operationsExistensen av VFS möjliggör kodÄteranvÀndning, eftersom de grundlÀggande metoderna relaterade till filsystem inte behöver implementeras pÄ nytt av varje typ av filsystem. KodÄteranvÀndning Àr en allmÀnt anvÀnd praxis bland mjukvaruingenjörer! Men om den ÄteranvÀnda koden innehÄller
allvarliga buggar Ett enkelt sÀtt att upptÀcka att VFS finns i systemet Àr att skriva
/tmp: ĐŃĐŸŃŃĐ°Ń ĐżĐŸĐŽŃĐșазĐșа
mount | grep -v sd | grep -v :/ , vilket visar alla monterade (mounted) filsystem som inte Àr residenta pÄ disken och inte Àr NFS, vilket gÀller för de flesta datorer. En av de listade monteringarna (mounts)) VFS, det kommer sÀkert att /tmp, eller hur?

Alla vet att lagring / tmp pÄ fysisk media Àr galenskap! .
Varför Àr det oönskvÀrt att lagra /tmp pÄ fysisk media? För att filer i /tmp Àr temporÀra och lagringsenheter Àr lÄngsammare Àn minnet dÀr tmpfs skapas. Dessutom Àr fysiska medier mer utsatta för slitage vid omskrivning Àn minnet. Slutligen kan filer i /tmp innehÄlla konfidentiell information, sÄ deras försvinnande vid varje omstart Àr en inneboende funktion.
TyvÀrr skapar vissa installationsskript för Linux-distributioner /tmp pÄ lagringsenheten som standard. Oroa dig inte om detta har skett med ditt system. Följ nÄgra enkla instruktioner frÄn , för att ÄtgÀrda detta, och kom ihÄg att minnet som tilldelas för tmpfs blir otillgÀngligt för andra ÀndamÄl. Med andra ord kan ett system med en enorm tmpfs och stora filer i den förbruka allt minne och krascha. Ett annat tips: nÀr du redigerar filen /etc/fstab, kom ihÄg att den ska sluta med en ny rad, annars kommer ditt system att misslyckas med att starta.
/proc Đž /sys
Förutom /tmp, VFS (virtuella filsystem) som Àr mest kÀnda för Linux-anvÀndare Àr /proc och /sys. (/dev belÀget i delat minne och har ingen file_operations). Varför just dessa tvÄ komponenter? LÄt oss förstÄ denna frÄga.
Funktioner skapar en ögonblicksbild av kÀrnans och de processer som den kontrollerar för userspace. I /proc kÀrnan ger information om vilka resurser den har tillgÄng till, till exempel avbrott, virtuell minne och schemalÀggare. Dessutom /proc/sys Àr det en plats dÀr instÀllningar, konfigurerade med kommandot sysctl, Àr tillgÀngliga för userspace. Status och statistik för individuella processer visas i kataloger /proc/.

HĂ€r /proc/meminfo â Ă€r en tom fil som Ă€ndĂ„ innehĂ„ller vĂ€rdefull information.
Beteendet /proc hos filer visar hur olika filsystem VFS kan vara. Ă
ena sidan /proc/meminfo innehĂ„ller information som kan ses med kommandot free. Ă
andra sidan Àr de tomma! Hur Àr det möjligt? Situationen pÄminner om den berömda artikeln med titeln , skriven av fysikprofessor David Mermin vid Cornell University 1985. PoÀngen Àr att kÀrnan samlar statistik över minnet nÀr en begÀran görs. /proc, och i sjÀlva verket finns det ingenting i filerna /proc nÀr ingen tittar pÄ dem. Som , "Den grundlÀggande kvantdoktrinen sÀger att mÀtning i allmÀnhet inte avslöjar nÄgot tidigare existerande vÀrde av den uppmÀtta egenskapen." (Och fundera över frÄgan om mÄnen som lÀxa!)
Den till synes tomma Funktioner har betydelse, eftersom informationen dÀr Àr dynamisk. En nÄgot annan situation Àr med sysfs. LÄt oss jÀmföra hur mÄnga filer som Àr minst en byte stora som finns i /proc och i /sys.

Procfs har en fil, nĂ€mligen den exporterade kĂ€rnkonfigurationen, som Ă€r ett undantag eftersom den bara behöver genereras en gĂ„ng per boot. Ă
andra sidan innehÄller /sys mÄnga mer omfattande filer, varav mÄnga tar upp en hel sida minne. Vanligtvis innehÄller filer sysfs precis ett nummer eller en strÀng, till skillnad frÄn informations tabeller som erhÄlls nÀr man lÀser sÄdana filer som /proc/meminfo.
Syftet sysfs Àr att tillhandahÄlla egenskaper som kan lÀsas och skrivas av det som kÀrnan kallar "kobjects" i anvÀndarrummet. Den enda mÄlsÀttningen med kobjects Àr referensrÀkning: nÀr den sista referensen till en kobject tas bort kommer systemet att ÄterstÀllla resurserna kopplade till det. Trots detta /sys utgör en stor del av den berömda i kÀrnan, som ingen nÄgonsin, under nÄgra omstÀndigheter kan Detta innebÀr inte att filerna i sysfs Àr statiska, vilket skulle stÄ i kontrast till referensrÀkningen för instabila objekt.
Den stabila binĂ€ra applikationsgrĂ€nssnittet av kĂ€rnan (kernelâs stable ABI) begrĂ€nsar vad som kan dyka upp i /sys, snarare Ă€n vad som faktiskt finns dĂ€r vid den aktuella tidpunkten. En lista över filrĂ€ttigheter i sysfs ger en förstĂ„else för hur konfigurerbara enheter, moduler, filsystem osv. kan stĂ€llas in eller lĂ€sas. Vi kan dra den logiska slutsatsen att procfs ocksĂ„ Ă€r en del av den stabila ABI:n i kĂ€rnan, Ă€ven om detta inte anges tydligt i .

Filer i sysfs beskriver en specifik egenskap för varje entitet och kan vara lÀsbara, skrivbara eller bÄde och. "0" i filen indikerar att SSD:n inte kan tas bort.
Den andra delen av översĂ€ttningen börjar med hur man observerar VFS med hjĂ€lp av eBPF-verktyg och bcc, och nu ser vi fram emot era kommentarer och inbjuder traditionellt till , som redan den 9 april kommer att hĂ„llas av vĂ„r lĂ€rare â .
KĂ€lla: habr.com
