Э. Таненбаум - Архитектура компьютера (1127755), страница 126
Текст из файла (страница 126)
504 Глава 6. Уровень операционной системы Сектор 11 Сектор О Сектор 11 Сектор О р1 Дор Дорож я е я кв ~ ~в с $ 'я 3з* еео оая Б::й 6 Направление вращения диска Направление вращения диска Рис. 8.18. Варианты расположения файла на диске: файл занимает последовательные секторы (а); файл занимает непоследовательные секторы (б) Для того чтобы операционная система по запросу могла доставить байт или логическую запись п из какого-то файла, она должна пользоваться каким-либо методом для определения местонахождения данных. Если файл расположен последовательно, чтобы вычислить позицию нужного байта или логической записи, операционная система должна знать только место начала файла. Если файл расположен на диске не последовательно, то лишь по начальной позиции файла невозможно вычислить позицию произвольного байта или логической записи в этом файле.
Чтобы найти произвольный байт или логическую зацисгь нужна таблица, называемая индексом файла и позволяющая получать хранящиеся на диске блоки и их физические адреса. Индекс файла может быть организован либо в виде списка адресов блоков 1такая схема используется в П)т)1Х), либо в виде списка логических записей, для каждой из которых даются адрес на диске и смещение. Иногда каждая логическая запись имеет ключ, и программы могут обращаться к записи по атому ключу, а не по номеру логической записи.
В последнем случае каждый элемент таблицы должен содержать не только информацию о местонахождении записи на диске, но и ее ключ. Подобная структура обычно применяется в мэйнфреймах. Альтернативный метод нахождения блоков размещения файла — организовать файл в виде связного списка. В этом случае каждый блок размещения содержит адрес следующего блока. Для реализации этой схемы нужно в основной памяти иметь таблицу со всеми последующими адресами. Например, для диска с 64-килобайтными блоками операционная система может иметь в памяти таблицу из 64 Кбайт элементов, в каждом из которых есть индекс следующего блока размещения. Так, если файл занимает блоки 4, 52 и 19, то элемент 4 в таблице будет содержать число 52, элемент 52 — число 19, а элемент 19 — специальный код, который указывает на конец файла (например, 0 или — 1).
Так работают файловые системы в МБ-НОЯ, 'тт'(пг)отта 95 и Ъ'(пт(отгз 98. ОС Ю(пс(отта ХР под- Виртуальные команды ввода-вывода 505 о Ф ос оп кк л 8. Й бе о е ах а ст же Ф Ф в .6- Сектор 1 2 3 4 5 6 Дорожка 0 о 1 2 з 4 7 6 9 10 11 Рис. 6.19. Деа подхода к трассировке свободных секторов; список свободной памяти (ай битовая карта (б1 держивает эту файловую систему, но имеет также собственную, которая больше похожа на файловую систему 1)Х1Х. До сих пор мы говорили, что на диске файлы могут располагаться как последовательно, так и непоследовательно, но зачем нужны эти два варианта расположения мы еще не объяснили.
Последовательными файлами легко управлять, но если максимальный размер файла заранее не известен, использовать эту технологию нельзя. Если файл начинается с сектора 7' и продолжается в направлении соседних секторов, он может наткнуться на другой файл в секторе )т, тогда ему не хваттп места на расширение. Если же файл располагается непоследовательно, то таких проблем не возникает, поскольку следующие блоки можно поместить в другое место на диске.
Если диск содержит ряд «рабочих» файлов, конечные размеры которых могут меняться, записать их на диск в последовательные блоки размещения практически невозможно. Иногда можно переместить существующий файл, но это накладно. В то же время, если максимальный размер всех файлов известен заранее (например, как бывает при создании компакт-диска), программа может определить последовательности секторов, точно равных по длине каждому файлу. Если файлы размером 1200, 700, 2000 и 900 секторов нужно поместить на компакт-диск, они просто могут начинаться с секторов О, 1200, 1900 и 3900 соответственно (оглавление здесь не учитывается).
Найти любую часть любого файла легко, поскольку известен первый сектор файла. Чтобы выделить пространство на диске для файла, операционная система должна следить, какие блоки доступны, а какие уже заняты другими файлами. При записи на компакт-диск вычисление производится один раз и навсегда, а на жестком диске файлы постоянно записываются и удаляются.
Один из способов отслеживать состояние диска — хранить список всех пустот (неиспользованных фрагментов), где пустой фрагмент может быть размером с любое число последовательных блоков размещения. Этот список называется списком свободной памяти (бее 1(61).
На рис. 6.19, а изображен список свободной памяти для диска с рис. 6.18, б. 506 Глава 6. Уровень операционной системы Альтернативный подход — хранить битовую карту диска (один бит на один блок размещения), как показано на рис. 6.19, б. Единичный бит показывает, что блок уже занят, а нулевой — что свободен.
Первый подход позволяет легко найти неиспользуемый фрагмент определенной длины. Однако у этого метода есть недостаток: по мере создания и уничтожения файлов размер списка будет меняться, а это нежелательно. Преимущество битовой карты состоит в том, что ее размер постоянен. Кроме того, для изменения статуса блока размещения (из свободного на занятый или наоборот) достаточно поменять значение всего одною бита. Однако при таком подходе трудно найти блок заданного размера. Оба метода требуют, чтобы при записи файла на диск или удаления файла с диска список размещения или карта обновлялись.
Перед тем как закончить обсуждение вопроса о реализации файловой системы, нужно сказать несколько слов о размере блока размещения. Здесь играют роль несколько факторов. Во-первых, тормозят доступ к диску время поиска и время, затрачиваемое на вращение диска. Если на нахождение начала блока тратится 10 мс, то гораздо выгоднее считать 8 Кбайт (это займет примерно 1 мс), чем 1 Кбайт (это займет примерно 0,125 мс), так как, если считывать 8 Кбайт как 8 блоков по 1 Кбайт, потребуется выполнять поиск 8 раз. Для повышения производительности нужны большие блоки размегцения. Чем меньше размер блока размещения, тем больше их должно быть.
Большое количество блоков размещения, в свою очередь, влечет за собой длинные индексы файлов и большие структуры связных списков в памяти. Системе М8-РО5 пришлось перейти на многосекторныс блоки по той причине, что дисковые адреса хранились в виде 16-разрядных чисел. Когда размер дисков стал превышать 64 Кбайт секторов, представить их можно было, только используя блоки размещения большего размера, поэтому число таких блоков не превышало 64 Кбайт. В первом выпуске %'пи1отчз 95 возникла та же проблема, но в последующем выпуске уже использовались 32-разрядные числа.
%'шдотчз 98 поддерживает оба варианта. Маленькие блоки тоже имеют свои преимущества. Дело в том, что файлы очень редко занимают ровно целое число блоков размещения. Следовательно, практически в каждом файле в последнем блоке размещения останется неиспользованное пространство. Если размер файла значительно превышает размер блока размещения, то в среднем неиспользованное пространство составит половину блока. Чем больше блок, тем больше остается свободного пространства. Если средний размер файла намного меньше размера блока размещения, болыпая часть пространства на диске окажется неиспользованной.
Например, в М8-РОЗ или в первой версии %'1пбо яз 95 с 2-гигабайтным дисковым разделом размер блока размещения составляет 32 Кбайт, поэтому при записи на диск файла в 100 символов 32 668 байт дискового пространства теряются. С точки зрения распределения дискового пространства маленькие блоки размещения имеют преимущество над большими. В настоян~ее время самым важным фактором считается скорость передачи данных, поэтому размер блоков постоянно увеличивается. Команды управления каталогами Много лет назад программы и данные хранились на перфокартах. Поскольку размер программ увеличивался, а данных становилось все больше, такая форма Виртуальные команды ввода-вывода 507 хранения стала неудобной.
Тогда возникла идея вместо перфокарт использовать для хранения программ и данных вспомогательную память (например, диск). Информация, доступная для компьютера без вмешательства человека, называется оперативной (оп-1ше). Напротив, автономная (огг"-!ше) информация требует вмешательства человека (например, чтобы вставить компакт-диск). Оперативная информация хранится в файлах. Программы могут получить доступ к ней через программы ввода-вывода. Чтобы следить за оперативной информацией, группировать ее в удобные блоки и защищать от незаконного использования, нужны дополнительные команды.
Обычно операционная система группирует файлы оперативной информации в каталоги. Рисунок 6.20 иллюстрирует пример такой организации. В этом случае поддерживаются системные вызовы, по крайней мере, для следующих функций: + создание файла и включение его в каталог; + удаление файла из каталога; + переименование файла; + изменение статуса защиты файла. Могут применяться различные схемы защиты. Например, владелец файлов может ввести секретный пароль доступа к каждому файлу. Тогда для доступа к файлу программе потребуется сгенерировать пароль, который будет проверен операционной системой.
Доступ к файлу разрешается только в том случае, если пароль правильный. Кроме того, для каждого файла можно создать список пользователей, программы которых смогут получать доступ к данному файлу. рис. 6.20. Пользовательский каталог и структура одного из типичных файлов Все современные операционные системы позволяют хранить более одного каталоги. Каждый каталог обычно сам представляет собой файл и как таковой может включаться в другой каталог, в результате получается иерархическая древовид- 508 Глава 6. Уровень операционной системы ная структура каталогов. Большое количество каталогов особенно удобно программистам, работающим над несколькими проектами.
Они могут сгруппировать в один каталог все файлы, связанные с одним проектом. Каталоги— это удобное средство совместного с членами своих рабочих групп использования файлов. Виртуальные команды для параллельной работы Некоторые вычисления удобно производить с помощью двух и более параллельных процессов (то есть будто бы на разных процессорах). Другие вычисления, чтобы сократить общее время вычислений, можно поделить на части, которые затем выполнять параллельно. Чтобы несколько процессов могли выполняться параллельно, нужны специальные виртуальные команды. Мы обсудим их в следующих подразделах. Интерес к параллельной работе обусловлен и некоторыми законами физики.