Я читаю Modern Operating Systems 3rd Edition от A.S Tanenbaum, и я пришел к главе по управлению виртуальной памятью. Некоторое время я застрял на части, и я не могу обойти ее. Либо это опечатка в книге, либо я что-то неправильно понял.Преобразование виртуального адреса в запись в таблицу страниц
Предположим, у нас есть многоуровневая таблица страниц с двумя уровнями, где мы сопоставляем 32-разрядные виртуальные адреса с фреймами физической памяти.
Поля для таблиц страниц и смещение
10 | 10 | 12
означает, что мы имеем верхнюю таблицу страниц уровня с 1024 записей, и размер страницы 4096 байт или 4 КБ. Запись 0 таблицы страниц верхнего уровня указывает на таблицу страниц текстового сегмента, запись 1 в сегменте данных и запись 1023 в таблицу страниц стека.
Это цитата из книги:
В качестве примера рассмотрим 32-разрядный виртуальный адрес 0x00403004 (4206596 десятичное), который является 12,292 байт в данных. Этот виртуальный адрес соответствует PT 1 = 1, PT2 = 2 и Offset = 4. MMU сначала использует PT1 для индексации в таблице страниц верхнего уровня и получения записи 1, что соответствует адресам от 4M до 8M , Затем он использует РТ2 к индексу в таблицу страниц второго уровня только что нашли и извлекаемую запись , который соответствует адресам 12288 до 16383 в пределах его фрагмента оГО (то есть абсолютные адреса 4,206,592 к 4,210,687).
Когда я перевести адрес в двоичный, я получаю 0000000001|0000000011|000000000100
что для меня соответствует PT1 = 1, PT2 = 3, Offset = 4
.
- Могу ли я что-то отсутствует, или это опечатка в книге о том,
PT2 = 2
, когда он на самом деле должно бытьPT2 = 3?
Поскольку текст позже говорит, то MMU использует индекс PT2 для извлечения 3. Стажер - Где из базы данных «12 292 байта»? Как это происходит от виртуального адреса? Я понимаю, что это связано со смещением, но я не могу понять, как это делается. Насколько я понял, физический адрес выводится как комбинация номера кадра из второй таблицы страниц и смещения. Я вижу, что 12 292 - результат
3*4096+4 (PT2 entry * page size + offset)
. Это верно?