*** Area: ZX.SPECTRUM                             Date:  1 May 01 22:32:59
*** From: Stas Vlasov (2:5080/172.0)
*** To  : All
*** Subj: New os for Sprinter

           Hello All!

Hаметки проекта для новой операционки для Sprinter'а, не так похожей на DOS.

=== Cut ===
              Соглашения, принятые в тексте:

     Страницы памяти нумеруются с 0.


            Требуемые аппаратные возможности:

     Все    нижеперечисленные    возможности    включаются   только   после
инициализации ядра ОС.
     По RSTn - вызов соответствующего обработчика с другой страницы памяти.
Желательно,  чтобы  обработчики  находились  на  разных страницах. При этом
требуется  сохранение  информации  о процессе, вызвавшем обработчик (в т.ч.
установленные  страницы  памяти и ID процесса, остальное можно программно).
Возврат  из  обработчика  -  OUT  +  RET, либо как-то аналогично (взведение
триггера в ПЛМ, срабатывание - по ret или iret).
     Обработка аппаратных прерываний - аналогично.
     NMI - основа работы ОС, потому во время инициализации ядра должно быть
подключено  к  таймеру  (либо  к  CMOS,  либо  к  прерываниям  от  кадровой
синхронизации).
     Карта  приоритетов  для  обращений  к  портам  (думаю,  достаточно 4-х
уровней   приоритетов,  соответствующих  типу  процесса)  и  ID  процессов,
работающих в данный момент с портами, изменяемая операционкой.


                 Операционная система:

     Ядро.

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


     Модули ядра.

     Возможные   требования:  3-я  страница  памяти,  16к  под  модуль  при
загрузке, стек вне модуля, возможно выделение еще памяти при инициализации.
Подгружаются при необходимости.
     Функции:  Расширение  функций  ядра.  Работа с железом, новые файловые
системы, etc


     Системные библиотеки.

     Возможные   требования:   Из   памяти  не  выгружаются,  обращение  по
отдельному  RSTn  на  всех,  в  параметрах  -  ID библиотеки и ID функции +
параметры самой функции.
     Функции:  Расширение функций ядра в сторону программного интерфейса, а
не  железа.  Т.е.  эмуляция  терминала,  коммуникационные протоколы низкого
уровня, etc


     Прикладные библиотеки.

     Функции:   Библиотеки,   служащие   для  использования  одного  кода в
нескольких  приложениях одновременно, либо как средство преодоления барьера
64к. При неиспользовании выгружаются из памяти.
     Примечание:  Вызов,  думаю,  будет  аналогичен системным.


     Приложения, как системные, так и пользовательские.

     Возможные  требования:  при  загрузке  приложения  - загружаемый код в
пределах  линейной  адресации,  дальнейшее  выделение  памяти  - либо через
оверлеи, либо через прикладные библиотеки.
     Функции: понятны без описания.
     Примечание: Вероятно повторное использование кода для нескольких копий
приложения, если получится...


                 Общесистемные примечания:

     Возможна  совместимость  по вызовам имеющейся ОС Sprinter'а (вероятно,
через  соответствующую  библиотеку  прикладного  уровня,  подгружаемую  для
соответствующего приложения).
     Доступ  к системным портам ввода-вывода должны иметь только ядро и его
модули (тип процесса - 00).
     Доступ   к   несистемным   портам   -  предоставляется  после  запроса
(производится   при   инициализации  процесса)  в  соответствии  с  правами
приложения/пользователя. Планируется дальнейшее разграничение доступа.
     В  качестве  базовой межпроцессной коммуникации предлагаются сигналы и
перенаправление ввода-вывода.

                 Вероятные структуры данных:

     Информация о странице памяти:

ID страницы                - 16 бит
ID процесса-владельца      - 16 бит
Тип размещения страницы    - 1 бит (0 - RAM, 1 - Swap)
Месторасположение страницы - 16 бит (либо физический номер страницы RAM,
                                     либо смещение в своп-файле в страницах)
Время последнего
включения страницы         - 32 бит (будет использоваться для определения
                                     того, какую страницу стоит выгрузить)


     Информация о процессе:

ID процесса                - 16 бит
Тип процесса               - 2 бит (00 - Ядро,
                                    01 - системные библиотеки,
                                    10 - прикладные библиотеки,
                                    11 - приложения.
                                    возможно совмещение с другими флагами)
Приоритет                  - <8 бит   (0 - максимальный)
Состояние процесса         - <8 бит (выполняется, ожидает, остановлен, и т.п.)
ID страницы со смещения 0000h |
ID страницы со смещения 4000h | \ По 16 бит в соответствии со структурой
ID страницы со смещения 8000h | / информации о странице памяти.
ID страницы со смещения C000h |
=== Cut ===

Примечания, исправления, дополнения приветствуются.
Возражения (не в стиле "нафиг нужен Спринтер") также приветствуются.

Good luck.
         Stas

--- Еще одно "золото" 3.0.1
 * Origin: gui is good, but console better (2:5080/172)
