Блок управления файлами
В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Блок управления файлами ( FCB состояние открытого файла ) — это структура файловой системы, в которой поддерживается . FCB управляется операционной системой, но он находится в памяти программы, которая использует файл, а не в памяти операционной системы. Это позволяет процессу одновременно открывать столько файлов, сколько он хочет, при условии, что он может выделить достаточно памяти для FCB на каждый файл.
FCB происходит от CP/M и также присутствует в большинстве вариантов DOS , но только в качестве меры обратной совместимости в MS-DOS версий 2.0 и более поздних. Полный FCB имеет длину 36 байт; в ранних версиях CP/M он составлял 33 байта. Этот фиксированный размер, который нельзя было увеличить без нарушения совместимости приложений, привел в конечном итоге к упадку FCB как стандартного метода доступа к файлам.
Значения некоторых полей в FCB различаются в CP/M и DOS, а также в зависимости от того, какая операция выполняется. Следующие поля имеют одинаковые значения: [1]
Компенсировать | Байт размер | Содержание |
---|---|---|
0x00 | 1 | Номер диска — 0 по умолчанию, 1 для A:, 2 для B:, ... |
0x01 | 8 | Имя и расширение файла — вместе они образуют имя файла 8.3 . |
0x09 | 3 | |
0x0C | 20 | Зависит от реализации — должен быть инициализирован нулем перед открытием FCB. |
0x20 | 1 | Номер записи в текущем разделе файла — используется при выполнении последовательного доступа . |
0x21 | 3 | Номер записи, который будет использоваться при выполнении произвольного доступа . |
Поле длиной 20 байт, начинающееся со смещения 0x0C, содержало поля, которые (помимо прочего) предоставляли дополнительную информацию о файле: [2]
Компенсировать | Байт размер | Содержание |
---|---|---|
0x0E | 2 | Длина записи файла в байтах. |
0x10 | 4 | Общий размер файла в байтах. |
0x14 | 2 | Дата последнего изменения содержимого файла. |
0x16 | 2 | Время последней модификации. |
Дальнейшие значения использовались в более новых версиях DOS до тех пор, пока новая информация больше не могла помещаться в эти 20 байтов. Некоторые предшествующие байты с «отрицательным смещением» были сжаты из зарезервированных мест в нулевой странице CP/M и префиксе сегмента программы DOS для хранения атрибутов файла. [1]
Использование
[ редактировать ]В CP/M, 86-DOS и PC DOS 1.x/MS-DOS 1.xx FCB был единственным методом доступа к файлам. В DOS несколько подфункций INT 21h обеспечивали интерфейс для работы с файлами с использованием FCB. [1] [3] [4] Когда в MS-DOS 2 были сделаны приготовления для поддержки нескольких процессов или пользователей, [3] [4] использовать другие файловые системы [3] [4] чем FAT или для обмена файлами [4] в будущем по сетям FCB считались слишком маленькими, чтобы обрабатывать дополнительные данные, необходимые для таких функций. [4] и поэтому FCB считались неадекватными для различных путей будущего расширения. [3] Кроме того, они не предоставили поле для указания подкаталогов. [3] Публикация данных, связанных с файловой системой, в пользовательском пространстве также рассматривалась как угроза безопасности. [4] Таким образом, FCB были заменены дескрипторами файлов , которые использовались в UNIX и его производных. [3] Дескрипторы файлов — это просто последовательные целые числа, связанные с конкретными открытыми файлами.
Если программа использует новый 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 и FILES, и FCBS происходят из одного и того же внутреннего пула доступных структур дескрипторов и назначаются динамически по мере необходимости. [5]
FCB поддерживались во всех версиях MS-DOS и Windows до появления файловой системы FAT32 . Windows 95 , Windows 98 и Windows Me не поддерживают использование FCB на дисках FAT32 из-за 32-битных номеров кластеров. [4] кроме чтения метки тома. Это привело к сбою некоторых старых приложений DOS, включая WordStar , в этих версиях Windows.
Интерфейс FCB также не работает должным образом в Windows NT , 2000 и т. д. — WordStar не работает должным образом в этих операционных системах. Эмуляторы DOS DOSEMU и DOSBox правильно реализуют интерфейс FCB, поэтому они позволяют запускать старые программы DOS, которым требуются FCB, в современных операционных системах.
Область передачи диска
[ редактировать ]Сопутствующей структурой данных, используемой вместе с FCB, была область передачи диска (DTA). [2] Это имя, присвоенное буферу, в который будет считываться/записываться содержимое файла (записи). Функции доступа к файлам в DOS, которые использовали FCB, предполагали фиксированное местоположение для DTA, первоначально указывая на часть PSP (см. следующий раздел); это местоположение можно изменить, вызвав функцию DOS, с последующим доступом к файлу неявно с использованием нового местоположения.
После прекращения поддержки метода FCB новые функции доступа к файлам, которые использовали дескрипторы файлов, также предоставили средства для указания буфера памяти для содержимого файла при каждом вызове функции, что позволяет поддерживать параллельные независимые буферы (либо для разных файлов, либо для одного и того же файла). файл) стал гораздо более практичным.
Префикс сегмента программы и инициализация программы
[ редактировать ]Каждый исполняемый файл DOS, запускаемый из оболочки ( COMMAND.COM ), имел предварительно заполненную 256-байтовую структуру данных, называемую префиксом сегмента программы (PSP). Соответствующие поля в этой структуре включают в себя: [2]
Компенсировать | Байт размер | Содержание |
---|---|---|
0x02 | 2 | Доступная память для программы кусками по 16 байт. |
0x2C | 2 | Адрес сегмента, содержащий переменные среды программы. |
0x5C | 16 | Подготовленный FCB для первого аргумента командной строки (неоткрытый). |
0x6C | 20 | Подготовленный FCB для второго аргумента командной строки (неоткрытый). |
0x80 | 1 | Длина командной строки. |
0x81 | 127 | Содержимое командной строки. |
Эту структуру данных можно было найти в начале сегмента данных, адрес которого был предоставлен DOS при запуске программы, в регистрах сегментов DS и ES. Помимо дословного предоставления командной строки программы по адресу 0x81, DOS также пыталась создать два FCB, соответствующие первым двум словам в командной строке, с целью сэкономить работу программиста в обычном случае, когда эти слова были именами файлов, с которыми нужно было работать. . Поскольку эти FCB оставались неоткрытыми, никаких проблем не возникло бы, даже если бы эти слова командной строки не относились к файлам.
Начальный адрес DTA был установлен так, чтобы перекрывать область PSP (по адресу 0x80), где хранились аргументы командной строки, так что программе необходимо было проанализировать эту область на наличие аргументов командной строки перед вызовом функций DOS, которые использовали DTA (например, чтение записи файла), если только программа не позаботилась об изменении адреса DTA на какую-либо другую область памяти (или вообще не использовала функции DTA/FCB, которые вскоре стали устаревшими в пользу дескрипторов файлов).
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Jump up to: а б с «FCB — стандартный блок управления файлами DOS» .
- ^ Jump up to: а б с Родригес-Роселло, Мигель (1992). 8088-8086/8087 Программирование на ассемблере в среде MSDOS (на испанском языке). Анайя Мультимедийные издания. ISBN 84-7614-128-9 .
- ^ Jump up to: а б с д и ж Збиковски, Марк ; Аллен, Пол ; Балмер, Стив ; Борман, Рубен; Борман, Роб; Батлер, Джон; Кэрролл, Чак; Чемберлен, Марк; Челл, Дэвид; Коули, Майк; Кортни, Майк; Драйфус, Майк; Дункан, Рэйчел; Экхардт, Курт; Эванс, Эрик; Фермер, Рик; Гейтс, Билл ; Гири, Майкл; Гриффин, Боб; Хогарт, Дуг; Джонсон, Джеймс В.; Кермаани, Каамель; Король, Адриан; Кох, Рид; Ландовски, Джеймс; Ларсон, Крис; Леннон, Томас; Липки, Дэн; Макдональд, Марк ; МакКинни, Брюс; Мартин, Паскаль; Мазерс, Эстель; Мэтьюз, Боб; Мелин, Дэвид; Мергентайм, Чарльз; Невин, Рэнди; Ньюэлл, Дэн; Ньюэлл, Тани; Норрис, Дэвид; О'Лири, Майк; О'Рир, Боб ; Олссон, Майк; Остерман, Ларри; Остлинг, Ридж; Пай, Сунил; Патерсон, Тим ; Перес, Гэри; Питерс, Крис; Петцольд, Чарльз ; Поллок, Джон; Рейнольдс, Аарон ; Рубин, Дэррил; Райан, Ральф; Шульмейстерс, Карл; Шах, Раджен; Шоу, Барри; Коротко, Энтони; Сливка, Бен; Смирл, Джон; Стиллмейкер, Бетти; Стоддард, Джон; Тиллман, Деннис; Уиттен, Грег; Йонт, Натали; Зек, Стив (1988). «Технические консультанты». Энциклопедия MS-DOS: версии с 1.0 по 3.2 . Дункан, Рэй; Боствик, Стив; Бургойн, Кейт; Байерс, Роберт А.; Хоган, Том; Кайл, Джим; Летвин, Гордон ; Петцольд, Чарльз ; Рабиновиц, Чип; Томлин, Джим; Уилтон, Ричард; Вулвертон, Ван; Вонг, Уильям; Вудкок, Джоанн (Полностью переработанное издание). Редмонд, Вашингтон, США: Microsoft Press . ISBN 1-55615-049-0 . LCCN 87-21452 . OCLC 16581341 . (xix+1570 страниц; 26 см) (Примечание. Это издание было опубликовано в 1988 году после обширной переработки отозванного первого издания 1986 года другим коллективом авторов. [1] )
- ^ Jump up to: а б с д и ж г Чаппелл, Джефф (январь 1994 г.). Шульман, Эндрю; Педерсен, Аморетт (ред.). Внутреннее устройство DOS . Серия программ Эндрю Шульмана (1-е издание, 1-е изд.). Издательская компания Аддисон Уэсли . ISBN 978-0-201-60835-9 . (xxvi+738+iv страниц, 3,5-дюймовая дискета [2] [3] ) Исправления: [4] [5] [6]
- ^ Пол, Матиас Р. (30 июля 1997 г.). NWDOS-TIPs — Советы и рекомендации по Novell DOS 7 с учетом недокументированных подробностей, ошибок и обходных путей . Выпуск 157 (на немецком языке) (3-е изд.). Архивировано из оригинала 23 августа 2017 г. Проверено 11 января 2012 г.
{{cite book}}
:|work=
игнорируется ( помощь ) (Примечание. NWDOSTIP.TXT — это всеобъемлющая работа по Novell DOS 7 и OpenDOS 7.01 , включая описание многих недокументированных функций и внутренних устройств. Это часть еще более крупной коллекции автора MPDOSTIP.ZIP, поддерживаемой до 2001 года и распространяемой на многих сайтах в то время. Предоставленная ссылка указывает на более старую версию файла NWDOSTIP.TXT, преобразованную в HTML.)
Дальнейшее чтение
[ редактировать ]- Браун, Ральф Д. , изд. (17 июля 2000 г.). «210F: DOS 1+ — ОТКРЫТЬ ФАЙЛ С ПОМОЩЬЮ FCB» . Список прерываний Ральфа Брауна 61 . ctyme.com. Архивировано из оригинала 19 июня 2016 г. [7]
- Эллиотт, Джон К. (29 декабря 2002 г.). «Блок управления файлами CP/M» . Seasip.info . Архивировано из оригинала 23 августа 2017 г. Проверено 23 августа 2017 г.
- «Внутреннее устройство CP/M» . 23 августа 2017 г. Архивировано из оригинала 23 августа 2017 г. Проверено 23 августа 2017 г. - Подробное описание CP/M FCB.