Valery Solovey писал(а):
...В системах с вытесняющей многозадачностью переключение контекста аппаратное. Обработчик прерывания не различает процессы. Сами процессы тоже не в курсе моментов переключения. Переключение затрагивает регистры, кэш и таблицу виртуальной памяти. Куда тут технику или паттерн воткнуть?
Контекстные переключения, действительно, аппаратные. И в этом смысле ничего упростить нельзя, соглашусь с замечанием. При этом, в продолжение темы эффективности плоской памяти добавлю, что при плоской памяти всё так же работают аппаратные и программные прерывания. И нет проблем дописать в ядро в таблице процессов в виде массива RECORD с признаками информации о том, какому процессу сколько квантов выделить и какой приоритет процессу задать Всё доступно
Jordan, берите и пользуйте.
Вот только аппаратные прерывания настраиваются через машинный код и ассемблер, который запрещён в языке (или той части, которая запускается ядром как простой процесс, или без особого разрешения пользователя).
Поэтому обращение к памяти допустимо, но вот только скажем так:
Код:
Mem.PeekInt(adr, len); (* но через ядро *)
Mem.PokeByte(adr, array_byte); (* но опять же через ядро!!! *)
Kernel.Process_start(process_id); (* и нет другого способа выполнить код, а передать выполнение в произвольную точку -- такие права только у ядра *)
Прямой доступ исключен. Кэш всё ещё нужен, и организация его проще. Таблица виртуальной памяти просто не нужна. Паттерн, техника?))) Да всё что угодно.
Кроме того, кто мешает в ходе компиляции подсчитывать необходимое количество тактов для исполнения программы. И после заданного количеств тактов, из расчёта наихудшей ситуации, компилятор пусть втыкает системный вызов:
Код:
Kernel.Quant_end;
В таком случае, даже аппаратное прерывание не нужно!))
Valery Solovey писал(а):
Механизмы защиты от этого известны давно. Живым примером может служить яФон.
Парень явно в теме)))
Valery Solovey писал(а):
Исполнимые файлы предназначены для исполнения. Как их защитить от изменения? Хранить код не в виде файлов (которые всегда были абстракцией данных), а другим способом и в таком месте, которое находится за пределами пользовательской оболочки операционной системы. То есть, в скрытом от пользователей хранилище. Запуск приложения и разнообразную информацию о нём нужно получать с помощью специальных команд операционной системы.
Совершенно верно. Можно даже бинарники хранить. Но в сухом и недоступном для детей месте. Эта идея просто напрашивается. И только религия не позволяет это сделать в существующих ОС.
В конце концов, можно даже запускать неизвестные бинарники. Правда в виртуальной-софт машине. Будет быстродействие смешное, но в качестве песочницы пусть отработает, скажем 1 млн. квантов времени. При обращении к системным вызовам -- исполнять аппаратно, вне виртуальной машины. Это прилично ускорит неизвестный бинарный код, и всё ещё будет безопасно.
Так что, идея плоского пространства реализуема, если будет под такую модель язык. Вирт занимается именно этим))