А. Робачевский - Операционная система UNIX (1114671), страница 57
Текст из файла (страница 57)
К сожалению, эти параметры файловойсистемы FSS начинают значительно ухудшаться по мере уменьшениябодного места. В этом случае системе не удается следовать вышеприведен!ным правилам и размещение блоков далеко от оптимального. Практикапоказывает, что FSS имеет удовлетворительные характеристики при нали!чии более 10% свободного места.КаталогиСтруктура каталога файловой системы FFS была изменена для поддержкид л и н н ы х имен файлов (до 255 символов).
Вместо записей фиксированнойдлины запись каталога FFS представлена структурой, имеющей следующиеполя:[]Номер inode (индекс в массивДлина записиДлина имени файлаИмя файлаИмя файла имеет переменную длину, дополненную нулями дограницы. При удалении имени файла принадлежавшая ему запись присое!диняется к предыдущей, и значение поля d reclen увеличивается на со!www.books-shop.com292Глава 4.ответствующую величину. Удаление первой записи выражается в присвое!нии нулевого значения полю d_ino. Структура каталога файловой систе!мы FFS приведена на рис. 4.6.Рис.
4.6. Каталог файловой системы FFSАрхитектура виртуальной файловой системыКак было показано, различные типы файловых систем существенно отли!чаются по внутренней архитектуре. В то же время современные версииUNIX обеспечивают одновременную работу с несколькими типами файло!вых систем.
Среди них можно выделить локальные файловые системыразличной архитектуры, удаленные и даже отличные от файловой системыUNIX, например DOS. Такое сосуществование обеспечивается путем раз!деления каждой файловой системы на зависимый и независимый отwww.books-shop.com293Архитектура виртуальной файловой системызации уровни, последний из которых является общим и представляет дляостальных подсистем ядра некоторую абстрактную файловую систему. Не!зависимый уровень также называется виртуальной файловой системой(рис.
4.7). При этом дополнительные файловые системы различных типовмогут быть встроены в ядро UNIX подобно тому, как это происходит сдрайверами устройств.Дисковые носителиМониторПринтерСеть4.7. Архитектура виртуальной файловой системыВиртуальные индексные дескрипторыДисковый файл обычно имеет связанную сструктуру данных, назы!ваемую метаданными или inode, где хранятся основные характеристикиданного файла и с помощью которой обеспечивается доступ к его данным.Одним из исключений из этого правила является файловая система DOS,в которой структуры файла и его метаданных существенно отличаются отпринятых вТем не менее виртуальная файловая система основанана представлении метаданных файла в виде, сходном с традиционной се!мантикой UNIX.
Интерфейсом работы с файлами является(отvirtual inode — виртуальный индексный дескриптор).www.books-shop.comГлава 4. Файловая294Первоначально этот интерфейс был разработан в 1984 году фирмойSun Microsystems для обеспечения требуемой унификации работы с файло!выми системами различных типов, в частности, с NFS и(FFS). Сего!дня виртуальная файловая система является стандартом в SVR4, хотя ряддругих версий UNIX также реализуют подобную архитектуру (например,независимая файловая система SCO UNIX).Метаданные всех активных файлов (файлов, на которые ссылаются одинили более процессов) представлены в памяти в виде in!core inode, в каче!стве которых в виртуальной файловой системе выступаютСтруктураданных vnode одинакова для всех файлов, независимо от типа реальнойфайловой системы, где фактически располагается файл.
Данные vnode со!держат информацию, необходимую для работы виртуальной файловой сис!темы, а также неизменные характеристики файла, например, такие кактип файла.Основные поля vnode приведены в табл.Таблица 4.1. Поля vnodeПолеОписаниеu shortlagu shortv countstruct filockfilocksstruct vfsstructvfs*v_vfspenum vtypev_typecaddr tv datastructopФлаги vnodeЧисло ссылок на vnodeБлокировки файлаУказатель на подключенную файловуюсистему, если vnode является точкоймонтированияУказатель на файловую систему, в кото%рой находится файлТип vnode: обычный файл, каталог, спе%циальный файл устройства, символиче%ская связь, сокетУказатель на данные, относящиеся к ре%альной файловой системеОперации vnodeКаждый vnode содержит число ссылок v_count, которое увеличиваетсяпри открытии процессом файла и уменьшается при его закрытии. Когдачисло ссылок становится равнымнулю,вызываетсяоперациякоторая сообщает реальной файловой системе, что наvnode никто больше не ссылается.
После этого файловая система можетосвободить vnode (и, например, соответствующий ему inode) или помес!тить его в кэш для дальнейшего использования.Полеуказывает на файловую систему (структуру v f s , о котороймы поговорим в следующем разделе), в которой расположен файл,www.books-shop.com295виртуальной файловой системыванный даннымЕслиявляется точкой монтирования, то полеуказывает на подключенную файловую систему,"перекрывающую" данный vnode.Поле v_data указывает на данные, относящиеся к конкретнойреальной файловой системы. Например, для дисковой файловой системыуказывает на запись в таблице in!core inode.Набор операций над vnode указан полем v_op. В терминах объектно!ориентированного программирования этот набор представляет собой вир!туальные методы класса vnode. Он является своего рода шлюзом к реаль!ной файловой системе, позволяя предоставить общий интерфейс вирту!альной файловой системы и в то же время обеспечить специфические реа!лизации функций работы с файлами, необходимые для различных типовфайловых систем.
Некоторые операции, большинство из которых уже зна!комы читателю по системным вызовам, приведены в табл. 4.2.Таблица 4.2. Операции с vnode виртуальной файловой системы()close)(intintintread) ( )Открыть vnode. Если операция предусматривает соз%дание клона (размножение), то в результате будетразмещен новый vnode. Обычно операции такоготипа характерны для специальных файлов устройств.Закрыть vnode.Чтение данных файла, адресованного vnode.Запись в файл, адресованный vnode.Задание управляющей команды.Получить атрибуты vnode: типправа доступа,владелец%пользователь, владелец%группа, идентифи%катор файловой системы, номерсвязей,размер файла, оптимальный размер блока для опе%рацийвремя последнего доступа,время последней модификации, время последнеймодификации vnode, число занимаемых блоков.Установить атрибуты vnode.
Могут быть измененыGID, размер файла и времена доступа и моди%фикации.Проверить права доступа к файлу, адресованномуvnode. При этом производится отображение междуатрибутами доступа файлов UNIX и атрибутами ре%альной файловой системы (например, DOS).Произвести трансляцию имени файла в соответст%вующий ему vnode.Создать новый файл и соответствующий ему vnode.Удалитьфайла в указанном vnode каталоге.www.books-shop.comГлава 4.
Файловая296Таблица 4.2 (продолжение)intintintintint_link) ()intintreadlink)()intinactive)Создать жесткую связь между именем файла и vnode.Создать новый каталог в указанном vnode каталоге.Удалить каталог.Считать записи каталога, адресованного vnode.Создать символическую связь между новым именеми именем файла, расположенном в указанном vnodeкаталоге.Чтение файла — символической связи.Синхронизировать содержимое файла — записатьвседанные.Разрешить удаление vnode, т. к. число ссылок на vnodeиз виртуальной файловой системы стало равным нулю.Взаимосвязь между независимыми дескрипторами (vnode) и зависимымиот реализации метаданными файла показана на рис. 4.8.Рис. 4.8.
Метаданные файла виртуальной файловой системыМонтирование файловой системыПрежде чем может состояться работа с файлами, соответствующая файло!вая система должна быть встроена в существующее иерархическое дерево.www.books-shop.com297Архитектура виртуальной файловой системыТолько после этого ядро сможет выполнять файловые операции, такие каксоздание, открытие, чтение или запись в файл. Эта операция встраиванияполучила название подключения или монтирования файловой системы.Каждая подключенная файловая система представлена на независимомуровне в виде структуры v f s , аналоге записи таблицы монтирования дис!ковой файловой системы.
Структуры v f s всех подключенных файловыхсистем организованы в виде односвязного списка, в совокупности обеспе!чивая информацию, необходимую для обслуживания всего иерархическогодерева, а также информацию о реальной файловой системе, которые неизменяются на протяжении работы. Первой записью списка всегда являет!ся корневая файловая система. В дальнейшем, списокмы будем назы!вать устоявшимся термином — таблица монтирования. Поля структурыприведены в табл.
4.3.Таблица 4.3. Поля структуры vfsstruct vfsСледующая файловая система в спискемонтирования.nextОперации файловой системы.struct vfsopsstructvnodecoveredintvnode, перекрываемый файловой сис%темой.Флаги: только для чтения, запрещен битSUID т. д.inttvfs bsizeРазмер блока файловой системы.vfs dataУказатель на специфические данные,относящиеся к реальной файловой сис%теме.Полесодержит указатель на данные реальной файловой систе!мы. Например, для дисковой файловой системы s5fs, это поле указываетна суперблок, размещенный в памяти.Поле vfs_op указывает на операции файловой системы, которые в терми!нах объектно!ориентированного подхода могут быть названы виртуальнымиметодами объекта v f s .
Возможные операции файловой системы приведеныв табл. 4.4. Поскольку они существенным образом зависят от архитектуры иконкретной реализации, полязаполняются указателями на соответ!ствующие функции реальной файловой системы при ее монтировании.Таблица 4.4. Операции файловой системыmount)intПодключает файловую систему. Обычно операциявключает размещение суперблока в памяти и ини%циализацию записи в таблице монтирования.Отключает файловую систему. Операция включаетактуализацию данных файловой системы на нако%пителе (например, синхронизацию дискового су%перблока и его образа в памяти).www.books-shop.comГлава 4. Файловая298Таблица 4.4 (продолжение)int(*vfs(*vfsВозвращает корневой vnode файловой системы.intintint()Возвращает общую информацию о файловой систе%ме, в частности: размер блока хранения данных, чис%лосвободныхinode.Актуализирует вседанные файловойсистемы.Возвращает файловый идентификатор (fid — file Iden%tifier), однозначно адресующий файл в данной фай%ловой системе.