VFS (Virtual File System) - Національна бібліотека ім. Н. Е. Баумана
- Реалізації віртуальної файлової системи
- Структура віртуальної файлової системи (VFS)
- Абстрактні операції над файлами
- функціональність
- Символьні зв'язку
- іменовані конвеєри
- посилання
Матеріал з Національної бібліотеки ім. Н. Е. Баумана
Остання зміна цієї сторінки: 16:55, 24 серпня 2017.
VFS Повна назва Virtual File System Варіанти devfs, sysfs, specfs, / proc Вміст каталогу Дерево Тип файлів
- звичайні файли
- каталоги
- спеціальні файли
- іменовані конвеєри
- символьні зв'язку
Features Ознаки
- Читання / запис в файл
- відкритий
інші Операційна система FreeBSD , OpenSolaris , Сімейство Windows NT: (починаючи з Windows NT 3.1 до Windows NT 4.0, Windows 2000, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows Server 2008 R2, Windows 8, Windows Server 2012), Mac OS X , Linux
VFS ( англ. V irtual F ile S ystem - Віртуальна файлова система) або віртуальний комутатор файлової системи ( англ. V irtual F ilesystem S with) - рівень абстракції поверх конкретної реалізації файлової системи. Метою VFS є забезпечення однакового доступу клієнтських додатків до різних типів файлових систем. VFS може бути використана, наприклад, для прозорого доступу до локальних і мережевих пристроїв зберігання даних без використання спеціального клієнтського додатка (незалежно від типу файлової системи). VFS визначає інтерфейс між ядром і конкретної файлової системою, таким чином, можна легко додавати підтримку нових типів файлових систем, вносячи зміни тільки в ядро операційної системи.
Віртуальна файлова система визначає інтерфейс взаємодії між ядром ОС і конкретної файлової системою, що спрощує підтримку нових типів файлових систем, просто доповнюючи інтерфейс взаємодії. Визначення в інтерфейсі можуть призводити до зміни сумісності від релізу до релізу, що вимагає підтримки файлової системою перекомпіляції і можливої модифікації перед компіляцією; або ж, постачальник ОС може вносити зміни тільки з зворотною сумісністю, так що підтримка конкретної файлової системи, побудованої для даного релізу ОС, буде працювати з майбутніми версіями. Іноді віртуальними файловими системами називають псевдо-файлові системи, які не призначені для зберігання даних. Прикладом такої системи є procfs (віртуальна файлова система, яка використовується в UNIX-подібних операційних системах).
Реалізації віртуальної файлової системи
Однією з перших реалізацій файлових систем на Unix подібних ОС була розроблена компанією Sun Microsystems в SunOS 2.0 в 1985. Це дозволило системних викликів Unix отримати прозорий доступ до локальної UFS і віддаленої NFS. З цієї причини вендори Unix-систем, які отримали ліцензію на код NFS, часто копіювали дизайн VFS від Sun. Інші файлові системи можуть бути підключені так само: з'явилася реалізація файлової системи MS-DOS FAT, розроблена в Sun, що використала SunOS VFS, хоча вона не поставлялася в якості продукту до SunOS 4.1. Реалізація SunOS лежить в основі механізму VFS в System V Release 4.
Джон Хейдеманн розробив стекову VFS під SunOS 4.0 для експериментальної файлової системи Ficus. Цей проект передбачав повторне використання коду в файлових системах з різною, але схожою семантикою (наприклад, шифрована файлова система може використовувати систему імен та код для зберігання даних нешифрований файлової системи). У своїй дисертації Хейдеманн адаптував цю роботу для використання в 4.4BSD. Спадкоємці цього коду лежать в основі реалізацій сучасних файлових систем в операційних системах, похідних від BSD, включаючи Mac OS X.
Інші віртуальні файлові системи Unix включають File System Switch в System V Release 3, Generic File System в Ultrix і VFS в Linux. В OS / 2 і Microsoft Windows механізм віртуальної файлової системи називається встановлюється файлової системою (Installable File System).
Файлова система в просторі користувача (Filesystem in Userspace - FUSE) дозволяє програмам реалізувати файлову систему в просторі користувача через підключення до віртуальної файлової системи. FUSE використовується в Linux , FreeBSD , OpenSolaris , і Mac OS X .
У Microsoft Windows віртуальна файлова система може бути реалізована розширенням простір користувача; однак, вони не підтримують інтерфейси доступу до нижнього рівня файлової системи Windows, так що не всі програми, реалізовані розширенням простору імен, матимуть доступ до файлової системи. KIO і GVfs / GIO забезпечують аналогічні механізми в KDE та GNOME, з тими ж обмеженнями, хоча вони можуть використовувати технології although FUSE і, отже, легко інтегруються в систему.
Структура віртуальної файлової системи (VFS)
Структура віртуальної файлової системи
VFS містить набір функцій, які повинна підтримувати будь-яка файлова система. Цей інтерфейс складається з ряду операцій, які оперують трьома типами об'єктів: файлові системи, індексні дескриптори і відкриті файли. VFS містить інформацію про всіх типах підтримуваних файлових систем. Тут використовується таблиця, яка створюється під час компіляції ядра. Кожен запис в такій таблиці містить тип файлової системи: вона включає в себе найменування типу і покажчик на функцію, що викликається під час монтування цієї файлової системи. При монтуванні файлової системи викликається відповідна функція монтування. Ця функція використовується для зчитування суперблоку, установки внутрішніх змінних і повернення дескриптора змонтованою системи в VFS. Після того, як система змонтована, функції VFS використовують цей дескриптор для доступу до процедур файлової системи. Дескриптор змонтованої файлової системи містить у собі деяку інформацію: інформація, яка однакова для кожного типу файлової системи, покажчики на функції, які використовуються для виконання операцій даної файлової системи і деякі дані, які використовуються цією системою. Покажчики на функції, розташовані в дескрипторі файлової системи, дозволяють VFS отримати доступ до внутрішніх функцій файлової системи. Використовуються ще два типи дескрипторів: це inode і дескриптор відкритого файлу. Кожен з них містить інформацію, пов'язану з використовуваними файлами і набором операцій, використовуваних кодом файлової системи. У той час як дескриптор inode містить покажчики до функцій, які використовуються по відношенню до будь-якого файлу (наприклад, create або unlink), то дескриптор файлів містить покажчики до функцій, які оперують тільки з відкритими файлами (наприклад, read або write).
UNIX System V Release 4 має масив структур vfssw [], кожна з яких описує файлову систему конкретного типу, яка може бути встановлена в системі. Структура vfssw складається з чотирьох полів:
- символьного імені файлової системи;
- покажчика на функцію ініціалізації файлової системи;
- покажчика на структуру, що описує функції, що реалізують абстрактні операції VFS в даній конкретній файлової системи;
- прапори, які не використовуються в описуваної версії UNIX.
Функції ініціалізації файлових систем викликаються під час ініціалізації операційної системи. Ці функції відповідальні за створення внутрішнього середовища файлової системи кожного типу. Структура vfsops, що описує операції, які виконуються над файлової системою, складається з 7 полів, так як в UNIX System V Release 4 передбачено 7 абстрактних операцій над файлової системою:
VFS_MOUNT монтування файлової системи VFS_UNMOUNT Демонтується файлової системи VFS_ROOT отримання vnode для кореня файлової системи VFS_STATVFS отримання статистики файлової системи VFS_SYNC виштовхування буферів файлової системи на диск VFS_VGET отримання vnode за номером дескриптора файлу VFS_MOUNTROOT монтування кореневої файлової системи
Операція VFS_MOUNT виконує традиційне для UNIX монтування файлової системи на вказаний каталог вже змонтованої файлової системи для освіти загального дерева, а операція VFS_UNMOUNT скасовує монтування. Операція VFS_ROOT використовується при розборі повного імені файлу, коли зустрічається дескриптор vnode, який пов'язаний зі змонтованої на нього файлової системою. Операція VFS_ROOT допомагає знайти vnode, який є коренем змонтованої файлової системи. Операція VFS_STATVFS дозволяє отримати незалежну від типу файлової системи інформацію про розмір блоку файлової системи, про кількість блоків і кількості вільних блоків в одиницях цього розміру, про максимальну довжину імені файлу і т.п. Операція VFS_SYNC виштовхує вміст буферів диска з оперативної пам'яті на диск. Операція VFS_MOUNTROOT дозволяє змонтувати кореневу файлову систему, тобто систему, яка містить кореневий каталог / загального дерева. Для вказівки того, яка файлова система буде монтуватися як коренева, в UNIX System V Release 4 використовується змінна rootfstype, що містить символьне ім'я кореневої файлової системи, наприклад "ufs".
Таким чином, в UNIX System V Release 4 одночасно в єдине дерево можуть бути змонтовані кілька файлових систем різних типів, що підтримують операцію монтування (малюнок 5.6).
Абстрактні операції над файлами
VOP_OPEN відкрити файл VOP_CLOSE закрити файл VOP_READ читання з файлу VOP_WRITE запис в файл VOP_IOCTL управління в / в VOP_SETFL встановити прапори статусу VOP_GETATTR отримати атрибути файлу VOP_SETATTR встановити атрибути файлу VOP_LOOKUP знайти vnode по імені файлу VOP_CREATE створити файл VOP_REMOVE видалити файл VOP_LINK зв'язати файл VOP_MAP відобразити файл в пам'ять
функціональність
- Швидкий час доступу
- Кілька архівів замість величезної кількості маленьких файлів
- можливість дебагінг
- Pluggable Encryption and Compression (PEC)
- Захищеність (всередині файлу vfs зберігається MD5 ключ так що будь-які зміни архіву тут же будуть помічені)
- Кілька root шляхів
Зв'язок процесу з файлами
Віртуальна файлова система VFS підтримує наступні типи файлів:
- звичайні файли
- каталоги
- спеціальні файли
- іменовані конвеєри
- символьні зв'язку
Символьні зв'язку
М'яка зв'язок, звана символьної зв'язком і реалізована за допомогою системного виклику symlink. Символьна зв'язок - це файл даних, що містить ім'я файлу, з яким передбачається встановити зв'язок. Символьна зв'язок може бути створена навіть з неіснуючим файлом. При створенні символьної зв'язку утворюється як новий вхід в каталозі, так і новий індексний дескриптор inode. Крім цього, резервується окремий блок даних для зберігання повного імені файлу, на який він посилається.
Є три системних виклику, які мають відношення до символьних зв'язків:
- readlink - читання повного імені файлу або каталогу, на який посилається символьний зв'язок. Ця інформація зберігається в блоці, пов'язаному з символьного зв'язком.
- lstat - аналогічний системного виклику stat, але використовується для отримання інформації про саму зв'язку.
- lchown - аналогічний системного виклику chown, але використовується для зміни власника самої символьної зв'язку.
іменовані конвеєри
Конвеєр - це засіб обміну даними між процесами. Конвеєр буферизует дані, що надходять на його вхід, таким чином, що процес, який читає дані на його виході, отримує їх в порядку "перший прийшов - першим вийшов" (FIFO). У ранніх версіях UNIX для обміну даними між процесами використовувалися неіменовані конвеєри - pipes, які представляли собою черзі байт в оперативній пам'яті. Однак, через відсутність імен, такі конвеєри могли використовуватися тільки для передачі даних між спорідненими процесами, які отримали покажчик на конвеєр в результаті копіювання сегмента даних з адресного простору процесу-прабатька. Іменовані конвеєри дозволяють обмінюватися даними довільної парі процесів, тому що кожному такому конвеєру відповідає файл на диску. Ніякі дані не зв'язуються з файлом-конвеєром, але все одно в каталозі міститься запис про нього, і він має індексний дескриптор. У UNIX System V Release 4 конвеєри реалізуються з використанням комунікаційних модулів STREAMS.
посилання
джерела
- Віртуальна файлова система [Електронний ресурс]: Відомості про систему - матеріал з Вікіпедії - вільної енциклопедії: Версія, збережена 6:20, 21 березня 2015 / Автори Вікіпедії // Вікіпедія, вільна енциклопедія. - Електрон. дан. - Сан-Франциско: Фонд Вікімедіа, 2016. - Режим доступу: http://ru.wikipedia.org/?oldid=69454548
- Virtual file system (переклад з англійської) [Electronic resources]: System information - Material from Wikipedia, the free encyclopedia: Тhe version that is stored 28 September 2016, at 7:06 / Автори Вікіпедії // Wikipedia, free encyclopedia. - El. data. - San Francisco: Wikimedia Foundation, 2016. - Access mode: https://en.wikipedia.org/wiki/Virtual_file_system