Home | FCOS | FCOS для программиста

Алгоритмы


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


1.3. Алгоритмы FCOS.

 

1.3.1. Общая информация.

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

Удобно отдельно рассматривать алгоритмы и их програмные реализации и по другой причине. Дело в том, что ядро FCOS написано на языке ASSEMBLER. Предполагается, что приложения так же будут создаваться на этом языке. Для удобства программирования будут созданы мосты (состоящие из шаблонов и макроопределений) для работы с интерфейсом HSV из языков высокого уровня (C, PASCAL, ...). После обычной компиляции исходного текста приложения FCOS, написанного на языке высокого уровня, полученные exe-файлы подвергаются конвертации в формат приложения FCOS, причём происходит это по той же схеме, как и при компиляции ASSEMBLER-программы. Программист может не вникать в тонкости работы процедур ядра FCOS, но для написания приложений он должен понимать логику работы системы на уровне сценариев (алгоритмов), которые и описаны в данной главе.

 

1.3.2. Окнонный интерфейс.

Окно FCOS — не просто изображение, а очень сложный объект. Вызов окна осуществляется процедурой Window, которая регистрирует новое окно в глобальных системных переменных и журнале событий, просчитывает месторасположение областей и производит прорисовку окна с интерфейсными и прикладными пиктограммами. Информационная модель окна хранится в виде структуры, часть полей которой задаётся приложением перед открытием, а остальные рассчитываются в процессе открытия окна процедурой Window.

Стандартное окно FCOS состоит из нескольких областей, различающихся внешними признаками и назначением. Перечислим основные области окна: Внешняя рамка, Внутренние разделители, Заголовок, Горизонтальная прокрутка, Вертикальная прокрутка, Горизонтальный ползунок, Вертикальный ползунок, Рабочая область (область пиктограмм), Активная (текстовая) область.

Активная (текстовая) область окна отличается от других тем, что если указатель мыши попадает в эту область, процедура Control вызовет процедуру приложения, адрес которой указан в поле ActSpace.

Внешняя рамка предназначена для отделения данного окна от прочего изображения на экране. Её толщина задаётся полем Rmk_out (по умолчанию — 3 пикселя).

...

 

1.3.3. Активные объекты интерфейса окна.

Control 0.

 

1.3.4. Текст в окнах FCOS.

Ф.

 

1.3.5. Пиктограммы в окнах FCOS.

Ф.

 

1.3.6. Мульти-меню в окнах FCOS.

.

 

 

1.3.7. Взаимодействие FCOS с приложениями.

FCOS запускает приложение на исполнение без передачи информации о местонахождении собственных функций. Работа с функциями FCOS из приложений осуществляется механизмом программных прерываний (INT 32..255), разделеных на группы. Важнейшей (для приложений) группой является Hyper Super Visor (HSV) — сорок восемь прерываний: 040h..06Fh. Каждое из этих прерываний называется Super Visor (SV) и работает аналогично прерыванию DOS 021h, т.е. вызывает не одну процедуру, а целый набор функций, сгруппированных по сходному назначению. Выделение нужной процедуры из набора происходит по регистру AX, в котором AH задаёт номер блока процедур, а AL указывает на требуемую процедуру.

Таким образом, все важнейшие функции собраны в трёхмерную структуру (INT, AH, AL). Конкретные числовые значения (INT и AX) не фиксируются, а задаются константами, которые находятся в файле "LISTFCOS\fcoscusr.inc" (для ассемблера) или аналогичном (для других языков). Для компиляции необходимо подключить этот файл к листингу приложения. При смене версий FCOS номера процедур могут измениться, но благодаря использованию констант (EQU), для получения новой версии приложения будет достаточно лишь заново откомпилировать приложение, не внося в текст поправок.

В новых версиях FCOS возможно добавление новых функций в HSV. Если запустить приложение, скомпилированное в расчёте на новую версию FCOS (с расширенным HSV) под старой версией FCOS, то возможно обращение к отсутствующим процедурам HSV. При этом FCOS не выдаст сообщение об ошибке, а просто проигнорирует вызов. Приложение необходимо запускать с соответствующей версией FCOS ещё и по причине возможного изменения констант – номеров функций HSV.

Выборка функций в каждом SV осуществляется через таблицу, содержащую количество функций и их адреса для каждого блока, который при вызове задаётся в регистре AH. Этот факт означает, что Super Visor и каждый блок в нём может иметь произвольное количество процедур.

 

 

1.3.8. Файловая структура FCOS.

Файловая подсистема FCOS (Fwcs Corporation Disk Operating System) предусматривает трёхуровневую логическую структуру. Такое “разделение труда” позволяет приложениям (а зн. пользователям и программистам) абстрагироваться от реального носителя информации и сосредоточиться на самой информации. Благодаря использованию отдельных драйверов для обслуживания файловой системы и устройств резко повышается гибкость системы, появляется возможность работать на одном носителе в различных файловых системах в течение одного сеанса.

Первый (логический, абстрактный) уровень отвечает за единый файловый интерфейс (Abstract File SystemAFS) с приложениями, он не зависит от используемой файловой системы и носителя информации. a -драйверы этого уровня только находят требуемое устройство и соответствующий b -драйвер второго уровня. Второй (транспортный) уровень определяет файловую систему (Fcos File System, MS-DOS, UNIX, NTFS, MacOS,…); он управляет размещением файлов на носителе, т.е. сопостовляет именам файлов абсолютные сектора носителя. Третий уровень (физический) необходим для поддержки конкретных устройств (FDD, HDD, CD-ROM,…); запросы к нему приходят от первого и второго уровней в терминах абсолютной адресации секторов.

Абстрактная файловая система (Abstract File System), предназначенная для приложений, выходит за стандарты MS-DOS (по названию файлов, синтаксису и др.). AFS содержится в универсальном a -драйвере, находящимся в HSV. Функциями именно этого драйвера пользуются приложения для работы с файлами. Для AFS не имеет значения, с какой файловой системой работает носитель, т.к. интерфейс взаимодействия a -драйвера с b - и g -драйверами унифицирован. Таким образом, AFS играет роль интеллектуального шлюза между приложением и накопителем.

В рамках FC-DOS возможно обращение к недисковым устройствам: экран, клавиатура, принтер. Для a -драйвера абстрактного уровня не имеет значения физическая природа устройства, необходимы лишь установленные b - и g -драйвера.

Файловая система на конкретном устройстве определяется драйверами второго уровня, которые преобразуют запросы абстрактной файловой системы в вид, пригодный для g -драйверов, т.е. в абсолютно адресуемые сектора. Файловая система выбирается для каждого устройства отдельно, согласно информации из файла “device.run”. Исключением является b -класс Auto, который пытается перед работой с накопителем определить тип имеющейся на нём операционной системы и динамически подключить нужный b -драйвер.

FWCS Corporation разработала собственную файловую систему Fcos File System, которая является альтернативой MS-DOS, VFAT и др. Наряду с современными файловыми системами FFS поддерживает длинные имена файлов, различные виды доступа по паролю, большое количество утилит. Носителем FFS может быть любое устройство, допускающее установку MS-DOS, а так же “диск в файле” (g -класс FcosLog), который представляет собой файл в любой файловой системе. Данный файл содержит образ диска с любой поддерживаемой файловой системой (в том числе и FFS). Для обращения к внутренним файлам “файлового диска” FcosLog использует b - и g -драйвера диска, на котором располагается файловый.

Драйверы физического уровня выполняют низкоуровневые операции непосредственно с накопителями. Для всех дисковых устройств общим является только понятие “сектор”, поэтому, для поддержания абстракции интерфейса g -драйвера устройства, используется обращение к накопителю в терминах абсолютных секторов. Работа с накопителем может вестись посредством MS-DOS, BIOS или прямым доступом к портам ввода-вывода устройства.

Файловая система FFS (Fcos File System) резко отличается от MS-DOS, т.к. является UNIX-подобной. Поддерживаются длинные (до 254 символов) имена файлов и каталогов, защита файлов и каталогов по паролю.

Различия между FFS и MS-DOS имеются и в методе адресации файлов на носителе. В MS-DOS исплользуется FAT, которая содержит карту поверхности диска для определения последовательности кластеров, представляющих файл. В FFS файлы не могут быть фрагментированными, т.е. каждый файл представляет собой непрерывную последовательность (абсолютных) секторов. На каждом логическом диске FFS хранит две очереди — занятых и свободных блоков (блок состоит из целого количества секторов). При выделении места под файл просматривается очередь свободных блоков и, если найден блок достаточного размера, добавляется элемент в очередь занятых блоков. Изначально (после форматирования) логический диск имеет только два занятых блока: системная информация (название диска, доступ, указатели очередей занятых и свободных блоков и др.) и корневой каталог (который может располагаться в произвольной области диска), а вся остальная область — единый свободный блок.

Элементы очереди занятых блоков хранятся внутри каталогов, дочерние файлы и каталоги которых требуют эти блоки.

Непрерывность файлов повышает скорость работы системы и упрощает логику её работы, но несмотря на это, имеются и недостатки. Остаётся (от MS-DOS) необходимость проводить дефрагментацию диска, т.к. после удаления непоследнего файла на диске образуется пустота, которая может быть заполнена только файлом, размер которого меньше или равен размеру удалённого. Это значит, что не может быть записан файл размером больше максимального свободного блока, в то время, как общий объём свободного пространства вполне достаточен.

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

 

 

1.3.9. Многозадачность в FCOS.

Процесс переключения задач является аппаратным (через Task Switch Segment), хотя вся подготовка к смене задачи возложена на ядро FCOS. Ядро обеспечивает вытесняющую многозадачность (preemptive multitasking), а приложения могут поддерживать и кооперативную (cooperative multitasking).

Переключение задач производится при вызове прерывания INTfcTSV. Обычно этот вызов осуществляется таймером через каждые 1/18 секунды, создавая возможность для реализации вытесняющей многозадачности.

Приложение FCOS может в добровольном порядке вызвать INTfcTSV тем самым, передав управление другой задаче. Таким методом реализуется кооперативная многозадачность.

Одним из атрибутов каждой задачи является её приоритет (основной или главный). Численно приоритет равен количеству вызовов INTfcTSV, при котором не будет происходить смена задачи, т.е. чем больше приоритет, тем больше времени система выделяет на непрерывную работу задачи.

Кроме основного приоритета задача имеет ещё и текущий приоритет, который показывает, сколько осталось вызовов INTfcTSV до переключения задачи. Обычно текущий приоритет уменьшается на единицу при каждом вызове INTfcTSV (при этом задача не меняется), а при достижении нуля становится равным основному приоритету (и происходит смена задачи). Таким образом, текущий приоритет работающей задачи никогда не равен нулю. Нулевое значение текущего приоритета указывает на то, что приложение ожидает взаимодействие пользователя с оконным интерфейсом. Если пользователь выбрал одну из пиктограмм или попал в активную область окна, приложению передаётся адрес (IP в TSS) соответствующей процедуры обработки события, а текущий приоритет становится равным основному.

Для безсбойной работы системы ядро FCOS обеспечивает механизм регулирования доступа к разделяемым ресурсам. К таковым относятся, например, операции с диском, экраном, драйвером мыши, CMOS, музыкальной картой и др. Все процедуры FCOS, использующие разделяемые ресурсы, обеспечивают корректный доступ к ним. Приложения обязаны соблюдать правила использования защищаемых ресурсов для обеспечения устойчивой работы системы. Если в то время как одна задача занимала ресурс, другая потребовала этот же ресурс, то последняя ставится в очередь, а первая продолжает исполняться до освобождения ресурса. При этом текущий приоритет задачи, которой отказано в доступе, увеличивается на единицу. После освобождения ресурса первой задачей, её текущий приоритет становится равным основному и происходит смена задачи.

Помимо привилегий по скорости работы (см. описанную выше систему проритетов) каждая задача имеет свой уровень привилений процессора. Наивысшие привилегии (№0) имеет ядро FCOS. Следующий уровень (№1) составляют драйверы реальных и виртуальных устройств. Пользовательским приложениям назначаются привилении №2, а Виртуальный Режим работает с привилегиями №3 (при поддержке Менеджера Виртуальных Машин с уровнем №0).

1.3.10. Паролевая защита объектов FCOS.

Ф.

 

1.3.11. Работа с графикой.

Ф.

 

1.3.12. Запуск приложений FCOS.

FCOS является многозадачной системой. При запуске нового приложения ему выделяется зада. Приложения FCOS запускаются как.

 

1.3.13. Управление памятью.

Ф.

 

1.3.14. Распределение дескрипторов.

FCOS работает в тридцатидвух битном защищённом режиме микропроцессора и использует три типа таблиц дескрипторов: прерываний (IDT), глобальную (GDT) и локальные (LDT). Таблица глобальных дескрипторов и таблица прерываний существуют в единственном экземпляре, а локальные таблицы дескрипторов создаются для каждой задачи.

Модуль fcosdscr.incсодержит данные таблицы глобальных дескрипторов и дескрипторов прерываний. Локальные таблицы создаются динамически при запуске задачи. GDT может содержать до 8000 дескрипторов, но FCOS использует только 2000. Выделяются четыре группы дескрипторов: SYSTEM, HSV, DEVICE, TASK.

 

1.3.15. Драйверы FCOS.

Процедуры, входящие в HSV изначально находятся в ядре FCOS для того, чтобы обеспечить работу на максимально возможном количестве компьютерных систем. Пользователь может заменить стандартные процедуры, подсоединив драйверы устройств, с которыми система может работать напрямую (без поддержки BIOS и MS-DOS). Драйверы позволяют так же изменить интерфейс, отрисовывая окна нестандартной (например, 7трапециидальной) конфигурации и печатая нестандартными шрифтами (с произвольными искажениями изображений символов, например, уход текста в "перспективу").

 

1.3.16. Загрузка FCOS.

Начальной загрузкой FCOS управляет процедура InitFCOS, которая запускается в реальном режиме адресации процессора. Вызывается процедура MouDwIni, которая загружает и запускает инициализатор COM1–порта для мыши. В следующих версиях FCOS появится собственный инициализатор мыши, поэтому процедура MouDwIni и файл mouseini.dat являются “заплаткой” для поддержания работоспособности мыши на этапе разработки системы.

Следующий шаг — переход в защищённый режим. Процедура ProtMode подготавливает контроллер прерываний, создаёт таблицу глобальных дескрипторов и дескрипторов прерываний, переходит в защищённый режим, перезагружает сегментные дескрипторы, подготавливает TSS задачи V86 и задачи №0 (GUI).

Первым загружается файл variation.run, который содержит определения некоторых глобальных переменных FCOS. После интерпретации файла перечисленные в нём переменные получают соответствующие значения. Если какая-либо переменная в файле не указана или невозможно интерпретировать присваиваемое значение, то её значение в памяти остаётся установленным по умолчанию.

Экран переключается в графический режим (согласно переменным VidModCd и ScanLnSz) и загружается заставка – фон рабочего стола (имя файла — в переменной BkPapNam).

.

 

1.3.17. Загрузка драйверов .

Драйверы FCOS делятся на два типа: с фиксированным прерыванием (.HSV) и с плавающим прерыванием (.DRV). Драйверы (a - и b -драйверы) используются приложениями для связи с ресурсами FCOS и образуют структуру HyperSuperVisor’а. Приложения используют псевдонимы функций (константы) для обращений к HSV, поэтому драйверы HSV должны распологаться всегда по одним и тем же прерываниям при каждой перезагрузке. Драйверы DRV (b - и g -драйверы) предназначены для обслуживания логических и физических устройств и вызываются исключительно из ядра FCOS и драйверов HSV, поэтому нет необходимости фиксировать номер прерывания.

Списки драйверов HSV и DRV находятся в текстовых файлах (специального формата) “\FCOSBOOT\hsv.runи \FCOSBOOT\drivers.run”. Эти файлы интерпретируются при загрузке FCOS, но драйверы могут быть загружены и позднее, т.к. память выделяется динамически. При установке нового драйвера, прежний драйвер должен быть деинициализирован, для чего используется его прерывание с функцией AX=00001h.

В файле “hsv.runсодержится список драйверов HSV в формате:

<номер прерывания> = <имя файла> [ ; комментарии]

Пример файла “hsv.run ”:

é ù

.HSV ; Абстрактные драйверы HSV.

040h="DRIVERS\HSV\window.hsv" ; Операции с окном.

041h="DRIVERS\HSV\text.hsv" ; Операции с FCOS-текстом.

042h="DRIVERS\HSV\pictogr.hsv" ; Прорисовка пиктограмм и кнопок.

043h="DRIVERS\HSV\menu.hsv" ; Работа с мульти-меню в окне.

044h="DRIVERS\HSV\video.hsv" ; Работа с видео.

045h="DRIVERS\HSV\music.hsv" ; Работа с музыкой.

046h="DRIVERS\HSV\string.hsv" ; Операции со строками.

047h="DRIVERS\HSV\mathimat.hsv"; Математические операции.

048h="DRIVERS\HSV\gui.hsv" ; Графический интерфейс окна.

049h="DRIVERS\HSV\memory.hsv" ; Операции с памятью.

04Ah="DRIVERS\HSV\file.hsv" ; Работа с файлами.

04Bh="DRIVERS\HSV\graphics.hsv"; Работа с графикой.

04Eh="DRIVERS\HSV\kernal.hsv" ; Управление задачами.

04Fh="DRIVERS\HSV\base.hsv" ; Базовые операции.

050h="DRIVERS\HSV\keyboard.hsv"; Работа с клавиатурой.

051h="DRIVERS\HSV\mouse.hsv" ; Работа с мышью.

052h="DRIVERS\HSV\printer.hsv" ; Работа с принтером.

053h="DRIVERS\HSV\virtual.hsv" ; Виртуальный диск.

054h="DRIVERS\HSV\network.hsv" ; Сеть Ethernet.

055h="DRIVERS\HSV\direct.hsv" ; Прямое кабельное соединение.

056h="DRIVERS\HSV\disk.hsv" ; Работа с дисками.

057h="DRIVERS\HSV\block.hsv" ; Графика в памяти.

ë û

Алгоритм загрузки драйверов HSV следующий:

  1. Определить (по сигнатуре .HSV”) принадлежность файла к формату драйверов HSV. Если файл не является драйвером HSV, переход к следующей строке файла hsv.run”.
  2. Подготовиться к интерпретации первой строки. Для каждой строки производить операции, описываемые в пп. 3)–10).
  3. Прочитать (в стек) 64–байтный заголовок. Сверить номер прерывания, указанный в файле hsv.runи хранящийся в поле DRV_Intr драйвера. Если номера не совпадают, переход к следующей строке файла hsv.run”.
  4. Выделить 4 дескриптора в GDT:

  1. Выделить память под весь файл.
  2. Настроить дескрипторы на адреса и длины сегментов файла.
  3. Прочитать файл целиком.
  4. Сохранить в поле DRV_Aold полный адрес файла предыдущего драйвера на данном прерывании.
  5. Изменить дескриптор в таблице IDT согласно полю DRV_SpVs.
  6. Вызвать инициализатор драйвера (AX=00000h).

В файле “drivers.runсодержится список драйверов DRV в формате:

<класс устройства > = <имя файла> [ ; комментарии]

Пример файла “drivers.run ”:

é ù

.DRV ; Драйверы физического уровня.

MsDos="DRIVERS\DEVICE\msdos.drv" ; Любые диски MS-DOS.

FcosLog="DRIVERS\DEVICE\fcoslog.drv" ; Пользовательские диски FCOS.

Floppy="DRIVERS\DEVICE\floppy.drv" ; Гибкий диск.

CdRom="DRIVERS\DEVICE\cdrom.drv" ; Лазерный диск.

Virtual="DRIVERS\DEVICE\virtual.drv" ; Виртуальный диск.

Direct="DRIVERS\DEVICE\direct.drv" ; Прямое кабельное соединение.

Ethernet="DRIVERS\DEVICE\ethernet.drv" ; Сеть Ethernet.

Screen="DRIVERS\DEVICE\i740.drv" ; Физический уровень видеоадаптера.

Keyboard="DRIVERS\DEVICE\keyboard.drv" ; Физический драйвер клавиатуры.

Mouse="DRIVERS\DEVICE\mouse.drv" ; Физический драйвер мыши (COM1).

Modem="DRIVERS\DEVICE\modem" ; Модем.

Joystick="DRIVERS\DEVICE\joystick" ; Игровой порт.

Speaker="DRIVERS\DEVICE\speaker" ; Однобитная фоновая музыка.

Sound="DRIVERS\DEVICE\sound" ; Wave-музыка музыкальной карты.

Midi="DRIVERS\DEVICE\midi" ; Midi-музыка музыкальной карты.

ë û

Алгоритм загрузки драйверов DRV следующий:

  1. Определить (по сигнатуре .DRV”) принадлежность файла к формату драйверов DRV. Если файл не является драйвером HSV, переход к следующей строке файла hsv.run”.
  2. Подготовиться к интерпретации первой строки. Для каждой строки производить операции, описываемые в пп. 3)–10).
  3. ???Прочитать (в стек) 64–байтный заголовок. Сверить номер прерывания, указанный в файле drivers.runи хранящийся в поле DRV_Intr драйвера. Если номера не совпадают, переход к следующей строке файла hsv.run”.
  4. Выделить 4 дескриптора в GDT:

  1. Выделить память под весь файл.
  2. Настроить дескрипторы на адреса и длины сегментов файла.
  3. Прочитать файл целиком.
  4. Сохранить в поле DRV_Aold полный адрес файла предыдущего драйвера на данном прерывании.
  5. Изменить дескриптор в таблице IDT согласно полю DRV_SpVs.
  6. Вызвать инициализатор драйвера (AX=00000h).

 

1.3.18. Менеджер виртуальных машин.

.

 

1.3.19. Встроенный отладчик FCOS.

Ф.

Return to top of pageReturn to top of page

Предыдущая часть, Следующая часть


В начало  |   FCOS: Новости, Установка, Закачать!, Приложения, Драйверы, FCOS book


Rambler's Top100

Последнее обновление 21.11.2005 г.
©  Fwcs Corporation  Design,  2005 г.

Hosted by uCoz