*** Area: ZX.SPECTRUM                             Date: 25 Apr 01 20:34:38
*** From: Stas Vlasov (2:5080/172.0)
*** To  : All
*** Subj: Hовая ОС на Sprinter

           Hello All!

Я тут немного подумал и постарался выразить свои мысли по поводу сабжа,
который мне бы хотелось когда-нибудь увидеть.


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

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


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

     Ядро.

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

     Модули ядра.

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

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

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

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

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

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

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

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

     Доступ  к системным портам ввода-вывода должны иметь только ядро и его
модули (тип процесса - 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)
