FantasmOS

Тема в разделе "WASM.OS.DEVEL", создана пользователем Paguo_86PK, 13 ноя 2017.

Метки:
  1. Paguo_86PK

    Paguo_86PK Руслан

    Публикаций:
    0
    Регистрация:
    8 окт 2007
    Сообщения:
    911
    Адрес:
    Ташкент
    В 1997 году на досуге я занимался дизайном собственной компьютерной системы с чистого листа и не придерживаясь никаких стандартов и традиций: Чистый полёт фантазии на современной элементарной базе…
    (Старoжилы форума могли бы вспомнить меня по теме 2007 года, где я пытался «жонглировать» сегментными регистрами из-под Win-API…)

    Предисловие
    Так как более-менее смутное представление у меня имелось об архитектуре процессора i386, многие из базовых основ опираются именно на его возможности и уникальные отличия от того же i8086.

    Базовый принцип
    Каждый процесс в своё распоряжение получает все 4Гб адресного пространства. Так как аппаратные возможности страничной адресации i386 позволяют «скрутить» память до 1млн. страниц по 4Кб каждая, изначально прикладной процесс попадает именно в «царство зеркал», где 4Гб пространства - это миллион зеркал на одни и те же 4Кб памяти. Чем достигается эффект работы BIOS/DOS, где существовала «демократичная политика» доступа: по любым адресам этих 4Гб можно производить чтение или запись - никакого эффекта закрытия программы по ошибке доступа к зарезервированной области памяти не будет. Словно к процессору подключена микросхема памяти в 4Кб, адресная шина использует младшие 12 разрядов, а старшие 20 - не используются. Получается эффект системы с неполной дешифрацией адресной шины.
    То же самое положение обстоит и с портами ввода/вывода: Прикладной процесс может читать любой порт или писать в него. Так как обработчик генерируемых исключений изначально будет представляться заглушкой, все такие операции ввода-вывода со стороны приложения будут подобны холостым операциям с очень длинным циклом по тактам, которые будут выделяться на переключение в код обработки исключений.
    Таким образом, все приложения запускаются как бы в тотальной «песочнице»: Могут производить любые операции по доступу к памяти или портам, но внешне на операционную среду это никак не будет сказываться…
    Что мы получаем?
    Получается, можно запустить сотни различных приложений, которые будут тотально инкапсулированны со всех сторон и внешне всё будет работать как тьма кода из холостых операций. Не более… Что бы в них не происходило. Словно каждая из программ - является своей BIOS-прошивкой в собственном компьютере, не имеющего никакой периферии. Чисто - процессор и память.

    Основы концепции
    Вот здесь я уже поднимал этот вопрос и потому будет легче понять. Если, конечно, не полениться и попытаться хоть как-то вникнуть.
    Единственное, что доступно всем приложениям для взаимодействия с внешней средой, это набор ESCAPE-инструкций. В этом отношении, именно i386 мне нравится больше всего, так как его кристалл не нагружен никаким сопроцессором. И если взять 100 материнских плат со спартанской архитектурой «ROM-RAM-CPU», то они будут работать все, но толку от них не будет никакого… Одна плата - один процесс.
    Ключевой момент состоит в том, что остаются пустыми розетки под сопроцессор. Именно в них (виртуально) вставляются жгуты и к ним подключается не математический сопроцессор, а компьютер-супервизор. Тем самым, в системе команд появляются проекции ESCAPE-команд от самого супервизора. Напоминает чем-то «мэйн-фрейм»…
    Так как группа ESCAPE-команд содержит 8 операционных кодов, эти 8 кодов представляются как группы тематических API и одним кодом можно делать что-то одно.
    Например:
    Одной ESCAPE-инструкцией можно управлять дешифрацией адресного пространства и запросить в него проекцию на зеркало какого-либо процесса или файла. В этом плане, инструкция работает подобно fopen/CreateFile и т.д. А через операнды инструкции в регистра передаётся, например, указатель на имя запрашиваемого, собственно, ресурса, а также указатель на регион в памяти под проекцию этого ресурса в адресное пространство. Если очень нужно, можно запросить проекцию любой библиотеки в своё адресное пространство, подобно LoadLibrary, чтобы в свою память получить поддержку готового системного кода для самостоятельного выполнения;
    Другой ESCAPE-инструкцией можно управлять дешифрацией устройств ввода-вывода и назначить определённому порту ссылку на необходимый ресурс. В этом плане, операции ввода/вывода будут подобны функциям PostMessage/SendMessage, когда для отправки какому-либо приложению какого-либо сообщения с генерацией соответствующего события, нужно просто записать/прочитать порт (rep+outs/ins - для передачи целых строк или структур), а сама операционная среда определит, за «кем» закреплён этот порт в текущем приложении и переключит управление на адресата (В случае с rep+outs/ins адресат также получает проекцию на контекст вызывающего процесса, чтобы прочитать ecx/esi/edi регистры и указатель на проекцию в память того процесса);
    Третьей ESCAPE-инструкцией можно управлять «облачными вычислениями», так как традиционный математический сопроцессор, как сказано выше, объявлен «вне закона». Тем самым, через операнды ESCAPE-инструкции передаётся, допустим, указатель на «вычислительный сценарий», а операционная среда сама займётся его обработкой. Таким образом, можно передать ссылку на MathML, LaTeX, LuaTeX или CUDA сценарий;
    И т.д…

    Мультизадачность
    Как уже понятно, все процессы в системе работают без строгой синхронизации, как бы через сеть. Если какой-то процесс подвисает или завис совсем, обращение к нему подобно ситуации, когда «сервер не отвечает». Тем самым, архитектура операционной среды изначально не расчитана, чтобы, например, в определённый момент времени произвести гибернацию всего в целом. Так как нет совместно разделяемых ресурсов явно с указателями и ссылками на них. Это и не нужно, так же, как и не нужно «делать снимок» связей и маршрутов во всей сети интернет в целом…
    Диспетчера задач в классическом смысле нету, так как существует специальная директория под запуск и исполнение новых процессов. Так, при создании очередной поддиректории в ней система резервирует ресурсы под открытие очередного процесса. Создаваемая пустая директория автоматически получает идентификационное новое имя под новый процесс. Теперь необходимо просто распаковать все необходимые файлы запускаемой программы в эту новую директорию и покинуть её (либо командной строкой, либо браузером) для запуска процесса.
    Весь механизм распределения машинного времени между процессами и потоками устроен так, что любой процесс автоматически «замораживается» при входе в директорию его ресурсов. Тем самым, любой процесс можно в любой момент «заморозить» и упаковать его текущее состояние в архив, чтобы, например, продолжить его выполнение в другой раз или на другой машине…
    При этом, все файлы подкачки памяти, раскладки зеркал ресурсов в адресном пространстве и т.п. хранится непосредственно в директории конкретного процесса. А состояние контекста со всеми регистрами и дампами - проецируется в XML-файл лога, что позволяет обходиться без специального отладчика для просмотра состояния процесса при его «заморозке»…
    Следует обратить внимание также на то, что вся текущая карта памяти и портов ввода-вывода оперативно представляется так же - в XML-файле в виде отдельных правил. Например, если добавить строчку «При записи строки по диапазону адресов 0x89AB0000-0x89ABCDEF отправлять SMS-сообщение на номер 1234», то приложение сможет отправлять SMS-ки, само того не подозревая, так как операционная среда сделает всё абсолютно «прозрачно»…
    Тем самым, можно как из-вне вручную корректировать всю схему взаимодействия конкретного приложения с другим приложением или операционной средой, редактируя правила XML-файла конфигурации «дешифрации адреса». Так можно и отслеживать эту конфигурацию, которую само приложение изменяет ESCAPE-инструкциями…
    К любой задаче можно подтянуть любое количество клавиатур или консольных окон, пусть даже те будут находиться на другом континенте. В приложении просто, абсолютно прозрачно для него, будут оперативно проецироваться все эти ресурсы как регионы памяти с динамическим контекстом.

    P.S.: Пока - это всё…
    Отдалённо напоминает Plan B или Фантом-OS, но имеются отличия.
    (Ведь я это «нафантазировал», когда работал под DOS 3.11 и только ознакомился с «плюшками» i386…
     
    problemaker нравится это.
  2. problemaker

    problemaker New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2012
    Сообщения:
    26
    Интересный концепт
     
  3. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Разработку ос нужно выполнять с механизмов защиты, всё остальное второстепенно и лишь логическое следствие ключевых механизмов защиты(поддержка их). Так например нт разработана не на основе защиты, она только допиливалась всегда мелкими фиксами, которые стали не такими уже и мелкими. Это ошибочный путь.

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

    Нт изначально создавалась просто что бы работала, а не для защиты от атак. Отсюда и проблемы.
     
  4. problemaker

    problemaker New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2012
    Сообщения:
    26
    Indy_, эхх, сколько лет уже тебя знаю. Года наверно с 2011, даже на твоём форуме общался с тобой в каком-то году. И не изменился вообще
     
  5. Paguo_86PK

    Paguo_86PK Руслан

    Публикаций:
    0
    Регистрация:
    8 окт 2007
    Сообщения:
    911
    Адрес:
    Ташкент
    Рекурсивнaя ссылка с прояснением многих ключевых деталей и акцентом на порты ввода/вывода.
    (Если здесь что-то не понятно, можно перечитать ту тему: Там развёрнуто обсуждаются почти все конкретные проблемы и вопросы…)

    Эту тему я начал с обсуждения Escape-инструкций x86.
    А именно, отхват этого набора из-под FPU для обработки их самой OS как часть API, внедрённого в систему x86-команд вместо банального call/int.

    Если Операционная Система фундаментально будет строиться на концепции эффективного использования фиктивного набора Escape-инструкций и абсолютно формальным виртуальным набором портов ввода/вывода, то безопасность всей Системы в целом будет зависеть, в первую очередь, от разнообразия Escape/портовых сущностей.

    Парочка ссылочек (для себя):
    _controlfp() позволяет контролировать сопроцессор.
    Вот здесь этим вопросом уже интересовались.

    Ещё раз о главном
    1. Системой приложениям не предоставляется никаких подгружаемых библиотек и нету никакого базового API через механизмы syscall/int-вызовов
    2. Все 4 Гб адресного пространства доступно каждому из приложений, так как оно не должно делиться, как в POSIX и Windows, на прикладную и служебную половины для обеспечения доступности драйверов и тех же API-функций. Но, следует обратить внимание, что 4 Гб пространства - не 4 Гб памяти ОЗУ, так как все 4 Гб адресного пространства свёрнуты и адресуют зеркалами один и тот же регион памяти, фактически, эмулируя самую обычную и банальную неполную дешифрацию
    3. Все 65536 портов ввода/вывода изначально представляются кодом-заглушкой и не генерируют никаких явных исключений в рамках приложения. Само приложение может свободно читать любой порт и писать в любой из портов, так как к реальному оборудованию через них доступа никаким образом напрямую не получится и по производительности такие инструкции будут похожи на холостые nop-инструкции с очень длинным циклом в миллионы тактов
    4. Все привилегированные операции, типа cli/sti/lock/hlt также не вызывают явных исключений и ошибок, а работают как очень медленные холостые nop-операции с очень длинным машинным циклом
    5. Все сегменто-селекторные префиксы cs:/ds:/es:/fs:/gs:/ss: служат не по своему назначению с переключением адресации, а позволяют строить подобие 3D-маршрута к какому-либо конкретному внутреннему ресурсу
    6. Escape-инструкции извлечены из-под монопольного использования их за FPU и унифицированы под широкий класс различных ресурсов. Посредством Escape-инструкций само Системное Окружение как бы проецируется в систему x86-команд и позволяет решать широчайший набор различных функций, от локального открытия файла, до описания Шейдера или доступа к Облачной БД

    Здесь можно найти начальный набросок реализации концепции в виде симулятора-гипервизора.
    Конечно, реализован перехват не всего набора инструкций и сама модель памяти пока не тронута.
    Предстоит очень много работы по перестройке базовых автоматических механизмов Windows под имитацию изложенной мною концепции. А так как данная тема была открыта ровно 2 года назад, можно легко понять, сколько времени я ей уделяю и сколько сложностей предстоит преодолеть в общем ради реализации минимального базового функционала.
     
  6. Paguo_86PK

    Paguo_86PK Руслан

    Публикаций:
    0
    Регистрация:
    8 окт 2007
    Сообщения:
    911
    Адрес:
    Ташкент
  7. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Paguo_86PK,

    Ведь забавно, вы подробно всё описываете что думаете, такой большой масштаб, который врядле можно даже понять. Какие то симуляции между кучей архитектур, поток мыслей. Видимо нет принципа/мотива/способности находить общее(просто к слову это и есть та функция в разуме, которая называется интеллектом). Вы вот другую тему растянули на года и сотни страниц. Зачем, какая цель, какую работу по этой задаче вы выполнили и очём это вообще я хз, ты сам то хоть понимаешь.. врядле, это столько бы не тянулось. Какие новые инструкции, для этого нужен эмулятор. Вот и скажите за столько времени у вас есть что либо по той теме или это просто какие то измышления в полусне, не важно какое вещество.
     
  8. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.549
    Адрес:
    Russia
    Indy_, Это своего рода блог. Он не обязан вам отчитываться.
    Оставьте человека в покое.