РУКОВОДСТВО СИСТЕМНОГО ПРОГРАММИСТА I.1. Файловая подсистема ОС (окончание) 3. СТРУКТУРА ТОМА ВНЕШНЕЙ ПАМЯТИ 3.1. Модель тома данных Том - это некоторый объем внешней памяти, связанный (в данный момент или вообще) с некоторым логическим устройст- вом, в пределах которого реализуется отдельная библиотека файлов. Вся память тома (и только она) участвует в статическом или динамическом распределении, проводимом ДOC для хранения информации в данной библиотеке, для чего в томе поддержива- ются нужные информационные области. Единица чтения, записи и выделения памяти в томе - блок из 256 байтов. Блоки имеют сквозную нумерацию от 0 до MAX- BLOK (системный параметр, характеризующий емкость тома). Mаксимальная емкость тома, допускаемая ДOC - 65536 блоков (16 Мбайт). Потенциально более емкие физические носители рекомендуется разбивать на несколько томов. 3.2. Соотношение тома с физическими носителями Файловая подсистема ОС имеет дело только с описанной вы- ше логической моделью тома. Физическая структура устройства и носителя, поддерживающих том внешней памяти, скрыта от системы и внешнего пользователя типовым драйвером RWTS. Од- нако поскольку "типичный" носитель - это диск с наложенной структурой сторон-треков-секторов, с которой удобнее рабо- тать некоторым стандартным утилитам, введены три дополни- тельные характеристики устройства/носителя: DSIDE - число сторон (головок дисковода), DSIZE - размер носителя в треках (на всех сторонах), TSIZE - размер трека в блоках (секторах). Обычно все треки имеют фиксированный размер (TSIZE) и DSIZE * TSIZE = MAXBLOK + 1. Для "недисковых" устройств (электронных дисков и др.) эти характеристики не имеют ука- занного смысла и могут принимать любые значения, которые сохраняют приведенное выше равенство. Может оказаться, на- пример, удобным вводить виртуальные треки фиксированного размера, т.к. в пределах виртуального "трека" RWTS произво- дит оптимизацию серии обращений: отсрочку и наиболее эффек- тивную очередность выполнения. 3.3. Идентификация тома Поскольку существуют устройства, допускающие смену носи- теля (например, дисков в дисководе), в ДOC предусмотрен контроль тома в те моменты, когда его смена может привести к дезорганизации данных. При включенном контроле тома RWTS считывает и сравнивает с эталоном индивидуальный номер тома VOLUME, заданный поль- зователем при разметке носителя. Способ определения этого номера зависит от реализации драйвера устройства (например, для дисков он хранится в адресном поле каждого сектора). Для удобства программного распознавания типов устройств и носителей введена общесистемная нумерация типов устройств: 1 - RAM-диск произвольной природы и размера 2 - Shugаrt (EC-5088,89) 3 - MFM-DSDD (TEAC, EC-5323) - 2 стор., 2 плотность 4 - MFM-SSDD - 1 стор., 2 плотность 5 - MFM-SSSD 1 стор., 1 плотность .. - резерв Номер типа устройства (TYPE) хранится в его драйвере внутри ДОС, а также в томе. 3.4. Информационные области тома Статически в томе расположены: - карта использования тома VTOC; 1-й ее уровень находится в блоке с номером VTOCADR; - системная резервная область, в которой могут размещаться загрузочный модуль ОС, ее рабочие области и пр. (блоки с 0 по VTOCADR-1); - загрузочный (стартовый) блок с номером 0, содержащий ключевую информацию о томе в стандартном виде; - область динамического размещения файлов - все остальное пространство тома. Соотношение статических областей, определяемое парамет- ром VTOCADR (со значением не более 255), устанавливается при разметке тома. Динамические структуры данных, память под которые запра- шивается по мере необходимости и выделяется в файловой об- ласти, таковы: - блок-списки файлов (БС), содержащие информацию о блоках, занимаемых каждым файлом - хранятся в виде динамических деревьев блоков; - содержимое файлов - хранится в блоках, являющихся листь- ями деревьев БС; - каталоги: обычные файлы, содержащие ссылки на корни де- ревьев БC других файлов. 3.5. Структура загрузочного блока Загрузочный блок с номером 0 содержит в стандартном фор- мате настроечную информацию, необходимую для запуска систе- мы и последующего определения ею или утилитными программами характеристик данного тома, установленной конфигурации уст- ройств, стартовой программы и др. Начальные значения зада- ются при разметке и в дальнейшем их изменение недопустимо, если не оговорено иное. Размер настроечной части 0-го блока - 88 ($58) байтов. Ниже приводится описание информационных полей 0-го блока с указанием их относительных адресов в блоке и стандартных значений. 3.5.1. Автозагрузочная информация ----------------------------------------------------------- адрес параметр станд.знач. назначение ----------------------------------------------------------- 00 - 1 число блоков автозагрузки 01-03 AUTOLOAD JMP $858 вектор автозагрузки ----------------------------------------------------------- Информация, необходимая для загрузки с внешнего устрой- ства по принятой в машине схеме: программа загрузки, разме- щенная в ПЗУ контроллера дисковода загружает с 8-й страницы ОЗУ столько блоков, начиная с 0, сколько указано в байте 00 0-го блока (не более размера трека, обычно 1) и передает управления по адресу $801 - на указанный вектор продолжения загрузки в обход области настройки. "СПРАЙТ-ОС" распознает "свой" формат дисков по числу $58 во 2-м байте. 3.5.2. Таблица параметров тома (DPB) ----------------------------------------------------------- адрес параметр станд.значение назначение ----------------------------------------------------------- 04 VOLUME уст.при разметке N тома носителя 05 TYPE зависит тип устройства 06 DSIDE от типа 0/$80: 1/2 стороны 07 TSIZE устройства, размер трека в блоках 08-09 DSIZE уст. размер тома в треках 10-11 MAXBLOK при N послед.блока тома 12 VTOCADR разметке N нач.блока VTOC: < 256 ----------------------------------------------------------- Здесь собраны параметры тома, о которых говорилось в 1.7. Стандартные значения для стандартных устройств таковы: -------------------------------------- TYPE DSIDE TSIZE DSIZE MAXBLOK VTOCADR -------------------------------------- 1 0 1 зависит от реализации 2 0 16 35 559 32 3 $80 21 160 3359 42 4 0 21 80 1679 42 5 0 21 80 1679 42 -------------------------------------- 3.5.3. Корневой каталог ----------------------------------------------------------- адрес параметр станд.значение назначение ----------------------------------------------------------- 00-0E NAME здесь: автозагрузочная информация и DPB 0F STATUS 0 тип и статус защиты КФК 10-1F прочая информация о КФК ----------------------------------------------------------- Байты 00-1F описывают запись корневого каталога тома. В неизменяемом поле имени (см. формат записи каталога в 3.9) находятся автозагрузочная информация и DPB. Байты 10-1F из- меняются системой по мере расширения каталога. 3.5.4. Имя стартового файла ----------------------------------------------------------- адрес параметр станд.значение назначение ----------------------------------------------------------- 20-2E STRTFILE COMMAND.PRG имя стартового файла ----------------------------------------------------------- Содержит название файла, запускаемого после загрузки системы. По стандарту - Командер. Можно менять. 3.5.5. Предопределенная конфигурация устройств ----------------------------------------------------------- адрес параметр станд.значение назначение ----------------------------------------------------------- 2F SLTMASK :01111110 маска опроса разъемов 30 MAXDSK 0 число предопр.дисководов 31-36 DSKSLOTS 0...0 разъемы предопр.дисков-в 37 MAXRAM 0 число предопр. плат ОЗУ 38-3D RAMSLOTS 0...0 разъемы предопр.плат ОЗУ 3E ROMSLOT 0 разъем предопр.платы ПЗУ 3F PRNTSLOT 0 разъем предопр.принтера ----------------------------------------------------------- При загрузке системы проводится определение конфигурации физических устройств, подключенных к машине, - путем опроса разъемов (области CX00-FF и C0Y0-YF, Y=X+8) и распознавания состояний, характерных для различных устройств. Распознают- ся стандартные устройства: платы ОЗУ и ПЗУ, контроллеры дисководов типов Shugаrt и MFM, принтеры (ячейка интерфейса и специализированная плата принтера для Агата-9). Дисково- дов и плат ОЗУ может быть до 6, ПЗУ и принтеров - не более 1 (фактически в таблицу заносится последний найденный). В результате распознавания в таблицу заносятся номера разъемов (в виде $CX, X-номер разъема). MAXRAM и MAXDSK со- держат число найденных плат ОЗУ и дисководов и, соответ- ственно, число заполненных позиций в DSKSLOTS и RAMSLOTS. Незаполненные позиции остаются нулевыми. По окончании рас- познавания текущая конфигурация доступна в ячейках AF-BF. Возможно хранить на диске предварительно определенную полную или частичную конфигурацию устройств и отключать оп- рос некоторых разъемов. Это имеет смысл делать, если с дан- ного диска не ведется загрузка машин с другой конфигурацией и (или) к машине подключены нестандартные устройства, рас- познавание которых стандартным опросом невозможно. Для этого разрешено записывать в указанные параметры на диск предопределенную конфигурацию в том же виде, в каком они выдаютя, а в битовом массиве SLTMASK нулями отмечать разъемы, опрос которых не должен проводиться (нумерация разъемов в двоичном представлении байта: 76543210). В про- цессе распознавания немаскированных разъемов предопределен- ная конфигурация будет дополнена; при этом ответственность за возможные повторы оставляется за пользователем, задавшим конфигурацию. Впоследствии по результатам распознавания ОС формирует статическую нумерацию физических устройств и структуру вир- туальной памяти. 3.5.6. Таблица драйверов ----------------------------------------------------------- адрес параметр станд.значение ----------------------------------------------------------- 40-4F DEVDTAB адрес драйвера дисководов Shugаrt, адрес драйвера дисководов MFM, далее нули ----------------------------------------------------------- Таблица задает совокупность и статическую нумерацию ти- пов физических устройств внешней памяти. Нумерация исполь- зуется в RWTS для ассоциирования номера устройства с его драйвером (параметр MEDIA в DCT), а также для ссылки на эти драйверы. Два указанных стандартных драйвера располагаются непосредственно в системном модуле и загружаются вместе с ней. Загрузка других драйверов выполняется специально пре- дусмотренными инсталляторами из командного режима. 3.5.7. Xарактеристики системы ----------------------------------------------------------- адрес параметр станд.значение назначение ----------------------------------------------------------- 50 K.MAXSCT 24 макс.емкость трека 51 K.MAXDCT 8 макс.число драйверов 52 K.MAXDRN 8 макс.число физич.устройств 53 K.MAXLDR 8 макс.число логич.устройств 54 K.CONFTAB $3D ссылки на внутренние таб- 55 K.LOGPHYS $65 лицы в рабочей области 56 K.SECTORS $78 RWTS 57 резерв ----------------------------------------------------------- Эти параметры содержат статические характеристики ДOC (в основном, RWTS). Они не используются системой, и изменение их без переконфигурации системы бессмысленно. Предназначены для использования утилитами. - K.MAXSCT отражает размер каждого из буферов трековой об- работки в RWTS; - K.MAXDCT отражает размер используемой части таблицы DEVDTAB (см.3.5.6) - фактическое число типов устройств; - K.MAXDRN отражает максимальное число физических уст- ройств - размер таблиц SLOTS, DRIVES, MEDIA и CTREKS в рабочей области RWTS; - K.MAXLDR отражает максимальное число логических уст- ройств - размер DPBAREA в ДOC и таблицы LOGPHYS; - K.CONFTAB отражает смещение первой из этих последова- тельно расположенных таблиц (SLOTS) в рабочей области RWTS. - K.LOGPHYS отражает смещение таблицы ассоциаций логичес- ких и физичееских устройств в рабочей области RWTS; - K.SECTORS отражает смещение счетчика отсрочки в рабочей области RWTS, за которым следуют буфера трековой обра- ботки. 3.6. Структура загрузочного модуля Начиная с $58 байта загрузочного блока и в последующих блоках системной резервной области тома, как правило, рас- полагаются: - системные модули ОС: - автозагрузчик резидентных модулей ОС, - базовые программы ввода-вывода (IOSUB), - типовой драйвер внешней памяти (RWTS) с драйверами фи- зических устройств, - файловая подсистема (ДОС), ( - графическая подсистема). Все системные модули хранятся в закодированной форме - для защиты от возможной порчи и изменений (ошибка в любом бите делает систему заведомо неработоспособной). 3.7. Структура карты распределения памяти в томе Информация о состоянии блоков памяти хранится в 2-уров- невой карте распределения памяти в томе (VTOC). Состояние каждых последовательно расположенных 256($100) блоков тома хранится в отдельных VTOC 2-го уровня (V2-NN, NN- номер шестнадцатеричной "сотни"). Байт с номером KK описывает состояние блока NNKK и может принимать следующие значения: 00 : блок свободен и может быть выделен при запросе па- мяти; не 00 : блок занят и не может быть выделен; FF : блок выделен для хранения файловой информации и мо- жет быть освобожден при уничтожении файла; не FF : блок не занят файлом и не может быть освобожден; F7 : блок занят служебной информацией тома (VTOC'и, сис- темный резерв и т.д.); F0 : блок испорчен и зарезервирован от выделения; другие: резерв, м.б. использованы утилитами. Сам V2-NN хранится в 0-м блоке каждой сотни (блок NN00) и поэтому в его 0-м байте всегда хранится F7. Исключение составляет V2-00, который хранится в блоке VTOCADR+1 или совсем отсутствует (если VTOCADR=FF). VTOC 1 уровня находится в блоке с адресом VTOCADR и со- держит информацию о VTOC'ах 2 уровня: значение NN-го байта равно количеству занятых блоков в NN-й сотне (0-255). Не равное FF значение показывает, что в V2-NN можно найти сво- бодный блок. 3.8. Размещение файлов Представление файлов в памяти тома зависит от их длины. Длина файла, который формально бесконечен, а фактически ограничен только емкостью тома, определяется наиболее уда- ленной его записью, даже если она только одна. Файл длины 0 памяти не занимает (не считая записи в ка- талоге). Файл длиной до 256 байт занимает 1 блок памяти, ссылка на который указана в каталоге. Файл длиной до 32768 (32 К) байт занимает на 1 блок больше, чем требуется для размещения информации. Это блок- список (БC 1 уровня), содержащий до 128 двухбайтовых ссылок на блоки файла. Порядок ссылок соответствует порядку блоков. Пустоты (невыделенные блоки) отмечены нулями. Файл длиной до 4195304 (4 М) байт имеет еще один, 2-й уровень БC, содержащий до 128 ссылок на БC 1 уровня. Файл длиннее 4 Мбайт имеет аналогичный 3-й уровень БC. Уровни БC достраиваются динамически, по мере роста длины файла. В каталоге находится ссылка на верхний уровень. 3.9. Формат файла-каталога Файл-каталог - это файл, хранимый по общим правилам, с установленным атрибутом D (каталог, или директория) и дли- ной записи 32. Число записей в каталоге - не более 256. Формат записи файла в каталоге практически совпадает с первыми 32 байтами блока управления файлом (FCB), использу- емым для доступа к нему: ----------------------------------------------------------- адрес параметр назначение ----------------------------------------------------------- 00-0E NAME имя файла, дополненное пробелами в конце 0F STATUS шкала атрибутов файла 10 LEVEL число уровней БC в файле (0-3) 11-12 INFADR ссылка (номер блока) на БC высшего уровня 13-14 BLOCKS число фактически занятых блоков, считая БC 15-16 RECLEN длина записи файла в байтах 17-18 DATE дата создания или послед.изменения файла 19-1B FILELEN длина файла (позиция конца послед.записи) 1C-1F USRINF пользовательская информация о файле ----------------------------------------------------------- Для некоторых файлов предусмотрены стандартные сведения в поле USRINF: - для каталогов: 1C-1D: адрес блока отчего каталога, содержащего запись данного файла, 1E: смещение этой записи в этом блоке; - для программных файлов: 1C-1D: адрес загрузки данных в память; - для перемещаемых файлов: 1C-1D: адрес загрузки данных в память; 1E-1F: длина кодовой части. ПРИЛОЖЕНИЕ 1 НУМЕРАЦИЯ БЛОКОВ ПО ТРЕКАМ НА НОСИТЕЛЯХ MFM 00: 000-014 28:348-35C 50:690-6A4 78:9D8-9EC 01: 015-029 29:35D-371 51:6A5-6B9 79:9ED-A01 02: 02A-03E 2A:372-386 52:6BA-6CE 7A:A02-A16 03: 03F-053 2B:387-39B 53:6CF-6E3 7B:A17-A2B 04: 054-068 2C:39C-3B0 54:6E4-6F8 7C:A2C-A40 05: 069-07D 2D:3B1-3C5 55:6F9-70D 7D:A41-A55 06: 07E-092 2E:3C6-3DA 56:70E-722 7E:A56-A6A 07: 093-0A7 2F:3DB-3EF 57:723-737 7F:A6B-A7F 08: 0A8-0BC 30:3F0-404 58:738-74C 80:A80-A94 09: 0BD-0D1 31:405-419 59:74D-761 81:A95-AA9 0A: 0D2-0E6 32:41A-42E 5A:762-776 82:AAA-ABE 0B: 0E7-0FB 33:42F-443 5B:777-78B 83:ABF-AD3 0C: 0FC-110 34:444-458 5C:78C-7A0 84:AD4-AE8 0D: 111-125 35:459-46D 5D:7A1-7B5 85:AE9-AFD 0E: 126-13A 36:46E-482 5E:7B6-7CA 86:AFE-B12 0F: 13B-14F 37:483-497 5F:7CB-7DF 87:B13-B27 10: 150-164 38:498-4AC 60:7E0-7F4 88:B28-B3C 11: 165-179 39:4AD-4C1 61:7F5-809 89:B3D-B51 12: 17A-18E 3A:4C2-4D6 62:80A-81E 8A:B52-B66 13: 18F-1A3 3B:4D7-4EB 63:81F-833 8B:B67-B7B 14: 1A4-1B8 3C:4EC-500 64:834-848 8C:B7C-B90 15: 1B9-1CD 3D:501-515 65:849-85D 8D:B91-BA5 16: 1CE-1E2 3E:516-52A 66:85E-872 8E:BA6-BBA 17: 1E3-1F7 3F:52B-53F 67:873-887 8F:BBB-BCF 18: 1F8-20C 40:540-554 68:888-89C 90:BD0-BE4 19: 20D-221 41:555-569 69:89D-8B1 91:BE5-BF9 1A: 222-236 42:56A-57E 6A:8B2-8C6 92:BFA-C0E 1B: 237-24B 43:57F-593 6B:8C7-8DB 93:C0F-C23 1C: 24C-260 44:594-5A8 6C:8DC-8F0 94:C24-C38 1D: 261-275 45:5A9-5BD 6D:8F1-905 95:C39-C4D 1E: 276-28A 46:5BE-5D2 6E:906-91A 96:C4E-C62 1F: 28A-29F 47:5D3-5E7 6F:91B-92F 97:C63-C77 20: 2A0-2B4 48:5E8-5FC 70:930-944 98:C78-C8C 21: 2B5-2C9 49:5FD-611 71:945-959 99:C8D-CA1 22: 2CA-2DE 4A:612-626 72:95A-96E 9A:CA2-CB6 23: 2DF-2F3 4B:627-63B 73:96F-983 9B:CB7-CCB 24: 2F4-308 4C:63C-650 74:984-998 9C:CCC-CE0 25: 309-31D 4D:651-665 75:999-9AD 9D:CE1-CF5 26: 31E-332 4E:666-67A 76:9AE-9C2 9E:CF6-D0A 27: 333-347 4F:67B-68F 77:9C3-9D7 9F:D0B-D1F ПРИЛОЖЕНИЕ 2 АДРЕСА СТРАНИЦ VTOC НА НОСИТЕЛЯХ MFM блок трек/сектор блок трек/сектор V1 : 02/00 V2-00 : 02/01 V2-07 : 55/07 V2-01 : 0C/04 V2-08 : 61/0B V2-02 : 18/08 V2-09 : 6D/0F V2-03 : 24/0C V2-0A : 79/13 V2-04 : 30/10 V2-0B : 86/02 V2-05 : 3C/14 V2-0C : 92/06 V2-06 : 49/03 V2-0D : 9E/0A