- Виртуальная файловая система — Virtual file system
- СОДЕРЖАНИЕ
- Реализации
- Однофайловые виртуальные файловые системы
- Реализация однофайловых виртуальных файловых систем
- PCTask
- WinUAE
- Национальная библиотека им. Н. Э. Баумана Bauman National Library
- Персональные инструменты
- VFS (Virtual File System)
- Содержание
- Реализации виртуальной файловой системы
- Структура виртуальной файловой системы (VFS)
- Абстрактные операции над файлами
- Функциональность
- Связь процесса с файлами
- Символьные связи
- Именованные конвейеры
Виртуальная файловая система — Virtual file system
Виртуальная файловая система ( VFS ) или переключатель виртуального файловой системы является абстрактным слоем на верхней части более конкретной файловой системы . Цель VFS — предоставить клиентским приложениям единообразный доступ к различным типам конкретных файловых систем. Например, VFS можно использовать для прозрачного доступа к локальным и сетевым устройствам хранения данных, при этом клиентское приложение не заметит разницы. Его можно использовать для преодоления различий в файловых системах Windows , классических Mac OS / macOS и Unix , чтобы приложения могли получать доступ к файлам в локальных файловых системах этих типов, не зная, к какому типу файловой системы они обращаются.
VFS определяет интерфейс (или «контракт») между ядром и конкретной файловой системой. Следовательно, легко добавить в ядро поддержку новых типов файловых систем, просто выполнив контракт. Условия контракта могут несовместимо меняться от выпуска к выпуску, что потребует перекомпиляции поддержки конкретной файловой системы и, возможно, изменения перед перекомпиляцией, чтобы позволить ей работать с новым выпуском операционной системы; либо поставщик операционной системы может вносить в контракт только обратно совместимые изменения, чтобы конкретная поддержка файловой системы, созданная для данного выпуска операционной системы, работала с будущими версиями операционной системы.
СОДЕРЖАНИЕ
Реализации
Один из первых механизмов виртуальной файловой системы в Unix-подобных системах был представлен Sun Microsystems в SunOS 2.0 в 1985 году. Он позволил системным вызовам Unix прозрачно обращаться к локальным файловым системам UFS и удаленным файловым системам NFS . По этой причине поставщики Unix, которые лицензировали код NFS у Sun, часто копировали дизайн Sun VFS. К нему также можно было подключить другие файловые системы: была реализация файловой системы MS-DOS FAT, разработанная в Sun, которая подключалась к SunOS VFS, хотя она не поставлялась как продукт до SunOS 4.1. Реализация SunOS была основой механизма VFS в System V Release 4 .
Джон Хайдеманн разработал стек VFS под SunOS 4.0 для экспериментальной файловой системы Ficus . Этот дизайн предусматривал повторное использование кода среди типов файловых систем с различающейся, но схожей семантикой ( например , файловая система с шифрованием может повторно использовать весь код именования и управления хранением файловой системы без шифрования). Хайдеманн адаптировал эту работу для использования в 4.4BSD как часть своей дипломной работы; потомки этого кода лежат в основе реализации файловой системы в современных производных BSD, включая macOS .
Другие виртуальные файловые системы Unix включают переключатель файловой системы в System V Release 3 , Generic File System в Ultrix и VFS в Linux . В OS / 2 и Microsoft Windows механизм виртуальной файловой системы называется устанавливаемой файловой системой .
Механизм файловой системы в пользовательском пространстве (FUSE) позволяет коду пользовательского пространства подключаться к механизму виртуальной файловой системы в Linux, NetBSD , FreeBSD , OpenSolaris и macOS.
В Microsoft Windows виртуальные файловые системы также могут быть реализованы с помощью расширений пространства имен оболочки пользовательского уровня ; однако они не поддерживают программные интерфейсы приложений доступа к файловой системе самого низкого уровня в Windows, поэтому не все приложения смогут получить доступ к файловым системам, реализованным как расширения пространства имен. KIO и GVfs / GIO предоставляют аналогичные механизмы в средах рабочего стола KDE и GNOME (соответственно) с аналогичными ограничениями, хотя они могут быть использованы для использования методов FUSE и, следовательно, легко интегрируются в систему.
Однофайловые виртуальные файловые системы
Иногда виртуальная файловая система относится к файлу или группе файлов (не обязательно внутри конкретной файловой системы), которые действуют как управляемый контейнер, который должен обеспечивать функциональность конкретной файловой системы за счет использования программного обеспечения. Примерами таких контейнеров являются CBFS Storage или однофайловая виртуальная файловая система в эмуляторе, таком как PCTask или так называемый WinUAE , Oracle VirtualBox , Microsoft Virtual PC , VMware .
Основное преимущество файловой системы этого типа заключается в том, что она централизована и легко удаляется. Однофайловая виртуальная файловая система может включать все основные функции, ожидаемые от любой файловой системы (виртуальной или иной), но доступ к внутренней структуре этих файловых систем часто ограничивается программами, специально написанными для использования однофайловой виртуальной файловой системы. файловая система (вместо реализации через драйвер, обеспечивающий универсальный доступ). Еще один серьезный недостаток — относительно низкая производительность по сравнению с другими виртуальными файловыми системами. Низкая производительность в основном связана с затратами на перемешивание виртуальных файлов при записи или удалении данных из виртуальной файловой системы.
Реализация однофайловых виртуальных файловых систем
Прямые примеры однофайловых виртуальных файловых систем включают эмуляторы, такие как PCTask и WinUAE, которые инкапсулируют не только данные файловой системы, но также эмулируют структуру диска. Это позволяет легко относиться к установке ОС, как и к любому другому программному обеспечению, — переносить ее со съемного носителя или по сети.
PCTask
Амигу эмулятор PCTask эмулировать Intel PC 8088 на основе машины с тактовой частотой 4,77 МГц (а позже 80486 SX с тактовой частотой 25 МГц). Пользователи PCTask могли создать файл большого размера в файловой системе Amiga, и к этому файлу можно было бы получить виртуальный доступ из эмулятора, как если бы это был настоящий жесткий диск ПК. Файл может быть отформатирован в файловой системе FAT16 для хранения обычных файлов MS-DOS или Windows.
WinUAE
ОАЭ для ОС Windows , WinUAE , позволяют большие отдельные файлы на Windows , следует рассматривать как Amiga файловых систем. В WinUAE этот файл называется жестким файлом .
ОАЭ также могут рассматривать каталог в файловой системе хоста ( Windows , Linux , macOS , AmigaOS ) как файловую систему Amiga.
Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
VFS (Virtual File System)
Полное название | Virtual File System |
---|---|
Варианты | devfs, sysfs, specfs, /proc |
Содержимое каталога | Дерево |
Тип файлов | |
Другие | |
Операционная система | 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 (англ. Virtual File System — Виртуальная файловая система) или виртуальный коммутатор файловой системы (англ. Virtual Filesystem Swith ) — уровень абстракции поверх конкретной реализации файловой системы. Целью 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.