Версия для печати ↓↓


© Grand, 2001–2009


ОПИСАНИЕ ЛОГИЧЕСКОГО ФОРМАТА БЛОЧНЫХ УСТРОЙСТВ ДИСКОВЫХ ОПЕРАЦИОННЫХ СИСТЕМ ДИАЛОГОВЫХ ВЫЧИСЛИТЕЛЬНЫХ КОМПЛЕКСОВ






СОДЕРЖАНИЕ

Предисловие
Структура блочного устройства
Идентификационный блок
Сегмент каталога
Приложения






ПРЕДИСЛОВИЕ

    Этот документ кратко описывает всю информацию о логическом формате блочных устройств (другие названия: устройства прямого доступа, файловые устройства справочной структуры и пр.) совместимых между собой дисковых операционных систем RAFOS, ФОДОС, RT-11 и других, диалоговых вычислительных комплексов (ДВК).
    Представленный материал был собран автором этого документа из невнятных технических описаний к выше упомянутым операционным системам, а также на основе собственных экспериментальных работ, которые были проделаны при создании программы DVK UTILITY на Sinclair ZX Spectrum-совместимых компьютерах, предназначенной для работы с дисками двойной плотности от ДВК.
    Цель этого описания — помощь программистам, которые захотят создать качественныe программы для обработки данных с ДВК на других платформах, а также тем, кому потребуется восстановить информацию на дисках ДВК в случае ее порчи.

    Все числа в этом тексте — десятичные.

    При подготовке текста и графики использовался Sinclair ZX Spectrum-совместимый компьютер.





СТРУКТУРА БЛОЧНОГО УСТРОЙСТВА

    В качестве физического носителя блочного устройства могут выступать, например, магнитные и электронные диски, а также файл, размещённый на другом блочном устройстве, которое в свою очередь также может располагаться на одном из вышеперечисленных носителей.
    Блочное устройство, как следует из его названия, состоит из блоков постоянной длины — 512 байтов, которыми и происходит обмен данными с ним.
    Блоки в устройстве нумеруются начиная с нуля (т.е. имеют логическую нумерацию). Как будет сказано ниже, для указания длин файлов используется по одному 16-и разрядному слову, поэтому общая длина блочного устройства может быть не более 65536 блоков или 32 мегабайта.
    Первые шесть блоков в начале блочного устройства (с 0 по 5) зарезервированы. Блоки 0, 2–5 используются для хранения системного загрузчика, если устройство автозагружаемое. Блок 1 является идентификационным.
    С блока 6 следуют блоки, зарезервированные под сегменты каталога — по два блока на один сегмент. В сегментах каталога хранятся элементы каталога — заголовки файлов, содержащие служебную информацию о каждом из них. Максимальное число сегментов каталога — 31; оно задаётся при инициализации устройства, и в дальнейшем не может быть изменено.
    За сегментами каталогов следуют до конца устройства блоки, предназначенные для хранения данных файлов.





ИДЕНТИФИКАЦИОННЫЙ БЛОК

    Идентификационный блок имеет логический номер 1; в нем содержится служебная информация о всём блочном устройстве.

Таблица 1. Функциональное назначение байтов идентификационного блока
Смещение в байтах от началаКол-во байтовНазначение
+02Равны нулю.
+13256Нуль в первом байте указывает, что устройство инициализировано впервые (в этом случае остальные 55 байтов не используются), иначе — область хранит данные старого каталога: 10 байтов заголовка первого сегмента и два первых элемента каталога из него по 14 байтов (для возможности восстановления пока на устройство не было записано новых файлов); оставшиеся байты не используются и равны нулю.
+4484Назначение неизвестно, равны нулю.
+4666Назначение неизвестно, равны: 1, 0, 6, 0, 83, 142.
+47212Имя тома (устройства) в кодировке КОИ7; выдается в строке "Volume ID", при печати каталога.
+48412Имя владельца тома (устройства) в кодировке КОИ7; выдается в строке "Owner", при печати каталога.
+49612Имя инициализировавшей системы в кодировке КОИ7; ОС RT11, например, заносит в эти байты сообщение: "DECRT11A    ".




СЕГМЕНТ КАТАЛОГА

    Каждый сегмент каталога имеет 10-и байтный заголовок:

Таблица 2. Функциональное назначение байтов заголовка сегмента каталога
Смещение в байтах от началаКол-во байтовНазначение
+02Число сегментов, отведенных под каталог (до 31), заданное при инициализации. Здесь и далее — первый байт младший.
+22Номер следующего открытого сегмента каталога. В последнем сегменте записан 0; первый имеет номер 1, второй — 2 и т. д.
+42Счетчик сегментов, имеющих элементы каталога (только в первом сегменте). Об элементах каталога см. ниже.
+62Число дополнительных байтов в элементе каталога (после инициализации стандартными средствами всегда равно 0).
+82Номер блока, с которого начинаются файлы в данном сегменте.

    За заголовком сегмента следуют элементы каталога — области постоянной длины, в каждой из которых содержится информация об одном файле, хранящемся на устройстве.

Таблица 3. Функциональное назначение байтов элемента каталога
Смещение в байтах от началаКол-во байтовНазначение
+01Всегда равен нулю (не используется).
+11Отдельные установленные биты этого байта указывают вид файла:
  • бит 0 – временный (не закрытый) файл (приравнивается к пустому);
  • бит 1 – пустой (свободная область);
  • бит 2 – постоянный;
  • бит 3 – конец данных в сегменте каталога;
  • бит 7 – защита от удаления (для постоянного файла).
При установленном 3-м бите, этот байт считается маркером конца данных сегмента, и следующие байты относятся уже к свободной области сегмента.
+22Первый, второй и третий символы имени файла в кодировке Radix50.
+42То же для четвертого, пятого и шестого.
+62То же для первого, второго и третьего символов расширения файла.
+82Длина файла в блоках.
+102Специальные байты (не используются для постоянного файла, равны 0).
+122Дата создания файла (только для постоянного) от 01-Jan-72 до 31-Dec-99 (т. е. на сегодняшний день не актуально); два байта составляют слово (первый байт младший), отдельные биты которого обозначают:
  • биты 0...4 – код года, к нему прибавляется 72, результат — число соответствующее двум последним цифрам года прошлого века;
  • биты 5...9 – день месяца;
  • биты 10...14 – номер месяца.
Если все биты равны 0, то это указывает на отсутствие даты.
+14nБайты дополнительной информации (если есть); системой не обрабатываются.

    В элементах каталога не содержится логический номер блока, с которого начинаются данные файла. Для текущего файла начальный блок определяется суммированием длин предыдущих файлов текущего сегмента и прибавлением их общей длины к номеру блока, с которого начинаются файлы текущего сегмента, присутствующем в его заголовке.



ПРИЛОЖЕНИЯ

  1. Инициализация блочного устройства

        Как известно, перед началом работ с новым блочным устройством, требуется его инициализация, которая происходит следующим образом:

    1. Проверяется каталог устройства; если оно ранее использовалось и содержит защищенные файлы, у пользователя запрашивается разрешение для дальнейших действий.
    2. Нулевой блок устройства заполняется нулями, и в него записывается программа выдачи сообщения об отсутствии системного загрузчика.
    3. В первый блок устройства записываются данные согласно таблицы 1.
    4. В 6-м блоке устройства создаются: заголовок первого сегмента каталога; элемент каталога, указывающий о всей длине свободной области на устройстве (пустой файл); и маркер конца каталога. В блоки для остальных (будущих) сегментов каталога (если они есть) ничего не записывается.


  2. Создание нового сегмента каталога

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

    1. Заполняется заголовок нового сегмента, и в него переписывается примерно половина последних элементов каталога из заполненного сегмента.
    2. Корректируются связи сегментов (таким образом, сегменты могут быть связаны не по порядку своих номеров).
    3. Укороченный и новый сегменты записываются на устройство.
    4. Новый элемент каталога будет помещен в тот сегмент, в котором окажется информация о подходящей свободной области для файла.


  3. "Сборка мусора"

        При ведении устройства (т. е. при создании новых файлов и удалении старых) на нем могут оказаться множество мелких свободных областей, в любую из которых новый файл не помещается, хотя общего свободного пространства для этого достаточно. Логический формат блочного устройства не позволяет создавать сегментированные файлы (такие, как, например, в операционной системе IS-DOS на Sinclair ZX Spectrum-совместимых компьютерах). Однако, существует операция, называемая "сборкой мусора" (команда монитора — SQUEEZE), которая, последовательно копируя файлы на устройстве, сдвигает их, выделяя тем самым одну максимально свободную область. Устройство может иметь дефектные области, которые указываются файлами с расширением .BAD; они не затрагиваются этой операцией, и остаются на прежних местах.


  4. Блочное устройство MY:

        Контроллер:  КМД.
        Метод записи: модифицированная частотная модуляция (двойная плотность).
        Запоминающее устройство: накопитель на гибких магнитных дисках.
        Носитель: гибкий магнитный диск для двойной плотности записи, диаметром 133 либо 89 мм.
        Физический формат диска:
            дорожек: 40 или 80;
            сторон: одна или две;
            всего секторов: 400, 800 или 1600;
            секторов на дорожке: 10;
            размер сектора: 512 байтов; один сектор на диске соответствует одному логическому блоку данных блочного устройства.


Версия для печати ↓↓