Флейм
GameDev.ru / Флейм / Форум / FantasmOS (2 стр)

FantasmOS (2 стр)

Поделиться

Страницы: 1 2

AlikberovПостоялецwww10 ноя. 201712:34#15
ASP
Всё слишком расплывчато, может для начала дашь ссылку на "ЭВМ твоей мечты". Пока выглядит как попытка написать ОС под несуществующее железо. И вообще, определись, у тебя DOS, где всё всем дозволено, или всё же каждое приложение в песочнице и не может на прямую рисовать на окнах другого приложения.
Котoрый раз я подчёркиваю, что из DOS я позаимствовал лишь одно - «дозволено всё»… Правда, на этом всё заимствование и заканчивается.
Говоря грубо, в DOS дозволено читать любые порты или писать в них, а так же нет ограничений с доступом к какой-либо ячейки памяти, до которой программа «смогла дотянуться». На это - всё.

А говоря не грубо и детальнее, как я выше уже попытался описать, минимальная программа «Hello World!» от такой операционки сразу получит все 4Гб пространства (не памяти) и все 4 млрд. устройств ввода-вывода (операции in/out и так генерируют исключения и вместо dx-регистра вполне можно использовать edx)…
Вот только всё это 4Гб пространство памяти - «королевство зеркал» и ссылаются на один и тот же регион объёмом в 4Кб: Вроде бы писать и читать можешь любую ячейки из 4Гб, но все они - миллионное отражения на основные 4Кб…
А вот портов хоть и дано (виртуально через edx) все 4 млрд., но чтение и запись в них - бессмысленна, так как всё - глобальная заглушка…
Потому я и сказал, что в основе у меня - DOS, где всё дозволено. Но, смысл этой вседозволенности - нулевой.
Просто код будет «беспомощно барахтаться» в этих 4Гб памяти и 4 млрд. портов ввода-вывода и всё. Никаких исключений (явных) вызываться не будет (типа, «программа чихнула не в том месте и будет прибита»)…
Это - первое…

А второе - уже далеко не DOS!
А именно, для конкретногог приложения строим XML-файл с описанием правил. Правил для самой OS, а не для приложения…
Например, типа:
«когда программа читает порт номер 1234, возвращать ей в eax позицию мышки с координатой X, а в esi - цвет пиксела под курсором»;
«когда программа пишет в порт номер 123456789, отправлять содержимое регистра eax через SMS на номер 1357»;
«когда приграмма что-то пишет в ячейки 0xFACE0000…0xFACE00FF, окрашивать смежные первые 256 пикселей линии №486 поверхности окна программы mIRC»;
«когда программа читает из области 0xCEB01200…0xCEB01263, опросить флажок соответствующего из 100 чек-боксов диалогового окошка и вернуть как содержимой той ячейки»;
«когда программа запишет в ячейку 0xF7EA870D байт 0x29, запустить клип Киркорова "Зайка моя"»…
Надеюсь, теперь понятнее?
Иначе говоря, приложение может делать всё, как в DOS - никаких исключений (явных). Но, через «правила» подробно описывается, что система должна делать, когда эти исключения (неявные) генерируются: Прибить процесс или отправить «любовную SMS»…

P.S.: Надеюсь, ответ исчерпывающий? ;)
(Был у меня в 2008 написан маленький эмулятор (тупо поверхностно (все инструкции i8086) эмулировал x86-процессор с 32-битными регистрами/указателями), в котором демонстрационная программа (256 байтиков) в открываемом окне рисовала и двигала сферы/кубы: Там было правило, типа «ячейки по такому-то диапазону адресов управляют радиусами OpenGL-сфер»)…

Правка: 10 ноя. 2017 14:50

ДезанизаторПостоялецwww10 ноя. 201722:37#16
Alikberov
> при начальной разработке концепции описываемой операционной системы ставилась
> задача, чтобы устранить принудительное проецирования региона системных API в
> пространство приложения.

Купи 16 Гб.
И проблема решена.
Дальше пока не читал.

thevladПостоялецwww11 ноя. 20173:51#17
Alikberov
Когда перейдешь от пустого философствования-пустозвонства к реализации, то многое поймешь почему те абстракции которые есть в ядрах современных ОС, именно такие какие они есть.
Если же говорить, о том что ты примерно хочешь, то это называется exokernel, и все придумано давно до тебя, https://en.wikipedia.org/wiki/Exokernel . Просто никому в здравом уме это нафиг не надо.
Sbtrn. DevilПостоялецwww11 ноя. 201715:29#18
Alikberov
> «когда программа читает порт номер 1234, возвращать ей в eax позицию мышки с
> координатой X, а в esi - цвет пиксела под курсором»;
> «когда программа пишет в порт номер 123456789, отправлять содержимое регистра
> eax через SMS на номер 1357»;
Будет проблемно реализовать апи-вызовы, у которых есть и входные, и выходные параметры. Двухфазное "сначала пишем, потом читаем"? Как-то неэкономно и небезопасно. Какую-то форму вызовов или прерываний всё-таки нужно будет поддерживать. Можно даже по абстрактному адресу. В спектруме TR-DOS, например, можно было обращаться к функциям доса (расположенного в теневом ПЗУ) через вызов по адресу 15619. Логически по этому адресу не было никакого исполняемого кода, а размещались только таблицы знакогенератора. Но системотехника была сделана так, что при чтении опкода по этому адресу ПЗУ переключалось с обычного на досовский, в качестве опкода вместо реального содержимого ячейки возвращался переход куда-то, что-то там работало, а потом каким-то таким же хитрым образом переключалось обратно и возвращало опкод возврата, поэтому для исходного вызыванта всё выглядело как успешный вызов некого кода по адресу 15619.

Правка: 11 ноя. 2017 15:30

AlikberovПостоялецwww11 ноя. 201717:06#19
Sbtrn. Devil
Будет проблемно реализовать апи-вызовы, у которых есть и входные, и выходные параметры.
Вoт уж рад слышать такое толковое замечание! Правда.
Здесь уж у меня «конкретная демократия»…
Так, рассмотрим на примере «когда программа читает порт номер 1234, возвращать ей в eax позицию мышки с  координатой X, а в esi - цвет пиксела под курсором»: Нужно учитывать то, что констекст регистров процесса в этот момент открыт и для обрабатываюшего диспетчера этого исключения открыт доступ к нему. Тем самым, операция «in eax,dx» не только расширяется до «in eax,edx», но и изменять может не только «консерваторский eax», но и изменять все остальные регистры. Тем самым, операция «чтение порта 1234» разворачивается в «вызов функции 1234», где входные параметры - весь набор регистров, а выходные параметры - весь набор регистров тоже. Напоминает DOS, правда? Напоминает тем, что перед обращением к DOS-функции нужно знать, какие регистры и как будут обрабатываться (включая и сегментные), а также - в каких регистрах будет содержаться результат. Тем самым, «чтение порта 1234» выглядит уже как алиас, подобно как в Си «#define READ_1234 My_API(&eax,&ecx,&edx,&ebx,&esp,&ebp,&esi,&edi,&cs,&ds,&es,&fs,&gs,&ss,&eip,1234)»…

P.S.: У моей концепции много «плюшек», как уже видите… Или снова что-то не ясно?
Просто, в классическом Си функция всегда возвращает результат в eax, так как разработчики языка, видимо, окончили математический факультет на «Отлично!»: У математиков функции, типа f(x,y,z), всегда возвращают что-то одно…
(Другия языки, как Lua и т.д. умеют возвращать букет результата)

AlikberovПостоялецwww14 ноя. 201716:15#20
Обнoвил стартовый пост темы.
Спасибо за помощь! Многочисленные вопросы, вызываемые сложностью понимания моей идеи помогают мне несколько отточить вступительное описание.
1 frag / 2 deathsУчастникwww14 ноя. 201718:12#21
Alikberov
> Чем достигается эффект работы BIOS/DOS, где существовала «демократичная
> политика» доступа: по любым адресам этих 4Гб можно производить чтение или
> запись - никакого эффекта закрытия программы по ошибке доступа к
> зарезервированной области памяти не будет.
А что хорошего-то? Ну молча распидарасит программе всю память, что приведёт её в заведомо нерабочее состояние. А ещё можно записывать в исполняемый код через другое "окно", вообще офигенно.
AlikberovПостоялецwww14 ноя. 201720:32#22
1 frag / 2 deaths
А что хорошего-то? Ну молча распидарасит программе всю память, что приведёт её в заведомо нерабочее состояние. А ещё можно записывать в исполняемый код через другое "окно", вообще офигенно.
К сoжалению, у вас, по-видимому, не хватило времени/терпения прочитать всё и вникнуть…
Имеются люди, которые согласны с моей концепцией во многом, так как сами об этом задумывались.

P.S.: Просто следует отвернуться от стереотипов архитектур всех имеющихся операционок…
P.P.S.: Может мне нужно попытаться графически как-то изобразить архитектуру?
Сколько ни пытался - не идёт. Сейчас попробую вновь.
Набросок | FantasmOS

Правка: 14 ноя. 2017 21:00

Страницы: 1 2

/ Форум / Флейм / ПроЭкты

2001—2017 © GameDev.ru — Разработка игр