Здравствуйте, kov_serg, Вы писали:
V>>А красово, а? _>Не красиво. Есть же виртуальная память и у каждого процесса она своя. Что мешает не иметь охраняемых данных в ввиртуальном адресном пространстве вообще?
Именно то, что Intel сэкономила сразу в двух местах:
1. Работа с виртуальной памятью включается/выключается для всей системы целиком, а не для отдельного режима или процесса, а пространство общее на все уровни привилегий.
Это решение ещё в i386. Позже это устраняли, но ради виртуализации и SMM. Основной же режим остался тем же. Для сравнения:
* SPARC: часть ядра принципиально может работать только при выключенной dynamic address translation (DAT). В частности, это обязательно для обработчика страничного прерывания, потому что процессор не ведёт никаких таблиц виртуальной памяти сам, отдавая это на софтовое решение.
* z/Arch: DAT включается/выключается одним битом в PSW. Ядро может использовать чисто физическую адресацию, чем и пользуются. (Тут картина смазывается виртуализацией, которая там очень эффективная, но убойно сложная. Пропустим это.)
То есть сделать правильно было можно. Не захотели.
2. Права доступа к странице проверяются только при "реализации" действия команды, но не при предвыборке с предисполнением (результаты которого ещё не фиксируются).
А вот это уже совсем кретинизм, которому исполнилось более 20 лет.