Управление памятью - преобразование виртуальных адресов в физические

1083
Wissam A Jackal

Пожалуйста, мне нужен правильный способ преобразования логического (виртуального) адреса в физический адрес, у меня есть следующий вопрос:

Учитывая следующую таблицу страниц:

enter image description here

Зная, что виртуальные страницы и физический фрейм имеют размер 1 кбайт, каков адрес памяти, соответствующий каждому из следующих виртуальных адресов, закодированных в шестнадцатеричном формате: 142A и 0AF1?

Я решил это так, но я не знаю, правильно ли это:

142A (шестнадцатеричный) = 5162 (десятичный)

5162/1024 = 5 (номер страницы) <----> Кадр 1 в таблице страниц

5162mod1024 = 42 (смещение)

поэтому физический адрес, соответствующий 142A = 1 (физический) +42 (смещение) или (1 * 1024 + 42)

так это правильно ?!

С уважением

0

1 ответ на вопрос

1
LawrenceC

1 КБ = 1024 байта. 1024 10 = 0400 16

  • страница 0 = 0000 16, страница 1 = 0400 16, страница 2 = 0800 16, страница 3 = 0C00 16, страница 4 = 1000 16, страница 5 = 1400 16

    • Итак, 142A 16 находится на странице 5 ...
  • Логическая страница 5 указывает на физическую страницу 1. Каждая страница имеет размер 0400 16 байт. Физическая страница 1 начинается с 04:00 16 (страница 0 начинается с 0000 16 ).

  • 142A 16 - это 2A 16 байт после начала страницы 5 в 1400 16 ...

    • поэтому вы добавляете 2A 16 к начальному адресу физической страницы 1, который равен 0400 16 . Таким образом, логический адрес 142A 16 действительно является физическим адресом 042A 16 .

    • Все, что 1400 16 до 17FF 16 логически соответствует 0400 16 до 07FF 16 физически и т. Д.


Это тип стола, который вы могли бы сделать, чтобы помочь вам. Все на основе кратных 0400 16, так как это размер страницы.

Logical Page Number Logical Page Address -> Physical Page Number Physical Page Address 0 0x0000 - 0x03FF 4 0x1000 - 0x13FF  1 0x0400 - 0x07FF 6 0x1800 - 0x1BFF  2 0x0800 - 0x0BFF 8 0x2000 - 0x03FF  3 0x0C00 - 0x0FFF 9 0x2400 - 0x27FF  4 0x1000 - 0x13FF 12 0x3000 - 0x33FF  5 0x1400 - 0x17FF 1 0x0400 - 0x07FF  
большое спасибо за отличный ответ, который вы сделали для меня более понятным, поэтому мое решение правильное, потому что десятичное число (1 * 1024 + 42 = 1066) в шестнадцатеричном (042A) Wissam A Jackal 7 лет назад 0

Похожие вопросы