Блок управления файлами

редактировать

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

FCB происходит из CP / M и также присутствует в большинстве вариантов DOS, но только в качестве меры обратной совместимости в MS-DOS версии 2.0 и новее. Полный FCB имеет длину 36 байт; в ранних версиях CP / M это было 33 байта. Этот фиксированный размер, который нельзя было увеличить без нарушения совместимости приложений, в конечном итоге привел к прекращению использования FCB как стандартного метода доступа к файлам.

Значения нескольких полей в FCB различаются между CP / M и DOS, а также в зависимости от того, какая операция выполняется. Следующие поля имеют одинаковое значение:

СмещениеРазмер байта.Содержание
0x001Номер накопителя - 0 по умолчанию, 1 для A :, 2 для B :,...
0x018Имя файла и расширение - вместе они образуют имя файла 8.3.
0x093
0x0C20В зависимости от реализации - должно быть инициализируется нулем перед открытием FCB.
0x201Номер записи в текущем разделе файла - используется при выполнении последовательного доступа.
0x213Номер записи для использования при выполнении произвольного доступа.

20-байтовый -длинное поле, начинающееся со смещения 0x0C, содержало поля, которые (среди прочего) предоставляли дополнительную информацию о файле:

СмещениеБайт. размерСодержание
0x0E2Длина записи файла в байтах.
0x104Общий размер файла в байтах.
0x142Дата последнего изменения содержимого файла.
0x162Время последней модификации.

Дальнейшие значения использовались более новыми версиями DOS до тех пор, пока новая информация не переставала умещаться в этих 20 байтах. Некоторые предыдущие байты «отрицательного смещения» были вытеснены из зарезервированных пространств в нулевой странице CP / M и DOS Префикс сегмента программы для хранения атрибутов файла.

Содержание

  • 1 Использование
  • 2 Область передачи на диск
  • 3 Префикс сегмента программы и инициализация программы
  • 4 См. Также
  • 5 Ссылки
  • 6 Дополнительная литература

Использование

в CP / M, 86-DOS и PC DOS 1.x / MS-DOS 1.xx, FCB был единственным методом доступа к файлам. В DOS несколько подфункций INT 21h обеспечивали интерфейс для работы с файлами с использованием FCB. Когда с MS-DOS 2 были сделаны приготовления для поддержки нескольких процессов или пользователей, использования других файловых систем, отличных от FAT, или для совместного использования файлов по сети в будущем, FCB считались слишком маленькими для обработки дополнительных данных, необходимых для таких функций и поэтому FCB считались неадекватными для различных путей расширения в будущем. Кроме того, они не предоставили поле для указания подкаталогов. Предоставление данных, связанных с файловой системой, пользовательскому пространству также рассматривалось как угроза безопасности. Таким образом, FCB были заменены дескрипторами файлов , которые использовались в UNIX и его производных. Дескрипторы файлов - это просто последовательные целые числа, связанные с определенными открытыми файлами.

Если программа использует новый API дескриптора файла для открытия файла, операционная система будет управлять своей внутренней структурой данных, связанной с этим файлом, в своей собственной области памяти. Это имеет большое преимущество в том, что эти структуры могут увеличиваться в размере в более поздних версиях операционной системы без нарушения совместимости с прикладными программами; его недостатком является то, что, учитывая довольно упрощенное управление памятью в DOS, пространство для такого количества этих структур, которое, вероятно, будет использовать наиболее "файлово-голодная" программа, должно быть зарезервировано во время загрузки и не может быть используется для любых других целей во время работы компьютера. Такое резервирование памяти выполняется с помощью директивы FILES = в файле CONFIG.SYS. Эта проблема не возникает с FCB в DOS 1 или в CP / M, поскольку операционная система хранит все, что ей нужно знать об открытом файле внутри FCB, и, следовательно, не нуждается в использовании какой-либо файловой памяти в памяти операционной системы. Космос. При использовании FCB в MS-DOS 3 или более поздних версиях формат FCB зависит от того, загружен ли SHARE.EXE, и ссылается ли FCB на локальный или удаленный файл и часто ссылается на запись SFT. Из-за этого количество FCB, которые могут быть одновременно открыты в DOS 3 или выше, также ограничено, обычно до 4; используя директиву FCBS = в файле CONFIG.SYS, при необходимости это число может быть увеличено. В DR-DOS ФАЙЛЫ и FCBS берутся из одного внутреннего пула доступных структур дескрипторов и назначаются динамически по мере необходимости.

FCB поддерживаются во всех версиях MS-DOS и Windows до появления файловой системы FAT32. Windows 95, Windows 98 и Windows Me не поддерживают использование FCB на дисках FAT32 из-за 32-битных номеров кластера, за исключением чтения тома этикетка. Это привело к сбою некоторых старых приложений DOS, включая WordStar, в этих версиях Windows.

Интерфейс FCB также не работает должным образом в Windows NT, 2000 и т. Д. - WordStar не работает должным образом в этих операционных системах. Эмуляторы DOS DOSEMU и DOSBox правильно реализуют интерфейс FCB, поэтому они позволяют запускать старые программы DOS, которым требуются FCB, в современных операционных системах.

Disk Transfer Area

Сопутствующей структурой данных, используемой вместе с FCB, была Disk Transfer Area (DTA). Это имя, присвоенное буферу, из которого будет считываться / записываться содержимое файла (записи). Функции доступа к файлам в DOS, которые использовали FCB, предполагали фиксированное местоположение для DTA, первоначально указывая на часть PSP (см. Следующий раздел); это местоположение можно изменить, вызвав функцию DOS, с последующим доступом к файлу неявно с использованием нового местоположения.

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

Префикс сегмента программы и инициализация программы

Каждый исполняемый файл DOS, запускаемый из оболочки (COMMAND.COM ), имел предварительно заполненную структуру данных длиной 256 байт, которая называется Префикс сегмента программы (PSP). Соответствующие поля в этой структуре включают:

СмещениеБайт. размерСодержание
0x022Доступная память для программы в 16-байтовых блоках.
0x2C2Адрес сегмента, содержащий переменные среды программы.
0x5C16Подготовленный FCB для первого аргумента командной строки (неоткрытый).
0x6C20Подготовленный FCB для второго аргумента командной строки (неоткрытый).
0x801Длина командной строки.
0x81127Содержимое командной строки.

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

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

См. Также

Ссылки

Дополнительная литература

Последняя правка сделана 2021-05-20 03:41:21
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте