Глава 6a (Методическое пособие по Операционным системам)
Описание файла
Файл "Глава 6a" внутри архива находится в следующих папках: Методическое пособие по Операционным системам, Операционне системы. Документ из архива "Методическое пособие по Операционным системам", который расположен в категории "". Всё это находится в предмете "операционные системы" из 7 семестр, которые можно найти в файловом архиве РТУ МИРЭА. Не смотря на прямую связь этого архива с РТУ МИРЭА, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "операционные системы" в общих файлах.
Онлайн просмотр документа "Глава 6a"
Текст из документа "Глава 6a"
192
Глава 6
Файловые системы
Всем компьютерным приложениям нужно хранить и получать информацию. Во время работы процесс может хранить ограниченное количество данных в собственном адресном пространстве. Однако емкость такого хранилища ограничена размерами виртуального адресного пространства. Для некоторых приложений такого размера вполне достаточно, но для других, например систем резервирования авиабилетов, систем банковского или корпоративного учета, одного только виртуального адресного пространства будет недостаточно.
Кроме того, после завершения работы процесса информация, хранящаяся в его адресном пространстве, теряется. Для большинства приложений (например, баз данных) эта информация должна храниться неделями, месяцами пли даже вечно. Исчезновение данных после завершения работы процесса для таких приложений неприемлемо. Информация должна сохраняться даже при аварийном завершении процесса в случае сбоя компьютера.
Третья проблема состоит в том, что часто возникает необходимость нескольким процессам одновременно получить доступ к одним и тем же данным (или части данных). Если интерактивный телефонный справочник будет храниться в адресном пространстве одного процесса, то доступ к нему будет только у этого процесса. Для решения этой проблемы необходимо отделить информацию от процесса.
Таким образом, к долговременным устройствам хранения информации предъявляются три следующих важных требования:
1. Устройства должны позволять хранить очень большие объемы данных.
2. Информация должна сохраняться после прекращения работы процесса, использующего ее.
3. Несколько процессов должны иметь возможность получения одновременного доступа к информации.
Обычное решение всех этих проблем состоит в хранении информации на дисках и других внешних хранителях в модулях, называемых файлами. Процессы могут по мере надобности читать их и создавать новые файлы. Информация, хранящаяся в файлах, должна обладать устойчивостью (в данном контексте иногда применяется термин персистентность), то есть на нее не должны оказывать влияния создание или прекращение работы какого-либо процесса. Файл должен исчезать только тогда, когда его владелец дает команду удаления файла.
Файлами управляет операционная система. Их структура, именование, использование, защита, реализация и доступ к ним являются важными пунктами устройства операционной системы. Часть операционной системы, работающая с файлами, называется файловой системой. Ей и посвящена данная глава.
С точки зрения пользователя наиболее важным аспектом файловой системы является ее внешнее представление, то есть именование и защита файлов, операции с файлами и т. д. Такие детали внутреннего устройства, как использование связанных списков или бит-карт для слежения за свободными и занятыми блоками диска, число физических секторов в логическом блоке, представляют для пользователя меньший интерес, хотя и крайне важны для разработчиков файловой системы. По этой причине мы разбили главу на несколько разделов. Первые два раздела посвящены пользовательскому интерфейсу файлов и каталогов. В следующих разделах мы рассмотрим способы реализации файловой системы. Наконец, будут приведены несколько примеров существующих файловых систем.
Файлы
В следующих нескольких разделах мы рассмотрим файлы с точки зрения пользователя, то есть обсудим их использование и их свойства.
Именование файлов
Файлы относятся к абстрактному механизму. Они предоставляют способ сохранять информацию на диске и считывать ее снова позднее. При этом от пользователя должны скрываться такие детали, как способ и место хранения информации, а также детали работы дисков.
Вероятно, наиболее важной характеристикой любого механизма абстракции является то, как именуются управляемые объекты, поэтому мы начнем изучение файловой системы с именования файлов. При создании файла процесс дает файлу имя. Когда процесс завершает работу, файл продолжает свое существование к по его имени к нему могут получить доступ другие процессы.
Точные правила именования файлов варьируются от системы к системе, но все современные операционные системы поддерживают использование в качестве имен файлов 8-символьные текстовые строки. Таким образом, andrea, bruce и cathy являются допустимыми именами файлов. Часто в именах файлов также разрешается использование цифр и специальных символов, поэтому могут применяться и такие имена файлов, как 2, urgent! и Fig.2-14. Многие файловые системы поддерживают имена файлов длиной до 255 символов.
В некоторых файловых системах, например UNIX, различаются прописные и строчные символы, тогда как в других, таких как MS-DOS, нет. Таким образом, имена файлов maria, Maria и MARIA будут означать в системе UNIX три различных файла, тогда как в MS-DOS все эти имена будут соответствовать одному файлу.
Операционные системы Windows 95 и Windows 98 используют файловую систему MS-DOS и наследуют многие ее свойства, включая именование файлов. Операционные системы Windows NT и Windows 2000 также поддерживают файловую систему MS-DOS и наследуют ее свойства. Однако у последних двух операционных систем имеется своя файловая система (NTFS), обладающая отличными свойствами (например, именами файлов в кодировке Unicode). В данной главе при упоминании файловой системы Windows мы будем иметь в виду файловую систему MS-DOS, являющуюся единственной файловой системой, поддерживаемой всеми версиями Windows. Файловая система NTFS, используемая в Windows 2000, будет обсуждаться в главе 11.
Во многих операционных системах имя файла может состоять из двух частей, разделенных точкой, например prog.c. Часть имени файла после точки называется расширением файла и обычно означает тип файла. Так, в MS-DOS имя файла может содержать от 1 до 8 символов плюс расширение от 0 до 3 символов. В системе UNIX размер расширения файла зависит от пользователя. Кроме того, у файла может быть несколько расширений, например prog.c.Z, где .Z обычно используется, чтобы указать, что файл (prog.c) был сжат с помощью алгоритма Зива—Лемпеля. Некоторые часто встречающиеся расширения файлов и их значения приведены в табл. 6.1.
Таблица 6.1. Некоторые типичные расширения файлов Расширение Значение
file.bak Резервная копия файла
file.с Исходный текст программы на С
file.gif Изображение формата GIF
file.hip Файл справки
file.html Документ в формате HTML (web-страница)
file.jpg Неподвижное изображение стандарта JPEG
file.mpS Музыка в формате MPEG-1 уровень 3
file.mpg Фильм в формате MPEG
file.о Объектный файл (еще не скомпонованный выходной файл компилятора)
file.pdf Документ формата PDF (программы Adobe Acrobat)
file.ps Документ формата PostScript
file.tex Входной файл для программы форматирования ТЕХ
file.txt Текстовый файл общего назначения
file.zip Архив, сжатый с помощью алгоритма Зива—Лемпеля
В некоторых системах (например, в UNIX) расширения файлов являются просто соглашениями, и операционная система не принуждает пользователя их строго придерживаться. Файл file.tat: может быть текстовым файлом, но это скорее напоминание пользователю, а не руководство к действию для операционной системы. С другой стороны, компилятор языка С может отказаться компилировать файлы с расширениями, отличными от .с.
Подобные соглашения особенно полезны, когда одна и та же программа должна управлять различными типами файлов. Например, компилятору языка С может быть предоставлен список файлов, которые он должен откомпилировать и скомпоновать, причем некоторые из этих файлов могут содержать программы на языке С, тогда как другие являться ассемблерными файлами. В этом случае именно по расширениям файлов компилятор сможет отличить одни файлы от других.
Система Windows, напротив, знает о расширениях файлов и назначает каждому расширению определенное значение. Пользователи (или процессы) могут регистрировать расширения в операционной системе, указывая программу, «владеющую» данным расширением. При двойном щелчке мыши на имени файла запускается программа, назначенная этому расширению, с именем файла в качестве параметра. Например, двойной щелчок мыши на имени file.doc запускает Microsoft Word, который открывает файл file.doc.
Структура файла
Файлы могут быть структурированы несколькими различными способами. Три типа структур показаны на рис. 5.1. Файл на рис. 5.1, а представляет собой неструктурированную последовательность байтов. В этом случае операционная система не интересуется содержимым файла. Все, что она видит — это байты. Значения этим байтам придается программами уровня пользователя. Такой подход используется как в системе UNIX, так и в Windows.
Рис. 6.1. Три типа файлов: последовательность байтов (а); последовательность записей (б); дерево (в)
Рассмотрение операционной системой файлов как просто последовательностей байтов обеспечивает максимальную гибкость. Программы пользователя могут помещать в файлы все что угодно и именовать их любым удобным для них способом. Операционная система не вмешивается в этот процесс, что может быть особенно ценно для пользователей, собирающихся сделать что-либо необычное.
Первый шаг по направлению к структуре показан на рис. 6.1, б. В данной модели файл представляет собой последовательность записей фиксированной длины, каждая со своей внутренней структурой. Для файлов, состоящих из записей, важным является то, что операция чтения возвращает одну запись, а операция записи перезаписывает или дополняет одну запись. Несколько десятилетий назад, когда вовсю применялись перфокарты, состоящие из 80 колонок отверстий, многие операционные системы (на мэйнфреймах) оперировали файлами, состоящими из 80-символьных записей, представляющими собой образы перфокарт. Этими операционными системами поддерживались также файлы, состоящие из 132-сим-вольных записей, предназначающихся для строковых принтеров (которые в те дни печатали по 132 символа в строке). Программы читали из входных файлов 80-символьные блоки и записывали их в виде 132-символьных блоков, хотя остальные 52 символа могут быть пробелами. Ни одна современная универсальная система не работает подобным образом.
Третий вариант файловой структуры показан на рис. 6.1, в. При такой организации файл представляет собой дерево записей, не обязательно одной и той же длины. Каждая запись в фиксированной позиции содержит поле ключа. Дерево сортировано по ключевому полю, что обеспечивает быстрый поиск заданного ключа.
Основной файловой операцией здесь является не получение следующей записи, хотя это также возможно, а получение записи с указанным значением ключа. Для файла зоопарка, показанного на рис. 6.1, в, можно, например, запросить у системы запись с ключом пони, не беспокоясь о точном положении этой записи в файле. При добавлении новых записей операционная система, а не пользователь должна решать, куда ее поместить. Такой тип файлов принципиально отличается от неструктурированных потоков байтов, применяемых в UNIX и Windows, но они широко применяются на больших мэйнфреймах, еще используемых для коммерческой обработки данных.
Типы файлов
Многие операционные системы поддерживают различные типы файлов. Например, в системах UNIX и Windows проводится различие между регулярными (обычными) файлами и каталогами. В системе UNIX также различаются символьные и блочные специальные файлы. К регулярным файлам относятся все файлы, содержащие информацию пользователя. Все файлы на рис. 6.1 являются регулярными. Каталоги — это системные файлы, обеспечивающие поддержку структуры файловой системы. Мы рассмотрим их подробнее ниже. Символьные специальные файлы имеют отношение к вводу-выводу и используются для моделирования последовательных устройств ввода-вывода, таких как терминалы, принтеры и сети. Блочные специальные файлы используются для моделирования дисков. В данной главе мы в первую очередь будем рассматривать регулярные файлы.
Регулярные файлы в основном являются либо ASCII-файлами, либо двоичными файлами. ASCII-файлы состоят из текстовых строк. В некоторых системах каждая строка завершается символом возврата каретки. В других (например, UNIX) используется символ перевода строки. В некоторых системах (например, MS-DOS) используются оба символа. Строки не обязаны иметь одну и ту же длину.