В 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…
Разработку ос нужно выполнять с механизмов защиты, всё остальное второстепенно и лишь логическое следствие ключевых механизмов защиты(поддержка их). Так например нт разработана не на основе защиты, она только допиливалась всегда мелкими фиксами, которые стали не такими уже и мелкими. Это ошибочный путь. Опираться на функции железа для реализации фундаментальной архитектуры так же ошибка, реальные механизмы защиты только начинают вводится. Ничем не помогли эти все железячные ограничения прав и исполнений как известно. Нт изначально создавалась просто что бы работала, а не для защиты от атак. Отсюда и проблемы.
Indy_, эхх, сколько лет уже тебя знаю. Года наверно с 2011, даже на твоём форуме общался с тобой в каком-то году. И не изменился вообще
Рекурсивнaя ссылка с прояснением многих ключевых деталей и акцентом на порты ввода/вывода. (Если здесь что-то не понятно, можно перечитать ту тему: Там развёрнуто обсуждаются почти все конкретные проблемы и вопросы…) Эту тему я начал с обсуждения Escape-инструкций x86. А именно, отхват этого набора из-под FPU для обработки их самой OS как часть API, внедрённого в систему x86-команд вместо банального call/int. Если Операционная Система фундаментально будет строиться на концепции эффективного использования фиктивного набора Escape-инструкций и абсолютно формальным виртуальным набором портов ввода/вывода, то безопасность всей Системы в целом будет зависеть, в первую очередь, от разнообразия Escape/портовых сущностей. Парочка ссылочек (для себя): _controlfp() позволяет контролировать сопроцессор. Вот здесь этим вопросом уже интересовались. Ещё раз о главном Системой приложениям не предоставляется никаких подгружаемых библиотек и нету никакого базового API через механизмы syscall/int-вызовов Все 4 Гб адресного пространства доступно каждому из приложений, так как оно не должно делиться, как в POSIX и Windows, на прикладную и служебную половины для обеспечения доступности драйверов и тех же API-функций. Но, следует обратить внимание, что 4 Гб пространства - не 4 Гб памяти ОЗУ, так как все 4 Гб адресного пространства свёрнуты и адресуют зеркалами один и тот же регион памяти, фактически, эмулируя самую обычную и банальную неполную дешифрацию Все 65536 портов ввода/вывода изначально представляются кодом-заглушкой и не генерируют никаких явных исключений в рамках приложения. Само приложение может свободно читать любой порт и писать в любой из портов, так как к реальному оборудованию через них доступа никаким образом напрямую не получится и по производительности такие инструкции будут похожи на холостые nop-инструкции с очень длинным циклом в миллионы тактов Все привилегированные операции, типа cli/sti/lock/hlt также не вызывают явных исключений и ошибок, а работают как очень медленные холостые nop-операции с очень длинным машинным циклом Все сегменто-селекторные префиксы cs:/ds:/es:/fs:/gs:/ss: служат не по своему назначению с переключением адресации, а позволяют строить подобие 3D-маршрута к какому-либо конкретному внутреннему ресурсу Escape-инструкции извлечены из-под монопольного использования их за FPU и унифицированы под широкий класс различных ресурсов. Посредством Escape-инструкций само Системное Окружение как бы проецируется в систему x86-команд и позволяет решать широчайший набор различных функций, от локального открытия файла, до описания Шейдера или доступа к Облачной БД Здесь можно найти начальный набросок реализации концепции в виде симулятора-гипервизора. Конечно, реализован перехват не всего набора инструкций и сама модель памяти пока не тронута. Предстоит очень много работы по перестройке базовых автоматических механизмов Windows под имитацию изложенной мною концепции. А так как данная тема была открыта ровно 2 года назад, можно легко понять, сколько времени я ей уделяю и сколько сложностей предстоит преодолеть в общем ради реализации минимального базового функционала.
Тoт самый Пассивный процессор помните? Здесь и описана (оказывается) его программная модель. Подробности
Paguo_86PK, Ведь забавно, вы подробно всё описываете что думаете, такой большой масштаб, который врядле можно даже понять. Какие то симуляции между кучей архитектур, поток мыслей. Видимо нет принципа/мотива/способности находить общее(просто к слову это и есть та функция в разуме, которая называется интеллектом). Вы вот другую тему растянули на года и сотни страниц. Зачем, какая цель, какую работу по этой задаче вы выполнили и очём это вообще я хз, ты сам то хоть понимаешь.. врядле, это столько бы не тянулось. Какие новые инструкции, для этого нужен эмулятор. Вот и скажите за столько времени у вас есть что либо по той теме или это просто какие то измышления в полусне, не важно какое вещество.