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.
Pergalên pelan ên virtual wekî celebek abstrakasyona efsûnî ya ku dihêle felsefeya Linux-ê bêje "her tişt pelek e."
Pergala pelan çi ye? Li ser bingeha gotinên yek ji yekem beşdar û nivîskarên Linux-ê ye
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
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
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. 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/
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.
VFS di navbera bangên pergalê û hin pêkanînan de "qatek pêça" ye file_operations
mî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
/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?
Her kes wê depoyê dizane / tmp
li ser navgînek laşî - dînbûn!
Ç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 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/
.
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 /proc
, û bi rastî di pelan de /proc
dema ku kes negere tiştek tune. Wek tê gotin
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
.
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-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.
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
Source: www.habr.com