Три машины RISC5 на схеме самого Вирта (RTL, скомпилированный в WebAssembly), каждая в своём потоке. У каждой радио nRF24L01+ из Project Oberon; эфир между ними — эта страница. При включении каждая машина читает свою роль с последовательной линии, как облачная машина читает cloud-init: управляющая запускает Kube и применяет деплоймент, узлы подключаются. Набирать ничего не нужно. Время внутри машин идёт в несколько раз медленнее нашего: их секунда — несколько наших.
Кластер, как его видно по эфиру
| узел | слышен | выполняет | назначено |
Эфир
На управляющей машине
Команда набирается под последней строкой окна System.Tool и запускается средней кнопкой, как это сделал бы человек; вывод идёт в журнал машины. Можно и самим щёлкнуть в экран и работать в нём: Alt (⌥) + щелчок — средняя кнопка.
Нарушитель в эфире
Ничья станция шлёт узлу с подами «ничего не выполняй» сразу после назначения управляющей машины, чтобы узел держал его в момент отчёта. Какое из них узел выполнит?
Как устроена эта страница
Машины — та же модель RTL, что и в других лабораторных, с радио и последовательной линией в периферии (impl/tb/memradio.h). Ретранслятор и разбор сообщений Kube — impl/web/kube-air.js, тот же протокол, что в qemu/radio/relay.py и listen.py. На диске Kube, KubeNet, Pods, нагрузки Ticker и Boot, собранные impl/tools/install_modules.py. Ключ кластера здесь 00c0ffee00c0ffee, кластер kube.