Короче, помню, читал я руководство по процессору i486, ещё до 2000 года. Книжка такая была 2х-томник. И помню, был там защищённый режим, локальная таблица дескрипторов, глобальная таблица дескрипторов, короче, всяким ибаным вирусам ни за что ни прарвацца!
И потом выходит Винда 2000, ХР и так далее, и их всех зажирают вирусы, как так? То есть, что, дескрипторы не спасают?
И что же я сегодня, блядь, узнаю? Что единственная ОС, которая на полную использовала эти возможности, была OS/2, возможности эти присутствовали в x86_32, а из процов x86_64 Intel их выпилил как раз потому, что никто их не использует. Винда не использует хуй знает почему, а UNIX/Linux предположительно потому, что тогда потеряется переносимость на другие платформы. Переключение контекста происходило бы не через системные вызовы, а гораздо быстрее и всё такое. Вот такая она - книжка "Современные операционные системы" - сплошные разочарования ((
читать дальше
Что ещё узнал - страничная организация памяти. Если процесс обращается к отсутствующей странице памяти, генерируется исключение, система переключается в режим ядра, закачивает страницу, запускает процесс обратно. Но счётчик команд указывает на следующую команду. Нужно его вернуть на шаг назад. А если кто знает, вперёд его гораздо проще двигать, чем назад - ты не знаешь, предыдущее слово это команда или данные, надо несколько слов декодировать. В некоторых процессорах есть аппаратный регистр, который содержит предыдущее значение счётчика команд. Если такого регистра нет, ОС должна программно декодировать эти команды и вернуть всё взад. Ну не пиздец?
Идём дальше. Обращаемся к отсутствующей странице памяти, прерывание, страница грузится с диска, процесс блокирован. В это время запускается другой процесс, если ему понадобится память, есть шанс, что страница, которая щас загружается, будет вытеснена из памяти, на её место подключится новая страница, а контроллер DMA, который ничего об этом не знает, допишет часть страницы с диска в память новой страницы. Вот такую хрень надо отслеживать.