Лекции по Вычислительным машинам   

8. Операционные системы

8.5.4. Управление файлами

Файловая система — это часть операционной системы, назначение которой состоит в том, чтобы организовать эффективную работу с данными, хранящимися во внешней памяти, и обеспечить пользователю удобный интерфейс при работе с такими данными.

В широком смысле понятие файловая система включает:

·совокупность всех файлов на диске;

·наборы структур данных, используемых для управления файлами, такие, например, как каталоги файлов, дескрипторы файлов, таблицы распределения свободного и занятого пространства на диске;

·комплекс системных программных средств, реализующих управление файлами, в частности: создание, уничтожение, чтение, запись, именование, поиск и другие операции над файлами.

Перечислим основные функции файловой системы:

·идентификация файлов. Связывание имени файла с выделенным ему пространством внешней памяти;

·распределение внешней памяти между файлами. Для работы с конкретным файлом пользователю не требуется иметь информацию о местоположении этого файла на внешнем носителе информации. Например, для того чтобы загрузить документ в редактор с жесткого диска, нам не нужно знать, на какой стороне какого магнитного диска, на каком цилиндре и в каком секторе находится данный документ;

·обеспечение надежности и отказоустойчивости. Стоимость информации может во много раз превышать стоимость компьютера.

·обеспечение защиты от несанкционированного доступа;

·обеспечение совместного доступа к файлам так, чтобы пользователю не приходилось прилагать специальных усилий по обеспечению синхронизации доступа;

·обеспечение высокой производительности.

Иногда говорят, что файл — это поименованный набор связанной информации, записанной во вторичную память. Для большинства пользователей файловая система — наиболее видимая часть ОС, предоставляющая им механизм для хранения и доступа как к данным, так и к программам.

Имена файлов.    Файлы идентифицируются именами. Пользователи дают файлам символьные имена, при этом учитываются ограничения ОС как на используемые символы, так и на длину имени. Так, в популярной файловой системе MS DOS — FAT длина имен ограничивается схемой 8.3 (8 символов — собственно имя, 3 символа — расширение имени), в ОС UNIX System V имя не может содержать более 14 символов, ОС Windows NT в файловой системе NTFS устанавливает, что имя файла может содержать до 255 символов. В соответствии со стандартом POSIX популярные ОС в настоящее время оперируют также длинными именами (до 255 символов).  Длинные имена поддерживаются не только новыми файловыми системами, но и новыми версиями хорошо известных файловых систем. Например, в ОС Windows 95 используется файловая система VFAT, представляющая собой измененный вариант FAT, обеспечивающая поддержку длинных имен.

Обычно разные файлы могут иметь одинаковые символьные имена. В этом случае файл однозначно идентифицируется так называемым составным именем, представляющим собой последовательность символьных имен каталогов. В некоторых системах одному и тому же файлу не может быть дано несколько разных имен, а в других такое ограничение отсутствует. В последнем случае операционная система присваивает файлу дополнительно уникальное имя, так, чтобы можно было установить взаимно–однозначное соответствие между файлом и его уникальным именем. Уникальное имя представляет собой числовой идентификатор и используется программами операционной системы.

Типы файлов.   Основные типы файлов: регулярные (обычные) файлы, специальные файлы и директории (каталоги). Обычные файлы в свою очередь подразделяются на текстовые и двоичные (бинарные). Текстовые файлы содержат символьные строки, которые можно распечатать, увидеть на экране или редактировать обычным текстовым редактором. Это могут быть документы, исходные тексты программ и т.п. Другой тип обычных файлов нетекстовые, или двоичные файлы. Обычно они имеют некоторую внутреннюю структуру, например, объектный код программы или архивный файл. Обычно прикладные программы, работающие с файлами, распознают тип файла по его имени в соответствии с общепринятыми соглашениями. Например, файлы с расширениями .c, .pas, .txt — ASCII–файлы, файлы с расширениями .exe —исполняемые, файлы с расширениями .rar, .zip — архивные и т. д. Специальные файлы — это файлы, ассоциированные с устройствами ввода–вывода, которые позволяют выполнять операции ввода–вывода с использованием обычных команд записи в файл или чтения из файла. Эти команды обрабатываются вначале программами файловой системы, а затем преобразуются ОС в команды управления соответствующим устройством. Специальные файлы так же, как и устройства ввода–вывода, делятся на блок–ориентированные и байт–ориентированные. Директория (каталог) — это, с одной стороны, группа файлов, объединенных пользователем исходя из некоторых соображений (например, файлы, содержащие программы игр, или файлы, составляющие один программный пакет), а с другой стороны, — это файл, содержащий системную информацию о группе файлов, его составляющих. В каталоге содержится список файлов, входящих в него, и устанавливается соответствие между файлами и их характеристиками (атрибутами).

В разных файловых системах могут использоваться в качестве атрибутов разные характеристики, обычно набор атрибутов содержит следующие элементы: основную информацию (имя, тип файла), адресную информацию (устройство, начальный адрес, размер), информацию об управлении доступом (владелец, допустимые операции) и информацию об использовании (даты создания, последнего чтения, модификации и др.). Список атрибутов обычно хранится в структуре директорий или других структурах, обеспечивающих доступ к данным файла.

Каталоги могут образовывать иерархическую структуру за счет того, что каталог более низкого уровня может входить в каталог более высокого уровня (рисунок 8.12). Иерархия каталогов может быть деревом или сетью. Каталоги образуют дерево, если файлу разрешено входить только в один каталог, и сеть, если файл может входить сразу в несколько каталогов. В MS–DOS и Windows каталоги образуют древовидную структуру, а в UNIX сетевую. Как и любой другой файл, каталог имеет символьное имя и однозначно идентифицируется составным именем, содержащим цепочку символьных имен всех каталогов, через которые проходит путь от корня до данного каталога.

Логическая организация файла.  Программист имеет дело с логической организацией файла, представляя файл в виде определенным образом организованных логических записей. Логическая запись это наименьший элемент данных, которым может оперировать программист при организации обмена с внешним устройством.

а) одноуровневая; b) иерархическая (дерево); c) иерархическая (сеть)

Рисунок 8.12 Организация файловой системы

Даже если физический обмен с устройством осуществляется большими единицами, операционная система обеспечивает программисту доступ к отдельной логической записи.

На рисунке 8.13 показаны несколько схем логической организации файла. Записи могут быть фиксированной или переменной длины, могут быть расположены в файле последовательно (последовательная организация) или в более сложном порядке, с использованием так называемых индексных таблиц, позволяющих обеспечить быстрый доступ к отдельной логической записи (индексно–последовательная организация). Для идентификации записи может быть использовано специальное поле записи, называемое ключом. В файловых системах ОС UNIX и MS–DOS файл имеет простейшую логическую структуру — последовательность однобайтовых записей.

Рисунок 8.13 — Способы логической организации файлов

Поясним подробнее наиболее сложную – с использованием индексных таблиц организацию файла. Индексная таблица обычно оформляется в виде отдельного — индексного файла (файла индексов), хранится на том же устройстве, что и основной файл, и состоит из списка элементов, каждый из которых содержит идентификатор (ключ) записи, за которым следует указание о местоположении данной записи. Для поиска записи вначале происходит обращение к файлу индексов, где находится указатель на нужную запись. В отличие от записей основного файла записи файла индексов имеют фиксированную длину, что позволяет упорядочивать их по значению ключа с целью ускорения поиска необходимой информации.

Физическая организация файла. Физическая организация файла описывает правила его расположения на устройстве внешней памяти, в частности, на диске, в виде набора блоков.

Блок наименьшая единица данных, которой внешнее устройство обменивается с оперативной памятью.

Непрерывное размещение — простейший вариант физической организации, при котором файлу предоставляется последовательность блоков диска, образующих единый сплошной участок дисковой памяти. Для задания адреса файла в этом случае достаточно указать только номер начального блока. Но у этого способа имеются два существенных недостатка. Во–первых, во время создания файла заранее не известна его длина, а значит не известно, сколько памяти надо зарезервировать для его размещения, во–вторых, при таком порядке размещения неизбежно возникает эффект фрагментации, что приводит к неэффективному использованию внешней памяти. Следующий способ физической организации — размещение в виде связанного списка блоков дисковой памяти. При таком способе в начале каждого блока содержится указатель на следующий блок.
В этом случае адрес файла также может быть задан одним числом – номером первого блока. В отличие от предыдущего способа, каждый блок может быть встроен в цепочку какого–либо файла, следовательно, фрагментация отсутствует. Файл может изменяться во время своего существования, наращивая число блоков. Недостатком является сложность реализации доступа к произвольно заданному месту файла: для того чтобы прочитать пятый по порядку блок файла, необходимо последовательно прочитать четыре первых блока, прослеживая цепочку номеров блоков. Популярным способом является использование связанного списка индексов. В этом случае с каждым блоком связывается его идентификатор — индекс, совокупность которых размещается в отдельной области памяти. Если блок распределен некоторому файлу, то индекс этого блока содержит номер следующего блока данного файла. При такой физической организации сохраняются все достоинства предыдущего способа, но снимается отмеченный недостаток: для доступа к произвольному месту файла достаточно прочитать только блок индексов, отсчитать нужное количество блоков файла по цепочке и определить номер нужного блока.

Контроль доступа к файлам. Наличие в системе многих пользователей предполагает организацию контролируемого доступа к файлам.

Выполнение любой операции над файлом должно быть разрешено только в случае наличия у пользователя соответствующих прав доступа. Обычно контролируются следующие операции: чтение, запись и выполнение. Другие операции, например, копирование файлов или их переименование, также могут контролироваться. Однако они чаще реализуются через перечисленные. Так, операцию копирования файлов можно представить как операцию чтения и последующую операцию записи.

Различают два основных подхода к определению прав доступа:

·избирательный доступ, когда для каждого файла и каждого пользователя сам владелец может определить допустимые операции;

·мандатный подход, когда система наделяет пользователя определенными правами по отношению к каждому разделяемому ресурсу (в данном случае файлу) в зависимости от того, к какой группе пользователь отнесен.

Кэширование диска.      В большинстве файловых систем запросы к внешним устройствам, в которых адресация осуществляется блоками (диски, ленты), перехватываются промежуточным программным слоем — подсистемой буферизации. Подсистема буферизации представляет собой буферный пул, располагающийся в оперативной памяти, и комплекс программ, управляющих этим пулом. Каждый буфер пула имеет размер, равный одному блоку. При поступлении запроса на чтение некоторого блока подсистема буферизации просматривает свой буферный пул и если находит требуемый блок, то копирует его в буфер запрашивающего процесса. Операция ввода–вывода считается выполненной, хотя физического обмена с устройством не происходило. Если же нужный блок в буферном пуле отсутствует, то он считывается с устройства и одновременно с передачей запрашивающему процессу копируется в один из буферов подсистемы буферизации. При отсутствии свободного буфера на диск вытесняется наименее используемая информация. Таким образом, подсистема буферизации работает по принципу кэш–памяти. Общая модель файловой системы.      Функционирование любой файловой системы можно представить многоуровневой моделью (рисунок 8.14), в которой каждый уровень предоставляет некоторый интерфейс (набор функций) вышележащему уровню, а сам, в свою очередь, для выполнения своей работы использует интерфейс (обращается с набором запросов) нижележащего уровня.


Рисунок 8.14 Общая модель файловой системы

Задачей символьного уровня является определение по символьному имени файла его уникального имени. В файловых системах, в которых каждый файл может иметь только одно символьное имя, этот уровень отсутствует, так как символьное имя, присвоенное файлу пользователем, является одновременно уникальным и может быть использовано операционной системой. В других файловых системах, в которых один и тот же файл может иметь несколько символьных имен, на данном уровне просматривается цепочка каталогов для определения уникального имени файла.

На следующем, базовом уровне, по уникальному имени файла определяются его характеристики: права доступа, адрес, размер и другие.

Как уже было сказано, характеристики файла могут входить в состав каталога или храниться в отдельных таблицах. При открытии файла его характеристики перемещаются с диска в оперативную память, чтобы уменьшить среднее время доступа к файлу.

Следующим этапом реализации запроса к файлу является проверка прав доступа к нему. Для этого сравниваются полномочия пользователя или процесса, выдавших запрос, со списком разрешенных видов доступа к данному файлу. Если запрашиваемый вид доступа разрешен, то выполнение запроса продолжается, если нет, то выдается сообщение о нарушении прав доступа.

На логическом уровне определяются координаты запрашиваемой логической записи в файле, то есть требуется определить, на каком расстоянии (в байтах) от начала файла находится требуемая логическая запись. Алгоритм работы данного уровня зависит от логической организации файла. Например, если файл организован как последовательность логических записей фиксированной длины l, то n–я логическая запись имеет смещение l*(n–1) байт. Для определения координат логической записи в файле с индексно–последовательной организацией выполняется чтение таблицы индексов (ключей), в которой непосредственно указывается адрес логической записи.

На физическом уровне файловая система определяет номер физического блока, который содержит требуемую логическую запись, и смещение логической записи в физическом блоке. Для решения этой задачи используются результаты работы логического уровня: смещение логической записи в файле, адрес файла на внешнем устройстве, а также сведения о физической организации файла, включая размер блока. После определения номера физического блока, файловая система обращается к системе ввода–вывода для выполнения операции обмена с внешним устройством. В ответ на этот запрос в буфер файловой системы будет передан нужный блок, в котором на основании полученного при работе физического уровня смещения выбирается требуемая логическая запись.

Современные архитектуры файловых систем. Разработчики новых ОС стремятся обеспечить пользователя возможностью работать сразу с несколькими файловыми системами. Современная файловая система имеет многоуровневую структуру (рисунок 8.15), на верхнем уровне которой располагается переключатель, обеспечивающий интерфейс между запросами приложения и конкретной файловой системой, к которой обращается это приложение. Переключатель файловых систем преобразует запросы в формат, воспринимаемый следующим уровнем уровнем файловых систем.

Рисунок 8.15 Архитектура современной файловой системы

Каждый компонент данного уровня выполнен в виде драйвера соответствующей файловой системы и поддерживает ее определенную организацию. Переключатель является единственным модулем, который может обращаться к драйверу файловой системы. Драйвер может быть написан в виде реентерабельного кода, что позволяет сразу нескольким приложениям выполнять операции с файлами. Каждый драйвер файловой системы в процессе собственной инициализации регистрируется у переключателя, передавая ему таблицу точек входа, которые будут использоваться при последующих обращениях к файловой системе.

Для выполнения своих функций драйверы файловых систем обращаются к подсистеме ввода–вывода, которая должна постоянно присутствовать в памяти и организовывать совместную работу иерархии драйверов устройств. В эту иерархию могут входить драйверы устройств определенного типа (драйверы жестких дисков или накопителей на лентах), драйверы, поддерживаемые поставщиками (такие драйверы перехватывают запросы к блочным устройствам и могут частично изменить поведение существующего драйвера этого устройства, например, зашифровать данные), драйверы портов, которые управляют конкретными адаптерами.



*****

© 2009-2017 Банк лекций siblec.ru
Лекции для преподавателей и студентов. Формальные, технические, естественные, общественные, гуманитарные, и другие науки.