переводить виртуальный адрес на физический адрес

Следующая таблица страниц предназначена для системы с 16-разрядными виртуальными и физическими адресами и с 4096-байтными страницами. Контрольный бит устанавливается в 1, когда страница ссылается. Периодически, поток обнуляет все значения опорных bit.All чисел приводятся в десятичной системе. enter image description here

Я хочу преобразовать следующие виртуальные адреса (в шестнадцатеричном виде) в эквивалентные физические адреса. Также я хочу установить опорный бит для соответствующей записи в таблице страниц.

0xE12C

0x3A9D

0xA9D9

0x7001

0xACA1

Я знаю ответы, но я хочу знать, как я могу получить эти ответы:

0xE12C → 0x312C
0x3A9D → 0xAA9D
0xA9D9 → 0x59D9
0x7001 → 0xF001
0xACA1 → 0x5CA1

Я нашел и попробовал Это, но это не очень помогло мне.

Ответ 1

Дается, что виртуальный адрес имеет длину 16 бит.
Следовательно, в виртуальном адресном пространстве имеется 2 ^ 16 адресов.
Размер страницы задается равным 4 КБ (на странице есть адреса 4K (4 * (2 ^ 10)), поэтому количество страниц будет (2 ^ 16)/(2 ^ 12) = 2 ^ 4.
Для адресации каждой страницы требуется 4 бита.
Наиболее значимые 4 бита в виртуальном адресе будут обозначать номер страницы, а остальные 12 бит будут смещением страницы.

Следует помнить, что размер страницы (в виртуальном адресном пространстве) всегда совпадает с размером кадра в основной памяти. Следовательно, последние 12 бит останутся такими же на физическом адресе, как и у виртуального адреса.

Чтобы получить адрес кадра в основной памяти, просто используйте первые 4 бита.
Пример: рассмотрим виртуальный адрес 0xACA1
Здесь A в A CA1 обозначает номер страницы (10), а соответствующий кадр нет 5 (0101), следовательно, результирующий физический адрес будет → 0x5CA1.

Ответ 2

Чтобы перевести виртуальный адрес в физический адрес (относится ТОЛЬКО к этому домашнему заданию), нам нужно знать 2 вещи:

  • Размер страницы
  • Количество бит для виртуального адреса

В этом примере: 16-разрядная система, размер страницы 4 КБ и объем физической памяти - 64 КБ.

Прежде всего нам нужно определить количество необходимых битов, чтобы действовать как смещение внутри страницы.
log2(Page-Size)= log2(4096)= 12 бит для смещения

Из 16 бит для виртуального адреса 12 для смещения, что означает, что каждый процесс имеет 2^4 = 16 виртуальных страниц. Каждая запись в таблице страниц хранит соответствующий фрейм, вмещающий страницу. Например:

enter image description here

Теперь давайте переведем!

Прежде всего для простоты работы давайте конвертируем 0xE12C в binary.

0xE12C = (1110 0001 0010 1100) in base 2
1110 = 14 in decimal
Entry 14 in P.T => Page frame 3.

Позволяет объединить его с 12 битами смещения

Answer: (0011 0001 0010 1100) = 0x312C

Другой пример: 0x3A9D

0x3A9D = 0011 1010 1001 1101
0011 = 3
PageTable[3] = 10
10 in decimal = 1010 in binary
1010 1010 1001 1101 in binary = 0xAA9D

Ответ 3

Чтобы помочь вам решить этот вопрос, нам нужно получить наши данные правильно:

  1. 16 бит виртуального адресного пространства = 2 ^ 16 = 65 536 адресного пространства
  2. 16 бит физического адресного пространства = 2 ^ 16 = 65 536 адресного пространства
  3. 4096 Размер байтовой страницы определяет смещение, которое является Log (4096)/Log (2) = 12 бит. Это означает, что 2 ^ 12 для размера страницы
  4. Согласно @Akash Mahapatra, смещение от виртуального адреса напрямую отображается на смещение на физический адрес

Таким образом, мы теперь имеем:

  • 2 ^ 16 (16 бит) для виртуального адреса - 2 ^ 12 (12 бит) для смещения = 4-бит для страниц, или, скорее, общее количество доступных страниц.
  • Я не буду повторять вычисления для физических, так как это те же числа.
  • 2 ^ 4 (4 бит) для страниц = 16, что коррелирует с количеством табличных записей выше!

Мы добираемся туда... будьте терпеливы! :)

Известно, что адрес памяти 0xE12C в шестнадцатеричной нотации содержит 16-разрядный адрес. (Потому что он заявил в вопросе.)

Позвольте мяснуть адрес сейчас...

Сначала мы удаляем "0x" из информации.

Мы можем конвертировать E12C в двоичную нотацию, такую как @Tony Tannous, но я собираюсь применить немного коротких сокращений.

Mapping of the Address and Offset

Я просто использую соотношение. Ну, адрес обозначается в 4 символах выше, а с 16/4 = 4 я могу определить первую букву как виртуальный адрес, а остальные 3 - адрес смещения.

С информацией "E" в шестнадцатеричном формате мне нужно преобразовать в Decimal = 14. Затем я смотрю на вашу таблицу, и я нашел рамку страницы "3". Кадр страницы 3 отмечен в десятичном формате, который затем необходимо преобразовать обратно в шестнадцатеричный формат... Дух!... который равен 3!

Таким образом, отображение физического адреса местоположения виртуальной памяти 0xE12C можно найти на 0x312C в физической памяти.

Затем вы вернетесь к таблице и обратитесь к столбцу бит ссылки и поместите "1" в строку 14.

Примените к ним ту же концепцию -

0x3A9D → 0xAA9D
0xA9D9 → 0x59D9
0x7001 → 0xF001
0xACA1 → 0x5CA1

Если вы заметили, последние 3 цифры совпадают (что определяет смещение). И 1-я из 4-х цифр отображается в соответствии с таблицей:

table entry 3 -> page frame 10 -> hex notation A
table entry A (10) -> page frame 5 -> hex notation 5
table entry 7 -> page frame 15 -> hex notation F
table entry A (10) -> page frame 5 -> hex notation 5

Надеюсь, это объяснение поможет вам и другим, как я! :)