FantasmOS

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

Метки:
  1. Paguo_86PK

    Paguo_86PK Руслан

    Публикаций:
    0
    Регистрация:
    8 окт 2007
    Сообщения:
    800
    Адрес:
    Ташкент
    В 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…