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

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

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

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

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

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

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

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

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

С уважением

1 ответ1

1

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                                                                            

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .