VFS (Virtual File System)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 16:55, 24 августа 2017.
Версия от 16:55, 24 августа 2017; grigoriy chuykin (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
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 (англ. 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 монтирование корневой файловой системы
Montirovanie.gif

Операция 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.

Ссылки

Источники

  • Виртуальная файловая система [Электронный ресурс]: Сведения о системе — материал из Википедии — свободной энциклопедии: Версия, сохранённая 06: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 07:06 / Авторы Википедии // Wikipedia, free encyclopedia. — El. data. — San Francisco: Wikimedia Foundation, 2016. — Access mode: https://en.wikipedia.org/wiki/Virtual_file_system