Ю. Вахалия - UNIX изнутри (2003) (1114670), страница 82
Текст из файла (страница 82)
В этом случае данные могут оказаться перемешаны с информацией, записанной другими процессами. Чтение из файла Г1ГО отличается немногим. Если запрашиваемый размер данных оказывается большим, чем текущий объем элемента, ядро прочтет тот объем информации, который содержится в нем, и возвратит процессу количество считанных байтов. Если элемент в текущий момент не содержит данных, читающий процесс будет заблокирован до тех пор, пока другой процесс не произведет запись в канал. Флаг О ЙВЕьАт' (устанавливаемый через вызов орел для файлов Г1ГО или 1спс1) изменяет режим работы канала или файла Г1ГО на неблокирующий.
В этом случае чтение и запись завершатся в любом случае без приостановки работы процессов, при этом будет передано максимально возможное количество данных. Канал поддерживают счетчики количества текущих читающих и пишущих процессов. После того как последний пишущий закроет канал, ядро системы разбудит все ожидающие процессы, которые смогут прочесть данные, оставшиеся в канале.
После освобождения канала они получат при очередном вызове геао значение О, что будет интерпретировано ими как конец файла. После ' Разделять доступ к каналу могут только те потомки, которые были создаиы уже после его по- явления. 350 Глава 8. Базовые элементы и интерфейс файловой системы того как последний процесс-получатель закроет канал, ядро пошлет сигнал 516Р1РЕ всем заблокированным процессам-отправителям. Все последуюшяе вызовы еп1е для этого канала возвратятся с ошибкой ЕР1РЕ. Изначальная реализация каналов использовала файловую систему. Каждому каналу присваивался индексный дескриптор и список блокировки.
Во многих вариантах системы ВБР для реализации каналов были использованы сокеты (см. раздел 17.10.3). В ОС 5ЧК4 каналы и файлы НЕО построены на 5ТКЕАМ5. Более подробно о иих вы прочтете в разделе 17.9. Каналы в ЮК4 являются двунаправленными. Оии поддерживают отдельные потоки данных, передаваемые в каждом направлении. Такой вариант более подходит для большинства приложений, требуюших полнодуплексного механизма взаимодействия процессов.
8.5. Базовые файловые системы Традиционное ядро (ЛЧ1Х имеет монолитную файловую организацию и может использовать только одну файловую систему — з5Ь. Система ЕЕ5 от разработчиков 4.2ВБР предоставила производителям ОС альтернативу. Однако поддерживаемая в те времена базовая структура операционных систем ие позволяла з5Ь и РЕ5 функционировать вместе.
Большинство производителей остановило свой выбор иа ЕЕ5, ио некоторые из иих поддерживали з5Ь из соображений обратной совместимости. В любом случае, ии одно из этих решений ие являлось удовлетворительным. Более того, обе файловые системы рассчитаны иа обшие приложения разделения времени, поэтому многие разработчики программ нашли их недостаточно подходящими для своих нужд.
Например, приложениям работы с базами данных нужна более совершенная поддержка обработки транзакций. Приложениям, использующим объемные файлы (как правило, только считываемые), необходимо предоставить средство выделения программе непрерывных участков памяти, увеличивающее производительность операций последовательного чтения. Первые версии (Лч1Х ие поддерживали добавление новых файловых систем независимыми производителями.
Для этого требовалось вносить большой объем изменений в ядро. Это ограничение определяло операционную систему 1111!Х как базовую платформу для достаточно большого диапазона различных типов приложений. С течением времени все больше увеличивалась необходимость поддержки файловых систем других ОС. Ее отсутствие ограничивало возможности (11ч1Х, установленной иа персональном компьютере, ие позволяя иметь доступ к разделам РО5, находящимся на той же машине, или гибких дисков, размеченных под РО5.
Более важен тот факт, что развитие компьютерных систем привело к необходимости разделения файлов между несколькими компьютерами. В середине 80-х годов разработчики увлеклись созданием распределенных файло- 8,6. Архитектура чпоое/твв 351 вых систем. В результате появились такие системы, как Аетосе Р11е 56агспй (лгу) от корпорации АТЬТ, ХегсеогГс г11е 5увгет (МЮ) от Вцп Мьсгозузсещз и другие, предоставляющие возможность прозрачного доступа к файлам на удаленных узлах, Развитие компьютерных технологий поставило БЛ11Х перед необходимостью проведения кардинальных изменений в базовой структуре файловой системы с целью поддержки нескольких типов файловых систем одновременна В результате появились различные архитектуры, такие как переключение файловых систем (81е вувсет зтч1сс)т) корпорации АТ4 Т 112), ппот(еФГл компании 5вп М1сгозузсещз 18] и лпоЫе корпорации О181са1 Б)ц1рщепс Согрогайоп 113).
Долгое время эти технологии боролись между собой за доминирование на рынке операционных систем. Корпорация АТ с Т лобавила технологии чпос(е/чЬ и ЛРЯ в операционную систему Я'ч'К4, чем положила конец противостоянию, сделав их стандартами де-факто. Интерфейс чпос1е/чЬ претерпел значительные изменения по сравнению с оригинальной реализацией. Хотя это фундаментальное средство поддерживается основными вариантами Г)Л)1Х, на практике интерфейс и реализация в каждой ОС отличаются друг от друга.
В этой главе наиболее подробно булет описан интерфейс операционной системы Я'ч'К4. Краткий рассказ о других реализациях можно найти в разделе 8.11. 8.6. Архитектура чпобе/11тв Интерфейс уводе/ч(в1разработан компанией Вцп Мгсгоэузсешз как базовая структура, поддержива)ощая различные файловые системы. Описываемая технология получила широкое-распространение и стала частью Вузсеш 'ч' Пп1х в БЧК4. 8.6.1. Цели, поставленные перед разработчиками При разработке архитектуры уводе/чЬ выдвигались следующие основные требования: + необходимость одновременной подлержки несколько различных типов файловых систем, в том числе для Г)Л11Х (з5(з или иЬ) и других ОС (например, Г)ОЯ, А/11Х и т. д.); + поддержка содержания в разных разделах одного диска различных типов файловых систем. Г1осле монтирования разделы должны быть представлены для пользователя в обычном виде, как однородная файловая система.
Пользователь при этом лолжен видеть дерево файлов полностью и не беспокоиться насчет различий в представлении на дисках каждого подлерева системы; 352 Глава 8. Базовые элементы и интерфейс файловой системы + система должна обеспечивать разделение файлов по сети. При этом удаленная файловая система обязана быть доступна пользователю точно так же, как и система на локальной машине; + производители могут создавать собственные типы файловых систем и добавлять их в ядро в качестве модулей. Основной целью разработки было создание структуры ядра для доступа и действий с файлами, а также четко определенный интерфейс между ядром и остальными модулями, в которых реализованы файловые системы.
8.6.2. Немного о вводе-выводе устройств Первые версии 1)1ч1Х имели только один тип файловой системы, но при этом поддерживали различные типы файлов. Кроме обычных файлов система ПХ1Х работает с различными устройствами, доступ к которым организован при помощи специальных файлов устройств. В каждом драйвере имеется собственная реализация процедур ввода-вывода низкого уровня, но при этом интерфейс взаимодействия с пользователем является универсальным, что позволяет осуществлять доступ к файлам устройств точно так же, как и к обычным файлам, Таким образом, поддержка нескольких файловых систем зависит от базовых конструкций устройств ввода-вывода.
Более подробно работа с устройствами ввода-вывода будет показана в разделе 16,3, здесь же мы остановимся только на части интерфейса, относящейся к нашей теме. В системе УХ1Х все устройства поделены на две категории: блочные и символьные. Существуют небольшие различия в интерфейсе взаимодействия с ядром для каждой категории устройств, но при этом используются одни и те же базовые конструкции. Система У1ч1Х требует, чтобы каждое символьное устройство поддерживало стандартный набор операций.
Такие операции собраны в структуре сдеч1и, являющейся совокупностью указателей функций. зтгчсг соечзн ( 1п1 (*О преп)(); 1пг ("и) с)оае)(): 1п1 (*б геао)(): 1пг (*о иг11е)(): ) ссечзи1). То есть сг)ечючЦ представляет собой глобальный массив структур сг)ечаа. Он называется переключателем символьных устройств. Каждый тип устройства поддерживает собственный набор функций, реализующих его интерфейс. Например, линейный принтер может иметь функции 1рорепО, 1рс1оэеО и т, д.
Каждое устройство ассоциировано с уникальным основным номерам устройства. Этот номер используется как индекс в глобальном массиве о)ечзчг1], предоставляя тем самым каждому устройству собственный элемент в переключателе, Поля каждого элемента указывают на функции, поддерживаемые устройством. б.б. Архитектура члоое!чгв 353 Представим, что пользователь вызывает геад по отношению к файлу символьного устройства. В традиционном варианте 1Лч1Х обработка этого вызова происходит по алгоритму, описанному ниже. 1. Использовать дескриптор файла для получения объекта открытого файла.
2. Проверить по объекту, не открыт ли файл на чтение. 3. Получить указатель на индексный дескриптор в оперативной памяти (1п-соге 1поое). Такие дескрипторы (также называемые дескрипторами 1п-шешогу) являются структурами данных файловой системы, поддерживающими в памяти атрибуты используемых файлов. Более подробно прочесть о них можно в разделе 9.3.1. 4. Заблокировать индексный дескриптор, тем самым установив последовательный характер доступа к файлу. 5.