vak: (Daemon)
[personal profile] vak
Мысль у меня бродит.

Ко мне периодически обращаются, спрашивают, как бы приспособить RetroBSD для нынешних микроконтроллеров. Я сам давно задался вопросом, только маленько ширшее. Ясно, что идея юникса не годится (потом объясню), но вероятно её можно как-то изменить, приладить к реалиям современных чипов. И натолкнул меня на мысль тот самый компьютер Агонь Лайт, точнее его операционка MOS. Глянул я исходники - фактически народ удачно сваял с нуля подобие CP/M. Нашёл я и клон CP/M, перепёртый кем-то на Си для прикола (x86_cpm_22_0_1.zip). Внезапно осознал, что это оно самое и есть. Ну то есть почти. Реализация бог с ней, а основополагающая идея правильная. Однозадачная операционка по типу CP/M или MS-DOS с поддержкой файловой системы. Но без исторических кривостей и странностей. Ровно то, что по сути хотят сторонники RetroBSD. Пусть всего одна задача, зато с файловой системой, динамическим загрузчиком, загружаемыми драйверами, подключением к сети (отдельный интересный вопрос).

Для конкретики покажу платку, которую я подобрал для такой разработки.



Плата называется Sparkfun Thing Plus RP2040. Тот же процессор, что и Raspberry Pico: два ядра Cortex M0+. Пока задействуем одно ядро, а второе позже пригодится для стека TCP/IP. Имеем 256 килобайт оперативной памяти, 128 мегабайт Flash-памяти и гнездо для внешней SD-карточки.

Представьте, что вы подключаете платку через USB к компьютеру, открываете окошко доступа к консоли (виртуальному или физическому серийному порту) и видите знакомое приглашение:
c:/> _
Диск С: находится в Flash-памяти микроконтроллера. Дальше стандартными командами DIR, CD и прочими бродите по диску и запускаете с него нужные программы. На внешней SD-карточке лежит диск A:. К нему тоже можно обращаться, переписывать файлы туда-сюда, вызывать программы. Активировать и деактивировать загружаемые драйвера. Создавать и запускать BAT-файлы, то есть скрипты. Редактировать и компилировать программы из исходников. Скачивать файлы из интернета, или наоборот, посылать в интернет.

Система должна получиться более-менее переносимой. На этой платке свет клином не сошёлся, да и на микроконтроллере тоже. Два основных требования к процессору: размер RAM хотя бы в несколько десятков килобайт, и Flash-память, прямо отображаемая на адресное пространство процессора.

Как всё это будет фунциклировать - уточню позже, а пока перечислю основные компоненты:
  • Командная оболочка, аналог /bin/sh в юниксе или cmd.exe в Windows.
  • Файловая система exFAT.
  • Набор системных вызовов, видимо подобие Posix.
  • Динамический загрузчик, для связывания адресов в момент запуска программ.
  • Механизм загружаемых драйверов.
Самый трудный вопрос: название. Пока лучшее, что пришло в голову - RP/M.

Date: 2023-02-01 09:44 (UTC)
vit_r: default (Default)
From: [personal profile] vit_r
Не знаю, насколько в файловой системе правильно делать диски отдельными, а не объединять всё под один корень.

Название с разделителем неудобное. Где теперь эти OS/2 и прочие. Гораздо лучше взять какое-нибудь древнее имя собственное от какого-нибудь эльфа, гнома или другого сказочного персонажа.

Date: 2023-02-01 09:59 (UTC)
vit_r: default (Default)
From: [personal profile] vit_r
Сейчас время другое. Раньше и людей, что на Ассемблере программируют, найти было несложно. С точки зрения маркетинга название должно быть простое и запоминающееся.

Date: 2023-02-01 10:12 (UTC)
vit_r: default (Default)
From: [personal profile] vit_r
Можно протестировать, насколько запоминается.

И смотреть надо, опять же, не на программистов, а на их начальников.

Date: 2023-02-01 18:00 (UTC)
izard: (Default)
From: [personal profile] izard
полно тридцатилетних начальников, которым это ничего не скажет

Date: 2023-02-01 10:18 (UTC)
tiresome_cat: (CuriousCat)
From: [personal profile] tiresome_cat
Интересньій концепт.

Date: 2023-02-01 10:41 (UTC)
avnik: (Default)
From: [personal profile] avnik
А почему кстати однозадачное?

Date: 2023-02-01 12:38 (UTC)
kondybas: (Default)
From: [personal profile] kondybas
Штоп планировщик не мешал прерывания обрабатывать.

Date: 2023-02-01 14:24 (UTC)
From: [personal profile] ichthuss
Он не только мешает, но и помогает.

Date: 2023-02-02 01:37 (UTC)
sab123: (Default)
From: [personal profile] sab123
Дык приложения нынче тоже с тредами. Так что планировщик не помешает, он же все равно маленький. Только если нет защиты памяти, то все сделать в виде тредов, как в раннем Виндовсе.

Date: 2023-02-01 12:39 (UTC)
ufm: (Default)
From: [personal profile] ufm
Опубликован первый официальный выпуск операционной системы DiscoBSD, основанной на актуализированных исходных текстах Unix-системы 2.11BSD (RetroBSD) и предназначенной для работы на микроконтроллерах. Первый выпуск включает поддержку микроконтроллеров PIC32MX7 на базе архитектуры MIPS и STM32F4 на базе ARM Cortex-M4. Код проекта распространяется под лицензией BSD.

Из главных целей проекта называется обеспечение высокой переносимости ОС на устройства, имеющие ограничения по размеру памяти и не оснащённые MMU (Memory management unit). DiscoBSD может функционировать на системах со 128 КБ ОЗУ и 128 КБ Flash, при этом ядро загружается на Flash и использует около 32 КБ ОЗУ, остальные 96 КБ отдаются пользовательским приложениям. Корневая ФС размещается на SD-карте.

Для работы предлагается полноценное окружение, знакомое пользователям Unix-систем. Например, в состав входят такие утилиты, как sh, csh, grep, sort, uniq, find, uucp, file, kill, ls, cron, fdisk, mkfs, mount, vi, awk, cc, diff, getty, m4, more, sed, xargs, df, iostat, ps, su, tar и т.п.


Это я к вопросу "как-бы приспособить"

Date: 2023-02-01 18:38 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Крутая тема перед запуском процесса данные шелла (всякую там command line history и прочие красивости) сжимать, чтобы больше места процессу оставалось, а по окончании - разжимать.

Date: 2023-02-01 13:39 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Ну так все равно же драйверы и прерывания, и чо бы сразу M/PM не всобачить. А то народ на прерывания будет вещать задачи.

Date: 2023-02-01 21:54 (UTC)
ufm: (Default)
From: [personal profile] ufm
Кому нужна многотаскливость - напишет себе DesqView :)

Date: 2023-02-01 22:07 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Многозадачная версия CPM.

Date: 2023-02-01 17:18 (UTC)
archaicos: Шарж (Default)
From: [personal profile] archaicos
Даёшь везде©сущую PANOS!

Date: 2023-02-02 00:24 (UTC)
ircicq: (Default)
From: [personal profile] ircicq
Если делать однозадачную ОС с POSIX API, то какой софт на ней заработает?
Программы под POSIX предполагают, что это UNIX или Linux и используют процессы.

Date: 2023-02-02 01:36 (UTC)
sab123: (Default)
From: [personal profile] sab123
Можно диски назвать как в RT-11, по имени драйвера. Например, MX0:. Ну или с учетом новых реалий, SD0:.

Date: 2023-02-02 08:18 (UTC)
ircicq: (Default)
From: [personal profile] ircicq
По опыту той же RT-11, задач надо предусматривать минимум 2: Background и Foreground.
Иначе пользователю для выполнения любого действия в shell придётся прибивать тот, возможно важный, процесс, ради которого он и использует микроконтроллер.

Интересно

Date: 2023-02-02 20:46 (UTC)
sla165: (Default)
From: [personal profile] sla165
А какой практический смысл?

Date: 2023-02-06 12:42 (UTC)
From: [personal profile] iyak2
Интересно, а чем не годится идея Unix для данной платки? Если это Гарвардская архитектура, то вряд ли это будет помехой. Есть идея такая, кратко. Например, с Flash-диска исполняем файл, .text процесса никуда в SRAM не загружается, сейчас .text'у достаточно readonly еще со времен PDP-11, самомодифицируемый нужен был только в PDP-7(9) из-за особенности архитектуры. Косвенную блочность для файлов не используем, используем только монолитные contiguous file. Для секций .data, .bss каждого процесса выделяем необходимую память(фиксированную или динамически изменяемую) - своп область в SRAM. Сколько процессов - столько и своп областей. Как минимум 3,к примеру, в UnixV1 их было 16, только на диске, правда. Создаем там же, в SRAM, еще одну область для .data, .bss, для текущего выполняемого процесса. Ясно, что она должна быть больше или равна любой своп области процессов. По итогу, Unix, мультизадачность,(мир, жевачка))и железное НЕТ деградации Flash-памяти свопингом! Классно, стильно, молодежно! В отличии от многих RTOS, программы можно компилировать отдельно от самой ОС, по идеи, т.к. .data,.bss не привязаны к разным участкам памяти, переключение задач честное.
Да, опционально для экономии памяти, кое-что нужно сделать с .data. При загрузке (exec) исполняемого файла изменяемые данные .data продублировать в своп область. А константными программа будет оперировать с Flash. Для такой особенности нужно немного переписать Си, как кажется. Кому-то далеко до этого. Но если закончить разбираться с ar+ld+as+stip, то может за полгода или год до Си, возможно, сначало изучив Би, вполне добраться. И ничего лучшего, чем понять и простить и портировать, наверное, нет (для усвоения материала).

P.S. Сам такое сделал бы давно, но, увы, с 2018 узнал(диагностировали), что давненько хожу с так называемым орфанным недугом. Вот-то оно и работается мне не очень, не более 1-2 часа в день. Делаю все как получается. А как хотелось рыбки вездесущего Unix для микроконтроллеров!!!
Edited Date: 2023-02-06 18:47 (UTC)

Date: 2023-02-07 08:57 (UTC)
From: [personal profile] iyak2
С первым пунктом согласен, с оговоркой, что все-таки с более примитивными Юниксами может что-то получится, и fork, и swap, хотя его возможностей маловато по нынешним меркам. Уже такое делали: https://github.com/MicrochipTech/avrfreaks-projects/tree/main/projects/phoenixu1-porting-unix-v1-atmega-8-bit
Про него в первом посте и писал, в общем-то.

Насчет второго, не знаю, полезная инфа или нет, но было вот такое: https://ru.wikipedia.org/wiki/UMSDOS
Насколько возможно отображать Юникс filesystem на FAT? Это вопрос.

А что касается третьего, наверное, есть и другая крайность, не стандартизированный доступ, порождает не очень хорошую переносимость. Ну к примеру, демосценеров, их собственно можно понять, скорость абсолютно важна, задействование напрямую специфических особенностей железа, это да. Насчет прямого доступа к USART,I2C,... Не знаю. Библиотеки всех спасут! Ну если народу зайдет, то и ладно, на здоровье!

Я когда в немного в истории железа копался, часто натыкался, на непростую генеологическую линию аэсок, много слухов ходит, якобы CP/M это есть как бы упрощенная RT-11, созданная Килдалом, а MSDOS это такоЕ некое творение Франкенштейна, все что смогли заимствовать сначала с CP/M, а потом Xenix, по частям.

А назвать аэску можно Microcontroller Control Program(MCP), по приколу, это во-первых напоминает CP/M, буквы переставлены немного, а во-вторых напоминает главпрограмму из фильма TRON. То же есть кому-то чо вспомнить.
Edited Date: 2023-02-07 11:27 (UTC)