Реализация директорий.

Распределение дискового пространства.

Системная область Область данных
Загрузочный сектор Служебные структуры данных ФС
     

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

Для ОС Unix служебная область содержит:

1) суперблок – сохранение информации о ФС в целом – н-р, имя ФС.

- указывается размер логического блока

- размер файловой системы в целом

- размер таблицы индексных узлов

и т.д. Этот блок ограничен – число файлов на диске так же ограниченно.

- битовая карта либо один блок из списка свободных блоков, сохраняются соответствующие счетчики.

- список свободных индексов и список свободных счетчиков

2) таблица индексов (размер фиксирован)

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

(директория – это файл, имеющий определенный системный формат)

 

Директория хранит ссылки на файлы.

В MS-DOS директория организуется следующим образом: таблица размещении файлов должна быть целиком помещена в ОС.ОС организуется так, чтобы она могла получить доступ к любому файлу. Логически директория – таблица с записями.

Запись

имя расширение атрибут Не используется Время создания файла Дата создания Номер первого блока размещение
8 байт

FAT 2^16 – максимальная нумерация файлов

FAT 12 – адрес до 2х Мб.

FAT16

FAT32 – длина адреса – 28 бит

Рассчитана на работу с директориями. Для выделения большего места под имя необходимо как-то увеличить размер соответствующего поля.

 

Директории в Windows: система длинных имен и поддержка FAT32в структуру директории включается указатель на длинное имя. Оставляется так же запись для совместимости с MS-DOS, образующаяся по внутренним правилам.

1 Мб – совместимость с Windows NT.

1 Мб – контрольная сумма для длинных имен

в 10 байт записывается:

4б - дата создания

2б – дата последнего доступа

2б – старшие биты № начального блока

используется 10-разрядная адресация

Дополнительные записи для хранения длинного имен:

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

MS-DOS не знает о дополнительных записях в директориях, Для обеспечения совместимости MS-DOS и Windows каждому файлу присваивается два имени – длинное и короткое. Проблема: MS-DOS – не должна размещать на не удаленные длинные имена новые файлы – чтобы такого не произошло используются контрольные суммы.

Директории Unix: имеют простую структуру, вся дополнительная информация – в индексах.

имя Номер индекса
   

Сохраняются сведения о длине длинных имен.

 

 

Лекция 11.

Надежность файловой системы:

Выделяют два вида сбоев:

Жесткие сбои – связанные с радикальной поломкой оборудования.

Мягкие сбои – возникают при внезапном отключении питания.

Жесткие сбои.

Единственный способ восстановления ФС – из резервной копии на другом носителе. Разработчики ФС создают средства, которые обеспечивают создание копий и напоминать о создании копий пользователю.

Мягкие сбои.

Нарушение данных ФС, носитель с данными остается неповрежденным, но данные могут быть потеряны. Для обнаружения сбоев существует понятие – целостность файловой системы – подразумевает непротиворечивость хранящихся в ней данных. Атомарность – неделимость. В ФС существуют атомарные операции, прерывание которых влечет нарушение целостности системы в результате потери данных в ОП. Целостность подразумевает целостность системных данных и данных пользователя. Однако, разработчики заботятся о целостности служебных данных.

Пр-р: блоки из файла удалены, но не добавлены в блок свободной памяти не включены – потерянные блоки.

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

Средства:

- позволяющие уменьшить возможный вред при потере данных – включается на этапе разработки

- позволяющие восстановить целостность ФС (при повреждении данных пользователем либо при некорректном выключении самой ОС)

-предотвращающие повреждения

1 группа – выбирается рациональный порядок действий

Пр-р: создание жесткой ссылки: необходимо создать запись в каталоге, указывающую на i-узел, а в узле изменить число ссылок. Следует сначала изменить счетчик, так как в случае ошибки пользователь заметит нехватку ссылки в каталоге, а иначе при удалении одной из ссылок файл был бы потерян. Однако в этом случае даже при удалении всех ссылок файл не удалится, а значит будет потеряно дисковое место, но не информация.

2 группа – scan disk или file system check

Непротиворечивость блоков с данными – fsck

создается таблица

Адрес или номер блока Ставится счетчик, если блок занят Ставится счетчик, если блок свободен
     

Сканируются i-узлы. В этой таблице любой блок может встретиться ровно один раз в двух последних столбцах. Если в обоих столбцах напротив бока стоит ноль, то это потерянный блок, включается в список свободных, если в обоих по единице – исключается из списка свободных, если блок занят 2-мя файлами, то непонятно, какую информацию он в итоге содержит, он копируется в свободный блок, и по одной из ссылок записывается адрес этого нового блока.

Проверка целостности каталогов:

Корректируется таблица индексов и существующее число ссылок. Приводится в соответствие с количеством ссылок. Если файл не включен ни в один каталог, его место освобождается.

3 группа – сделать файловые операции неделимыми.

Любая операция – транзакция, и либо выполняется полностью, либо не выполняется вообще. Н-р, применяется занесение действий в журнал (журналируемые ОС) транзакций. При сбое происходит откат.

Все эти действия снижают эффективность данной системы.

Производительность ФС:

Определяется длительностью дисковых операций, на что не могут повлиять разработчики ОС. Т. о. стремятся уменьшить число дисковых операций с помощью их удачного расположения а так же с помощью кэширования дисковых блоков.

Рассмотрим методы модификации алгоритмов чтения – записи.

Кэширование блоков.

В ОП создается буферный КЭШ. Предусматриваются буферы различной емкости. Можно записывать индексные файлы. Сохраняется первый элемент связанных блоков и индекс блоков. Если происходит обращение к блоку, проверяется, есть ли блок в буфере, а затем ищется на диске. Проблема: накапливаются различия в информации- необходимо обеспечить доступ в две стороны и обмен. Вторая проблема – ограниченность памяти.

Кэширование со сквозной записью (MS-DOS) –данные моментально записываются в постоянную память.

Структура буферного КЭШа в ОС Unix:

Любой буфер состоит из двух частей:

- заголовочной

- области данных

в памяти могут располагаться в разных местах.

Область данных совпадает по размерам с дисковым блоком, заголовок состоит из нескольких полей для определения:

- номер устройства

- номер блока=адрес блока (идентифицируется по номеру устройства)

- указатель текущего состояния – заблокирован (занят, т.к. с ним работают ОС или непосредственно процессор) или доступен – определяется по флагу

- флаг, указывающий на то, произошли ли изменения данных в блоке и тебуется ли его перезапись

- путь к соответствующему блоку

- ФС поддерживает в рамках ОС буфера КЭШ структуры

- поддерживает ХЭШ - очередь

- указатели на следующий и предыдущий буферы

ХЭШ – очередь создается в виде таблицы. Эта таблица состоит из массива, каждый элемент которого может содержать несколько ключей, определение идет по индексу

Список свободных буферов:

 

Каждый буфер, который не занят вводом/выводом, должен находиться в списке свободных буферов. Ос обращается к этому списку и забирает первый немодифицированный блок. После освобождения блока, он возвращается в список буферов, если ошибок не было, блок включается в конец списка, иначе - в начало. В буферном ХЭШе хранятся как системные, так и пользовательские данные, но сохраняются по-разному. Для быстрого доступа к буферам организуется ХЭШ – таблица.

В любых данных выделяется поле – ключ. Поиск организуется по ключу. Данные представляются массивом, в котором порядковый номер данных совпадает с ключом: индекс=ключ. Возникает проблема: массив не может быть слишком большим, а диапазон значений требуемых ключей существенно больше индексов. Или наоборот, набор используемых ключей оказывается существенно меньше определяемого массивом диапазона. Т.о. массив индексов берется небольшой, а массив ключей отображается на реальное значение индексов. Значение ключа приводится к диапазону индексов целочисленным делением. Но в этом случае несколько ключей попадают на один элемент массива. В ХЭШ- табл. С элементом массива сопоставляется список элементов с разным значением ключа для одного индекса.

 

стараются, чтобы ХЭШ – очереди, в которых придется выполнять линейный поиск, были небольшие. ХЭШ – функция или функция хэширования должна как можно более случайно сопоставлять ключ и индекс.

В ХЭШ – функцию необходимо передать номер устройства и номер блока.

Этапы:

- вычисляется ХЭШ – функция

- вычисляется индекс

- осуществляется линейный поиск

список свободных буферов и ХЭШ – таблица накладываются друг на друга, список свободных блоков переписывается в ХЭШ – таблице, однако в ней не отображаются неоднозначно свободные блоки.

 

Хранение индексов:

Дисковый блок занят только на момент ввода/вывода, остальное время свободен и доступен другим приложениям.

Для хранения индексов организуется ХЭШ - таблица свободных блоков и таблица свободных индексов.

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

 

Организация работы ядра ОС с буферным КЭШем. Если ядро обращается за поиском блока, оно обрпfoftncz к ХЭШ – таблице. Если в данный момент блок свободен, не блокирован другой процедурой, то ядру немедленно предоставляется блок. Если же блок занят, то новый процесс приостанавливается (редактирование и перезапись). Если происходит обращение к блоку, которого нет в таблице блоков, то выделяется свободный буфер и в него считывается информация с диска. Если список свободных буферов пуст, процесс приостанавливается.

 

 

Лекция 12.