*** 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)