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