Բարեւ բոլորին! Մենք շարունակում ենք գործարկել նոր հոսքեր այն դասընթացների համար, որոնց արդեն սիրահարվել եք, և այժմ մենք շտապում ենք հայտարարել, որ սկսում ենք դասընթացների նոր փաթեթ։
Վիրտուալ ֆայլային համակարգերը ծառայում են որպես մի տեսակ կախարդական աբստրակցիա, որը թույլ է տալիս Linux-ի փիլիսոփայությանը ասել, որ «ամեն ինչ ֆայլ է»։
Ի՞նչ է ֆայլային համակարգը: Հիմնվելով Linux-ի առաջին ներդրողներից և հեղինակներից մեկի խոսքերի վրա
Ֆայլային համակարգի հիմունքներ
Linux միջուկը որոշակի պահանջներ ունի այն անձի համար, որը կարելի է համարել ֆայլային համակարգ: Այն պետք է իրականացնի մեթոդները open()
, read()
и write()
համառ օբյեկտների համար, որոնք ունեն անուններ: Օբյեկտ-կողմնորոշված տեսանկյունից
Եթե մենք կարող ենք բացել, կարդալ և գրել որևէ անձի, ապա այդ կազմը համարվում է ֆայլ, ինչպես կարող ենք տեսնել վերը նշված վահանակի օրինակից:
VFS ֆենոմենը միայն ընդգծում է Unix-ի նման դիտարկումը, որ «ամեն ինչ ֆայլ է»։ Մտածեք, թե որքան տարօրինակ է, որ վերը նշված փոքրիկ /dev/console օրինակը ցույց է տալիս, թե ինչպես է իրականում աշխատում վահանակը: Նկարը ցույց է տալիս ինտերակտիվ Bash նիստը: Տող ուղարկելով վահանակ (վիրտուալ կոնսոլ սարք) այն ցուցադրում է վիրտուալ էկրանին: VFS-ն ունի այլ, նույնիսկ ավելի տարօրինակ հատկություններ: Օրինակ, այն թույլ է տալիս որոնել ըստ
Ծանոթ համակարգերը, ինչպիսիք են ext4, NFS և /proc, ունեն երեք կարևոր գործառույթ C տվյալների կառուցվածքում, որը կոչվում է. read()
մեկ ֆայլային համակարգ և այնուհետև օգտագործեք մեթոդը write ()
մեկ այլ ֆայլային համակարգ տվյալների ելքի համար:
Գործառույթների սահմանումները, որոնք պատկանում են հիմնական VFS տեսակներին, գտնվում են ֆայլերում fs/
պարունակում է որոշակի ֆայլային համակարգեր: Միջուկը պարունակում է նաև այնպիսի սուբյեկտներ, ինչպիսիք են cgroups
, /dev
и tmpfs
, որոնք պահանջվում են բեռնման գործընթացում և, հետևաբար, սահմանվում են միջուկի ենթագրքում init/
. Ուշադրություն դարձրեք, որ cgroups
, /dev
и tmpfs
մի կոչեք «մեծ երեք» գործառույթները file_operations
, բայց ուղղակիորեն կարդալ և գրել հիշողության մեջ:
Ստորև բերված գծապատկերը ցույց է տալիս, թե ինչպես է օգտվողների տարածքը մուտք գործում Linux համակարգերում սովորաբար տեղադրված տարբեր տեսակի ֆայլային համակարգեր: Կառուցվածքները ցուցադրված չեն pipes
, dmesg
и POSIX clocks
, որոնք նույնպես իրականացնում են կառույցը file_operations
, հասանելի է VFS շերտի միջոցով:
VFS-ը «փաթաթված շերտ» է համակարգի զանգերի և որոշակի գործադրումների միջև file_operations
ինչպիսիք են ext4
и procfs
. Գործառույթներ file_operations
կարող է փոխազդել կամ սարքի վարորդների կամ հիշողության հասանելիության սարքերի հետ: tmpfs
, devtmpfs
и cgroups
չեն օգտագործում file_operations
, բայց ուղղակիորեն մուտք գործեք հիշողություն:
VFS-ի առկայությունը հնարավորություն է տալիս վերօգտագործել կոդը, քանի որ ֆայլային համակարգերի հետ կապված հիմնական մեթոդները պարտադիր չէ, որ նորից իրականացվեն յուրաքանչյուր տեսակի ֆայլային համակարգի կողմից: Կոդի վերօգտագործումը սովորական պրակտիկա է ծրագրային ապահովման ինժեներների շրջանում: Այնուամենայնիվ, եթե բազմակի օգտագործման կոդը պարունակում է
/tmp: Պարզ հուշում
Համակարգում VFS-ների առկայությունը հայտնաբերելու հեշտ միջոց է մուտքագրել mount | grep -v sd | grep -v :/
, որը ցույց կտա բոլոր մոնտաժվածները (mounted
) ֆայլային համակարգեր, որոնք սկավառակի ռեզիդենտ չեն և ոչ NFS, ինչը ճիշտ է համակարգիչների մեծ մասում: Թվարկված մոնտաժներից մեկը (mounts
) VFS-ն անկասկած կանի /tmp
, ճիշտ?
Բոլորը գիտեն այդ պահեստը / tmp
ֆիզիկական միջավայրի վրա՝ խելագարություն:
Ինչու է անցանկալի պահեստավորումը /tmp
ֆիզիկական լրատվամիջոցների վրա? Քանի որ ֆայլերը գտնվում են /tmp
ժամանակավոր են, և պահեստավորման սարքերն ավելի դանդաղ են, քան հիշողությունը, որտեղ ստեղծվում է tmpfs: Ավելին, ֆիզիկական կրիչներն ավելի ենթակա են կրելու, երբ վերագրվում են, քան հիշողությունը: Վերջապես, /tmp-ի ֆայլերը կարող են պարունակել զգայուն տեղեկատվություն, ուստի յուրաքանչյուր վերագործարկման ժամանակ դրանք անհետանալը կարևոր հատկություն է:
Ցավոք, Linux-ի բաշխման տեղադրման որոշ սցենարներ լռելյայնորեն ստեղծում են /tmp պահեստավորման սարքում: Մի հուսահատվեք, եթե դա տեղի ունեցավ նաև ձեր համակարգի հետ: Հետևեք մի քանի պարզ հրահանգների հետ tmpfs
անհասանելի է դառնում այլ նպատակների համար: Այլ կերպ ասած, հսկա tmpf-ներով և մեծ ֆայլերով համակարգը կարող է սպառվել հիշողությունից և խափանվել: Մեկ այլ հուշում. ֆայլը խմբագրելիս /etc/fstab
, հիշեք, որ այն պետք է ավարտվի նոր տողով, հակառակ դեպքում ձեր համակարգը չի բեռնվի:
/proc և /sys
Բացի այդ /tmp
, VFS (վիրտուալ ֆայլային համակարգեր), որոնք առավել ծանոթ են Linux-ի օգտատերերին /proc
и /sys
, (/dev
բնակվում է ընդհանուր հիշողության մեջ և չունի file_operations
) Ինչու՞ այս երկու բաղադրիչները: Եկեք նայենք այս հարցին:
procfs
ստեղծում է միջուկի և այն գործընթացների պատկերը, որոնց համար այն վերահսկում է userspace
: Մեջ /proc
միջուկը տպում է տեղեկատվություն իր հասանելիության մասին, ինչպիսիք են ընդհատումները, վիրտուալ հիշողությունը և ժամանակացույցը: Բացի այդ, /proc/sys
այն վայրն է, որտեղ պարամետրերը կազմաձևված են հրամանով sysctl
, հասանելի է userspace
. Առանձին գործընթացների կարգավիճակը և վիճակագրությունը ցուցադրվում են գրացուցակներում /proc/
.
Այստեղ /proc/meminfo
դատարկ ֆայլ է, որը, այնուամենայնիվ, պարունակում է արժեքավոր տեղեկություններ:
Վարքագիծ /proc
ֆայլերը ցույց են տալիս, թե որքան տարբեր կարող են լինել VFS սկավառակի ֆայլային համակարգերը: Մի կողմից, /proc/meminfo
պարունակում է տեղեկատվություն, որը կարելի է դիտել հրամանով free
. Մյուս կողմից՝ դատարկ է։ Ինչպես է դա աշխատում? Իրավիճակը հիշեցնում է հայտնի հոդվածը վերնագրված /proc
, և իրականում ֆայլերում /proc
ոչինչ չկա, երբ ոչ ոք չի նայում: Ինչպես ասվեց
Թվացյալ դատարկություն procfs
իմաստ ունի, քանի որ այնտեղ տեղեկատվությունը դինամիկ է: Մի փոքր այլ իրավիճակ sysfs
. Եկեք համեմատենք, թե քանի ֆայլ կա, որոնց չափը առնվազն մեկ բայթ է /proc
իսկ /sys
.
Procfs
ունի մեկ ֆայլ, մասնավորապես արտահանված միջուկի կոնֆիգուրացիան, որը բացառություն է, քանի որ այն պետք է ստեղծվի միայն մեկ անգամ բեռնման համար: Մյուս կողմից, ներս /sys
կան շատ ավելի մեծ ֆայլեր, որոնցից շատերը զբաղեցնում են հիշողության մի ամբողջ էջ: Սովորաբար ֆայլեր sysfs
պարունակում է ճիշտ մեկ թիվ կամ տող, ի տարբերություն ֆայլերի ընթերցումից ստացված տեղեկատվության աղյուսակների, ինչպիսիք են /proc/meminfo
.
Նպատակ sysfs
- Տրամադրել կարդալու/գրելու հատկությունները, թե ինչ է կանչում միջուկը «kobjects»
օգտագործողների տարածքում: Միակ նպատակը kobjects
հղումների հաշվարկն է. երբ կոբյեկտի վերջին հղումը հեռացվի, համակարգը կվերականգնի դրա հետ կապված ռեսուրսները: Այնուամենայնիվ, /sys
կազմում է հայտնիների մեծ մասը
Միջուկի կայուն ABI-ն սահմանափակում է այն, ինչ կարող է հայտնվել /sys
, ոչ թե այն, ինչ իրականում առկա է տվյալ պահին։ sysfs-ում ֆայլերի թույլտվությունների ցուցակագրումը հնարավորություն է տալիս պատկերացում կազմել սարքերի, մոդուլների, ֆայլային համակարգերի և այլնի կարգավորելի կարգավորումների մասին: կարելի է կարգավորել կամ կարդալ: Տրամաբանական եզրակացությունն այն է, որ procfs-ը նույնպես միջուկի կայուն ABI-ի մի մասն է, թեև դա հստակորեն նշված չէ.
Ֆայլեր sysfs
նկարագրեք մեկ կոնկրետ հատկություն յուրաքանչյուր անձի համար և կարող է լինել ընթեռնելի, գրավոր կամ երկուսն էլ: «0» ֆայլում նշանակում է, որ SSD-ն հնարավոր չէ հեռացնել:
Եկեք սկսենք թարգմանության երկրորդ մասը նրանից, թե ինչպես վերահսկել VFS-ը՝ օգտագործելով eBPF և bcc գործիքները, և այժմ մենք սպասում ենք ձեր մեկնաբանություններին և ավանդաբար հրավիրում ենք ձեզ
Source: www.habr.com