А в 32-разрядном режиме - это режим пульта. Другие варианты организации режима пульта: 1) микропрограмма в CPU; 2) специальный контроллер режима пульта с поддержкой в CPU; 3) железный пульт. Отдельная мода пульта выглядит на порядок проще любого другого варианта.
А какими кусками свопить? Если кусками по 4Мб, которых в 32-битном адресном пространстве всего 1024 - то интел с 1М страниц по 4Кб выглядит в 1024 раза более экономно. Если свопить кусками по 8Кб, которых в 4Гб будет 512К, то предлагается ли для каждого из 512 тысяч этих 8Кб окон иметь собственную пару PAR/PDR? А если нет - то как определить, какое из окон уже в памяти, а какое ещё надо загрузить из свопа?
В том и дело, что концепция PAR/PDR плохо масштабируется для перехода от 16-разрядного пространства без свопа к 32-разрядному со свопом.
- - - Добавлено - - -
Идею виртуальных пространств со свопом можно показать на простом примере. Допустим, у нас есть архитектура с адресным пространством из 10 адресов, работающая на машне с 3 адресами физического ОЗУ и 10 адресами свопа. Когда программа заказывает выделение памяти в 10 адресов - операционка возвращает указатель на первый адрес.
Потом программа начинает загружать данные в память.
Для виртуального адреса 0 MMU выделяет физический адрес 0
Для виртуального адреса 1 MMU выделяет физический адрес 1
Для виртуального адреса 2 MMU выделяет физический адрес 2
Для виртуального адреса 3 MMU выгружает адрес 0 в своп по адресу 0 и выделяет физический адрес 0
Для виртуального адреса 4 MMU выгружает адрес 1 в своп по адресу 1 и выделяет физический адрес 1
Для виртуального адреса 5 MMU выгружает адрес 2 в своп по адресу 2 и выделяет физический адрес 2
Для виртуального адреса 6 MMU выгружает адрес 0 в своп по адресу 3 и выделяет физический адрес 0
Для виртуального адреса 7 MMU выгружает адрес 1 в своп по адресу 4 и выделяет физический адрес 1
Для виртуального адреса 8 MMU выгружает адрес 2 в своп по адресу 5 и выделяет физический адрес 2
Для виртуального адреса 9 MMU выгружает адрес 3 в своп по адресу 6 и выделяет физический адрес 0
Потом программа читает данные из памяти.
Для виртуального адреса 0 MMU выгружает адрес 0 в своп по адресу 9 и загружает из свопа адрес 0 по адресу 0
Для виртуального адреса 1 MMU выгружает адрес 1 в своп по адресу 7 и загружает из свопа адрес 1 по адресу 1
Для виртуального адреса 2 MMU выгружает адрес 2 в своп по адресу 8 и загружает из свопа адрес 2 по адресу 2
Для виртуального адреса 3 MMU выгружает адрес 0 в своп по адресу 0 и загружает из свопа адрес 3 по адресу 0
Для виртуального адреса 4 MMU выгружает адрес 1 в своп по адресу 1 и загружает из свопа адрес 4 по адресу 1
Для виртуального адреса 5 MMU выгружает адрес 2 в своп по адресу 2 и загружает из свопа адрес 5 по адресу 2
Для виртуального адреса 6 MMU выгружает адрес 0 в своп по адресу 3 и загружает из свопа адрес 6 по адресу 0
Для виртуального адреса 7 MMU выгружает адрес 1 в своп по адресу 4 и загружает из свопа адрес 7 по адресу 1
Для виртуального адреса 8 MMU выгружает адрес 2 в своп по адресу 5 и загружает из свопа адрес 8 по адресу 2
Для виртуального адреса 9 MMU выгружает адрес 3 в своп по адресу 6 и загружает из свопа адрес 9 по адресу 0





Ответить с цитированием