Виртуальная файловая система vfs




Скачать 95.39 Kb.
НазваниеВиртуальная файловая система vfs
Дата публикации26.04.2013
Размер95.39 Kb.
ТипДокументы
uchebilka.ru > Информатика > Документы
Виртуальная файловая система VFS

В UNIX System V Release 3 был реализован механизм переключения файловых систем (File System Switch, FSS), позволяющий операционной системе поддерживать различные типы файловых систем. В соответствии с этим подходом информация о файловой системе и файлах разбивается на две части - зависимую от типа файловой системы и не зависимую. FSS обеспечивает интерфейс между ядром и файловой системой, транслируя запросы ядра в операции, зависящие от типа файловой системы. При этом ядро имеет представление только о независимой части файловой системы. Однако большее распространение получила схема, реализованная фирмой Sun Microsystems, использующая аналогичный подход. Эта схема называется переключателем виртуальной файловой системы - Virtual File System (VFS). В UNIX System V Release 4 реализован именно этот механизм.

VFS не ориентируется на какую-либо конкретную файловую систему, механизмы реализации файловой системы полностью скрыты как от пользователя, так и от приложений. В ОС нет системных вызовов, предназначенных для работы со специфическими типами файловой системы, а имеются абстрактные вызовы типа open, read, write и другие, которые имеют содержательное описание, обобщающее некоторым образом содержание этих операций в наиболее популярных типах файловых систем (например, s5, ufs, nfs и т.п.). VFS также предоставляет ядру возможность оперирования файловой системой, как с единым целым: операции монтирования и демонтирования, а также операции получения общих характеристик конкретной файловой системы (размера блока, количества свободных и занятых блоков и т.п.) в единой форме. Если конкретный тип файловой системы не поддерживает какую-то абстрактную операцию VFS, то файловая система должна вернуть ядру код возврата, извещающий об этом факте.

В VFS вся информация о файлах разделена на две части - не зависящую от типа файловой системы, которая хранится в специальной структуре ядра - структуре vnode, и зависящую от типа файловой системы - структура inode, формат которой на уровне VFS не определен, а используется только ссылка на нее в структуре vnode. Имя inode не означает, что эта структура совпадает со структурой индексного дескриптора inode файловой системы s5. Это имя используется для обозначения зависящей от типа файловой системы информации о файле, как дань традиции.

Виртуальная файловая система VFS поддерживает следующие типы файлов:

  • обычные файлы,

  • каталоги,

  • специальные файлы,

  • именованные конвейеры,

  • символьные связи.

Содержательное описание обычных файлов, каталогов и специальных файлов и связей не отличается от их описания в файловой системе s5.

Символьные связи

Версия UNIX System V Release 4 вводит новый тип связи - мягкая связь, называемая символьной связью и реализуемая с помощью системного вызова symlink. Символьная связь - это файл данных, содержащий имя файла, с которым предполагается установить связь. Слово "предполагается" использовано потому, что символьная связь может быть создана даже с несуществующим файлом. При создании символьной связи образуется как новый вход в каталоге, так и новый индексный дескриптор inode. Кроме этого, резервируется отдельный блок данных для хранения полного имени файла, на который он ссылается.

Многие системные вызовы пользуются файлом символьных связей для поиска реального файла. Связанные файлы не обязательно располагаются в той же файловой системе.

Имеются три системных вызова, которые имеют отношение к символьным связям:

  • readlink - чтение полного имени файла или каталога, на который ссылается символьная связь. Эта информация хранится в блоке, связанном с символьной связью.

  • lstat - аналогичен системному вызову stat, но используется для получения информации о самой связи.

  • lchown - аналогичен системному вызову chown, но используется для изменения владельца самой символьной связи.

^ Именованные конвейеры

Конвейер - это средство обмена данными между процессами. Конвейер буферизует данные, поступающие на его вход, таким образом, что процесс, читающий данные на его выходе, получает их в порядке "первый пришел - первый вышел" (FIFO). В ранних версиях UNIX для обмена данными между процессами использовались неименованные конвейеры - pipes, которые представляли собой очереди байт в оперативной памяти. Однако, из-за отсутствия имен, такие конвейеры могли использоваться только для передачи данных между родственными процессами, получившими указатель на конвейер в результате копирования сегмента данных из адресного пространства процесса-прародителя. Именованные конвейеры позволяют обмениваться данными произвольной паре процессов, т.к. каждому такому конвейеру соответствует файл на диске. Никакие данные не связываются с файлом-конвейером, но все равно в каталоге содержится запись о нем, и он имеет индексный дескриптор. В UNIX System V Release 4 конвейеры реализуются с использованием коммуникационных модулей STREAMS.

^ Файлы, отображенные в памяти

Побочным продуктом новой архитектуры виртуальной памяти UNIX System V Release 4 является возможность отображать содержимое файла (или устройства) в виде последовательности байтов в виртуальное адресное пространство процесса. Это упрощает процедуру доступа процесса к данным.

^ Реализация файловой системы VFS

UNIX System V Release 4 имеет массив структур vfssw [ ], каждая из которых описывает файловую систему конкретного типа, которая может быть установлена в системе. Структура vfssw состоит из четырех полей:

  • символьного имени файловой системы;

  • указателя на функцию инициализации файловой системы;

  • указателя на структуру, описывающую функции, реализующие абстрактные операции VFS в данной конкретной файловой системе;

  • флаги, которые не используются в описываемой версии UNIX.

Пример инициализированного массива структур vfssw:

struct vfssw vfssw[] = {

{0, 0 , 0 ,0 }, - нулевой элемент не используется

{"spec", specint, &spec_vfsops, 0}, - SPEC

{"vxfs", vx_init, &vx_vfsops, 0}, - Veritas

{"cdfs", cdfsinit, &cdfs_vfsops, 0}, - CD ROM

{"ufs", ufsinit, &ufs_vfsops, 0}, - UFS

{"s5", vx_init, &vx_vfsops, 0}, - S5

{"fifo", fifoinit, &fifovfsops, 0}, - FIFO

{"dos", dosinit, &dos_vfsops, 0}, - MS-DOS

Функции инициализации файловых систем вызываются во время инициализации операционной системы. Эти функции ответственны за создание внутренней среды файловой системы каждого типа.

Структура vfsops, описывающая операции, которые выполняются над файловой системой, состоит из 7 полей, так как в UNIX System V Release 4 предусмотрено 7 абстрактных операций над файловой системой:

VFS_MOUNT

монтирование файловой системы,

VFS_UNMOUNT

размонтирование файловой системы,

VFS_ROOT

получение vnode для корня файловой системы,

VFS_STATVFS

получение статистики файловой системы,

VFS_SYNC

выталкивание буферов файловой системы на диск,

VFS_VGET

получение vnode по номеру дескриптора файла,

VFS_MOUNTROOT

монтирование корневой файловой системы.



Рис. 5.6. Монтирование файловых систем в VFS

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

- отобразить файл в память

^ Рис. 5.7. Абстрактные операции над файлами

Кроме операций над файловой системой в целом, для каждого типа файловой системы (s5, ufs и т.д.), установленной в ОС, необходимо описать способ реализации абстрактных операций над файлами, которые допускаются в VFS. Этот способ описывается для каждого типа файловой системы в структуре vnodeops, состав которой приведен на рисунке 5.7. Как видно из состава списка абстрактных операций, они образованы объединением операций, характерных для наиболее популярных файловых систем UNIX. Для того, чтобы обращение к специфическим функциям не зависело от типа файловой системы, для каждой операции в vnodeops определен макрос с общим для всех типов файловых систем именем, например, VOP_OPEN, VOP_CLOSE, VOP_READ и т.п. Эти макросы определены в файле и соответствуют системным вызовам. Таким образом, в структуре vnodeops скрыты зависящие от типа файловой системы реализации стандартного набора операций над файлами. Даже если файловая система какого-либо конкретного типа не поддерживает определенную операцию над своими файлами, она должна создать соответствующую функцию, которая выполняет некоторый минимум действий: или сразу возвращает успешный код завершения, или возвращает код ошибки. Для анализа и обработки полного имени файла в VFS используется операция VOP_LOOKUP, позволяющая по имени файла найти ссылку на его структуру vnode.

Работа ядра с файлами во многом основана на использовании структуры vnode, поля которой представлены на рисунке 5.8. Структура vnode используется ядром для связи файла с определенным типом файловой системы через поле v_vfsp и конкретными реализациями файловых операций через поле v_op. Поле v_pages используется для указания на таблицу физических страниц памяти в случае, когда файл отображается в физическую память (этот механизм описан в разделе, описывающем организацию виртуальной памяти). В vnode также содержится тип файла и указатель на зависимую от типа файловой системы часть описания характеристик файла - структуру inode, обычно содержащую адресную информацию о расположении файла на носителе и о правах доступа к файлу. Кроме этого, vnode используется ядром для хранения информации о блокировках (locks), примененных процессами к отдельным областям файла.

Ядро в своих операциях с файлами оперирует для описания области файла парой vnode, offset, которая однозначно определяет файл и смещение в байтах внутри файла.



Рис. 5.8. Описатель файла - vnode

При каждом открытии процессом файла ядро создает в системной области памяти новую структуру типа file, которая, как и в случае традиционной файловой системы s5, описывает как открытый файл, так и операции, которые процесс собирается производить с файлом (например, чтение). Структура file содержит такие поля, как:

  • flag - определение режима открытия (только для чтения, для чтения и записи и т.п.);

  • struct vnode * f_vnode - указатель на структуру vnode (заменивший по сравнению с s5 указатель на inode);

  • offset - смещение в файле при операциях чтения/записи;

  • struct cred * f_cred - указатель на структуру, содержащую права процесса, открывшего файл (структура находится в дескрипторе процесса);

а также указатели на предыдущую и последующую структуру типа file, связывающие все такие структуры в список.



Рис. 5.9. Связь процесса с его файлами

Связь структур процесса с системным списком структур file показан на рисунке 5.9.

В отличие от структур типа file структуры типа vnode заводятся операционной системой для каждого активного (открытого) файла в единственном экземпляре, поэтому структуры file могут ссылаться на одну и ту же структуру vnode.

Структуры vnode не связаны в какой-либо список. Они появляются по требованию в системном пуле памяти и присоединяются к структуре данных, которая инициировала появление этого vnode, с помощью соответствующего указателя. Например, в случае структуры file в ней используется указатель f_vnode на соответствующую структуру vnode, описывающую нужный файл. Аналогично, если файл связан с образом процесса (то есть это файл, содержащий выполняемый модуль), то отображение сегмента памяти, содержащего части этого файла, осуществляется посредством указателя vp (в структуре segvn_data) на vnode этого файла.

Все операции с файлами в UNIX System V Release 4 производятся с помощью связанной с файлом структуры vnode. Когда процесс запрашивает операцию с файлом (например, операцию open), то независимая от типа файловой системы часть ОС передает управление зависимой от типа файловой системы части ОС для выполнения операции. Если зависимая часть обнаруживает, что структуры vnode, описывающей нужный файл, нет в оперативной памяти, то зависимая часть заводит для него новую структуру vnode.

Для ускорения доступа к файлам в UNIX System V Release 4 используется механизм быстрой трансляции имен файлов в соответствующие им ссылки на структуры vnode. Этот механизм основан на наличии кэша, хранящего максимально 800 записей о именах файлов и указателях vnode.

Добавить документ в свой блог или на сайт

Похожие:

Виртуальная файловая система vfs iconДля чего создается файловая система?
Для чего создается файловая система? Кто ее создает? Когда? Приведите пример простейшей файловой системы

Виртуальная файловая система vfs iconРаспределенная файловая система dfs osf
Распределенная файловая система dfs osf предназначена для обеспечения прозрачного доступа к любому файлу, расположенному в любом...

Виртуальная файловая система vfs iconВиртуальная файловая система представляет собой абстрактную файловую...
Ьной файловой системой, которая имеет все свойства вышеописанной posix-совместимой файловой системы. От низкоуровневых действий и...

Виртуальная файловая система vfs iconСетевое хранилище Iomega StorCenter px2-300d Краткое описание
Тип оборудования; процессор; оперативная память; жесткий диск; файловая система; порты; протоколы; raid; операционная система; система...

Виртуальная файловая система vfs iconОперационная система ms dos. Основные принципы хранения информации...
Операционная система ms dos. Основные принципы хранения информации на магнитных дисках в ms dos. Файловая система ms dos

Виртуальная файловая система vfs iconСценарий фильма «матрица матрице рознь»
...

Виртуальная файловая система vfs icon«Файловая система» по умк угриновича Н. Д
Познакомьтесь с видеоафишей открытых уроков за период с 11 марта по 18 марта 2013 года!

Виртуальная файловая система vfs iconВопросы к экзамену по курсу «Информатика»
Файловая система: файл, имя файла, выполнимые файлы, характеристика файла по расширению, шаблоны имен

Виртуальная файловая система vfs iconЛабораторная работа № Файловая система Ознакомьтесь с работой программы
Выберите в таблице по номеру вашего варианта параметр api-функции GetDiskFreeSpace или GetVolumeInformation и опишите его

Виртуальная файловая система vfs iconУрок № Дата: Класс Тема: Файловая система. Основные понятия файловой системы
Совокупность программных средств для создания и эксплуатации систем обработки данных средствами вычислительной техники

Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
uchebilka.ru
Главная страница


<