переводить виртуальный адрес на физический адрес
Следующая таблица страниц предназначена для системы с 16-разрядными виртуальными и физическими адресами и с 4096-байтными страницами. Контрольный бит устанавливается в 1, когда страница ссылается. Периодически, поток обнуляет все значения опорных bit.All чисел приводятся в десятичной системе.
Я хочу преобразовать следующие виртуальные адреса (в шестнадцатеричном виде) в эквивалентные физические адреса. Также я хочу установить опорный бит для соответствующей записи в таблице страниц.
• 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
виртуальных страниц. Каждая запись в таблице страниц хранит соответствующий фрейм, вмещающий страницу. Например:
Теперь давайте переведем!
Прежде всего для простоты работы давайте конвертируем 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
Чтобы помочь вам решить этот вопрос, нам нужно получить наши данные правильно:
- 16 бит виртуального адресного пространства = 2 ^ 16 = 65 536 адресного пространства
- 16 бит физического адресного пространства = 2 ^ 16 = 65 536 адресного пространства
- 4096 Размер байтовой страницы определяет смещение, которое является Log (4096)/Log (2) = 12 бит. Это означает, что 2 ^ 12 для размера страницы
- Согласно @Akash Mahapatra, смещение от виртуального адреса напрямую отображается на смещение на физический адрес
Таким образом, мы теперь имеем:
- 2 ^ 16 (16 бит) для виртуального адреса - 2 ^ 12 (12 бит) для смещения = 4-бит для страниц, или, скорее, общее количество доступных страниц.
- Я не буду повторять вычисления для физических, так как это те же числа.
- 2 ^ 4 (4 бит) для страниц = 16, что коррелирует с количеством табличных записей выше!
Мы добираемся туда... будьте терпеливы! :)
Известно, что адрес памяти 0xE12C в шестнадцатеричной нотации содержит 16-разрядный адрес. (Потому что он заявил в вопросе.)
Позвольте мяснуть адрес сейчас...
Сначала мы удаляем "0x" из информации.
Мы можем конвертировать E12C в двоичную нотацию, такую как @Tony Tannous, но я собираюсь применить немного коротких сокращений.
Я просто использую соотношение. Ну, адрес обозначается в 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
Надеюсь, это объяснение поможет вам и другим, как я! :)