входная информация: имя специального файла, соответствующего демонтируемой файловой системе
выходная информация: отсутствует
{
if (пользователь не является суперпользователем)
return (ошибку);
получить индекс специального файла (алгоритм namei);
извлечь старший и младший номера демонтируемого устройства;
получить в таблице монтирования запись для демонтируемой системы, исходя из старшего и младшего номеров;
освободить индекс специального файла (алгоритм iput);
удалить из таблицы областей записи с разделяемым текстом для файлов, принадлежащих файловой системе;
/* глава 7ххх */
скорректировать суперблок, индексы, выгрузить буферы на диск;
if (какие-то файлы из файловой системы все еще используются) return (ошибку);
получить из таблицы монтирования корневой индекс монтированной файловой системы;
заблокировать индекс;
освободить индекс (алгоритм iput);
/* iget был при монтировании */
запустить процедуру закрытия для специального устройства;
сделать недействительными (отменить) в пуле буферы из демонтируемой файловой системы;
получить из таблицы монтирования индекс точки монтирования;
заблокировать индекс;
очистить флаг, помечающий индекс как «точку монтирования»;
освободить индекс (алгоритм iput);
/* iget был при монтировании */
освободить буфер, используемый под суперблок;
освободить в таблице монтирования место, занятое ранее;
}
Рисунок 5.27. Алгоритм демонтирования файловой системы
Рисунок 5.28. Файлы в дереве файловой системы, связанные с помощью функции link
5.15 LINК
Системная функция link связывает файл с новым именем в структуре каталогов файловой системы, создавая для существующего индекса новую запись в каталоге. Синтаксис вызова функции link:
link(source file name, target file name);
где source file name — существующее имя файла, а target file name — новое (дополнительное) имя, присваиваемое файлу после выполнения функции link. Файловая система хранит имя пути поиска для каждой связи, имеющейся у файла, и процессы могут обращаться к файлу по любому из этих имен. Ядро не знает, какое из имен файла является его подлинным именем, поэтому имя файла специально не обрабатывается. Например, после выполнения набора функций:
link("/usr/src/uts/sys", "/usr/include/sys");
link("/usr/include/realfile.h", "/usr/src/uts/sys/testfile.h");
на один и тот же файл будут указывать три имени пути поиска: «/usr/src/uts/sys/testfile.h», «/usr/include/sys/testfile.h» и «/usr/include/realfile» (см. Рисунок 5.28).
Ядро позволяет суперпользователю (и только ему) связывать каталоги, упрощая написание программ, требующих пересечения дерева файловой системы. Если бы это было разрешено произвольному пользователю, программам, пересекающим иерархическую структуру файлов, пришлось бы заботиться о том, чтобы не попасть в бесконечный цикл в том случае, если пользователь связал каталог с вершиной, стоящей ниже в иерархии. Предполагается, что суперпользователи более осторожны в указании таких связей. Возможность связывать между собой каталоги должна была поддерживаться в ранних версиях системы, так как эта возможность требуется для реализации команды mkdir, которая создает новый каталог. Включение функции mkdir устраняет необходимость в связывании каталогов.
алгоритм link
входная информация:
существующее имя файла
новое имя файла
выходная информация: отсутствует
{
получить индекс для существующего имени файла (алгоритм namei);
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии