Если поддержание структуры данных возложено на приложение то файл представляет собой

Обновлено: 04.07.2024

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

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

Модель файла, в соответствии с которой содержимое файла представляется не­структурированной последовательностью (потоком) байт, стала популярной вместе с ОС UNIX, а теперь она широко используется в большинстве современных ОС, в том числе в MS-DOS, Windows NT/2000, NetWare. Неструктурированная мо­дель файла позволяет легко организовать разделение файла между несколькими приложениями: разные приложения могут по-своему структурировать и интер­претировать данные, содержащиеся в файле.

Другая модель файла, которая применялась в ОС OS/360, DEC RSX и VMS, а в настоящее время используется достаточно редко, — это структурированный файл. В этом случае поддержание структуры файла поручается файловой систе­ме. Файловая система видит файл как упорядоченную последовательность логи­ческих записей. Приложение может обращаться к ФС с запросами на ввод-вывод на уровне записей, например «считать запись 25 из файла FILE.DOC». ФС долж­на обладать информацией о структуре файла, достаточной для того, чтобы выде­лить любую запись. ФС предоставляет приложению доступ к записи, а вся даль­нейшая обработка данных, содержащихся в этой записи, выполняется приложе­нием. Развитием этого подхода стали системы управления базами данных (СУБД), которые поддерживают не только сложную структуру данных, но и взаимосвязи между ними.

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

Файловая система может использовать два способа доступа к логическим запи­сям: читать или записывать логические записи последовательно (последователь­ный доступ) или позиционировать файл на запись с указанным номером (пря­мой доступ).

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

К числу таких способов структуризации относится представление данных в виде записей, длина которых фиксирована в пределах файла (рис. 5.5, а).


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

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

Например, если L — длина записи, то начальный адрес п-й записи равен L умножить на n (Lхn). Заметим, что при такой логической организации размер запи­си фиксирован в пределах файла, а записи в различных файлах, принадлежащих одной и той же файловой системе, могут иметь различный размер.

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


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

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


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

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


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

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

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

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

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

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

Известно два фундаментальных способа организации файлов:

файл прямого доступа.

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

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

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

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

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




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

Лекция 13.

Тема: Связи

Современные файловые системы имеют структуру дерева или графа каталогов. Подходы к организации структуры каталогов разные для разных ОС: некоторые системы реализуют единое дерево каталогов или граф каталогов, куда могут подключаться (монтироваться) отдельные файловые системы, размещенные на разных дисках; другие системы обозначают отдельные разделы диска буквами алфавита и работают с соответствующими файловыми системами отдельно. Дерево каталогов становится графом при наличии связей. Многие файловые системы дают возможность задавать несколько имен для одного файла. Такие имена называются связями (links). Связи могут быть жесткими (альтернативное имя для файла) и символьными (файл, который содержит ссылки на другой файл или каталог).

Пользователи операционных систем Microsoft Windows знакомы с таким понятием, как ярлыки. Однако, в файловой системе NTFS есть нечто большее - жесткие ссылки (Hard Links). Если в случае с простыми ярлыками указатель на файл есть только один (в одном каталоге), а по разным директориям могут быть разбросаны ссылки на него (ярлыки), то в случае с Hard Link на файл делаются абсолютно равноправные указатели в разных каталогах, указывающие на один и тот же объект.

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

При работе с жесткими ссылками следует знать, что:

1. жесткие связи могут быть только на NTFS-разделе, и связаны могут быть только файлы, находящиеся на одном разделе;

2. привязанный файл можно перемещать в каталоги этого же логического диска - связь не прервется (она нарушится только при перемещении на другой логический диск);

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

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

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

7. при удалении связанных файлов удален будет только конкретный выбранный файл, а остальные останутся (их тоже по отдельности можно удалить);

8. Hard Link делается для файлов, для директорий существует другое средство - Junction Points.

Для создания жестких связей в POSIX используется системный вызов link(). Для Windows – это функция CreateHardLink().

Несмотря на то, что жесткие связи существуют уже почти десять лет, программ для работы с ними немного: Hard Link Magic, Xplorer 2 , PropertyEditor, Xln: File System Link creation utility - утилита Windows, позволяющая из командной строки создать жесткую ссылку или обыкновенный ярлык.

Символьная связь (Symbolic link) работает наподобие ярлыка, однако располагается непосредственно в файловой системе и указывает на конкретный объект. В отличие от файлов LNK с символьными ссылками без проблем работают все программы.Символическая связь — специальный файл в файловой системе, для которого не формируются никакие данные, кроме одной текстовой строки с указателем. Эта строка трактуется как путь к файлу, который должен быть открыт при попытке обратиться к данной ссылке (файлу). Символьная ссылка занимает ровно столько места в файловой системе, сколько требуется для записи её содержимого (нормальный файл занимает как минимум один блок раздела).

Целью ссылки может быть любой объект – например, другая ссылка, файл, папка.

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

При работе с символьными связями следует знать, что:

- символьные связи могут быть только на NTFS-разделах, начиная с ОС Windows 2000;

- связаны могут быть директории, находящиеся на разных логических и физических дисках;

- "привязанный" каталог можно перемещать в любое место на NTFS;

- cвязанные символьной связью директории равноправны по использованию, но не равноправны по переименованию и удалению (вы не можете удалить или переименовать первый каталог, пока существуют созданные на него каталоги-ссылки);

- любой из созданных каталогов-ссылок можно переименовывать или удалять;

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

- внешне (в отличии от простых ярлыков) нет никаких признаков, что каталог имеет символьную связь;

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

Для создания символьных связей в POSIX используется системный вызов symlink().Символическая связь (symbolic links) — доступна с Windows Vista. Может указывать и на файлы, и на директории. Для Windows 7– это команда mklink.

Создание символической ссылки.

MKLINK [[/D] | [/H] | [/J]] Ссылка Назначение

/D Создание символической ссылки на каталог.

По умолчанию создается символическая ссылка на файл.

/H Создание жесткой связи вместо символической ссылки.

/J Создание соединения для каталога.

Ссылка Имя новой символической ссылки.

Операции над файлами и каталогами

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

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

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

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

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

3. Создание файла. Эта операция создает на диске новый файл нулевой длины. После создания файл автоматически открывается.

4. Удаление файла. С помощью этой операции файл удаляется и освобождается занятое им дисковое пространство. Эта операция недопустима для открытых файлов.

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

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

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

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

9. Поиск. Данный системный вызов устанавливает файловый указатель в определенную позицию.

10. Переименование. Этот системный вызов позволяет изменить имя файла. Такое действие можно выполнить копированием файла.

11. Копирование файла.

12. Выполнить. Используя этот системный вызов, файл можно запустить на выполнение.

Основные функции Win 32 API для файлового ввода-вывода и соответствующие системные вызовы POSIX приведены ниже.

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

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

Модель файла, в соответствии с которой содержимое файла представляется неструктурированной последовательностью (потоком) байт, стала популярной вместе с ОС UNIX, а теперь она широко используется в большинстве современных ОС, в том числе в Windows NT/2000. Неструктурированная модель файла позволяет легко организовать разделение файла между несколькими приложениями: разные приложения могут по-своему структурировать и интерпретировать данные, содержащиеся в файле.

Другая модель файла, которая применялась в ОС OS/360, DEC RSX и VMS, а в настоящее время используется достаточно редко, – это структурированный файл. В этом случае поддержание структуры файла поручается файловой системе. Файловая система видит файл как упорядоченную последовательность логических записей. Приложение может обращаться к ФС с запросами на ввод-вывод на уровне записей, например “считать запись 25 из файла FILE.DOC”. ФС должна обладать информацией о структуре файла, достаточной для того, чтобы выделить любую запись ФС предоставляет приложению доступ к записи, а вся дальнейшая обработка данных, содержащихся в этой записи, выполняется приложением. Развитием этого подхода стали системы управления базами данных (СУБД), которые поддерживают не только сложную структуру данных, но и взаимосвязи между ними.

Физическая организация файловой системы

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

Статьи к прочтению:

05 Физическая организация файловой системы


Похожие статьи:

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

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

Модель файла, в соответствии с которой содержимое файла представляется неструктурированной последовательностью (потоком) байт, стала популярной вместе с ОС UNIX, а теперь она широко используется в большинстве современных ОС, в том числе в MS DOS, Windows NT/2000 и.т.д. Неструктурированная модель файла позволяет легко организовать разделение файла между несколькими приложениями: разные приложения могут по-своему структурировать и интерпретировать данные, содержащиеся в файле.

Другая модель файла, которая применялась в ОС OS/360, DEC RSX и VMS, а в настоящее время используется достаточно редко, — это структурированный файл. В этом случае поддержание структуры файла поручается файловой системе. Файловая система видит файл как упорядоченную последовательность логических записей. Приложение может обращаться к ФС с запросами на ввод-вывод на уровне записей, например «считать запись 25 из файла FILE. DOC». ФС должна обладать информацией о структуре файла, достаточной для того, чтобы выделить любую запись. ФС предоставляет приложению доступ к записи, а вся дальнейшая обработка данных, содержащихся в этой записи, выполняется приложением. Развитием этого подхода стали системы управления базами данных (СУБД), которые поддерживают не только сложную структуру данных, но и взаимосвязи между ними.

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

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

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

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

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

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

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

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

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

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

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

Читайте также: