Покритикую маленько...

All about NedoOS

Postby SfS » 21 Nov 2020, 13:30

Переменные окружения нужны для каждой задачи отдельно. Это однозначно. И они должны наследоваться.
Доступ к ним однозначно через функцию оси.
Для экономии памяти, можно сделать копирование переменных окружения для только в том случае, если задача их изменяет.

По поводу драйверов это не фантазии, а опыт написания микроядра для ARM. В драйверах главное унификация интерфейса.
ZX-Phoenix.
Pentevo ZX-Evoluton Rev. B (зелёная)
SfS
 
Posts: 245
Joined: 24 Jun 2010, 08:07
Group: Registered users

Postby SfS » 24 Nov 2020, 09:52

Вот, начал писать подробно свой взгляд на ОС.
Добавил чуток.
Attachments
NedoOS-concept.odt
(42.73 KB) Downloaded 237 times
ZX-Phoenix.
Pentevo ZX-Evoluton Rev. B (зелёная)
SfS
 
Posts: 245
Joined: 24 Jun 2010, 08:07
Group: Registered users

Postby alone » 25 Nov 2020, 21:06

Программы, которым не нужно 4 страницы, сами отказываются от лишних страниц. Пример - cmd.
Как грузить драйвер диска, когда ещё не загружен драйвер диска? То есть всё равно понадобится компилировать моноядро, на этот раз для загрузчика.
Как ты представляешь работу с сигналами, и для каких целей её делать?
User avatar
alone
 
Posts: 53
Joined: 04 Jun 2007, 21:04
Group: Registered users

Postby lvd » 25 Nov 2020, 21:39

alone wrote:Как ты представляешь работу с сигналами, и для каких целей её делать?

Как в linux'ах и unix'ах точно НЕ НАДО делать ни сигналы, ни семафоры, ни что-либо ещё.
Потому что сигналы там -- это пздц, b ещё например там ОТДЕЛЬНО -- семафоры. А чтоб жить было ещё веселее, есть 'новые семафоры', запихнутые под оболочку файловых дескрипторов, и их наконец-то можно в кучу со всем остальным ждать селектом или epollом (2 разных вещи для одного и того же, бтв). Напоминает, в общем, анекдот про N разных стандартов.

По-нормальному, сигналы это способ будить задачу из слипа, и универсально юзаются для всего. например задача вошла в ожидание данных на сокете, её заблокировали на ожидании сигнала (ну и так же с семафорами например и прочими селектами). Смотреть лучше в сторону какой-нить FreeRTOS или даже АмигаОС.
Многого нет здесь: http://lvd.nedopc.com
Image
User avatar
lvd
 
Posts: 1786
Joined: 07 Apr 2007, 22:28
Group: Registered users

Postby Максагор » 25 Nov 2020, 21:41

Как грузить драйвер диска, когда ещё не загружен драйвер диска? То есть всё равно понадобится компилировать моноядро, на этот раз для загрузчика.


Нет нерешаемых задач, если не задаваться целью придумать оправдания тому, "почему я не хочу это делать". Я постоянно привожу в пример TASiS не потому, чтобы там что-то противопоставить, а потому, что как раз с драйверами там все очень продуманно. Драйвера там не сами по себе. Кроме того, что они присутствуют в памяти, они еще и связаны с системой через каналы/потоки. При этом каждая буква диска (в случае с iS-DOS/TASiS - это A-H, а в случае с проектируемой TASiS EX - A-P) представлячет собой конкретный выделенный канал. Драйвер дисковых устройств, будучи загруженным в память может быть подключен к одному или нескольким каналам или не подключен ни к какому. Когда в iS-DOS через утилитку DEV.COM вы назначаете тот или иной драйвер флопа RAM-диска, вина или CD на ту или иную букву, вы именно подключаете к этому драйверу конкретный канал. Поэтому можно не удаляя старый драйвер того же винта загрузить рядышком второй, а потом уже без обращения к диску отключить каналы от удаляемого, подключить к новому, и потом старый удалить. Если каналы к драйверу подключены, но они не активны (нет обращений в данный момент к винту, потому что открыты только панели, допустим с флопом и SD), то неактивные каналы просто "автоотключаются" и драйвер удаляется без необходимости предварительно грузить другой. Если Какой-то из подключенных к драйверу каналов активен (вы пытаетесь удалить драйвер из выбранного через него устройства, например, вызвав удаляющую утилиту с диска C: который "подсоединен" к удаляемому драйверу), то в ответ на попытку удаления произойдет возврат с сообщением об ошибке. Только и всего. И да, прочие драйвера (а не только дисков) и резиденты также взаимодействуют с системой и ее вызовами через каналы.

Я считаю, что в заложенной конфигурации NedoOS можно сделать систему драйверов не менее, а даже более красивую, чем в iS-DOS/TASiS.
User avatar
Максагор
 
Posts: 281
Joined: 26 Apr 2010, 21:07
Location: Москва
Group: Registered users

Postby lvd » 25 Nov 2020, 21:58

SfS wrote:Вот, начал писать подробно свой взгляд на ОС.

Ура! У нас новый концептолог! (предыдущего и так все знают, упоминать не буду :)

Как 'некоторая личность', упомянутая во ВЗГЛЯДЕ НА ОС, прокомментирую:
В NedoOS вообще ВСЁ является частью ядра. Это плохо.

Почему?

Но… Но ведь можно обойтись и одним ядром, загружая нужные модули с помощью машино-специфичного загрузчика, хоть на бейсике…

А ещё можно обойтись ПЗУ (ц) 1982 синцлер ресеарч лдт.

то с какой радости я не могу просто обращаться к ним через один интерфейс? В NedoOS не реализовано никак.

Так покажи КАК НАДО! Я даже готов тебе сделать прошивку для zxnetusb, чтоб она отзывалась по нестандартным портам, и ты сможешь запилить свой интерфейс сразу для двух сетевушек, которые не будут друг другу мешать. Или ты действительно только концептолух?

Но вот совместимость бинарей снизу вверх можно было бы и обеспечить в NedoOS. Её нет.

Зачем?

Ну при отсутствии модулей и необходимости полной пересборки системы на каждый чих ни о каком «совершенствовании и добавлении нового без нарушений целостности» и говорить не стоит.

Почему не стоит? Чо-то как я посмотрю, аргументация страдает отсутствием логических умозаключений.

А вот клоны спека… Пока, как я понимаю их два — ATM и Pentevo.

А других-то, с переключаемой памятью во всех очках, и нету. Ну вот вообще. Неактуально.


когда создавался UNIX, ресурсов на PDP-7 было куда как меньше, чем на Pentevo

Ну что ж, посмотрим что там было. Во-1 сразу:
"The operating system was originally written in assembly language"
чо там про считателей тактов? Впрочем, несчитатели тактов даже простейший код не могут корректно написать, пока считатели -- на коне.

Или вот ещё:
"For the first time in 1970, the Unix operating system was officially named and ran on the PDP-11/20. A text-formatting program called roff and a text editor were added. All three were written in PDP-11/20 assembly language."

А когда unix стал многозадачным?

А на каких машинах уже работал многозадачный сишный unix?



Мне лично нравится UNIX-подход «всё есть файл». Он удобен тем, что всё можно делать файловыми операциями. Можно, конечно, и по-другому. Но главное — одинаковые операции с одинаковыми сущностями должны производиться одинаковыми системными вызовами.

Ну да, логично, одним и тем же вызом можно и скорость сериального порта установить, и сокет открыть на прослушивание. Да? Ведь всё должно быть файлом.

Уже можно прикинуть, что максимальный размер ядра будет 0x6000 (24576) байт. Это весьма не мало, учитывая, что ядро включает в себя не так уж много функций.

Какие именно функции включает а какие нет? Что делать если всё же места не хватит? А если места для этих 'модулей' не хватит?



Что касается консолей — то должен быть единый драйвер виртуальных консолей. Это дело системы — выводить текст на экран или ещё куда-то.

А щяс нету?

наследовать STDIN, STDOUT и, возможно, STDERR процесса родителя процессу-потомку;

А щяс как?

Достаточно ограничить уровни монтирования одним

Чем это отличается от букв дисков? Ну кроме желания 'хачю как в unix и ниипёт'?
Многого нет здесь: http://lvd.nedopc.com
Image
User avatar
lvd
 
Posts: 1786
Joined: 07 Apr 2007, 22:28
Group: Registered users

Postby lvd » 25 Nov 2020, 22:01

Максагор wrote:а потому, что как раз с драйверами там все очень продуманно.

Если это так, то что же ДО СИХ ПОР мешает написать в tasis драйвер MBR и драйвер FAT? Ну и для разнообразия, драйвер SD-карты? (или он уже написан)?
Многого нет здесь: http://lvd.nedopc.com
Image
User avatar
lvd
 
Posts: 1786
Joined: 07 Apr 2007, 22:28
Group: Registered users

Postby SfS » 26 Nov 2020, 06:25

alone wrote:Как грузить драйвер диска, когда ещё не загружен драйвер диска?


Ровно как я предлагаю. Отдельная программа-загрузчик, которая грузит ядро и драйвер диска. Ядро знает, что драйвер диска всегда по одному адресу. Остальные модули ядро грузит уже с диска.
ZX-Phoenix.
Pentevo ZX-Evoluton Rev. B (зелёная)
SfS
 
Posts: 245
Joined: 24 Jun 2010, 08:07
Group: Registered users

Postby SfS » 26 Nov 2020, 06:30

lvd wrote:Смотреть лучше в сторону какой-нить FreeRTOS


Согласен. FreeRTOS мне, кстати, знакома. По работе её использую сейчас.
ZX-Phoenix.
Pentevo ZX-Evoluton Rev. B (зелёная)
SfS
 
Posts: 245
Joined: 24 Jun 2010, 08:07
Group: Registered users

Postby SfS » 26 Nov 2020, 07:18

lvd wrote:Ура! У нас новый концептолог! (предыдущего и так все знают, упоминать не буду


Ну простите, что высказал свои мысли. Не знал, что это так вас возбудит... Но если вам они не интересны - не читайте. Я ж не заставляю.

lvd wrote:Почему?


Потому что на КАЖДУЮ новую конфигурацию аппаратуры надо новое ядро компилировать. Хотя по идее, ядро есть сущность неизменная и настраиваемая при загрузку. Я ж не даром принципы построения ОС процитировал.

lvd wrote:Так покажи КАК НАДО! Я даже готов тебе сделать прошивку для zxnetusb, чтоб она отзывалась по нестандартным портам, и ты сможешь запилить свой интерфейс сразу для двух сетевушек, которые не будут друг другу мешать. Или ты действительно только концептолух?


Я уже показал. Пишется интерфейс модуля (по сути структура, которая содержит указатели на функции обращения к реализации модуля). Для каждого устройства делается своя реализация, но с единым интерфейсом. Достоинства - неважно какое количество устройств подключено и как они реализованы, программа может общаться с любым из них. Сейчас этого нет. При чём тут порты вообще? Не о них речь.

lvd wrote:Зачем?


Затем, что пользователь хочет скачать файл из инета и запустить его, а не компилировать и бороться с несовместимостью... Не?

lvd wrote:Почему не стоит? Чо-то как я посмотрю, аргументация страдает отсутствием логических умозаключений.


Аргументация проста и была много раз приведена:
При добавлении нового устройтва, даже полностью аналогичного по функциями существующему необходимо:
- реализовать новый интерфейс общения с этим устройством;
- пересобрать всё ядро (ну ладно это не так страшно);
- переписать прикладное ПО, чтобы оно знало, что есть ЕЩЁ одно устройство с ровно таким же функционалом, как уже имеющееся (это писец); Ага. Очень удобно.

lvd wrote:Ну да, логично, одним и тем же вызом можно и скорость сериального порта установить, и сокет открыть на прослушивание. Да? Ведь всё должно быть файлом.


А почему нет? Для каждого устройства набор файлов, через которые идёт управление. :) И никакого IOCTL не надо:)

Например устройство COM-порт /dev/ttyS0 и к нему управляющие файлы:
/sys/dev/ttyS0/mode
/sys/dev/ttyS0/flowctl
/sys/dev/ttyS0/rts
/sys/dev/ttyS0/dtr
/sys/dev/ttyS0/cts
/sys/dev/ttyS0/ri

Читаешь-пишешь всё стандартными open() close() read() write()...

И с сетью аналогично можно:)

Так что надо о таком подходе подумать.. Минусы-плюсы...

lvd wrote:Какие именно функции включает а какие нет? Что делать если всё же места не хватит? А если места для этих 'модулей' не хватит?


Функции добавления, инициализации, удаления модулей и управления памятью (щёлкания страничками, их выделения-освобождения) по сути. И функции диспетчерезации системных вызовов.
Модули могут располагаться в разных страничках. Если памяти не хватит на одной, выделяется ещё одна. Ограничение - модуль не более 16К размером.

lvd wrote:Чем это отличается от букв дисков? Ну кроме желания 'хачю как в unix и ниипёт'?


Отличается тем, что можно монтировать-отмонтировать реальные и виртуальные ФС к любому каталогу корневой ФС. Можно, конечно, прибить виртуальные ФС и к буквам: D-devfs, P-pipes и так далее. Но мне больше нравится так /dev/ /mnt/sdsmuc /mnt/sdneogs.

В принципе, с точки зрения реализации разницы не много.
ZX-Phoenix.
Pentevo ZX-Evoluton Rev. B (зелёная)
SfS
 
Posts: 245
Joined: 24 Jun 2010, 08:07
Group: Registered users

PreviousNext

Return to Обсуждение NedoOS

Who is online

Users browsing this forum: No registered users and 1 guest

cron