Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС_лекция.docx
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
1.49 Mб
Скачать

081112 Лекция 9

http://bourabai.kz/os/lecture16.htm

Файловые системы unix Традиционная фс s5

Поддерживает логическую организацию файлов в виде последовательности байт. Различают обычные файлы, каталоги и специальные файлы. Имеет иерархическую структуру, каталог верхнего уровня всегда располагается на системном устройстве и называется root.

Для связи иерархии файлов, расположенных на разных носителях, используется вмонтирование и исполняется системным вызовом mount.

Используется три типа имени файлов – краткое, полное, относительное.

Привилегии доступа к файлу делятся на три категории: владелец, член группы владельца и все остальные. Так же в системе существует привилегированный пользователь , имеющий полные права доступа ко всем файлам системы.

Определенно три вида доступа к файлу – чтение, запись и выполнение. В общем случае файл может располагаться в несмежных блоках дисковой памяти и задается последовательностью блоков из 13ти элементов.

Вся информация о файле (кроме его символьного имени) хранится в специальной системной таблице – индексном дескрипторе inode-файлов. Индексные дескрипторы последовательно пронумерованы и хранятся в отдельной области файловой системы. Номер индексного дескриптора является уникальным именем файла. В дескрипторе ведется учет ссылок на этот файл из всех каталогов. Когда количество ссылок 0, дескриптор уничтожается.

Нулевой блок содержит загрузчик операционной системы. 1 блок – «супер блок» - содержит общие сведения о файловой системе: размер ФС (сколько занимает), размер области индексных дескрипторов, число дескрипторов, список свободных блоков, список свободных дескрипторов.

В области индексных дескрипторов они упорядочены по номерам.

Порядок открытия файлов

  1. Проверяется, существует ли файл и, если нет, то можно ли его создать.

  2. Проверяются права доступа.

  3. Если с файлом уже не ведется работа, то его индексный дескриптор копируется в ОП.

  4. В области ядра создается структура типа File, отображающая текущее состояние и операции обмена данными с файлом.

  5. Делается отметка в контексте процесса, совершившего системный вызов на операцию с данным файлом.

Виртуальная фс vfs (Virtual File System)

Информация о файловой системе и файлах разбивается на две части: зависимая от типа ФС и независимая. Ядро оперирует только независимой частью, а VFS транслирует его запросы в конкретные операции ФС. Независимая информация хранится в структуре ядра vnode, зависимая – inode.

Поддерживаются обычные файлы, каталоги, именованные конвейеры, символьные связи и отображения в памяти. Поддерживаемые ФС описываются массивом структур vfssw [].

Struct vfssw yfssw [] = {

{0, 0, 0, 0},

{“vxfs”, vxinit, &vx_ops, 0},

{“s5”, vx_init, &vx_ops, 0},

{“cdfs”, cdfsinit, &cdfs_ops, 0},

}

1- Символьное имя ФС, 2 – указатель на функцию инициализации, 3- указатель на структуру, описывающую функции, реализующие абстрактные операции ФС vfs над конкретной ФС, 4- флаги.

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

Абстрактные операции над файлами описываются в структуре vnodeops, и для каждой из них определен макрос с общим для всех типов ФС именем: vop_open, vop_read, ….

Работа ядра с файлами основана на использовании структуры vnode.

V_op используется для связи файла с конкретными реализациями файловых операций.

V_vfsp связывает файл с определенным типом ФС.

V_type – тип файла

V_pages – указывает на таблицу физических страниц памяти, если файл в неё отображен.

V_filockes - блокировки, примененные процессами к отдельным областям файлов.

V_data – это указатель на структуру inode.

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

Поля структуры file:

flag – это режим открытия (только для чтения, для чтения и записи и тд)

struct vnode* f_vnode – это указатель на структуру vnode

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

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

file* f_next, f_last – указатель предыдущий и на следующий файл