Ю. Вахалия - UNIX изнутри (2003) (1114670), страница 81
Текст из файла (страница 81)
В современных системах ()М1Х для этой цели используются различные формы списка о/х (виртуальных файловых систем). О них мы расскажем чуть позже в разделе 8.9. 8.3. Файловые системы 345 твв Рис. 8.5. Монтнрованнв одной файловой системы в другую Определение монтируемых подсистем скрывает подробности организации хранения информации от пользователя. Адресное пространство файлов является однородным, и пользователю не нужно указывать букву диска как часть имени файла (как это принято в системах М5-1)05 или ЧМ5).
Файловые системы могут создаваться индивидуально для проведения резервного копирования, архивирования или восстановления. Системный администратор может регулировать уровень зашиты каждой файловой системы, например, делая некоторые из них доступными только для чтения. Монтируемые файловые системы накладывают некоторые ограничения на иерархию файлов. Размер файла может расти только до значения, определяемого величиной свободного пространства файловой системы, к которой он относится. Операции переименования и назначения жестких связей не могут »пересекать границу» файловой системы.
Каждая файловая система должна располагаться на отдельном логическом диске и ограничивается размером зтого диска. 8.3.1. Логические диски Логический диск — зто элемент, используемый для хранения информации, видимый ядром системы как линейная последовательность блоков фиксированного размера, доступных в произвольном порядке. Драйвер дискового устройства (см, раздел 16.б) производит отображение блоков на физические гредства хранения. Для создания файловой системы на диске в 1)Ы1Х используются утилиты пе»ууз или главк Каждая файловая система занимает один логический диск.
Логический диск может содержать только одну файловую 346 Глава 8. Базовые элементы и интерфейс файловой системы систему, На некоторых логических дисках файловая система может отсутствовать, например, если диск используется подсистемой памяти для свопинга. Поддержка логических дисков позволяет размечать физический объем устройства различными способами. В простейшем случае каждый логический диск отображает все физическое пространство диска полностью. Обычно диск разделяется на некоторое количество непрерывных разделов, каждый из которых является логическим устройством. В ранних системах 1Лх1!Х встречался только такой способ разбиения дисков. В результате слово «раздел» и сейчас часто применяется для описания физического пространства файловой системы.
В современных системах 13)х11Х поддерживаются и другие конфигурации хранения данных на дисках. Несколько дисков могут быть объединены в ло. гический диск или том; таким образом, система может поддерживать файлы, имеющие размеры большие, чем объем одного диска. Зеркалирование диска (ш1ггоппц) позволяет проводить резервное копирование данных', что увеличивает надежность файловой системы. Раси1елленмые диски (згпре зегз)' позволяют увеличивать пропускную способность системы путем чередования данных в наборе дисков'. Использование КАЮ-устройств совмегцает в себе отказоустойчивость и высокую производительность, отвечающие требованиям различных типов установок 111~.
8.4. Специальные файлы Одной из отличительных черт системы 1Л»ПХ является распространения понятия файла на все объектз, относящиеся к вводу-выводу, в том числе каталоги символических ссылок, аппаратные устройства (диски, терминалы и принтеры), псевдоустройства (системная память) а также элементы коммуникаций (каналы и сокеты). Доступ к каждому из перечисленных объектов производится путем обращения к дескриптору файла.
Действия над специальными файлами осуществляются при помощи тех же системных вызовов, что и для работы с обычными файлами. Например, пользователь может послать данные на принтер простым открытием файла, ассоциированным с указанным принтером, предварительно сохранив информацию в этом файле. С другой стороны, система (П»11Х использует простую байт-ориентированную модель при работе с файлами.
Многие приложения требуют более ' Способ избыточной записи данных, при котором данные одного физического диска автоматически дублируются на другом; в случае присоединения двух дисков к одному контроллеру речь уже идет об удвоении дисков (д|зк дпр1ех1пх), — Прим. ред. з Разделы, распределенные по нескольким дискам.
— Прим. ред. з Надежность всей системы ниже надежности составляющих ее дисков. — Прим. ред. 8.4. Специальные файлы 347 сложных методик, таких как доступ к записям или доступ, основанный на индексации. Для таких приложений модель 1Л ПХ является недостаточной, и поэтому разработчики создают свои собственные методы доступа к файлам ва базе этой модели. Некоторые объекты ввода-вывода не поддерживают всех файловых операций. Например, невозможно производить произвольный доступ или позиционирование по отношению к терминалам и принтерам. Часто приложения нуждаются в проверке, к файлу какого типа они производят доступ (обычно путем вызова 61а1). 8.4.1. Символические ссылки В ранних версиях (31ч'1Х, таких как 8'»'КЗ или 4.1ВЯ), поддерживались только жесткие ссылки, Хотя такие ссылки очень удобны, они обладают некоторыми недостатками.
Жесткая ссылка не может пересечь границы файловой системы. Создание ссылок на каталоги часто разрешается только суперпользователю, который нс особо «горит> желанием это делать. Дело в том, что невнимательно созданные ссылки способны повлечь создание замкнутой цепи в дереве каталогов, что приведет к возникновению проблем у многих утилит, таких как дц или Влд, чросматривающих дерево каталогов рекурсивно. Единственной причиной, по которой система ())Ч!Х разрешает пользователям (привилегированным) создавать жесткие ссылки ца каталоги, является отсутствие вызова пйдй в ранних версиях ОС (ЗЪ'К2 и менее).
Для создания каталога пользователь должен был вызывать функцию пйпод, которая создавала специальный файл каталога, после чего двукратно вызывался 11пХ для добавления «.» и «..». Это приводило к появлению некоторых проблем, а также состязательности, поскольку три вышеперечисленные операции не являются неделимыми 1Ц. Вызов пйой (и ппвй) появился в системе ЗЧКЗ, но поддержка жестких связей с каталогами осталась в ОС для обратной совместимости со старыми приложениями. При применении жестких ссылок также имеют место проблемы управления. Представьте, что пользователь Х является владельцем файла с именем /вм/Х/й(е1.
Другой пользователь (У) может создать на этот файл жесткую ссылку и вызывать ее как /вм/У/11пк1 (см. рис. 8.6). Для этого пользователю У достаточно иметь прана на выполнение в каталоги, присутствующие в полном имени, и права на запись в каталог /цм/У. Через некоторое время пользователь Х вправе произвести удаление ссылки на Бйе1, после чего считать, что файл был удален (обычно пользователи не проверяют счетчики ссылок на свои файлы). Однако файл продолжает существовать, так как на него имеется еще одна ссылка.
Конечно, владельцем ссылки /цм/У/11пк1 является пользователь Х, хотя она была создана У, Если пользователь Х защитит файл от записи, пользователь У не сможет произвести в нем изменения. Более того, пользователю Х не 348 Глава 8. Базовые элементы и интерфейс файловой системы обязательно желать, чтобы файл существовал постоянно, В системах, где использование диска лимитируется квотами, файл будет ограничивать доступное пространство пользователя Х. Пользователь Х не имеет возможности узнать местонахождение ссылки, если пользователь У защитил каталог /цз~/У от чтения (или если Х не знает номер индексного дескриптора файла). Рис.
8.6. Жесткие ссылки на файл В системе 4.2ВВР были впервые представлены символические ссылки, которые могут быть как абсолютными, так и относительными. Позже зто новое средство было принято большинством разработчиков ОС, а также добавлено в файловую систему з5Ь 5ЧК4. Для создания символической ссылки служит вызов зушйл1. Ссылка — это специальный файл, указывающий на другой файл (или связываемый с файлом).
Для идентификации файла как символической ссылки используются ее атрибуты. Внутри такого файла содержатся данные, показывающие путь к связываемому файлу. Многие системы позволяют сохранять короткие имена путей к ссылкам внутри их индексного дескриптора. Впервые такая возможность появилась в ()ЕТК1Х. Полное имя символьной ссылки может быть как абсолютным, так и относительным. Процедуры преобразования путей опознают символьные ссылки и преобразуют их с целью получения имени связанного с ними файла. Если используется относительное имя, то оно интерпретируется в зависимости от каталога, в котором находится ссылка.
Хотя символические ссылки обрабатываются незаметно для большинства программ, некоторые утилиты должны обладать возможностью их обнаружения и обработки. Это можно сделать при помощи системного вызова 1з1а1, который запрещает преобразование последней символьной ссылки на полное имя. Таким образом, если ссылка шуйлк указывает на файл шуй(е, то вызов Маг(шуйпй, ...) возвратит атрибуты шуйлк, а вызов з1а1(шуИпк, ...) покажет атрибуты ануй(е. Имея возможность обнаружения ссылок при помощи 1з1а1, пользователь в состоянии просмотреть содержимое ссылки, вызвав функцию ~еаойлк.
8.4. Специальные файлы 349 8.4.2. Каналы и файлы Р!ГО Каналы и файлы Г1ГΠ— это элементы системы, представляющие потоки, функционирующие по принципу «первым вошел, первым вышел». Их основные отличия между собой заключаются в методе создания. Файл Г1ГО создается путем вызова вислого, после чего он может открываться и использоваться любым процессом, знающим его имя и обладающим ссютветствующими полномочиями. Он продолжает существовать до тех пор, пока не будет удален принудительно.
Канал создается вызовом р1ре, который возвращает дескрипторы чтения и записи. Процесс, создавший канал, имеет возможность передавать эти дескрипторы своим потомкам через вызов 1ой, таким образом разделяя между ними канал. У одного канала может быть несколько получателей и отправителей данных.' После того как у канала не остается ни одного активного читающего или пишущего процесса, ядро автоматически удаляет его. Операции ввода-вывода для файлов Г1ГО и канал очень схожи. Одни процессы добавляют данные в конец элемента, в то время как процессы-получатели извлекают данные из его начала.
После прочтения данных происходит их удаление из конвейера, после чего канал оказывается недоступным даже для других получателей. Ядром определен параметр Р1РЕ ВОР (равный по умолчанию 5 120 байт), который ограничивает объем данных, храня- шихся внутри конвейера. Если запись информации приводит к переполнению файла Г1ГО или канала, читающий процесс будет заблокирован до тех пор, пока из элемента не будет удалено достаточное количество данных (при помощи их считывания). Если процесс попытается за один прием произвести запись данных большего объема, чем значение Р1РЕ В1)Е ядро не сумеет гарантировать неделимость операции записи.