Բարեւ բոլորին! Մենք շարունակում ենք գործարկել նոր հոսքեր այն դասընթացների համար, որոնց արդեն սիրահարվել եք, և այժմ մենք շտապում ենք հայտարարել, որ սկսում ենք դասընթացների նոր փաթեթ։ որը կմեկնարկի ապրիլի վերջին։ Այս իրադարձության համար կնշվի նոր հրապարակում: Բնօրինակ նյութով կարող եք .
Վիրտուալ ֆայլային համակարգերը գործում են որպես մի տեսակ կախարդական աբստրակցիա, որը թույլ է տալիս փիլիսոփայություն Linux ասել, որ «ամեն ինչ ֆայլ է»։

Ի՞նչ է ֆայլային համակարգը։ Ըստ առաջին մասնակիցներից և հեղինակներից մեկի Linux , «Ֆայլային համակարգը տվյալների հիերարխիկ պահեստավորում է, որը հավաքվում է ըստ կոնկրետ կառուցվածքի։ Ինչ էլ որ լինի, այս սահմանումը հավասարապես համապատասխանում է VFAT-ին (Վիրտուալ ֆայլերի բաշխման աղյուսակ), Git-ին և () Այսպիսով, ինչն է կոնկրետ սահմանում այնպիսի բան, ինչպիսին է «ֆայլային համակարգ»:
Ֆայլային համակարգի հիմունքներ
Kernel Linux ունի որոշակի պահանջներ, որպեսզի էությունը համարվի ֆայլային համակարգ։ Այն պետք է իրականացնի մեթոդներ open(), read() и write() համառ օբյեկտների համար, որոնք ունեն անուններ: Օբյեկտ-կողմնորոշված տեսանկյունից , միջուկը սահմանում է ընդհանուր ֆայլային համակարգը որպես վերացական ինտերֆեյս, և այս երեք մեծ գործառույթները համարվում են «վիրտուալ» և չունեն կոնկրետ սահմանում։ Համապատասխանաբար, լռելյայն ֆայլային համակարգի ներդրումը կոչվում է վիրտուալ ֆայլային համակարգ (VFS):

Եթե մենք կարող ենք բացել, կարդալ և գրել որևէ անձի, ապա այդ կազմը համարվում է ֆայլ, ինչպես կարող ենք տեսնել վերը նշված վահանակի օրինակից:
VFS ֆենոմենը միայն ընդգծում է Unix-ի նման դիտարկումը, որ «ամեն ինչ ֆայլ է»։ Մտածեք, թե որքան տարօրինակ է, որ վերը նշված փոքրիկ /dev/console օրինակը ցույց է տալիս, թե ինչպես է իրականում աշխատում վահանակը: Նկարը ցույց է տալիս ինտերակտիվ Bash նիստը: Տող ուղարկելով վահանակ (վիրտուալ կոնսոլ սարք) այն ցուցադրում է վիրտուալ էկրանին: VFS-ն ունի այլ, նույնիսկ ավելի տարօրինակ հատկություններ: Օրինակ, այն թույլ է տալիս որոնել ըստ .
Ծանոթ համակարգերը, ինչպիսիք են ext4, NFS և /proc, ունեն երեք կարևոր գործառույթ C տվյալների կառուցվածքում, որը կոչվում է. Բացի այդ, որոշակի ֆայլային համակարգեր ընդլայնում և վերաիրականացնում են VFS ֆունկցիոնալությունը ծանոթ օբյեկտ-կողմնորոշված եղանակով: Ինչպես նշում է Ռոբերտ Լավը, VFS աբստրակցիան թույլ է տալիս օգտատերերին Linux Անզգուշորեն պատճենեք ֆայլերը դեպի և դեպի երրորդ կողմի օպերացիոն համակարգեր կամ աբստրակտ էնտիմենտներ, ինչպիսիք են խողովակները, առանց անհանգստանալու դրանց ներքին տվյալների ձևաչափի մասին: Օգտատիրոջ կողմից (օգտատիրոջ տարածք) գործընթացը կարող է ֆայլից պատճենել միջուկի տվյալների կառուցվածքներ՝ օգտագործելով համակարգային կանչ: 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. Մյուս կողմից՝ դատարկ է։ Ինչպես է դա աշխատում? Իրավիճակը հիշեցնում է հայտնի հոդվածը վերնագրված գրել է Կոռնելի համալսարանի ֆիզիկայի պրոֆեսոր Դեյվիդ Մերմինը 1985 թվականին: Փաստն այն է, որ միջուկը հավաքում է հիշողության վիճակագրություն, երբ հարցում է արվում /proc, և իրականում ֆայլերում /proc ոչինչ չկա, երբ ոչ ոք չի նայում: Ինչպես ասվեց , «Հիմնական քվանտային դոկտրինան ասում է, որ չափումը սովորաբար չի բացահայտում չափվող գույքի նախապես գոյություն ունեցող արժեքը»։ (Եվ լուսնի մասին հարցը համարեք տնային աշխատանք):
Թվացյալ դատարկություն procfs իմաստ ունի, քանի որ այնտեղ տեղեկատվությունը դինամիկ է: Մի փոքր այլ իրավիճակ sysfs. Եկեք համեմատենք, թե քանի ֆայլ կա, որոնց չափը առնվազն մեկ բայթ է /proc իսկ /sys.

Procfs ունի մեկ ֆայլ, մասնավորապես արտահանված միջուկի կոնֆիգուրացիան, որը բացառություն է, քանի որ այն պետք է ստեղծվի միայն մեկ անգամ բեռնման համար: Մյուս կողմից, ներս /sys կան շատ ավելի մեծ ֆայլեր, որոնցից շատերը զբաղեցնում են հիշողության մի ամբողջ էջ: Սովորաբար ֆայլեր sysfs պարունակում է ճիշտ մեկ թիվ կամ տող, ի տարբերություն ֆայլերի ընթերցումից ստացված տեղեկատվության աղյուսակների, ինչպիսիք են /proc/meminfo.
Նպատակ sysfs - Տրամադրել կարդալու/գրելու հատկությունները, թե ինչ է կանչում միջուկը «kobjects» օգտագործողների տարածքում: Միակ նպատակը kobjects հղումների հաշվարկն է. երբ կոբյեկտի վերջին հղումը հեռացվի, համակարգը կվերականգնի դրա հետ կապված ռեսուրսները: Այնուամենայնիվ, /sys կազմում է հայտնիների մեծ մասը առանցքը, որը ոչ ոք երբեք, ոչ մի դեպքում չի կարող . Սա չի նշանակում, որ sysfs-ի ֆայլերը ստատիկ են, ինչը անհամապատասխան կլինի անկայուն օբյեկտների հղման հաշվարկին:
Միջուկի կայուն ABI-ն սահմանափակում է այն, ինչ կարող է հայտնվել /sys, ոչ թե այն, ինչ իրականում առկա է տվյալ պահին։ sysfs-ում ֆայլերի թույլտվությունների ցուցակագրումը հնարավորություն է տալիս պատկերացում կազմել սարքերի, մոդուլների, ֆայլային համակարգերի և այլնի կարգավորելի կարգավորումների մասին: կարելի է կարգավորել կամ կարդալ: Տրամաբանական եզրակացությունն այն է, որ procfs-ը նույնպես միջուկի կայուն ABI-ի մի մասն է, թեև դա հստակորեն նշված չէ. .

Ֆայլեր sysfs նկարագրեք մեկ կոնկրետ հատկություն յուրաքանչյուր անձի համար և կարող է լինել ընթեռնելի, գրավոր կամ երկուսն էլ: «0» ֆայլում նշանակում է, որ SSD-ն հնարավոր չէ հեռացնել:
Եկեք սկսենք թարգմանության երկրորդ մասը նրանից, թե ինչպես վերահսկել VFS-ը՝ օգտագործելով eBPF և bcc գործիքները, և այժմ մենք սպասում ենք ձեր մեկնաբանություններին և ավանդաբար հրավիրում ենք ձեզ , որը կանցկացվի մեր ուսուցչի կողմից ապրիլի 9-ին - .
Source: www.habr.com
