Основные требования:
- независимость от аппаратной платформы
- наличие языка программирования высокого уровня
- возможность параллельной работы задач
Предлагаемый вариант - существующий язык RW1.
Приложения будут представлять из себя байт-код RW0.
Вариант названия ОС, построенной по этому принципу - RWOS.
Для портирования приложений, необходимо лишь наличие
виртуальной машины для нового процессора. В самом языке
уже существуют способы межпроцессного взаимодействия
(читайте сообщение про RW1 как язык параллельных процессов).
Внутри каждого контроллера (и в листьях, и в ядре/ядрах)
черешки будут пронумерованы с 1. Вот примеры программ:
robot "Server"
author "Shaos"
main()
{
def packet[16]
while(1)
{
// формируем пакет - запрос
packet[0] = 1; // длина пакета
packet[1] = 0; // код запроса
// отправляем по всем черешкам
sendp packet
tim = ... // инициализируем таймаут
while(T<tim)
{
recvp packet[0] // пытаемся получить ответ
if(N) // пакет получен
{
// N - номер черешка, к которому кто-то подключен
}
}
}
}
robot "Client"
author "Shaos"
main()
{
def packet[16]
while(1)
{
recvp packet[0]
if(N) // пришел пакет
{
Type = packet[1]
if(Type==0) // это запрос
{
// формируем инфу о себе в packet
sendp packet N // отправляем туда, откуда пришел запрос
}
}
}
}
Итак, наши параллельно функционирующие роботы в пределах
одной системы буду общаться посредством передачи пакетов
друг-другу. За передачу пакетов во вне будет отвечать
специальный привилегированный робот - часть операционной
системы. Таким образом вот из чего будет состоять RWOS:
Высокий уровень (в байт-коде RW0)
- Модуль опроса листьев (или лучше "ветвей"?)
- Разнообразные сервисные роботы
Нижний уровень (в кодах процессора)
- Виртуальная машина RW0
- Менеджер пакетов
- Интерфейс с BIOS
BIOS (является ли она частью RWOS?)
- Прием-передача пакетов
- Контроль за буферами
- Контроль за коммутаторами
- Самодиагностика
На самом деле мы можем отказаться от термина BIOS и считать
ее функции частью нижнего уровня RWOS. Машиннозависимый код
будет прошит в памяти процессора, что дает нам право считать
и БИОС, и нижний уровень единым целым.
Для привилегированного робота предлагается нумеровать
хардверные черешки отрицательными числами, а эмулируемые
каналы внутренней связи (по идентификаторам роботов-процессов)
положительными. Т.е. например, в системе имеется 7 черешков
и 3 буфера (как на картинке
http://shaos.ru/nedopc/rvm/lermax.htm#16_10_02 ).
В черешки можно писать путем отправления пакетов в каналы
-1,-2,-3,-4,-5,-6,-7. Привилегированный системный робот будет
иметь идентификационный номер 1. Все остальные - от 2 и выше.
При получении трех команд sendp packet N, где N<0, все три
буфера будут заняты. Для того, чтобы исключить потерю пакетов
при подаче четвертой и следующих команд sendp, система должна
будет их буферизировать программно. Приостанавливать робота
нельзя, потому что в его коде может встретиться команда recvp,
принимающая пакет из хардверных буферов, и, соответственно,
очищающая место для новых пакетов.
Можно возложить программную буферизацию и на системного робота,
но тогда его нужно разделить на двух независимых роботов -
отправляющего и принимающего, чтобы отправляющего робота можно
было приостанавливать до момента очистки буферов. За этим будет
следить нижний уровень РВОСа. В момент приостановки системного
робота железяка можно зажигать специальный светодиод
"перегрузка" - для визуального контроля процесса ввода-вывода.