Салом ба ҳама! Мо оғоз кардани ҷараёнҳои навро барои курсҳое, ки шумо аллакай ба онҳо ошиқ шудаед, идома медиҳем ва ҳоло мо шитоб дорем эълон кунем, ки маҷмӯи нави курсҳоро оғоз мекунем.
Системаҳои файлии виртуалӣ ҳамчун як навъ абстраксияи ҷодугарӣ хидмат мекунанд, ки ба фалсафаи 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
файли холӣ аст, ки бо вуҷуди ин дорои маълумоти арзишманд аст.
Behavior /proc
файлҳо нишон медиҳанд, ки чӣ тавр системаҳои файлии диски VFS гуногун буда метавонанд. Аз як тараф, /proc/meminfo
дорои маълумотест, ки онҳоро бо фармон дидан мумкин аст free
. Аз тарафи дигар, он холӣ аст! Он чӣ гуна кор мекунад? Вазъият маколаи машхурро ба хотир меорад /proc
, ва дар асл дар файлҳо /proc
чизе нест, вақте ки касе нигоҳ намекунад. Чунон ки гуфта шуд
Ба назар холӣ procfs
маъно дорад, зеро маълумот дар он ҷо динамикӣ аст. Вазъияти каме дигар бо sysfs
. Биёед муқоиса кунем, ки дар ҳаҷми ҳадди аққал як байт чанд файл мавҷуд аст /proc
ва дар /sys
.
Procfs
дорои як файл, яъне конфигуратсияи ядрои содиршуда, ки ин истисно аст, зеро он бояд танҳо як бор дар як боркунӣ тавлид шавад. Аз тарафи дигар, дар /sys
бисёр файлҳои калонтар вуҷуд доранд, ки бисёре аз онҳо як саҳифаи тамоми хотираро ишғол мекунанд. Одатан файлҳо sysfs
Бар хилофи ҷадвалҳои иттилооте, ки аз хондани файлҳо ба даст омадаанд, маҳз як рақам ё сатрро дар бар мегирад /proc/meminfo
.
Мақсад sysfs
- хосиятҳои хондан/навиштаи он чизеро, ки ядро даъват мекунад, таъмин кунед «kobjects»
дар фазои корбарон. Ягона мақсад kobjects
ҳисоб кардани истинод аст: вақте ки пайванди охирин ба kobject хориҷ карда мешавад, система захираҳои бо он алоқамандро барқарор мекунад. Бо вуҷуди ин, /sys
аксарияти машхурро ташкил медихад
ABI устувори ядро он чизеро, ки дар он пайдо шуда метавонад, маҳдуд мекунад /sys
, на он чизе ки воқеан дар он лаҳза мавҷуд аст. Рӯйхати иҷозатҳои файл дар sysfs фаҳмишро дар бораи он, ки чӣ гуна танзимоти конфигуратсияшаванда барои дастгоҳҳо, модулҳо, системаҳои файлӣ ва ғайра фароҳам меорад. конфигуратсия кардан ё хондан мумкин аст. Хулосаи мантиқӣ ин аст, ки procfs инчунин як қисми устувори ядрои ABI мебошад, гарчанде ки ин дар возеҳ гуфта нашудааст
Файлҳо дар sysfs
як моликияти мушаххасро барои ҳар як объект тавсиф мекунад ва метавонад хониш, навиштан ё ҳарду бошад. "0" дар файл маънои онро дорад, ки SSD нест карда намешавад.
Биёед қисми дуюми тарҷумаро бо чӣ гуна назорат кардани VFS бо истифода аз абзорҳои eBPF ва bcc оғоз кунем ва ҳоло мо шарҳҳои шуморо интизорем ва шуморо ба таври анъанавӣ даъват мекунем
Манбаъ: will.com