Научно-технический кооператив "Спрайт" г. Новосибирск 1992 ОПЕРАЦИОННАЯ СИСТЕМА "С П Р А Й Т" (версия 1.3) РУКОВОДСТВО СИСТЕМНОГО ПРОГРАММИСТА В "Руководстве системного программиста" приводится опи- сание программного интерфейса и внутренних структур данных ОС "Спрайт", знание которых необходимо для правильного ис- пользования ее возможностей при разработке системных и при- кладных программ. I. ЯДРО ОПЕРАЦИОННОЙ СИСТЕМЫ I.1. Файловая подсистема ОС В данном документе описывается устройство файловой под- системы ОС и порядок обращения к ней ассемблерных программ. СОДЕРЖАНИЕ 1. УСТРОЙСТВО И ПРИНЦИПЫ РАБОТЫ ДОС 1.1. Структура ДОС 1.2. Карта памяти ДОС 1.3. Обращение к ДОС из программы на ассемблере 1.4. Список функций (вызовов) ДОС 1.5. Физические и логические устройства 1.6. Активное и пассивное состояние устройств 1.7. Таблица параметров носителя (DPB) 1.8. Файлы и файлы-каталоги (ФК) 1.9. Таблица управления файлов (FCB) 1.10. Указание имен файлов в FCB 1.11. Дисциплина доступа к подкаталогам и файлам 1.12. Префиксное открытие 1.13. Текущее устройство и текущий каталог 1.14. Мультидоступ к файлам. Ранги доступа 1.15. Модель файлов 1.16. Атрибуты файлов 2. ОПИСАНИЕ ВЫЗОВОВ ДОС 2.1. Общие замечания 2.2. RESETDOS - инициализация ДОС / завершение программы 2.3. CALLRWTS - обращение к RWTS 2.4. S_DEFDEV - установка текущих устройства и каталога 2.5. G_DEFDEV - выдача текущего каталога и устройства 2.6. SELDRIVE - ассоциирование номеров устройства 2.7. SG_DMA - установка/выдача адреса передачи данных 2.8. SG_HIMEM - установка/выдача верхней границы памяти 2.9. SG_DATE - установка/выдача текущей даты 2.10. G_FREMEM - выдача свободной памяти на носителе 2.11. G_DPB - выдача таблицы параметров устройства (DPB) 2.12. S_STATUS - установка атрибутов файла по маске 2.13. SEARCH - поиск следующего файла в ФК по шаблону имени и маске атрибутов 2.14. DELETE - уничтожение файла/каталога 2.15. RENAME - переименование файла 2.16. OPEN - открытие доступа к файлу для обработки 2.17. CLOSE - закрытие файла: прекращение обмена 2.18. RW_DATA - чтение/запись данных файла 2.19. POSITN - установка позиции текущего обмена 2.20. Прочие вызовы - выдача адреса таблицы вызовов ДОС 3. СТРУКТУРА ТОМА ВНЕШНЕЙ ПАМЯТИ 3.1. Модель тома данных 3.2. Соотношение тома с физическими носителями 3.3. Идентификация тома 3.4. Информационные области тома 3.5. Структура загрузочного блока 3.5.1. Автозагрузочная информация 3.5.2. Таблица параметров тома (DPB) 3.5.3. Корневой каталог 3.5.4. Имя стартового файла 3.5.5. Предопределенная конфигурация устройств 3.5.6. Таблица драйверов 3.5.7. Xарактеристики системы 3.6. Структура загрузочного модуля 3.7. Структура карты распределения памяти в томе 3.8. Размещение файлов 3.9. Формат файла-каталога Приложение 1. Нумерация блоков на треках носителей MFM Приложение 2. Адреса VTOC на носителях MFM Приложение 3. Модуль программных спецификаций ДОС (в файле \SYSTEM\DEFINES\DOS.DEF) 1. УСТРОЙСТВО И ПРИНЦИПЫ РАБОТЫ ДОС 1.1. Структура ДОС Файловая подсистема ОС "Спрайт" (ДОС) организует всю ра- боту с внешней памятью. Сюда входят: - организация библиотек файлов в абстрактной внешней памя- ти с унифицированной структурой и управление логически- ми устройствами; - поддержка унифицированного представления памяти и досту- па к ней для реальных физических устроств и носителей, а также для эмуляторов виртуальных устройств; - взаимодействие с физическими устройствами и поддержка информационной структуры на носителях данных. В соответствии с этими задачами, в ДОС выделены 3 поду- ровня, каждый из которых реализуется отдельными программами: - собственно файловая подсистема (ДОС), работающая с за- данной конфигурацией логических устройств (описываемых набором таблиц специального вида) внешней памяти, пред- ставимой моделью массива 256-байтовых блоков с блочным принципом обмена; - универсальный драйвер устройства внешней памяти (RWTS), реализующий данную модель для конкретных устройств, опираясь на единый набор характеристик и подпрограмм, предоставляемых драйверами этих устройств; - набор драйверов физических устройств или их эмуляторов, реализующих средствами конкретного устройства набор примитивов нижнего уровня для RWTS. В стандартной конфигурации ОС "Спрайт" ДОС, RWTS и стан- дартные драйверы для двух типов дисководов объединены в об- щий загрузочный модуль. Для подключения новых драйверов требуется изыскивать дополнительную память и средства за- грузки. Дополнительно реализована стандартная языковая оболочка (пользовательский интерфейс) ДОС - командный режим, реали- зующий более высокий уровень работы с файлами, чем вызовы ДОС, и предоставляющий системному программисту доступ к ним и к средствам разбора входных строк и их элементов. Эти функции собраны в нерезидентом системном модуле Командер. 1.2. Карта памяти ДОС В стандартной конфигурации памяти, принятой в ОС, ДОС располагается в банке RAM1 в адресах $A000-BFFF, а Командер в адресах EE00-FFFF банка ROM1: ----------------------------------------------------------- адрес область содержимое ----------------------------------------------------------- A000-A0FF RWTSWA входные параметры и раб.область RWTS A100-A8A9 DOSWA рабочая область ДОС A8AA-AB1A CMDWA рабочая область Командера AB1B-AB59 ZPSAVE область сохранения ДОС AB5A-AB5F DMA,HIMEM,DATE текущие установки ДОС AB60-B67F DOS модуль файловой подсистемы ДОС B680-BDFF RWTS драйверы стандартных устройств RWTS BE00-BFFF TIPRWTS типовой драйвер внешней памяти RWTS EEA0-FFF9 COMMAND нерезидентный модуль Командера ----------------------------------------------------------- (конфигурация и внутренние адреса версионно-зависимы) Адреса всех рабочих областей и подпрограмм и их интер- фейс, кроме оговоренных в формальных спецификациях, могут изменяться без предупреждения, являются случайными и их ис- пользование считается некорректным. В 0-й странице ОЗУ ДОС использует: - для постоянного хранения данных - ячейки $36-37; - для хранения данных во время вызова - ячейки $BA-FF (эта область сохраняется на время вызова). 1.3. Обращение к ДОС из программы на ассемблере Общий вид описания необходимых констант и обращения: CURFILE EQU $36 -37 адрес таблицы управления файлом (FCB) CALLDOS EQU $2F8 вектор вызова ДОС из любой конфиг.памяти LDA #код вызова ; функция LDY #субкод вызова ; в Y,X передается и другая LDX #доп.параметр ; дополнительная информация JSR CALLDOS STA Rеt1 ; при ошибке в A лежит ее номер STY Rеt2 ; A,Y - доп.выходная информация BCS Errоr ; C=1 - признак ошибки Вектор CALLDOS, находящийся в модуле IOSUB, выполняет т. н. межслотный вызов ДОС с сохранением текущей конфигурации памяти. Обмен данными из банков памяти, параллельных банку ДОС на Агате-7 (RAM2) невозможен, на Агате-9 возможен при подключении их к другим сегментам. 1.4. Список функций (вызовов) ДОС ----------------------------------------------------------- N мнемоника функция ----------------------------------------------------------- 0 RESETDOS сброс ДОС, завершение программы и запуск Ко- мандера 2 CALLRWTS обращение к драйверу устр-ва внеш.памяти RWTS 4 S_DEFDEV установка текущего каталога 6 G_DEFDEV выдача текущих логического устр-ва и каталога 8 SELDRIVE ассоциирование логическ. устр-ва с физическим 10 SG_DMA уст/выд. начальный адрес передачи данных 12 SG_HIMEM уст/выд. адрес верх.границы доступной памяти 14 SG_DATE уст/выд. текущую дату 16 G_FREEMEM выдача количества свободных блоков носителя 18 G_DPB выдача блока параметров устройства 20 S_STATUS установка атрибутов файла 22 SEARCH поиск след.файла в каталоге по шаблону имени 24 DELETE уничтожение файла 26 RENAME переименование файла 28 OPEN открытие файла для обработки 30 CLOSE закрытие файла: прекращение обмена 33 RW_FILE чтение/запись данных файла 34 S_POSITN установка позиции текущего обмена с файлом прочие выдача адреса таблицы вызовов ДОС ----------------------------------------------------------- Для второй группы вызовов в CURFILE передается ссылка на FCB обрабатываемого файла или файла-каталога (см. 1.8). Спецификации интерфейса вызовов приведены в 2. 1.5. Физические и логические устройства Устройством в ДОC считается любой агрегат (реальный или программно моделируемый), способный выполнять функции чте- ния и записи блоков данных над некоторым носителем (томом) и имеющий драйвер, оформленный в соответствии со специфика- цией интерфейса драйвера и RWTS (см.???). Физическая нумерация устройств задается порядком распо- ложения их параметров в таблицах настройки RWTS. Обычно все физические устройства реально различны (аппаратурой, драй- верами, расположением в разъемах или настройкой на разные носители), хотя совпадения допустимы и ничему не противоре- чат. Физическая нумерация задается при конфигурировании системы в момент загрузки, может меняться при подключении и отключении новых драйверов, но в целом она статична и слу- жит только для перечисления устройств, считающихся различ- ными. Другая, основная, логическая нумерация устройств служит для их идентификации при обращении из командного диалога или из программ и может динамически меняться, что позволяет пользователю: - переобозначать устройства удобным для него образом; - избавиться от жесткой привязки программ к конкретным физическим устройствам и конфигурации конкретной ЭВМ; - обозначать по-разному одно и тоже устройство в разных контекстах использования и указывать на это системе: например, источник и адресат при копировании с одного диска на другой всегда задаются двумя логическими уст- ройствами, даже если физический дисковод один; различие имен является указанием системе требовать в этом случае перестановку дисков. Установление соответствия между физическим и логическим номерами устройства называется ассоциированием. Ниже для краткости устройства в физической и логической нумерации называются "физическими" и "логическими", хотя речь может идти об одном и том же устройстве в разном представлении; также под просто "устройством" понимается логическое, если не оговорено иное. Допускается ассоциирование нескольких логических уст- ройств с одним физическим, но не наоборот. Ассоциация изме- няется вызовом ДОС SELDRIVE, если логическое устройство не- активно (см. 1.6). Максимальное число логических и физических устройств за- задается версионно-зависимыми системными константами MAXLDR и MAXDRN. 1.6. Активное и пассивное состояние устройств Устройство считается активным, если на нем открыт доступ хотя бы к одному файлу (каталогу). В частности, всегда ак- тивно устройство, на котором открыт текущий каталог (см. 1.13). На активном устройстве ДОС ведет контроль за сменой но- сителя. Активное устройство нельзя переассоциировать с дру- гим физическим до закрытия на нем всех файлов с переходом в неактивное (пассивное) состояние. Все вызовы ДОС, кроме CALLRWTS, обращаются к активному устройству или сами активируют одно из логических. CALLRWTS работает независимо от прочих механизмов ДОС и допускает обращение к пассивному устройству. Однако при этом возможно пользоваться информацией только из рабочей области RWTS, и только после включения устройства (т.к. настройка парамет- ров текущего устройства в DCT выполняется только при вклю- чении физического устройства). 1.7. Таблица параметров носителя (DPB) Унифицированное представление носителей для ДОС описыва- ется таблицами параметров носителя DPB (Disk Pаrаmеtеrs Blосk), которые хранятся на каждом носителе, размеченном ОС "Спрайт", в первых 32 байтах 0 блока. DPB всех активных устройств хранятся в рабочей области ДОС (DPBAREA). DPB пассивного устройства считывается при каждом обращении к нему с текущего носителя. DPB активного устройства можно получить вызовом ДОС GETDPB; она имеет следующий формат: ----------------------------------------------------------- байт параметр значение в рабочей области ДОС ----------------------------------------------------------- 00 DPB.PHYSDR N физич.у-ва, ассоциированного с данным 01 DPB.RTDIR N корневого ФК у-ва / 0: у-во пассивно 02 DPB.CURDIR N текущего ФК у-ва / 0: текущего ФК нет 03 - 04 DPB.VOLUME N тома носителя 05 DPB.TYPE тип физического устройства 06 DPB.DSIDE число сторон носителя: 0-одна, $80-две 07 DPB.TSIZE число блоков на треке 08-09 DPB.DSIZE число треков на носителе (все стороны) 10-11 DPB.MAXBLOK номер последнего блока тома (=всего-1) 12 DPB.VTOCADR адрес блока VTOC 1 уровня ----------------------------------------------------------- RTDIR активного устройства содержит системный номер его открытого корневого каталога; если устройство пассивно и DPB пуст, то там 0. Содержимое DPB на диске немного отличается от хранящего- ся в памяти: первые 4 байта (0-3) 0-го блока, не переписы- ваемые в память, поддерживают принятый в Агате механизм ав- тозагрузки с диска: 0-й байт - число блоков 0 трека, загру- жаемых программой "холодного старта" из ПЗУ контроллера, а 1-3 - команду перехода на загрузочный модуль (по адресу $858). Байт 2 ($58) является маркером разметки ОС "Спрайт": другое его значение приводит к возникновению ошибки "ЧУЖОЙ ДИСК: НЕТ DPB" при опознании диска. 1.8. Файлы и файлы-каталоги (ФК) ДОС поддерживает иерархическую древовидную структуру файлов на носителе. Файлы, соответствующие нетерминальным узлам дерева, являются каталогами (ФК) и содержат информа- цию о файлах следующего уровня в определенном формате. Об- щая структура ФК совпадает со структурой файлов данных, по- этому все средства обработки файлов применимы и к каталогам. Вершина иерархии файлов на носителе - корневой каталог (КФК). Описывающая его запись хранится в первых 32 байтах 0-го блока носителя (из них первые 13 - DPB устройства, за- писанная в поле имени файла). При разметке тома под корне- вой каталог сразу выделяется несколько линейно расположен- ных блоков памяти, но он изначально пуст. Выделение памяти под другие файлы и каталоги происходит по мере надобности. 1.9. Таблица управления файлов (FCB) Для доступа к файлам пользователь передает ДОС таблицу управления файлом FCB (Filе Cоntrоl Blосk). Постоянные па- раметры, определяющие положение файла в иерархии каталогов и его собственные свойства (имя, атрибуты, ссылка на блоки данных, размер, дата создания, размер записи), образуют подтаблицу FPB (Filе Pаrаmеtеrs Blосk) из 32 начальных бай- тов FCB. FPB файла хранится в одной записи его отчего ФК. Непостоянные параметры FCB, описывающие текущее состояние доступа к файлу (N устройства, системный N файла, текущая позиция, число записей для обмена), в каталоге не хранятся. Структура FCB и FPB такова: ----------------------------------------------------------- байт параметр назначение ----------------------------------------------------------- 00-14 FCB.NAME имя файла 15 .STATUS атрибуты файлы; 0-й бит: 0:ФК / 1:файл 16 * .LEVEL высота файла: число уровней БС (0-3) 17-18 * .INFADR адрес содержимого файла (блок данных/БС) 19-20 * .BLOCKS число блоков, занятых файлом 21-22 .RECLEN длина 1 записи файла (для ФК всегда 32) 23-24 * .DATE дата создания/последнего изменения файла 25-27 .FILELEN длина файла (позиция последнего байта) 28-31 .USRINF пользовательская информация о файле: 28-29 .BEGADR - стартовый (загрузочный) адрес программ 28-29 * .PARDIR - для ФК: блок записи в отчем ФК 30 * .PAROFF - и смещение записи в нем 32-35 FCB.POSITN позиция текущ.доступа к файлу (в байтах) 36-37 .RECIO число записей для обмена 38 * .MODF признак изменения FPB-части FCB 39 .FILENUM системный N открытого файла 40 * .LOGDR N логического устройства, где открыт файл ----------------------------------------------------------- *) эти параметры устанавливаются и поддерживается системой. FCB файла располагается в произвольном месте ОЗУ, дос- тупного на запись ДОС (т.е. не в ППЗУ и не в параллельном ДОС банке памяти). Адрес FCB передается ДОС через ячейки CURFILE ($36-37). 1.10. Указание имен файлов в FCB Имена служат для идентификации файлов при поиске по ка- талогу и при создании новых файлов. Имя файла задается 15-ю байтами FCB.NAME в таблице управления файлом. Для вызовов ДОС, предусматривающих поиск по каталогу (OPEN, SEARCH, RENAME, DELETE, S_STATUS), FCB.NAME задает шаблон имени, с которым посимвольно сравниваются имена про- сматриваемых файлов. Символы умолчания '?' и '*' в шаблоне обозначают, соответственно, любой символ и любую цепочку символов (возможно, пустую). Т.к. при этом шаблон может оказаться короче 15 байтов, он должен оканчиваться нулевым байтом. Предусмотренные вызовом действия будут выполнены для первого файла, имя которого удовлетворит шаблону. В именах файлах символы '?' и '*' запрещены: их нельзя указывать в именах создаваемых файлов вызовов RENAME и OPEN (с созданием). Буквы в именах файлов хранятся так, как они введены: без отождествления больших/малых и русских/латинских. Отождест- вление больших и малых букв выполняется при сравнении имен.