Таблица страниц в первом случае представляет собой для каждой структуры данных процесса. Каждый процесс имеет указатель на собственную таблицу страниц, этот указатель загружается в регистр% CR3, когда процесс запланирован. Также он сохраняется когда он переключается в контекст с другими регистрами.
Но перевернутая хэш-таблица представляет собой глобальная структура данных .The ОС, которая использует эту технику будет использовать какой-то механизм блокировки, чтобы дать доступ только один процесс в данный момент времени. (2 представьте процесс на 2 ядра Доступ к глобальные данные одновременно).
Предполагая, что размер 4 ГБ для каждого процесса и размер страницы 4096, в первом случае каждый процесс имеет 4 ГБ/4096 (нет записей в таблице страниц * размера каждой записи в таблице страниц), и все это будет потреблять пространство, для каждого процесса, который создается/forked. Общая память, используемая для сопоставления виртуального на физическое, представляет собой общую сумму размера таблицы страницы для всего процесса. Это более простой подход, поскольку на каждом коммутаторе контекста вы будете менять указатель, ничего сложного.
Во втором случае у вас будет отдельная таблица с записями 4GB/4096, поэтому пространство сохраняется, но управление памятью становится сложным, так как это глобальные данные, вам нужно будет добавить дополнительную информацию в каждую запись, как нынешний владелец (как вы показали) и т. д. MMU/OS должна заботиться о синхронизации.
Но приведенный вами пример не является точным, на реальной системе с каждой страницей страницы процесса доступен весь адрес, в вашем случае процесс p1 имеет 4 страницы, а p2 - другой набор страниц. На самом деле оба процесса могут получить доступ к одному и тому же виртуальному адресу, сопоставленному с другим физическим фреймом. Каждая таблица в вашей таблице должна иметь по 8 записей.