Разработка сайта для Вашего бизнеса. Веб дизайн. Дизайн логотипа, фирменного стиля, рекламная фотография . Комплексный рекламный креатив.

Ralex. We do the work.
На рынке с 1999го года. Средняя ценовая категория. Ориентация на эффективность решений.
Ознакомтесь с нашим портфолио
Узнайте больше о услугах
Свяжитесь с нами:
E-mail: [email protected]
Tel: (044) 587 - 84 - 78
Custom web design & дизайн и разработка сайта "под ключ"
Креативный, эффективный дизайн. Система управления сайтом (СУС).
Custom flexible разработка систем электронной коммерции
Система e-commerce разрабатывается под индивидуальные потребности. Гибкая функциональность.
Search Engine Optimzation & оптимизация под поисковые системы (SEO)
Постоянная оптимизация и мониторинг сайта в поисковых системах. Достигаем результата быстро и эффективно
Custom logo design & дизайн логотипа и фирменного стиля
Многолетний опыт. Огромное портфолио. Уникальное предложение и цена.
профессиональная рекламная фотография
креативно, смело, качественно
Custom logo design & рекламный креатив. дизайн рекламы
Многолетний опыт. Огромное портфолио. Уникальное предложение и цена.

Анатомія віртуального комутатора файлових систем Linux

  1. VFs або VFS?
  2. Малюнок 1. Рівень абстракції надає єдиний інтерфейс поверх різних файлових систем і пристроїв зберігання
  3. Малюнок 2. Структура шарів VFS
  4. Внутрішня організація VFS
  5. суперблок
  6. Малюнок 3. Спрощений вид структури super_block і пов'язаних з нею елементів
  7. Індексний вузол (inode)
  8. Малюнок 4. Спрощене уявлення inod'а VFS
  9. Запис каталогу (dentry)
  10. Малюнок 5. Спрощене уявлення dentry-об'єкта
  11. об'єкт file
  12. Малюнок 6. Спрощене уявлення об'єкта file
  13. Малюнок 7. Зв'язки основних об'єктів в VFS
  14. Малюнок 8. Узагальнений вид шару VFS
  15. додаткові відомості
  16. Ресурси для скачування

Наша взаимовыгодная связь https://banwar.org/

Абстракції і загальні концепції

Гнучкість і розширюваність підтримки файлових систем в Linux є прямим наслідком наявності абстрагованого набору інтерфейсів. В основі цього набору інтерфейсів лежить віртуальний комутатор файлових систем (virtual file system switch, VFS).

VFS надає набір стандартних інтерфейсів, які дають додатків верхнього рівня можливість виконувати файлові операції введення-виведення через різні файлові системи. При цьому одночасно підтримуються різні файлові системи на одному або декількох нижче лежачих пристроях. Крім того, ці файлові системи не обов'язково повинні бути статичними, вони можуть з'являтися і зникати відповідно до змін в пристроях зберігання.

VFs або VFS?

VFS розшифровується або як віртуальна файлова система (virtual file system), або як віртуальний комутатор файлових систем (virtual file system switch). Друге визначення точніше, оскільки цей рівень фактично комутує (перемикає) запити між кількома файловими системами. Додаткову плутанину вносить файлова система / proc, яку також часто називають віртуальної файлової системою.

Наприклад, типовий настільний комп'ютер з Linux підтримує файлову систему ext3 на наявному жорсткому диску, а також файлову систему ISO 9660 на наявному CD-ROM (інша назва - CD-ROM file system, CDFS). Оскільки компакт-диски то вставляються, то витягуються, ядро ​​Linux має підлаштовуватися під ці нові файлові системи з різним вмістом і структурою. Також може мати місце доступ до віддаленої файлової системи за допомогою Network File System (NFS). У той же час Linux може монтувати розділ з файловою системою NT File System (NTFS) з локального жорсткого диска системи з подвійним завантаженням (Windows® або Linux) і здійснювати читання або запис на неї.

Нарешті, до комп'ютера може бути оперативно підключений знімний USB флеш-накопичувач, що додає ще одну файлову систему. Протягом цього часу на цих пристроях може використовуватися один і той же набір інтерфейсів вводу-виводу, що дозволяє абстрагувати від користувача нижележащие файлову систему і фізичний пристрій (див. Малюнок 1).

Малюнок 1. Рівень абстракції надає єдиний інтерфейс поверх різних файлових систем і пристроїв зберігання
Абстракції і загальні концепції   Гнучкість і розширюваність підтримки файлових систем в Linux є прямим наслідком наявності абстрагованого набору інтерфейсів

Шари (рівні) абстрагування

Тепер давайте розглянемо конкретну архітектуру реалізації абстрактних функцій, що надаються VFS в Linux. На малюнку 2 показаний загальний вигляд рівнів в Linux з точки зору VFS. Над VFS розташовується стандартний інтерфейс системних викликів ядра (standard kernel system-call interface, SCI). Цей інтерфейс дозволяє передавати виклики з простору користувача в ядро ​​(в різні адресні простори). У цій області додаток з простору користувача, що робить виклик POSIX open, через бібліотеку GNU C (glibc) проходить в ядро ​​і в демультиплексор системних викликів. Зрештою за допомогою виклику sys_open викликається VFS.

Малюнок 2. Структура шарів VFS
Колишні реалізації VFS

Linux не був першою операційною системою, що використовує віртуальний рівень для підтримки загальної файлової моделі. Прикладами ранніх реалізацій VFS є Sun VFS (в SunOS версії 2.0, приблизно 1985 рік) і Installable File System від IBM і Microsoft® для IBM OS / 2. Ці підходи до віртуалізації рівня файлової системи проклали дорогу для Linux VFS.

VFS надає рівень абстракції, що відокремлює POSIX API від подробиць роботи конкретної файлової системи. Ключовим моментом тут є те, що системні виклики API Open, Read, Write або Close працюють однаково, незалежно від того, яка файлова система розташовується нижче: ext3 або Btrfs. VFS надає загальну файлову модель, яку успадковують нижележащие файлові системи (вони повинні реалізувати дії для різних функцій POSIX API). Подальше абстрагування, за межами VFS, приховує знаходиться нижче фізичний пристрій (яке може бути диском, розділом диска, мережевим модулем зберігання, пам'яттю або будь-яким іншим носієм, здатним зберігати інформацію-навіть тимчасово).

На додаток до приховування деталей файлових операцій від лежачих нижче файлових систем VFS «прив'язує» нижележащие блокові пристрої до наявних файловим системам. Тепер давайте подивимося на внутрішню організацію VFS, щоб побачити, як він працює.

Внутрішня організація VFS

Перед розглядом загальної структури підсистеми VFS, поглянемо на головні використовувані об'єкти. В цьому розділі вивчаються суперблок (superblock), індексний вузол (inode), запис каталогу (dentry), і, нарешті, об'єкт file. Деякі інші важливі додаткові елементи, наприклад, кеші, будуть розглянуті пізніше при розгляді загальної структури.

суперблок

Суперблок (superblock) є контейнером для високорівневих метаданих про файлову систему. Суперблок - це структура, яка існує на диску (насправді в кількох місцях диска для надмірності) і в пам'яті. Він надає основу для дій з файлової системою на диску, так як в ній визначаються параметри для управління файловою системою (наприклад, сумарне число блоків, вільних блоків, кореневої індексний вузол).

На диску суперблоки надає ядру інформацію про структуру файлової системи на диску. У пам'яті суперблоки надає необхідну інформацію і стан для управління активної (змонтованої) файлової системою. Оскільки Linux підтримує паралельно кілька одночасно змонтованих файлових систем, кожна структура super_block зберігається в списку (super_blocks, визначається в ./linux/fs/super.c, а структура визначена в /linux/include/fs/fs.h).

На малюнку 3 наводиться спрощений вид суперблоку і його елементів. Структура super_block посилається на ряд інших структур, які містять іншу інформацію. Наприклад, структура file_system_type визначає ім'я файлової системи (наприклад, ext3), а також різні блокування і функції для отримання і видалення super_block. Управління об'єктами file_system_type здійснюється через добре відомі функції register_file system і unregister_file system (див. ./Linux/fs/file systems.c). Структура super_operations визначає ряд функцій для читання і запису inod'ов, а також для операцій вищого рівня (таких як повторне монтування). Об'єкт записи кореневого каталогу (dentry) тут теж кешується, як і блоковий пристрій, на якому знаходиться ця файлова система. Нарешті, надається число списків для управління об'єктами inode, в тому числі s_inodes (список всіх inod'ов), s_dirty (список всіх «брудних» inod'ов), s_io і s_more_io (зареєстровані для відкладеного запису) і s_files (список всіх відкритих файлів для даної файлової системи).

Малюнок 3. Спрощений вид структури super_block і пов'язаних з нею елементів

Зверніть увагу, що всередині ядра інший об'єкт управління, званий vfsmount, надає інформацію про змонтованих файлових системах. Список цих об'єктів посилається на суперблок і визначає точку монтування, ім'я / dev-пристрої, на якому знаходиться ця файлова система, і іншу інформацію про приєднання на верхньому рівні.

Індексний вузол (inode)

Linux управляє всіма об'єктами в файлової системі через об'єкт, званий inode (скорочення від index node). Inode може посилатися на файл або каталог або символічне посилання на інший об'єкт. Зверніть увагу, що оскільки файли використовуються для подання інших типів об'єктів, наприклад, пристроїв або пам'яті, inod'и використовуються і для їх подання.

Зверніть також увагу, що inode, який я тут маю на увазі, є inod'ом рівня VFS (inode в пам'яті). Кожна файлова система також включає в себе inode, який знаходиться на диску і надає відомості про об'єкт, характерному для конкретної файлової системи.

Inod'и VFS розміщуються за допомогою механізму розподілу пам'яті slab (з inode_cache; див. Посилання в розділі ресурси для додаткової інформації по розподільника slab). Inode складається з даних і операцій, які описують inode, його вміст і різні операції, які на ньому можливі. на малюнку 4 приведена проста ілюстрація inod'а VFS, що складається з ряду списків, один з яких посилається на записи dentry, які посилаються на цей inode. Сюди входять метадані об'єктного рівня, що складаються із знайомих атрибутів часу (час створення, час доступу, час зміни), а також дані про приналежність власнику і про права доступу (ідентифікатор групи, ідентифікатор користувача і права доступу). Inode посилається на файлові операції, які можливі на ньому, більшість з яких безпосередньо відображаються на інтерфейси системних викликів (наприклад, open, read, write і flush). Є також посилання на пов'язані з inod'у операції (create, lookup, link, mkdir і так далі). Нарешті, є структура для управління фактичними даними для об'єкта, який представлений об'єктом адресного простору. Об'єкт адресного простору - це такий об'єкт, який управляє різними сторінками для inod'а в кеші сторінок. Об'єкт адресного простору використовується для управління сторінками для файлу, а також для відображення секцій файлу на індивідуальні адресні простори. Об'єкт адресного простору існує зі своїм власним набором операцій (writepage, readpage, releasepage і так далі).

Малюнок 4. Спрощене уявлення inod'а VFS

Зверніть увагу, що всю цю інформацію можна знайти в ./linux/include/linux/fs.h.

Запис каталогу (dentry)

Ієрархічна природа файлової системи управляється іншим об'єктом в VFS, званим dentry. У файлової системи є одна коренева запис dentry (на яку є посилання в системному блоці), причому це єдиний запис dentry без батька. У всіх інших записів dentry є батьки, а у деяких - нащадки. Наприклад, при відкритті файлу, складеного з / home / user / name, створюється чотири dentry-об'єкта: один для кореня /, один для запису home кореневого каталогу, один для запису name каталогу user і, нарешті, один для запису name в каталозі user . Таким чином, записи dentry чітко відображаються на ієрархічні файлові системи, які використовуються сьогодні.

Об'єкт dentry визначається структурою dentry (в ./linux/include/fs/dcache.h). Вона складається з ряду елементів, які відстежують зв'язок цього запису з іншими записами в файлової системі, а також фізичними даними (наприклад, ім'я файлу). Спрощений вид dentry-об'єкта наведено на малюнку 5 . Об'єкт dentry посилається на super_block, який визначає конкретний екземпляр файлової системи, в якому міститься цей об'єкт. Потім йде батьківська запис dentry (батьківський каталог) об'єкта, за нею дочірні записи dentry, що містяться в списку (коли об'єкт на ньому каталогом). Потім визначаються операції для dentry (що складаються з таких операцій, як hash, compare, delete, release і так далі). Потім визначається ім'я об'єкта, яке тут зберігається в запису dentry замість самого inod'а. Нарешті, дається посилання на inode VFS.

Малюнок 5. Спрощене уявлення dentry-об'єкта

Зауважте, що dentry-об'єкти існують тільки в пам'яті файлової системи і не зберігаються на диску. Постійно зберігаються тільки inod'и, а dentry-об'єкти використовуються для підвищення продуктивності. Повний опис структури dentry можна подивитися в ./linux/include/dcache.h.

об'єкт file

Для кожного відкритого в Linux-системі файлу існує об'єкт file. Цей об'єкт містить інформацію, що відноситься до відкритого примірнику для даного користувача. Дуже спрощений вид file-об'єкта представлений на малюнку 6 . Як можна бачити, структура path містить посилання і на dentry, і на vfsmount. Для кожного файлу визначено набір файлових операцій; це добре відомі файлові операції (open, close, read, write, flush і так далі). Визначено набір прапорів і повноважень (включаючи групу і власника). Нарешті, для конкретного примірника файлу визначаються дані, що зберігають стан, наприклад, поточне зміщення в файлі.

Малюнок 6. Спрощене уявлення об'єкта file

зв'язки об'єктів

Тепер, розглянувши різні важливі об'єкти в шарі VFS, давайте подивимося, як вони пов'язані між собою на одній схемі. Дослідивши об'єкт від низу до верху, поглянемо тепер у зворотному напрямку, з точки зору користувача (див. рисунок 7 ).

Нагорі знаходиться відкритий об'єкт file, на який посилається список файлових дескрипторів процесу. Об'єкт file посилається на об'єкт dentry, який посилається на inode. Обидва об'єкти, і inode і dentry, посилаються на лежить нижче об'єкт super_block. Кілька file-об'єктів можуть посилатися на один і той же dentry (наприклад, в разі, коли два користувача спільно використовують один і той же файл). Зверніть увагу також, що на малюнку 7 об'єкт dentry посилається на інший об'єкт dentry. В цьому випадку каталог посилається на файл, який, в свою чергу, посилається на inode для конкретного файлу.

Малюнок 7. Зв'язки основних об'єктів в VFS

архітектура VFS

Внутрішня архітектура VFS складається з розподільного шару, який забезпечує абстрагування файлової системи, і ряду кешей для підвищення продуктивності операцій файлової системи. У цьому розділі досліджується внутрішня архітектура та взаємодії основних об'єктів (див. Малюнок 8).

Малюнок 8. Узагальнений вид шару VFS

Два головні об'єкти, які динамічно підтримуються в VFS, - це об'єкти dentry і inode. Вони кешуються для прискорення доступу до лежачих нижче файлових систем. Коли файл відкривається, кеш dentry заповнюється записами, що представляють рівні каталогів, складових шлях до файлу. Також для об'єкта створюється inode, який представляє файл. Кеш dentry будується за допомогою хеш-таблиці і хешіруется по імені об'єкта. Записи для кеша dentry розміщуються в dentry_cache за допомогою розподільника пам'яті slab; коли з'являється брак пам'яті, для видалення записів використовується алгоритм витіснення за давністю використання. Функції, пов'язані з кешем dentry, можна знайти в ./linux/fs/dcache.c (і ./linux/include/linux/dcache.h).

Кеш inode-об'єктів реалізований у вигляді двох списків і хеш-таблиці для прискорення пошуку. У першому списку визначаються inod'и, які використовуються в даний час; у другому списку визначаються невикористовувані inod'и. Використовувані inod'и зберігаються також в хеш-таблиці. Окремі об'єкти кешей inod'ов розміщуються з inode_cache за допомогою розподільника пам'яті slab. Функції, які стосуються кешу inod'ов, можна знайти в ./linux/fs/inode.c (і ./linux/include/fs.h). У нинішній реалізації кеш inod'ов залежить від кеша dentry. При існуючому об'єкті dentry в кеші inod'ов існує і об'єкт inode. Пошуки виконуються в кеші dentry, що в підсумку призводить до об'єкта в кеші inod'ов.

додаткові відомості

Ця стаття торкнулася лише самої «поверхні» інформації про VFS, її концепції та об'єктів, що використовуються для забезпечення однакового доступу до різних файлових систем. Саме на таких підсистемах і базується масштабованість, гнучкість і розширюваність Linux. В розділі ресурси наводяться докладні відомості про те, де можна отримати додаткову інформацію.

Ресурси для скачування

Схожі теми

  • оригінал статті Anatomy of the Linux virtual file system switch (EN).
  • Підсистема Linux, призначена для управління файловими системами, обширна і складна. Про більшої підсистемі файлової системи в можна дізнатися зі статті " Анатомія файлової системи Linux "(DeveloperWorks, листопад 2007р.)
  • У статті " анатомія ext4 "(DeveloperWorks, February 2009) gives an introduction to and overview of this next-generation journaling file system. (EN)
  • Tim's " Anatomy of the Linux slab allocator "(DeveloperWorks, червень 2009 року) дається опис і огляд цієї журнальованою файлової системи наступного покоління. (EN)
  • Робота з VFS з простору користувача вимагає використання інтерфейсу системних викликів, який управляє переходами команд з простору користувача до ядра і назад. Більш докладно про цей процес можна дізнатися зі статті " Управління ядром за допомогою системних викликів Linux "(DeveloperWorks, березень 2007 р). (EN)
  • Ще одна реалізація VFS надана в операційній системі IBM AIX®. Огляд віртуальної файлової системи містить вступ в реалізацію VFS в AIX і опис різних об'єктів. (EN)
  • В Огляді VFS в Linux з курсу по операційним системам берлінського Інституту Інформатики дається відмінне введення в VFS і розглядається її використання в файлової системі ext2. В презентації Індійського Інституту Технологій в Бомбеї дається гарне короткий вступ в VFS. (EN)
  • Використовуйте в своєму наступному проекті розробки для Linux ознайомлювальне ПО IBM , Яке можна завантажити безпосередньо з сайту developerWorks. (EN)

Підпишіть мене на повідомлення до коментарів

VFs або VFS?
VFs або VFS?
Категории
  • Биология
  • Математика
  • Краеведению
  • Лечебная
  • Наука
  • Физике
  • Природоведение
  • Информатика
  • Новости

  • Новости
    https://banwar.org/
    Наша взаимовыгодная связь https://banwar.org/. Запустив новый сайт, "Пари Матч" обещает своим клиентам незабываемый опыт и возможность выиграть крупные суммы.


    Наши клиенты
    Клиенты

    Быстрая связь

    Тел.: (044) 587-84-78
    E-mail: [email protected]

    Имя:
    E-mail:
    Телефон:
    Вопрос\Комментарий: