Про "Мечту":
Про RWOS для РВМ:Shaos wrote: Мы всетки делаем модульный народный компьютер (НарКом)?
Может быть его просто назвать Модульный Компьютер?
Модульютер :)
Блокъютер...
Computing Comunity -> ComCom,CompComu ->
Comunity of Computing -> ComuComp :)))
ЭРМ - Электронная Распределенная Машина...
Вобчем так... Имеем много разнообразных модулей, в каждом из которых
стоит маленький микроконтроллер, знающий протокол обмена по сети
(шине). Можно обеспечить горячую замену и подключение-отключение
модулей (компонентов,блоков)...
Итак, чтобы собрать подходящую кофигурацию берем, например, два
головных модуля (ядра), в каждом из которых есть оперативная память,
свой локальный флеш-накопитель и проц. Затем подтыкаем к ним клаву
(можно предусмотреть для PS/2 клавы специальный модуль для
подключения ее к шине Распредельютера). Потом берем
модуль-преобразователь Шина/IDE с уже вставленным винтом, затем
подрубаем модуль VGA-монитора... Во как! Что скажем?
Дык как назовем этого многоголового монстра?
Может быть "Мечта" (Mechta), тогда у нас будет:
MechtaUnit - один модуль "Мечты"
MechtaHead - головной MechtaUnit (или ядро - MechtaCore?)
MechtaBus - физическая спецификация нашей шины модулей
MechtaProtocol - протокол для работы в MechtaBus и не только
(например протокол сможет работать и в Ethernet, и в TCP/IP
сетях - главное, чтобы были преобразователи, к которым будут
подключаться свои MechtaBus-ы)
MechtaNet - общее название того, что получается из взаимно
подключенных и общающихся модулей Mechta...
На названии Mechta я не настаиваю, Narkom - тоже ничего :)
"Mechtaputer"
Обоснование:
1) хорошо звучит
2) вызывает положительные ассоциации у русскоязычных юзеров
3) имеет благозвучное англоязычное звучание
4) чем-то неуловимо напоминает Transputer (INMOS)
5) такого слова пока не существует (google говорит 0), так что
любая инфа про него в инете искаться будет просто и легко :)
Shaos wrote: Основные требования:
- независимость от аппаратной платформы
- наличие языка программирования высокого уровня
- возможность параллельной работы задач
Предлагаемый вариант - существующий язык 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,
принимающая пакет из хардверных буферов, и, соответственно,
очищающая место для новых пакетов.
Можно возложить программную буферизацию и на системного робота,
но тогда его нужно разделить на двух независимых роботов -
отправляющего и принимающего, чтобы отправляющего робота можно
было приостанавливать до момента очистки буферов. За этим будет
следить нижний уровень РВОСа. В момент приостановки системного
робота железяка можно зажигать специальный светодиод
"перегрузка" - для визуального контроля процесса ввода-вывода.