Книга: Архитектура операционной системы UNIX

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

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

Синтаксис вызова системной функции umount:

umount(special filename);

где special filename указывает демонтируемую файловую систему. При демонтировании файловой системы (Рисунок 5.27) ядро обращается к индексу демонтируемого устройства, восстанавливает номер устройства для специального файла, освобождает индекс (алгоритм iput) и находит в таблице монтирования запись с номером устройства, равным номеру устройства для специального файла. Прежде чем ядро действительно демонтирует файловую систему, оно должно удостовериться в том, что в системе не осталось используемых файлов, для этого ядро просматривает таблицу индексов в поисках всех файлов, чей номер устройства совпадает с номером демонтируемой системы. Активным файлам соответствует положительное значение счетчика ссылок и в их число входят текущий каталог процесса, файлы с разделяемым текстом, которые исполняются в текущий момент (глава 7), и открытые когда-то файлы, которые потом не были закрыты. Если какие-нибудь файлы из файловой системы активны, функция umount завершается неудачно: если бы она прошла успешно, активные файлы сделались бы недоступными.

Буферный пул все еще содержит блоки с «отложенной записью», не переписанные на диск, поэтому ядро «вымывает» их из буферного пула. Ядро удаляет записи с разделяемым текстом, которые находятся в таблице областей, но не являются действующими (подробности в главе 7), записывает на диск все недавно скорректированные суперблоки и корректирует дисковые копии всех индексов, которые требуют этого. Казалось, было бы достаточно откорректировать дисковые блоки, суперблок и индексы только для демонтируемой файловой системы, однако в целях сохранения преемственности изменений ядро выполняет аналогичные действия для всей системы в целом. Затем ядро освобождает корневой индекс монтированной файловой системы, удерживаемый с момента первого обращения к нему во время выполнения функции mount, и запускает из драйвера процедуру закрытия устройства, содержащего файловую систему. Впоследствии ядро просматривает буферы в буферном кеше и делает недействительными те из них, в которых находятся блоки демонтируемой файловой системы; в хранении информации из этих блоков в кеше больше нет необходимости. Делая буферы недействительными, ядро вставляет их в начало списка свободных буферов, в то время как блоки с актуальной информацией остаются в буферном кеше. Ядро сбрасывает в индексе системы, где производилось монтирование, флаг «точки монтирования», установленный функцией mount, и освобождает индекс. Пометив запись в таблице монтирования свободной для общего использования, функция umount завершает работу.

алгоритм umount
входная информация: имя специального файла, соответствующего демонтируемой файловой системе
выходная информация: отсутствует
{
 if (пользователь не является суперпользователем) return (ошибку);
 получить индекс специального файла (алгоритм namei);
 извлечь старший и младший номера демонтируемого устройства;
 получить в таблице монтирования запись для демонтируемой системы, исходя из старшего и младшего номеров;
 освободить индекс специального файла (алгоритм iput);
 удалить из таблицы областей записи с разделяемым текстом для файлов, принадлежащих файловой системе;
 /* глава 7ххх */
 скорректировать суперблок, индексы, выгрузить буферы на диск;
 if (какие-то файлы из файловой системы все еще используются) return (ошибку);
 получить из таблицы монтирования корневой индекс монтированной файловой системы;
 заблокировать индекс;
 освободить индекс (алгоритм iput);
 /* iget был при монтировании */
 запустить процедуру закрытия для специального устройства;
 сделать недействительными (отменить) в пуле буферы из демонтируемой файловой системы;
 получить из таблицы монтирования индекс точки монтирования;
 заблокировать индекс;
 очистить флаг, помечающий индекс как «точку монтирования»;
 освободить индекс (алгоритм iput);
 /* iget был при монтировании */
 освободить буфер, используемый под суперблок;
 освободить в таблице монтирования место, занятое ранее;
}

Рисунок 5.27. Алгоритм демонтирования файловой системы


Рисунок 5.28. Файлы в дереве файловой системы, связанные с помощью функции link

Оглавление книги


Генерация: 0.961. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз