Pergalên pelan ên virtual li Linux: çima ew hewce ne û ew çawa dixebitin? Beş 1

Silav hemû! Em ji bo qursên ku we berê evîndar bûne berdewam dikin û naha em lez dikin ku ragihînin ku em dest bi qursek nû dikin. "Rêveberê Linux"ku dê di dawiya Nîsanê de dest pê bike. Ji bo vê bûyerê weşanek nû dê were tarîx kirin. Bi materyalê orîjînal, hûn dikarin li vir bixwînin.

Pergalên pelan ên virtual wekî celebek abstrakasyona efsûnî ya ku dihêle felsefeya Linux-ê bêje "her tişt pelek e."

Pergalên pelan ên virtual li Linux: çima ew hewce ne û ew çawa dixebitin? Beş 1

Pergala pelan çi ye? Li ser bingeha gotinên yek ji yekem beşdar û nivîskarên Linux-ê ye Roberta Lava, "Pergala pelan hilanîna hiyerarşîk a daneyan e ku li gorî avahiyek taybetî hatî berhev kirin." Wekî ku dibe, ev pênase ji bo VFAT (Tabloya Veqetandina Pelê Virtual), Git û Cassandra (Databasa NoSQL). Ji ber vê yekê bi rastî tiştek wekî "pergala pelê" çi diyar dike?

Bingehên Pergala Pelan

Kernel Linux ji bo saziyek ku dikare wekî pergala pelan were hesibandin hin hewcedariyên xwe hene. Divê rêbazan pêk bîne open(), read() и write() ji bo tiştên domdar ku navên wan hene. Ji nêrînek obje-oriented bernamekirin, kernel pergala pelan a gelemperî wekî navgînek razber destnîşan dike, û ev sê fonksiyonên mezin "virtual" têne hesibandin û pênaseyek berbiçav tune. Li gorî vê yekê, pêkanîna pergala pelê ya xwerû wekî pergala pelê virtual (VFS) tê gotin.

Pergalên pelan ên virtual li Linux: çima ew hewce ne û ew çawa dixebitin? Beş 1

Heke em dikarin ji saziyekê re vekin, bixwînin û binivîsin, wê hingê ew sazî wekî pelek tê hesibandin, wekî ku em dikarin ji mînaka li konsolê ya jorîn bibînin.
Diyardeya VFS tenê çavdêriya mîna Unix-ê destnîşan dike ku "her tişt pelek e". Bifikirin ka çiqas ecêb e ku ew mînaka piçûk / dev/konsolê li jor destnîşan dike ka konsol bi rastî çawa dixebite. Wêne danişînek Bash a înteraktîf nîşan dide. Şandina rêzek ji bo konsolê (cîhaza konsolê ya virtual) wê li ser ekranek virtual nîşan dide. VFS xwedan taybetmendiyên din, hê jî xerîb e. Mînakî, ew dihêle hûn li gorî lêgerînê bikin ji wî re.

Pergalên naskirî yên wekî ext4, NFS, û /proc di avahiyek daneya C de sê fonksiyonên girîng hene ku jê re tê gotin. file_operations. Digel vê yekê, hin pergalên pelan fonksiyona VFS-ê bi şêwazek objekt-oriented naskirî dirêj dikin û ji nû ve pênase dikin. Wekî ku Robert Love destnîşan dike, abstrakasyona VFS dihêle ku bikarhênerên Linux-ê bi rengek bêkêmasî pelan ji pergalên xebitandinê yên partiya sêyemîn an ji saziyên razber ên mîna boriyan kopî bikin bêyî ku ji forma daneya xweya hundurîn xeman bibin. Li aliyê bikarhêner (bikarhêner, cîhê bikarhêner), bi karanîna bangek pergalê, pêvajoyek dikare bi karanîna rêbazê ji pelek li strukturên daneya kernel kopî bike. read() yek pergala pelê û paşê rêbazê bikar bînin write () pergala pelê ya din ji bo derketina daneyê.

Danasînên fonksiyonê yên ku girêdayî celebên bingehîn VFS ne di pelan de ne fs/*.c Koda çavkaniya kernelê, dema ku binerxetê fs/ hin pergalên pelan hene. Di bingehê de jî hebûnên wekî cgroups, /dev и tmpfs, yên ku di dema pêvajoya bootê de hewce ne û ji ber vê yekê di binbirêveka kernelê de têne diyar kirin init/. Bala xwe bidinê cgroups, /dev и tmpfs nebêjin fonksiyonên "sê mezin". file_operations, lê rasterast ji bo bîranînê bixwînin û binivîsin.
Diagrama jêrîn nîşan dide ka çawa cîhê bikarhêner digihîje cûrbecûr pergalên pelan ên ku bi gelemperî li ser pergalên Linux-ê têne çêkirin. Strukturên nayên nîşandan pipes, dmesg и POSIX clocks, ku di heman demê de avahiyê pêk tîne file_operations, bi riya qatê VFS ve tê gihîştin.

Pergalên pelan ên virtual li Linux: çima ew hewce ne û ew çawa dixebitin? Beş 1

VFS di navbera bangên pergalê û hin pêkanînan de "qatek pêça" ye file_operationsmîna ext4 и procfs. Functions file_operations dikare bi ajokarên cîhazê an jî amûrên gihîştina bîranînê re têkilî daynin. tmpfs, devtmpfs и cgroups bikar neynin file_operations, lê rasterast bigihîjin bîranînê.
Hebûna VFS fersendek peyda dike ku ji nû ve kodê bikar bîne, ji ber ku rêbazên bingehîn ên ku bi pergalên pelan ve girêdayî ne hewce ne ku ji hêla her celeb pergala pelan ve ji nû ve werin bicîh kirin. Ji nû ve karanîna kodê di nav endezyarên nermalavê de pratîkek hevpar e! Lêbelê, heke koda ku ji nû ve tê bikar anîn heye xeletiyên giran, hemî pêkanînên ku mîrasên rêbazên hevpar ji wan re diêşînin.

/tmp: Nîşanek hêsan

Rêbazek hêsan ku hûn tespît bikin ku VFS li ser pergalek heye ev e ku meriv binivîsîne mount | grep -v sd | grep -v :/, ku dê hemî siwarkirî nîşan bide (mounted) pergalên pelan ên ku ne niştecîhê dîskê û ne-NFS ne, ku li ser piraniya komputeran rast e. Yek ji wan çiyayan (mounts) VFS bê guman dê /tmp, rast?

Pergalên pelan ên virtual li Linux: çima ew hewce ne û ew çawa dixebitin? Beş 1

Her kes wê depoyê dizane / tmp li ser navgînek laşî - dînbûn! Çavkaniya.

Çima hilanînê nexwestî ye /tmp li ser medyaya fîzîkî? Ji ber ku pelên di /tmp demkî ne û amûrên hilanînê ji bîranîna ku tmpfs tê afirandin hêdîtir in. Digel vê yekê, medyaya laşî dema ku ji bîranînê were nivîsandin pirtir lixwe dibe. Di dawiyê de, pelên li / tmp dikarin agahdariya hesas hebin, ji ber vê yekê windakirina wan di her rebootkirinê de taybetmendiyek bingehîn e.

Mixabin, hin skrîptên sazkirina belavkirina Linux-ê ji hêla xwerû ve /tmp li ser cîhaza hilanînê diafirînin. Ger ev yek hat serê pergala we jî bêhêvî nebin. Bi çend rêwerzên hêsan re bişopînin Arch Wikiji bo rastkirina vê, û haydar bin ku bîra ji bo veqetandin tmpfs ji bo armancên din ne berdest dibe. Bi gotinek din, pergalek bi tmpf-yên mezin û pelên mezin li ser wê dikare ji bîrê derkeve û têk bibe. Nîşanek din: dema ku pelek biguherîne /etc/fstab, ji bîr mekin ku divê ew bi xêzek nû biqede, wekî din pergala we dê boot neke.

/proc û /sys

Ji bilî /tmp, VFS (pergalên pelan ên virtual) ku herî zêde ji bikarhênerên Linux re nas in /proc и /sys. (/dev di bîra hevpar de dimîne û tune file_operations). Çima ev her du pêkhate? Werin em li vê mijarê binêrin.

procfs wêneyek kernel û pêvajoyên ku ew ji bo çavdêriyê dike diafirîne userspace. ew /proc kernel agahdariya li ser tiştên ku berdest in çap dike, wek navber, bîra virtual, û plansazker. Bêyî, /proc/sys cihê ku parametre bi fermanê hatine mîheng kirin e sysctl, heye ji bo userspace. Rewş û statîstîkên pêvajoyên kesane di katalogan de têne xuyang kirin /proc/.

Pergalên pelan ên virtual li Linux: çima ew hewce ne û ew çawa dixebitin? Beş 1

Ev e /proc/meminfo pelek vala ye ku dîsa jî agahdariya hêja dihewîne.

Behind /proc pelan destnîşan dike ka pergalên pelên dîskê yên VFS çiqas cûda dibe. Li aliyekî, /proc/meminfo agahdariya ku bi fermanê dikare were dîtin hene free. Li aliyê din jî vala ye! Çawa dixebite? Rewşa gotara navdar a bi sernavê tîne bîra mirov Dema ku kes lê nenêre heyv heye? Rastî û Teoriya Quantum"Ji hêla profesorê fîzîkê ya Zanîngeha Cornell David Mermin ve di 1985 de hatî nivîsandin. Rastî ev e ku kernel statîstîkên bîranînê berhev dike dema ku daxwazek tê kirin /proc, û bi rastî di pelan de /proc dema ku kes negere tiştek tune. Wek tê gotin Mermin, "Doktrîna quantumê ya bingehîn dibêje ku pîvandin bi gelemperî nirxek berê ya milkê ku tê pîvandin eşkere nake." (Û pirsa li ser heyvê wek karê malê bihesibînin!)
Valahî xuya dike procfs watedar e ji ber ku agahdariya li wir dînamîk e. Rewşek hinekî cuda bi sysfs. Werin em bidin ber hev çend pelên ku bi kêmanî yek byte mezinahî ne /proc û di /sys.

Pergalên pelan ên virtual li Linux: çima ew hewce ne û ew çawa dixebitin? Beş 1

Procfs yek pel heye, ango veavakirina kernelê ya derhanîn, ku îstîsnayek e ji ber ku ew tenê hewce ye ku her bootê carekê were çêkirin. Li aliyê din, li /sys gelek pelên mezintir hene, ku gelek ji wan rûpelek tevahî bîranînê digirin. Bi gelemperî pelan sysfs Berevajî tabloyên agahdariya ku ji xwendina pelan têne wergirtin, tam yek hejmar an rêzek dihewîne /proc/meminfo.

Armanc sysfs - Taybetmendiyên xwendin/nivîsandinê yên ku kernel gazî dike peyda bikin «kobjects» di qada bikarhêner de. Armanca yekane kobjects jimartina girêdanê ye: gava ku zencîreya paşîn a kobject were rakirin, pergal dê çavkaniyên ku pê re têkildar in vegerîne. Lê dîsa jî, /sys piraniya navdar pêk tîne "ABI aram ji bo cîhê bikarhêner" core, ku tu kes nikare di bin her şert û mercî de "rawesta". Ev nayê vê wateyê ku pelên di sysfs de statîk in, ku dê bi hejmartina referansê ya tiştên nestêbar re negunca be.
ABI-ya domdar a kernel tiştê ku dikare tê de xuya bibe sînor dike /sys, ne tiştê ku bi rastî di wê kêliya taybetî de heye. Navnîşa destûrên pelan di sysfs de têgihiştinê dide ka mîhengên mîhengkirî yên ji bo cîhaz, modul, pergalên pelan, hwd. dikare were mîheng kirin an xwendin. Encama mantiqî ev e ku procfs di heman demê de beşek ji ABI-ya stabîl a kernelê ye, her çend ev yek bi eşkere di nav de nehatiye gotin. belgekirin.

Pergalên pelan ên virtual li Linux: çima ew hewce ne û ew çawa dixebitin? Beş 1

Pelên nav sysfs ji bo her saziyek taybetmendiyek taybetî diyar bike û dikare were xwendin, nivîsandin, an her du jî. Di pelê de "0" tê vê wateyê ku SSD nayê rakirin.

Werin em dest bi beşa duyemîn a wergerê bi çawaniya şopandina VFS-ê bi karanîna amûrên eBPF û bcc bikin, û naha em li benda şîroveyên we ne û bi kevneşopî we vedixwînin webinar vekin, ku dê di 9ê Nîsanê de ji hêla mamosteyê me ve were lidarxistin - Vladimir Drozdetsky.

Source: www.habr.com

Add a comment