YaChudo

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

Переглядів: 0. Оновлено 24.10.2026.

Блок керування файлом (англ. file control block, FCB) — це структура файлової системи, у якій зберігається стан відкритого файлу. FCB керується операційною системою, але перебуває в пам'яті програми, яка використовує файл, а не в пам'яті операційної системи. Це дає змогу процесу одночасно мати відкритою будь-яку кількість файлів, за умови, що він може виділити достатньо пам'яті для одного FCB на кожен файл.

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

Значення кількох полів у FCB відрізняються між CP/M і DOS, а також залежать від того, яка операція виконується. Наведені нижче поля мають узгоджені значення:[1]

Offset Byte
size
Contents
0x00 1 Номер диска — 0 для типового, 1 для A:, 2 для B:, ...
0x01 8 Назва файлу та розширення — разом вони утворюють назву файлу 8.3.
0x09 3
0x0C 20 Залежить від реалізації — перед відкриттям FCB має бути ініціалізоване нулями.
0x20 1 Номер запису в поточному розділі файлу — використовується під час виконання послідовного доступу.
0x21 3 Номер запису, який використовується під час виконання довільного доступу.

Поле довжиною 20 байтів, що починається зі зсуву 0x0C, містило поля, які, серед іншого, надавали додаткову інформацію про файл:[2]

Offset Byte
size
Contents
0x0E 2 Довжина запису файлу в байтах.
0x10 4 Загальний розмір файлу в байтах.
0x14 2 Дата останньої зміни вмісту файлу.
0x16 2 Час останньої зміни.

Використання

У 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, у сучасних операційних системах.

Примітки

  1. ↑ а б FCB - Standard DOS File Control Block.
  2. ↑ Rodriguez-Rosello, Miguel (1992). 8088-8086/8087 Programacion Ensamblador En Entorno MSDOS (ісп.). Ediciones Anaya Multimedia. ISBN 84-7614-128-9.
  3. ↑ а б в г д е Zbikowski, Mark; Allen, Paul; Ballmer, Steve; Borman, Reuben; Borman, Rob; Butler, John; Carroll, Chuck; Chamberlain, Mark; Chell, David; Colee, Mike; Courtney, Mike; Dryfoos, Mike; Duncan, Rachel; Eckhardt, Kurt; Evans, Eric; Farmer, Rick; Gates, Bill; Geary, Michael; Griffin, Bob; Hogarth, Doug; Johnson, James W.; Kermaani, Kaamel; King, Adrian; Koch, Reed; Landowski, James; Larson, Chris; Lennon, Thomas; Lipkie, Dan; McDonald, Marc; McKinney, Bruce; Martin, Pascal; Mathers, Estelle; Matthews, Bob; Melin, David; Mergentime, Charles; Nevin, Randy; Newell, Dan; Newell, Tani; Norris, David; O'Leary, Mike; O'Rear, Bob; Olsson, Mike; Osterman, Larry; Ostling, Ridge; Pai, Sunil; Paterson, Tim; Perez, Gary; Peters, Chris; Petzold, Charles; Pollock, John; Reynolds, Aaron; Rubin, Darryl; Ryan, Ralph; Schulmeisters, Karl; Shah, Rajen; Shaw, Barry; Short, Anthony; Slivka, Ben; Smirl, Jon; Stillmaker, Betty; Stoddard, John; Tillman, Dennis; Whitten, Greg; Yount, Natalie; Zeck, Steve (1988). Technical advisors. The MS-DOS Encyclopedia: versions 1.0 through 3.2. Duncan, Ray; Bostwick, Steve; Burgoyne, Keith; Byers, Robert A.; Hogan, Thom; Kyle, Jim; Letwin, Gordon; Petzold, Charles; Rabinowitz, Chip; Tomlin, Jim; Wilton, Richard; Wolverton, Van; Wong, William; Woodcock, JoAnne (вид. Completely reworked). Redmond, Washington, USA: Microsoft Press. ISBN 1-55615-049-0. LCCN 87-21452. OCLC 16581341. (xix+1570 pages; 26 cm) (NB. This edition was published in 1988 after extensive rework of the withdrawn 1986 first edition by a different team of authors. [1])
  4. ↑ а б в г д е ж Chappell, Geoff (Січень 1994). Schulman, Andrew; Pedersen, Amorette (ред.). DOS Internals. The Andrew Schulman Programming Series (вид. 1st printing, 1st). Addison Wesley Publishing Company. ISBN 978-0-201-60835-9. (xxvi+738+iv pages, 3.5"-floppy [2][3]) Errata: [4][5][6]
  5. ↑ Paul, Matthias R. (30 липня 1997). NWDOS-TIPs — Tips & Tricks rund um Novell DOS 7, mit Blick auf undokumentierte Details, Bugs und Workarounds. Release 157 (нім.) (вид. 3). Архів оригіналу за 23 серпня 2017. Процитовано 11 січня 2012. {{cite book}}: Проігноровано |work= (довідка) (NB. NWDOSTIP.TXT is a comprehensive work on Novell DOS 7 and OpenDOS 7.01, including the description of many undocumented features and internals. It is part of the author's yet larger MPDOSTIP.ZIP collection maintained up to 2001 and distributed on many sites at the time. The provided link points to a HTML-converted older version of the NWDOSTIP.TXT file.)

Джерело: стаття у Вікіпедії та історія редагувань (автори).