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

All about NedoOS

Postby SfS » 16 Nov 2020, 09:55

Прошу принять мою критику не как претензии, а как вопросы, возникающие у стороннего человека к NedoOS.

1. Почему в NedoOS используется куча рестартов (RST0, RST8, RST16 и так далее) ? Чем это лучше использования одного рестарта? Не планируется ли переработка в этом плане?

2. Почему диски прибиты к фиксированной букве? И надо ли вообще эти буквы дисков использовать? Не лучше ли сделать точки монтирования как в UNIX? Это очень сложно?

3. Почему для параметров командной строки размер буфера 128 байт? Нет, понятно, что для одного параметра это более чем достаточно. Но стоит задать 3-4 параметра, да ещё с путями в системе и 128 байт не хватает. Не планируется ли сделать передачу параметров как-то поиному, например через отдельную страницу?

4. Я не нашёл в ОСи какого-то уровня драйверов. Скажеим, хочу я подключить свою любимую ESP8266 как сетевуху - и как для неё драйвер писать? А драйвер того же UART, например или ещё какогото устройства? Планируется ли проработка HAL-уровня вообще?

Есть ещё куча "почему и зачем", но пока остановлюсь.

В целом идея ОСи очень хороша тем, что она реализована и работает. Но пока это дикий монолит, куда нельзя встроить свой модуль без плясок с бубнами...
ZX-Phoenix.
Pentevo ZX-Evoluton Rev. B (зелёная)
SfS
 
Posts: 240
Joined: 24 Jun 2010, 08:07
Group: Registered users

Postby alone » 17 Nov 2020, 19:12

1. В NedoOS используются не рестарты, а макросы. Как они реализованы - внутреннее дело системы. Во всяком случае, переключение страниц работает быстро, при этом программа не зависит от конкретной модели компа.
2. Это сложно, а практической пользы не видно.
3. Мы думаем над другой передачей параметров, но ничего пока не придумали. Есть конкретное ТЗ?
4. Драйвер сетевой карты подключается в ядро условной компиляцией по примеру w5300.asm. Конкретные ключи условной компиляции прописываются в батнике для конкретной модели компа.
User avatar
alone
 
Posts: 48
Joined: 04 Jun 2007, 21:04
Group: Registered users

Postby DimkaM » 17 Nov 2020, 19:13

2. Тут не знаю даже что и сказать. По поводу прибитости - да это не очень, возможно в будущем это будет переделано. По поводу точек монтирования - скорее нет, не вижу преимущества перед буквами, а реализовать не так просто.

4. Ядро монолитно. Можно заменить драйвер zxnetusb на esp8266.
ZX-Evo rev B, ZX-Evo rev C, ZXNetUsb rev A, ZXNetUsb rev С
http://nedoos.ru/ http://ti6.zxevo.ru/
DimkaM
 
Posts: 1374
Joined: 24 Mar 2010, 13:42
Location: джунгли Амазонки
Group: Registered users

Postby DimkaM » 17 Nov 2020, 19:41

DimkaM wrote:4. Ядро монолитно. Можно заменить драйвер zxnetusb на esp8266.

но я не увидел возможностей сделать драйвер под есп8266. в силу ее(прошивки) возможностей
ZX-Evo rev B, ZX-Evo rev C, ZXNetUsb rev A, ZXNetUsb rev С
http://nedoos.ru/ http://ti6.zxevo.ru/
DimkaM
 
Posts: 1374
Joined: 24 Mar 2010, 13:42
Location: джунгли Амазонки
Group: Registered users

Postby lvd » 17 Nov 2020, 19:50

SfS wrote:2. Почему диски прибиты к фиксированной букве? И надо ли вообще эти буквы дисков использовать? Не лучше ли сделать точки монтирования как в UNIX? Это очень сложно?

Ну очевидно же, точки монтирования подразумевают ещё одну абстракцию, VFS. А это -- медленно (на Z80).

4. Я не нашёл в ОСи какого-то уровня драйверов. Скажеим, хочу я подключить свою любимую ESP8266 как сетевуху - и как для неё драйвер писать? А драйвер того же UART, например или ещё какогото устройства? Планируется ли проработка HAL-уровня вообще?

То же самое -- МЕДЛЕННО. Ну например, вызов процедуры по указателю на Z80 -- целый танец с бубнами и просёр тактов.

В целом идея ОСи очень хороша тем, что она реализована и работает. Но пока это дикий монолит, куда нельзя встроить свой модуль без плясок с бубнами...

Ну тут или шоб хоть как-то быстро работало, или шоб всё шоколадно но медленно. Вон как на ретрокомпутинге чел спрашивает, как вызывать ему процедуры из страничек, а в ответ старпёры ему вхерачивают код на 40 строк на 1 вызов.
Многого нет здесь: http://lvd.nedopc.com
Image
User avatar
lvd
 
Posts: 1744
Joined: 07 Apr 2007, 22:28
Group: Registered users

Postby SfS » 18 Nov 2020, 08:54

Спасибо, что откликнулись.

alone wrote:1. В NedoOS используются не рестарты, а макросы. Как они реализованы - внутреннее дело системы. Во всяком случае, переключение страниц работает быстро, при этом программа не зависит от конкретной модели компа.


Так я про реализацию макросов и пишу. Суть ОС в том, что есть некий интерфейс, дёргая который, программа вызывает нужные ей функции, не зная как они реализованы внутри. Макросы же требуют полной пересборки ПО при изменении реализации макроса. То есть бинари уже просто так не позапускаешь.

alone wrote:2. Это сложно, а практической пользы не видно.


А в чем сложность? Проверка на какой точке монтирования лежит файл разве что. Впрочем, не вопрос: буквы так буквы.
Хотя, не понимаю, чем намного сложнее это.

alone wrote:3. Мы думаем над другой передачей параметров, но ничего пока не придумали. Есть конкретное ТЗ?


Ну, например, так:

программа запускается всегда с адреса 0x100 как я понимаю. Ок. Считаем, что первые три байта - переход на код программы. (jpxx) следующие два байта - размер буфера параметров. И далее - сам буфер. То есть программа выглядит в памяти так:

Code: Select all
;// Загрузка программы
org 0x100
entry:
   jp start
   dw bufsize; размер буфера параметров
par:   ; 0x105
   asciiz 'par0',
   asciiz 'par1',
   asciiz 'par2',
   .....
   db 00,00 ;// два нуля подряд - метка того, что параметров больше нет
   .....
   ; 0x105 + bufsize
   dw envsize; размер ,буфера переменных окружения
env:   ; 0x105 + bufsize +0x0002
   asciiz 'var0','var0_mean;
   asciiz 'var1','var1_mean;
   asciiz 'var2','var2_mean;
   .....
   db 00,00 ;// два нуля подряд - метка того, что переменных больше нет
   .....
start:    ; 0x105 + bufsize +0x0002 + envsize
;// Код программы
   .............


То есть программа сама задаёт предельные значения буферов для параметров и переменных окружения. ОС должна разбить параметры по пробелам и поместить их в буфер в виде ASCIIZ строк.
Достоинства:
- формат исполняемого файла не меняется (совместим с текущим).
- размеры буферов известны, значит ОС может детектировать ошибку "слишком много параметров".
- есть понятие "переменная окружения" (должны наследоваться от процесса, который запускает другой процесс). Этого, кстати, тоже нет. А очень полезная штука иногда.
- программист сам решает, какого буфера достаточно для его программы. В пределе - нулевые буфера, если параметров не может быть вообще.

alone wrote:4. Драйвер сетевой карты подключается в ядро условной компиляцией по примеру w5300.asm. Конкретные ключи условной компиляции прописываются в батнике для конкретной модели компа.


Проблема отсутствия HAL уровня как раз в том, что под каждое устройство приходится изобретать свой API. Да ещё и невозможно две сетевухи воткнуть. Оно, конечно, не очень и надо, но мало ли.
ZX-Phoenix.
Pentevo ZX-Evoluton Rev. B (зелёная)
SfS
 
Posts: 240
Joined: 24 Jun 2010, 08:07
Group: Registered users

Postby SfS » 18 Nov 2020, 09:32

lvd wrote:Ну очевидно же, точки монтирования подразумевают ещё одну абстракцию, VFS. А это -- медленно (на Z80).


Например, если разрешить монтировать диски только к корневой файловой системе, то всё сведётся к проверке - открываемый файл находится в корневой системе или нет. Если нет - кусок пути обрезается и далее идёт обращение к драйверу смонтированного диска. Это только при открытии файла. При работе с ним просто берутся адреса из описателя открытого файла и всё.

Ну и счётчики открытых файлов. Открыли файл +1, закрыли -1. Отмонтировать систему можно только если счётчик равен 0. Не думаю, что это очень критично по скорости. Зато можно сделать devfs единое API обращения к устройствам через драйвера.

То же самое -- МЕДЛЕННО. Ну например, вызов процедуры по указателю на Z80 -- целый танец с бубнами и просёр тактов.


Страсти то какие. Собственно для драйвера достаточно такой структуры:

Code: Select all
struct {
   void* open;   // Открыть устройства
   void* close;   // Закрыть устройство
   void* read;   // Cчитать из устройства
   void* write;   // Записать в устройство
   void* ioctl;   // Функции, специфичные для устройства
   void* dev_data; // Описатель устройства и его состояния
} driver;


// Чтение
; hl - buffer
; bc - counter
; de - адрес описателя (driver)
read_from_dev:
   exx
   ld   hl,read_from_dev_exit
   push   hl   ;// адрес возврата
   exx
   push hl
   ld   hl,#offset_read
   add   hl,de
   push hl
   pop de
   pop   hl   
   push de   ;// адрес вызова драйвера
   exx
      ;// de - адрес описателя драйвера (если оно ему нужно)
      ;// hl - buffer
      ;// bc - counter
   ret   ;// вызов
   ;
read_from_dev_exit:
   ;// точка возврата из read(). bc - количество прочитанных байт или -1 при ошибке
   ; Делаем чтото, если надо
   ret ;// возврат


При загрузке системы все поля инициализируются. А дальше всё просто: вызывается конкретная функция драйвера.
Это не намного больше "макроса". А по сравнению с тем, сколько занимает вызов read() из FatFs - вообще не имеет значения.
Зато - унификация. Зато - возможность сделать devfs.

Code: Select all
Ну тут или шоб хоть как-то быстро работало, или шоб всё шоколадно но медленно. Вон как на ретрокомпутинге чел спрашивает, как вызывать ему процедуры из страничек, а в ответ старпёры ему вхерачивают код на 40 строк на 1 вызов.


Ну если вызов - 40 строчек, а процедура в страничке 4000 строчек - то почему нет? Если это позволяет сделать красиво и правильно?

Цель ОС (любой) это прежде всего унификация управления ресурсами. Если этого нет - то нет и ОСи. Просто потому, что если с каждым новым чихом придумывать новый API и перекомпилировать всю ОС со всем ПО - то программисты не поймут.
По идее им вообще не должно быть важно что там "под капотом ОСи". Есть функция. Зарядили параметры. Вызвали. Всё.

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

Postby lvd » 18 Nov 2020, 14:44

SfS wrote:Проблема отсутствия HAL уровня как раз в том, что под каждое устройство приходится изобретать свой API. Да ещё и невозможно две сетевухи воткнуть. Оно, конечно, не очень и надо, но мало ли.

Ага, сначала 'драйверы', потом 'две сетевухи', потом ещё будет 'а чоёто пакеты между ними не роутятся?' или 'а как сделать NAT и маршрутизацию по BGP? Ах, вы не сделали? Это же так просто и столько удобства!'
Многого нет здесь: http://lvd.nedopc.com
Image
User avatar
lvd
 
Posts: 1744
Joined: 07 Apr 2007, 22:28
Group: Registered users

Postby lvd » 18 Nov 2020, 14:46

SfS wrote:Страсти то какие. Собственно для драйвера достаточно такой структуры:

И сразу первый вопрос. По какому адресу грузить дравер? А второй?
SfS wrote:При загрузке системы все поля инициализируются. А дальше всё просто: вызывается конкретная функция драйвера.

Ну так приведи код вызова по указателю. C передаченй параметров. Особенно в hl.
Многого нет здесь: http://lvd.nedopc.com
Image
User avatar
lvd
 
Posts: 1744
Joined: 07 Apr 2007, 22:28
Group: Registered users

Postby SfS » 18 Nov 2020, 16:06

lvd wrote:Ага, сначала 'драйверы', потом 'две сетевухи', потом ещё будет 'а чоёто пакеты между ними не роутятся?' или 'а как сделать NAT и маршрутизацию по BGP? Ах, вы не сделали? Это же так просто и столько удобства!'


Я сетевуху для примера привёл. Два СОМ-порта - вполне реально. Две SD-карты - вполне реально. Два AY - вполне реально.

lvd wrote:И сразу первый вопрос. По какому адресу грузить дравер? А второй?


По ЛЮБОМУ, который выдаст система. Релоцируемые программы с настройкой адресов при загрузке - давным давно не экзотика.

lvd wrote:Ну так приведи код вызова по указателю. C передаченй параметров. Особенно в hl.


У меня в примере вызов кода по указателю. Что не так? Адрес функции берётся из структуры - обычный указатель.
ZX-Phoenix.
Pentevo ZX-Evoluton Rev. B (зелёная)
SfS
 
Posts: 240
Joined: 24 Jun 2010, 08:07
Group: Registered users

Next

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

Who is online

Users browsing this forum: No registered users and 1 guest

cron