Э. Таненбаум - Архитектура компьютера (1127755), страница 136
Текст из файла (страница 136)
Вызов 1зее~ просто меняет текущую позицию указателя и не производит никакого ввода-вывода. В первом аргументе вызова 11п1 находится номер индексного дескриптора. По этому номеру он создает элемент каталога для второго аргумента и помещает номер 1-попе первого файла в этот элемент каталога. Наконец, он увеличивает число связей в индексном дескрипторе на 1. Вызов вп11п1 удаляет элемент каталога и уменьшает число связей в индексном дескрипторе. Если это число становится равным О, файл удаляется, и все его блоки помещаются в список свободных блоков. Виртуальный ввод-вывод в %1пдовгв ХР Ъ'шооттз ХР поддерживает несколько файловых систем, самые важные из которых — 1«1ТЕ5 (1чТ Е11е 5узгеш — файловая система ХТ) и ЕАТ (Е1!е А1!осаооп ТаЫе — таблица размещения файлов).
Первая была разработана специально для %'шаретта ХР. Вторая является устаревшей файловой системой для М5-005, которая также используется в %'1пботтз 95/98 (хотя и с длинными именами файлов). Поскольку система ЕАТ устарела, мы рассмотрим только файловую систему 1«1ТЕ5. В 1чТЕ5 имя файла может быть длиной до 255 символов. Имена файлов написаны в кодировке Сшсобе, благодаря чему люди в разных странах, где не используется латинский алфавит, могут писать имена файлов на их родном языке. Во всех версиях операционной системы, начиная с %'1пбот«з 2000, тексты меню, сообщений об ошибках и прочих элементов интерфейса хранятся в выделенных для каждого языка конфигурационных файлах, в то время как двоичные файлы едины для всех вариантов языкового окружения.
В 1«'ТЕ5 прописные и строчные буквы в именах файлов считаются разными (то есть «1оо» отличается от «ЕОО»), К сожалению, в Ъ'1п32 АР1 прописные и строчные буквы в именах файлов и каталогов не различаются, поэтому это преимущество теряется для программ,использующих подсистему ЪУш32. Как и в 111ч1Х, файл представляет собой линейную последовательность байтов, максимальная длина которой составляет 2м — 1. Указатели тоже существуют, но их длина не 32, а 64 бита, чтобы можно было поддерживать максималь- Примеры операционных систем 539 ную длину файла. Вызовы функций в ЪЪ'ш32 АР1 для манипуляций с каталогами и файлами в целом напоминают вызовы функций в 1))к11Х, но большинство из них имеют больше параметров и другую модель защиты.
При открытии файла возвращается описатель, который затем используется для чтения и записи файла. В отличие от 1)1ч11Х, описатели не являются маленькими целыми числами, а стандартный ввод, стандартный вывод и стандартная ошибка не определяются заранее как О, 1 и 2 (исключение составляет консольный режим). Основные функции ЪУш32 АР1 для управления файлами перечислены в табл. 6.7 (во второй колонке дается эквивалентная функция 1))ч)1Х). Таблица 6.7. Основные функции УУ1п32 АР1 для ввода-вывода файлов Функция АР! Функция ОМ1Х Списание СгеатеНе Создание файла или открытие существующего файла; функция возвращает описатель орел Ое!етеНе С1озенапб1е НеабНе УУптеНе ЯетНеРо1птег ип!1пк с1озе Удаление существующего файла Закрытие файла Считывание данных из файла Запись данных в файл Установка файлового указателя на заданное место в файле Возвращение свойств файла геаб ттг1те 1зееК ЯетНеАПг1Ьитез зта1 Блокирование области файла, чтобы обеспечить взаимное исключение доступа 1лсКР1!е асят! 0п1осКНе Разблокирование ранее заблокированной области файла Рспт! Рассмотрим эти вызовы.
Вызов СгеасеГт1е используется для создания нового файла н возвращает описатель для них. Эта функция применяется также для открытия уже существующего файла, поскольку в АР1 нет функции ореп. Мы не будем приводить параметры функций АР1, поскольку их очень много. Например, функция СгеатеГт1е имеет семь параметров: + указатель на имя создаваемого или открываемого файла; + флаги, которые сообщают, какие действия разрешено производить с файлом (читать, записывать или то и другое); + флаги, которые показывают, могут ли несколько процессов открывать файл одновременно; + указатель на дескриптор безопасности, который показывает, кто имеет доступ к файлу; + флаги, которые показывают, что делать, когда файл существует и когда не существует; + флаги, связанные с атрибутами архивации, компрессии и т.
д. + описатель файла, атрибуты которого нужно клонировать для нового файла. Следующие шесть функций АР! похожи на соответствующие функции 1ЛчПХ. Последние две позволяют блокировать или разблокировать область файла, чтобы гарантировать процессам исключение доступа к одной и той же области.
540 Глава 6. Уровень операционной системы Листинг 6.4. Фрагмент программы дпя копирования файла с помощью функции АР) системы УУ!пс)очтз ХР. Этот фрагмент написан на языке С, поскольку в языке 3ача нельзя показать необходимые нам низкоуровневые системные вызовы ! Открытие файлов для ввода и вывода. *! тпЬап01е = Сгеавегт1е!"Оата", 6ЕИЕй!С йЕАО, О.
ИОН.. ОРЕИ ЕХ15Т!И6. О, ИНЕЕ); оотпап01е = Сгеатегт)ес'пеыЕ, ВЕИЕй!С ИК1ТЕ, О, ИОСЦ СйЕЯТЕ ЯЕИАТ5, Е1ЕЕ ЯТТК1ВОТЕ ИОИНАЕ. ИНЕЕ): ти Копирование файла. *! оо ! в = йеапгт1е!тппал01е, Ьогтег, ВОЕ 51ЕЕ. Асоопт, ИНЕЕ); Т !в > О 55 сочло > О) Нг!тег!1е!оотпап01е. Ьотгег. соопт, АоспС. ИОЕЕ): ) ыы1е !в > О ДА соопв > О); !" Закрытие файлов. *! С1овеНап01е!тппап01е): 61овеНап01е!оотпап01е); ТАгшт)отчз ХР поддерживает иерархическую файловую систему, напоминающую файловую систему (ЛХТТХ. Однако в качестве разделителя здесь используется не прямой, а обратный слеш (заимствовано из МЗ-1)06). Здесь тоже существует понятие текущего каталога, а пути могут быть абсолютными и относительными. Однако между ЪУ!пс1о)чз ХР и 13)к)1Х есть одно существенное различие.
(Т)к)1Х позволяет монтировать в одно дерево файловые системы с разных дисков и машин, скрывая таким образом от программ структуру диска. ЪУшс(отчз ХР такой возможности не имеет, поэтому абсолютные имена файлов должны начинаться с буквы диска (например, С:'хччшс(откат,зузтеш'51оо.1111). В то же время, возможность монтирования файловых систем в стиле (Т)т)1Х реализована в Ъ'!пс(отчз 2000. Основные функции для работы с каталогами перечислены в табл. 6.8 (также вместе с эквивалентами из (ТЫ1Х).
Таблица 6.8. Основные функции УУ1п32 АР! для работы с каталогами Функция АР! Функция цй!Х Значение Сгва1вп!квот!ту Яеглочеп!тесто!у Е!пс)Е!гвтрйв Е!пт)йвктЕ11в !пйсйг гпкдг орвпсйг гвастйг Создание нового каталога Удаление пустого каталога Начало чтения элементов каталога Чтение следующего элемента каталога Перемещение файла из одного каталога в другой Смена текущего каталога МочеЕОе Зе1Соггепшквототу спс!г Ж!пс)о)чз ХР имеет более сложный механизм защиты, чем ()15!1Х. Когда пользователь входит в систему, его процесс получает маркер доступа от операцион- Использовав эти функции АР1, можно написать процедуру копирования файла, аналогичную процедуре из листинга 6.3.
Такая процедура (без кода проверки ошибок) представлена в листинге 6А. На практике программу для копирования файла писать не нужно, поскольку существует функция СоруЕ11е, которая делает примерно то же самое и реализована в виде библиотечной процедуры. Примеры операционных систем 541 ной системы. Маркер доступа содержит идентификатор безопасности (Беспйгу П), 8П)), список групп, к которым принадлежит пользователь, имеющиеся привилегии и некоторую другую информацию.
Маркер доступа концентрирует всю информацию о защите в одном легко доступном месте. Все процессы, созданные этим процессом, наследуют этот же маркер доступа. Дескриптор безопасности (зесппгу с1езспргог) — это один из параметров, который дается любому объекту при его создании. Дескриптор безопасности содержит список элементов, который называется списком контроля доступа (Ассеьз Сопгго! Ь1зг, АСЬ). Каждый элемент разрешает или запрещает совершать определенный набор операций с объектом какому-либо пользователю или группе. Например, файл может содержать дескриптор безопасности, который определяет, что Иванов не имеет доступа к файлу вообще, Петров может читать файл, Сидоров может читать и записывать файл, а все члены группы ХУУ. могут считать только размер файла.
Если процесс пытается выполнить какую-либо операцию с объектом, используя описатель, который он получил при открытии объекта, диспетчер безопасности получает маркер доступа данного процесса и начинает перебирать элементы списка контроля доступа по порядку. Как только он находит элемент, который соответствует нужному пользователю или одной из групп, найденная информация о разрешении или запрещении доступа принимается в качестве заданной. По этой причине элементы, запрещающие доступ, обычно помещаются в список контроля доступа перед элементами, разрешающими доступ (чтобы пользователь, у которого нет доступа, не смог получить его незаконно, будучи членом одной из групп, которой доступ разрешен).
Дескриптор безопасности также содержит информацию, используемую для аудита доступов к объекту. А теперь рассмотрим, как файлы и каталоги реализованы в Жшдочз ХР. Каждый диск разделен на тома, такие же, как дисковые разделы (11ч1Х. Каждый том содержит файлы, битовые карты каталогов и другие структуры данных. Каждый том организован в виде линейной последовательности кластеров. Размер кластера фиксирован для каждого тома. Он может составлять от 512 байт до 64 Кбайт, в зависимости от размера тома. Обращение к кластеру осуществляется по смещению от начала тома. При этом используются 64-разрядные числа. Основной структурой данных в каждом томе является главная файловая таблица (Мазгег Б1е ТаЫе, МГГ), в которой содержатся записи для каждого файла и каталога в томе. Эти записи аналогичны элементам индексного дескриптора (1-пог(е) в (11ч1Х.