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

12.6 Связывание файлов.

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

12.6.1 Организация связи между каталогом и разделяемым файлом

Рис. 12.11  Структура файловой системы с возможностью связывания файла с новым именем.

Ядро позволяет пользователю связывать каталоги, упрощая написание программ, требующих пересечения дерева файловой системы. Часто имеет смысл хранить под разными именами одну и ту же команду (выполняемый файл). Например, выполняемый файл традиционного текстового редактора ОС UNIX vi обычно может вызываться под именами ex, edit, vi, view и vedit файловой системы. Соединение между директорией и разделяемым  файлом называется  связью или ссылкой (link).  Дерево файловой системы превращается  в циклический граф.

Это удобно, но создает ряд дополнительных проблем.

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

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

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

Каждый из этих методов имеет свои минусы. В случае жесткой связи возникает необходимость поддержки счетчика ссылок на файл, для корректной реализации операции удаления файла.  Например, в  Unix, такой счетчик является одним из атрибутов, хранимым в индексном узле.  Удаление файла одним из пользователей  уменьшает количество ссылок на файл на 1.  Реальное удаление файла происходит, когда  число ссылок на файл становится равным 0.

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

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

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