Как компьютер определяет, куда писать в виртуальной памяти?
Я пытаюсь ответить на этот вопрос: почему размер страницы равен смещению адреса памяти?
Это потому, что компьютер определяет номер страницы из таблицы страниц, а затем умножает его на смещение, чтобы определить, с чего начать запись? Я думаю, что это единственное логичное объяснение возможно, но я не уверен, потому что репетитор не мог ответить мне.
Кроме того, если у вас 64-битная адресуемая память и смещение занимает 14 бит, разве 14 бит не потрачены впустую? Вы можете разместить свои данные в большем количестве памяти без смещения, я прав?
1 ответ
Поскольку смещение является единственной частью виртуального адреса, которая не переведена (здесь перевод означает, что значение изменяется) в физический адрес. Грубо говоря, виртуальный адрес состоит из базового адреса и смещения. Базовый адрес переводится в адрес начала физической страницы. Размер этих страниц должен быть таким, чтобы любое отклонение от исходного виртуального адреса находилось на этой странице. Это причина, почему размер страницы - 1 равен максимальному смещению.
Например: в системах x86, использующих таблицы со страницами размером 4 МБ (атрибут PS для бита 7 дескриптора страницы равен 1), базовый адрес состоит из 10 старших значащих битов, которые указывают на одну из возможных 1024 записей страницы в каталоге страниц., Каждая запись имеет длину 32 бита (дескриптор страницы). Если дескриптор страницы ссылается на страницу 4 МБ, как указано, то существует поле, в котором хранится первый физический адрес этой страницы 4 МБ в физической памяти (обычно называемой рамкой страницы).
В пределах этого фрейма страницы требуется 22 смещения для адресации всех байтов на странице. Это смещение берется непосредственно из 22 младших битов виртуального адреса.