Всё для Учёбы — студенческий файлообменник
1 монета
zip

Лабораторная № 1 «Логическая организация файлов» по Операционным системам (Одинец М. С.)

Логическая организация файлов

Определение файла

Файл = атрибуты + данные + операции с файлами

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

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

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

Система управления файлами является основной подсистемой в абсолютном боль-шинстве современных операционных систем:

1. . через систему управления файлами связываются по данным все систем-ные и прикладные программы.

2. с помощью этой системы решаются проблемы централизованного распреде-ления дискового пространства и управления данными.

3. благодаря использованию той или иной системы управления файлами поль-зователям предоставляются следующие возможности:

• создание, удаление, переименование (и другие операции) файлов из своих программ или посредством специальных управляющих программ, реализующих функции интерфейса пользователя с его данными и активно использующих систему управления файлами;

• работа с не дисковыми периферийными устройствами как с файлами;

• обмен данными между файлами, между устройствами, между файлом и устройством (и наоборот);

• работа с файлами с помощью обращений к программным модулям системы управления файлами (часть API ориентирована именно на работу с файлами);

• защита файлов от несанкционированного доступа.

В некоторых ОС может быть несколько систем управления файлами, что обеспе-чивает им возможность работать с несколькими файловыми системами.

Системы управления файлами, будучи компонентом ОС, не являются независимы-ми от этой ОС, поскольку они используют соответствующие вызовы API (application program interface, прикладной программный интерфейс).

С другой стороны, системы управления файлами сами дополняют API новыми вы-зовами.

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

Атрибуты файла

Именование файлов.

При создании файла процесс дает файлу имя.

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

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

В некоторых файловых системах, например UNIX, различаются прописные и строчные символы, тогда как в других, таких как MS-Windows, нет.

Во многих операционных системах имя файла может состоять из двух частей, разде-ленных точкой. Часть имени файла после точки называется расширением файла и обычно означает тип файла. Так, в MS-DOS имя файла может содержать от 1 до 8 символов плюс расширение от 0 до 3 символов. В системе UNIX размер расширения файла зависит от пользователя.

Кроме того, у файла может быть несколько расширений, например prog.c.Z, где .Z обычно используется, чтобы указать, что файл (prog.c) был сжат с помощью алгоритма Зива—Лемпеля.

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

Система Windows, знает о расширениях файлов и назначает каждому расшире-нию определенное значение. Пользователи (или процессы) могут регистрировать расши-рения в операционной системе, указывая программу, «владеющую» данным расширени-ем. При двойном щелчке мыши на имени файла запускается программа, назначенная это-му расширению, с именем файла в качестве параметра.

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

Список атрибутов значительно варьируется от системы к системе.

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

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

Например, скрытые файлы не появляются в перечне файлов при распечатке ката-лога. Флаг архивации представляет собой бит, следящий за тем, была ли создана для файла резервная копия. Этот флаг очищается программой архивирования и устанавлива-ется операционной системой при изменении файла. Таким образом, программа архивиро-вания может определить, какие файлы следует архивировать. Флаг «временный» позво-ляет автоматически удалять помеченный так файл по окончании работы создавшего его процесса.

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

Текущий размер файла содержит количество байтов в файле в настоящий момент

Данные файла

Поле(field) – основной элемент данных. Содержит единственное значение. Характеризу-ется длиной и типом данных(например , строка ASCII, десятичное число и т.п.). В зависимости от структуры файла поля м.б. либо фиксированной, ли-бо переменной длины.

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

Файл(file) - набор данных, организованных в виде совокупности записей одинаковой структуры(однородных записей).

Логическая организация данных файла

Файлы могут быть структурированы несколькими различными способами.

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

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

2. файл представляет собой последовательность логических записей фик-сированной длины, каждая со своей внутренней структурой.

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

3. файл представляет собой последовательность логических записей раз-ной длины.

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

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

Основной файловой операцией здесь является получение записи с указанным зна-чением ключа.

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

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

В последнем случае говорят, что файл имеет индексно-последовательную органи-зацию, так как поиск включает два этапа:

прямой доступ по индексу к указанной области диска,

а затем последовательный просмотр записей в указанной области.

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

Все вышесказанное в большей степени относится к обычным файлам, которые мо-гут быть как структурированными, так и неструктурированными. Что же касается других типов файлов, то они обладают определенной структурой, известной файловой системе. Например, файловая система должна понимать структуру данных, хранящихся в файле-каталоге или файле типа «символьная связь».

Типы файлов

Многие операционные системы поддерживают различные типы файлов.

Например, в системах UNIX и Windows проводится различие между регулярными (обычными) файлами и каталогами.

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

Каталоги — это системные файлы, обеспечивающие поддержку структуры файло-вой системы.

Регулярные файлы в основном являются либо ASCII-файлами, либо двоичными файлами.

ASCII-файлы состоят из текстовых строк. В некоторых системах каждая строка за-вершается символом возврата каретки. В других (например, UNIX) используется символ перевода строки. В некоторых системах (например, MS-DOS) используются оба символа. Строки не обязаны иметь одну и ту же длину.

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

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

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

Доступ к файлам

В старых операционных системах предоставлялся только один тип доступа к фай-лам - последовательный доступ.

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

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

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

Для указания места начала чтения используются два метода.

• В первом случае каждая операция read задает позицию в файле.

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

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

Операции с файлами

Файлы позволяют сохранять информацию и получать ее позднее. В различных опе-рационных системах имеются различные наборы файловых операций.

Наиболее часто встречающиеся системные вызовы, относящиеся к файлам.

1. Create (создание). Файл создается без данных. Этот системный вызов объявляет о появлении нового файла и позволяет установить некоторые его атрибуты.

2. Delete (удаление). Когда файл уже более не нужен, его удаляют, чтобы освобо-дить пространство на диске. Этот системный вызов присутствует в каждой операционной системе.

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

4. Close (закрытие). Когда все операции с файлом закончены, атрибуты и дисковые адреса более не нужны, поэтому файл следует закрыть, чтобы освободить пространство во внутренней таблице. Многие операционные системы позволяют одновременно открыть ограниченное количество файлов. Запись на диск производится поблочно, а закрытие файла вызывает запись последнего блока файла, даже если этот блок еще не заполнен до конца.

5. Read (чтение). Чтение данных из файла. Обычно байты поступают с текущей по-зиции в файле. Вызывающий процесс должен указать количество требуемых данных и предоставить для них буфер.

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

7. Append (добавление). Этот системный вызов представляет собой усеченную форму вызова write. Он может только добавлять данные к концу файла. В операционных системах с минимальным набором системных вызовов может не быть данного системно-го вызова.

8. Seek (поиск). Для файлов произвольного доступа требуется способ указать, где располагаются данные в файле. Данный системный вызов устанавливает файловый ука-затель в определенную позицию в файле. После выполнения данного системного вызова данные могут читаться или записываться в этой позиции.

9. Get attributes (получение атрибутов). Процессам часто для выполнения их рабо-ты бывает необходимо получить атрибуты файла. Например, для сборки программ, состо-ящих из большого числа отдельных исходных файлов, в системе UNIX часто использует-ся программа make. Эта программа исследует время изменения всех исходных и объект-ных файлов, благодаря чемуобходится компиляцией минимального количества файлов. Для выполнения этой работы ей требуется получить атрибуты файлов.

10. Set attributes (установка атрибутов). Некоторые атрибуты файла могут уста-навливаться пользователем после создания файла. Этот системный вызов предоставляет такую возможность. Например, для файла может быть установлен код защиты доступа. Большинство других флагов также могут устанавливаться при помощи данного систем-ного вызова.

11. Rename (переименование). Этот системный вызов позволяет изменить имя фай-ла. Его присутствие в операционной системе не является необходимым, так как обычно файл можно скопировать с новым именем, а старый файл удалить.

Каталоговые системы

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

Имя пути При организации файловой системы в виде дерева каталогов требуется некоторый способ указания файла.

Для этого обычно используются два различных метода.

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

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

Относительная форма часто оказывается более удобной, но она выполняет то же самое, что и абсолютная.

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

Операции с каталогами

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

1. Create. Создать каталог. Только что созданный каталог пуст и не содержит дру-гих элементов, кроме «.>> и «..», автоматически помещаемых в каталог операционной системой.

2. Delete. Удалить каталог. Может быть удален только пустой каталог. Элементы «.» и «..» файлами не являются и удалены быть не могут.

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

4. Closediг. Закрыть каталог. Когда каталог прочитан, его следует закрыть, чтобы освободить место во внутренней таблице.

5. Readdir. Прочитать следующий элемент открытого каталога. В прежние вре-мена было возможно читать каталоги с помощью обычного системного вызова read, но такой подход был небезопасен, так как требовал от программистаумения работать с внут-ренней структурой каталогов. Поэтому был создан отдельный системный вызов readdi г, всегда возвращающий одну запись каталога стандартного формата независимо от исполь-зуемой структуры каталогов.

6. Rename. Переименование каталога. Во многих отношениях каталоги аналогич-ны файлам и могут переименовываться так же, как и файлы.

7. Link. Связывание представляет собой технику, позволяющую файлу появляться сразу в нескольких каталогах. Этот системный вызов принимает в качестве входных па-раметров имя файла и имя пути и создает связь между ними. Таким образом, один и тот же файл может появляться сразу в нескольких каталогах. Подобная связь, увеличивающая на единицу счетчик i-узла файла (для учета количества каталогов со ссылками на этот файл), иногда называется жесткой связью.

8. Unlink. Удаление ссылки на файл из каталога. Если файл присутствует только в одном каталоге, то данный системный вызов удалит его из файловой системы. Если существует несколько ссылок на этот файл, то будет удалена только указанная ссылка, а остальные останутся. Этот системный вызовприменяется для удаления файла в операци-онной системе UNIX.

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

Показать полностью…
Похожие документы в приложении