Bonjou tout moun! Nou kontinye lanse nouvo kouran pou kou ou te deja renmen yo e kounye a nou prese anonse ke nap kòmanse yon nouvo seri kou.
Sistèm fichye vityèl sèvi kòm yon kalite abstraksyon majik ki pèmèt filozofi Linux di ke "tout bagay se yon dosye."
Ki sa ki se yon sistèm dosye? Baze sou pawòl youn nan premye kontribitè ak otè Linux
Prensip Fondamantal Filesystem
Kernel Linux la gen sèten kondisyon pou yon antite ki ka konsidere kòm yon sistèm dosye. Li dwe aplike metòd yo open()
, read()
и write()
pou objè ki pèsistan ki gen non. Soti nan yon pwen de vi oryante objè
Si nou ka louvri, li, ak ekri nan yon antite, Lè sa a, antite sa a konsidere kòm yon dosye, jan nou ka wè nan egzanp ki nan konsole ki anwo a.
Fenomèn nan VFS sèlman souliye obsèvasyon an tankou Unix ke "tout bagay se yon dosye". Panse ki jan etranj ke ti egzanp /dev/console pi wo a montre ki jan konsole a aktyèlman ap travay. Foto a montre yon sesyon Bash entèaktif. Voye yon fisèl nan konsole a (aparèy konsole vityèl) montre li sou yon ekran vityèl. VFS gen lòt, menm pwopriyete etranje. Pou egzanp, li pèmèt ou rechèch pa
Sistèm abitye tankou ext4, NFS, ak / proc gen twa fonksyon enpòtan nan yon estrikti done C yo rele read()
yon sèl sistèm dosye ak Lè sa a, sèvi ak metòd la write ()
yon lòt sistèm dosye pou pwodiksyon done.
Definisyon fonksyon ki fè pati kalite baz VFS yo nan dosye yo fs/
genyen sèten sistèm dosye. Nwayo a gen ladan tou antite tankou cgroups
, /dev
и tmpfs
, ki obligatwa pandan pwosesis bòt la epi se poutèt sa yo defini nan sou-anyè nwayo a init/
. Remake sa cgroups
, /dev
и tmpfs
pa rele "twa gwo" fonksyon yo file_operations
, men dirèkteman li ak ekri nan memwa.
Dyagram ki anba la a montre kouman espas itilizatè yo jwenn aksè nan diferan kalite sistèm fichye ki souvan monte sou sistèm Linux. Estrikti yo pa montre pipes
, dmesg
и POSIX clocks
, ki tou aplike estrikti a file_operations
, aksè atravè kouch VFS la.
VFS se yon "kouch wrapper" ant apèl sistèm ak aplikasyon sèten file_operations
tankou ext4
и procfs
. Fonksyon file_operations
ka kominike avèk swa chofè aparèy oswa aparèy aksè memwa. tmpfs
, devtmpfs
и cgroups
pa sèvi ak file_operations
, men dirèkteman aksè memwa a.
Egzistans VFS bay yon opòtinite pou reitilize kòd, paske metòd debaz ki asosye ak sistèm fichye pa oblije re-aplike chak kalite sistèm fichye. Réutilisation kòd se yon pratik komen pami enjenyè lojisyèl! Sepandan, si kòd ki kapab itilize ankò gen ladan l
/tmp: Senp allusion
Yon fason fasil pou detekte ke VFS yo prezan sou yon sistèm se tape mount | grep -v sd | grep -v :/
, ki pral montre tout monte (mounted
) sistèm fichye ki pa rezidan disk ak ki pa NFS, ki se vre sou pifò òdinatè. Youn nan mòn ki nan lis yo (mounts
) VFS pral san dout /tmp
, pa vre?
Tout moun konnen depo sa / tmp
sou yon mwayen fizik - foli!
Poukisa li endezirab nan magazen /tmp
sou medya fizik? Paske dosye yo nan /tmp
yo tanporè ak aparèy depo yo pi dousman pase memwa kote tmpfs kreye. Anplis, medya fizik yo pi fasil pou mete lè yo ekri pase memwa. Finalman, dosye nan / tmp ka gen enfòmasyon sansib, kidonk fè yo disparèt sou chak rdemare se yon karakteristik esansyèl.
Malerezman, kèk script enstalasyon distribisyon Linux kreye /tmp sou aparèy depo a pa default. Pa dezespwa si sa te rive sistèm ou tou. Swiv kèk enstriksyon senp ak tmpfs
vin pa disponib pou lòt rezon. Nan lòt mo, yon sistèm ki gen yon tmpfs jeyan ak gwo dosye sou li ka kouri soti nan memwa ak aksidan. Yon lòt allusion: pandan y ap modifye yon dosye /etc/fstab
, sonje ke li dwe fini ak yon newline, otreman sistèm ou a pa pral demaraj.
/proc ak /sys
Anplis /tmp
, VFS (sistèm dosye vityèl) ki pi abitye ak itilizatè Linux yo /proc
и /sys
. (/dev
abite nan memwa pataje epi li pa genyen file_operations
). Poukisa de eleman sa yo? Ann gade nan pwoblèm sa a.
procfs
kreye yon snapshot nan nwayo a ak pwosesis li kontwole pou yo userspace
. Nan /proc
nwayo a enprime enfòmasyon sou sa li disponib, tankou entèwonp, memwa vityèl, ak orè a. Anplis, /proc/sys
se plas la kote paramèt yo configuré ak lòd la sysctl
, disponib pou userspace
. Estati a ak estatistik nan pwosesis endividyèl yo parèt nan anyè /proc/
.
Isit la /proc/meminfo
se yon dosye vid ki poutan gen bonjan enfòmasyon.
Konpòtman /proc
fichye yo montre kouman diferan sistèm dosye disk VFS kapab. Sou yon bò, /proc/meminfo
gen enfòmasyon ki ka wè ak kòmandman an free
. Nan lòt men an, li nan vid! Ki jan li travay? Sitiyasyon an se okoumansman de atik la pi popilè ki gen tit /proc
, ak aktyèlman nan dosye /proc
pa gen anyen lè pesonn pa gade. Kòm te di
Sanble vid procfs
fè sans paske enfòmasyon an gen dinamik. Yon sitiyasyon yon ti kras diferan ak sysfs
. Ann konpare konbyen fichye ki gen omwen yon byte nan gwosè /proc
ak /sys
.
Procfs
gen yon sèl fichye, sètadi konfigirasyon nwayo ekspòte, ki se yon eksepsyon paske li sèlman bezwen pwodwi yon fwa pou chak bòt. Nan lòt men an, nan /sys
gen anpil dosye ki pi gwo, anpil nan yo ki pran yon paj tout nan memwa. Anjeneral dosye sysfs
genyen egzakteman yon nimewo oswa yon liy, kontrèman ak tablo enfòmasyon yo jwenn nan lekti dosye tankou /proc/meminfo
.
Objektif sysfs
- bay pwopriyete lekti/ekri nan sa nwayo a rele «kobjects»
nan espas itilizatè. Objektif la sèlman kobjects
se konte lyen: lè yo retire dènye lyen ki mennen nan yon kobject, sistèm nan pral retabli resous ki asosye ak li. Poutan, /sys
fè pi fò nan pi popilè a
ABI ki estab nwayo a limite sa ki ka parèt nan /sys
, pa sa ki aktyèlman prezan nan moman an patikilye. Lis otorizasyon pou fichye yo nan sysfs bay yon insight sou fason konfigirasyon paramèt pou aparèy, modil, sistèm fichye, elatriye. ka konfigirasyon oswa li. Konklizyon ki lojik la se ke procfs se tou yon pati nan ABI ki estab nwayo a, byenke sa a pa klèman deklare nan
Dosye nan sysfs
dekri yon pwopriyete patikilye pou chak antite epi yo ka lizib, ekri, oswa toude. "0" nan dosye a vle di ke SSD a pa ka retire.
Ann kòmanse dezyèm pati tradiksyon an ak fason pou kontwole VFS lè l sèvi avèk zouti eBPF ak bcc, epi kounye a nou ap tann kòmantè ou yo epi tradisyonèlman envite ou.
Sous: www.habr.com