Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы и ответы по ОС.doc
Скачиваний:
37
Добавлен:
27.08.2019
Размер:
3.35 Mб
Скачать

44 Вопрос. Журналируемые фс.

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

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

При такой организации индексные узлы имеют ту же структуру, что и в UNIX, но они теперь не располагаются в фиксированной позиции на диске, а рассредоточены по всему журналу. Тем не менее, когда программа находит индексный узел, определение расположенных блоков выполняется обычным способом. Создается массив индексных узлов, индексированный по номерам узлов. Элемент I массива указывает на узел I на диске. Массив храниться на диске, но также содержится в КЭШе – быстро!

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

Проблема: Однажды журнал разрастется на весь диск. Кстати многие сегменты могут содержать уже ненужные блоки.

Решение: для решения проблемы повторного использования блоков в старых сегментах в ФС с журнальной структурой выполняется программный поток чистильщика, который сканирует журнал и пытается сделать его более компактным. Начинает с первого сегмента и считывает индексные узлы и файлы в нем, затем он смотрит в текущий массив индексных узлов, проверяя, являются ли индексные узлы все еще текущими и используются ли еще блоки файлов. Если нет, информация отбрасывается, а рабочие индексные узлы и файлы записываются в память, чтобы потом записать в след сегмент. Исходный сегмент помечают как свободный. В результате диск превращается в большой кольцевой буфер.

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

Рост производительности показывает, что LFS превосходит ФС UNIX при множестве небольших записей на порядок, а при чтении и больших записях обладает близкой или более высокой производительностью.