Сайн уу! Бид таны дурласан курсуудад зориулж шинэ урсгалуудыг үргэлжлүүлэн эхлүүлж байгаа бөгөөд одоо бид шинэ багц курсуудыг эхлүүлж байгаагаа зарлахад яарч байна.
Виртуал файлын системүүд нь Линуксийн гүн ухаанд "бүх зүйл файл" гэж хэлэх боломжийг олгодог ид шидийн хийсвэрлэлийн нэг төрөл юм.
Файлын систем гэж юу вэ? Линуксийн анхны хувь нэмэр оруулагч, зохиогчдын нэгний үг дээр үндэслэсэн
Файлын системийн үндэс
Линуксийн цөм нь файлын систем гэж үзэж болох аж ахуйн нэгжид тодорхой шаардлага тавьдаг. Энэ нь аргуудыг хэрэгжүүлэх ёстой open()
, read()
и write()
нэр бүхий байнгын объектуудын хувьд. Объект хандалтат үүднээс авч үзвэл
Хэрэв бид тухайн аж ахуйн нэгжийг нээж, уншиж, бичиж чадвал тухайн объект нь файл гэж тооцогддогийг дээрх консол дээрх жишээнээс харж болно.
VFS үзэгдэл нь "бүх зүйл файл" гэсэн Unix-тэй төстэй ажиглалтыг л онцолж байна. Дээрх жижиг /dev/console жишээ нь консол хэрхэн ажилладагийг харуулж байгаа нь ямар хачирхалтай болохыг бодоорой. Зураг нь интерактив Bash сессийг харуулж байна. Консол руу (виртуал консолын төхөөрөмж) мөр илгээх нь виртуал дэлгэц дээр харагдана. VFS нь өөр, бүр хачин шинж чанартай байдаг. Жишээлбэл, энэ нь танд хайлт хийх боломжийг олгодог
Ext4, NFS, /proc зэрэг танил системүүд нь Си өгөгдлийн бүтцэд гурван чухал үүрэгтэй. read()
нэг файлын систем, дараа нь аргыг ашиглана write ()
өгөгдлийн гаралтын өөр файлын систем.
Үндсэн VFS төрлүүдэд хамаарах функцын тодорхойлолтууд нь файлд байна fs/
тодорхой файлын системийг агуулдаг. Гол нь мөн адил аж ахуйн нэгжүүдийг агуулдаг cgroups
, /dev
и tmpfs
, эдгээр нь ачаалах явцад шаардлагатай байдаг тул цөмийн дэд директорт тодорхойлогддог init/
. Үүнийг анзаараарай cgroups
, /dev
и tmpfs
"Том гурван" функцийг бүү дууд file_operations
, гэхдээ санах ой руу шууд уншиж бичих.
Доорх диаграмм нь хэрэглэгчийн орон зай нь Линукс систем дээр түгээмэл суурилуулсан өөр өөр төрлийн файлын системд хэрхэн нэвтэрч байгааг харуулж байна. Бүтэцүүдийг харуулаагүй байна 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
нь түр зуурынх бөгөөд хадгалах төхөөрөмжүүд нь tmpf-г үүсгэсэн санах ойноос удаан байдаг. Түүнээс гадна физик медиа нь санах ойгоос илүү дарж бичсэн тохиолдолд элэгдэлд өртөмтгий байдаг. Эцэст нь хэлэхэд, /tmp доторх файлууд нь нууц мэдээллийг агуулж болох тул дахин ачаалах бүрт тэдгээрийг алга болгох нь чухал онцлог юм.
Харамсалтай нь зарим Linux түгээлтийн суулгацын скриптүүд анхдагчаар хадгалах төхөөрөмж дээр /tmp-ийг үүсгэдэг. Хэрэв энэ нь таны системд тохиолдсон бол цөхрөл бүү зов. Хэд хэдэн энгийн зааврыг дагаж мөрдөөрэй tmpfs
бусад зорилгоор ашиглах боломжгүй болно. Өөрөөр хэлбэл, аварга том tmpf-тэй, том хэмжээний файлтай системийн санах ой дуусч, гацах аюултай. Өөр нэг зөвлөгөө: файлыг засварлаж байх үед /etc/fstab
, энэ нь шинэ мөрөөр төгсөх ёстой гэдгийг санаарай, эс тэгвээс таны систем ачаалахгүй.
/proc болон /sys
Түүнээс гадна /tmp
, VFS (виртуал файлын систем) нь Линукс хэрэглэгчдийн хамгийн сайн мэддэг /proc
и /sys
. (/dev
хуваалцсан санах ойд байдаг бөгөөд байхгүй file_operations
). Яагаад эдгээр хоёр бүрэлдэхүүн хэсэг вэ? Энэ асуудлыг авч үзье.
procfs
цөм болон түүний хянадаг процессуудын хормын хувилбарыг үүсгэдэг userspace
. The /proc
Цөм нь тасалдал, виртуал санах ой, төлөвлөгч гэх мэт өөрт байгаа мэдээллийг хэвлэдэг. Түүнээс гадна, /proc/sys
командын тусламжтайгаар тохируулсан параметрүүдийг байрлуулах газар юм sysctl
, д боломжтой userspace
. Хувь хүний үйл явцын статус, статистик мэдээллийг лавлах хэсэгт харуулна /proc/
.
энд /proc/meminfo
Энэ нь үнэ цэнэтэй мэдээллийг агуулсан хоосон файл юм.
Зан төлөв байдал /proc
файлууд нь VFS дискний файлын системүүд хэр өөр байж болохыг харуулдаг. Нэг талаас, /proc/meminfo
тушаалаар харж болох мэдээллийг агуулна free
. Нөгөө талаар хоосон байна! Энэ яаж ажилдаг вэ? Нөхцөл байдал алдартай нийтлэлийг санагдуулдаг /proc
, мөн үнэндээ файлуудад /proc
хэн ч харахгүй байхад юу ч байхгүй. хэлсэнчлэн
Хоосон юм шиг procfs
Тэнд байгаа мэдээлэл динамик учраас утга учиртай. Нөхцөл байдал арай өөр байна sysfs
. Хамгийн багадаа нэг байт хэмжээтэй хэдэн файл байгааг харьцуулж үзье /proc
болон дотор /sys
.
Procfs
нь нэг файлтай, тухайлбал экспортлогдсон цөмийн тохиргоотой бөгөөд энэ нь ачаалах бүрт нэг л удаа үүсгэгдэх шаардлагатай тул үл хамаарах зүйл юм. Нөгөө талаас, in /sys
олон том файлууд байдаг бөгөөд тэдгээрийн ихэнх нь санах ойн бүх хуудсыг эзэлдэг. Ихэвчлэн файлууд sysfs
зэрэг файлуудыг уншиж олж авсан мэдээллийн хүснэгтээс ялгаатай нь яг нэг тоо эсвэл мөр агуулсан /proc/meminfo
.
Зорилго sysfs
- цөмийн дууддаг зүйлийн унших/бичих шинж чанарыг өгөх «kobjects»
хэрэглэгчийн талбарт. Цорын ганц зорилго kobjects
Энэ нь холбоосыг тоолох явдал юм: кобьектын сүүлчийн холбоосыг устгах үед систем түүнтэй холбоотой нөөцийг сэргээх болно. Гэсэн хэдий ч, /sys
алдартай хүмүүсийн ихэнхийг бүрдүүлдэг
Цөмийн тогтвортой ABI нь юу гарч болохыг хязгаарладаг /sys
, яг тэр мөчид байгаа зүйл биш. Sysfs-д файлын зөвшөөрлийг жагсаах нь төхөөрөмж, модуль, файлын систем гэх мэт тохиргоог хэрхэн тохируулах талаар ойлголт өгдөг. тохируулах эсвэл унших боломжтой. Логик дүгнэлт нь procfs нь цөмийн тогтвортой ABI-ийн нэг хэсэг боловч үүнийг тодорхой заагаагүй болно.
Файлууд sysfs
аж ахуйн нэгж тус бүрийн хувьд тодорхой нэг шинж чанарыг тайлбарлах бөгөөд унших боломжтой, бичих боломжтой эсвэл хоёулаа байж болно. Файл дахь "0" нь SSD-г устгах боломжгүй гэсэн үг юм.
Орчуулгын хоёрдугаар хэсгийг eBPF болон bcc хэрэгслийг ашиглан VFS-ийг хэрхэн хянах талаар эхэлцгээе, одоо бид та бүхний сэтгэгдлийг хүлээж, уламжлал ёсоор таныг урьж байна.
Эх сурвалж: www.habr.com