2015-01-11 6 views
1

В 32-битной машине мы подразделяем виртуальный адрес на 4 сегмента следующим образом: 8-разрядный 8-битный 6-разрядный 10-бит Мы используем трехстраничную страницу таблицы , так что первые 8 бит предназначены для первого уровня и так далее. В следующих вопросах размеры указаны в байтах. Каков размер таблиц страниц для процесса с 256 КБ памяти, начиная с адреса 0? Предположим, что каждая запись в таблице страниц составляет 2 байта.вычисление размера таблицы страниц с тремя уровнями

Мой ответ выходит быть: - 1 вход для таблицы страниц первого уровня (1 * 2) + 2^4 записи на второй странице уровня таблицы (2^4 * 2) + 2^6 записей для таблица страниц третьего уровня (2^4 * 2^6 * 2) = 2082 bytes

Но фактический ответ 4608 байт. Я не знаю, где я ошибаюсь. Пожалуйста, помогите мне?

ответ

0

Я никогда не занимался занятиями ОС, поэтому я всегда хотел сделать одно из этих глупых упражнений. Вот оно. Я собираюсь предположить, что это работает примерно как x86.

страница 2^10 = 1024 В.

Ваша задача имеет 256KiB = 256 страниц памяти.

Вкладка таблицы страниц может отображать 2^6 = 64 страницы. Поэтому нам нужны 256/64 = 4 полных страницы.

Мы можем поместиться в четыре страницы таблицы в каталоге dir (мы можем поместиться 256), и мы можем поместить запись dir страницы в таблицу-указатель-указатель (я надеюсь).

Таким образом, нам нужны 4 полных СТ, PD и PDPT, это 4 * 128 + 256 + 256 = 1024 байта, при условии, что вы можете повторно использовать часть страниц, которые не используются полностью, и что вы не хотите пейджинга структуры, которые отображают мусор над заданным адресом (это bad). Упс, неправильный ответ. Weird.

Давайте посмотрим, что произойдет, если вы сохраните все страницы с выравниванием и предположите, что не можете повторно использовать потраченное впустую пространство на этих страницах. Это 4 * 1024 + 1024 + 1024 = 6144 байта. Черт, все-таки неправильный ответ.

Давайте посмотрим, есть ли даже решение, даже если оно связано со странными выравниваниями для наших пейджинговых структур. В конце концов, если вы хотите обратиться к структуре поискового вызова с 2 байтовыми записями, то ваши пейджинговые структуры должны быть в первом 65KiB, или они должны быть выровнены по 65KiB или странным сочетанием этих двух. Давайте посмотрим, является ли это странным сочетанием двух:

Теперь, если предположить, что PD и PDPT должны быть выровнены по страницам, PD и PDPT принимают 2 * 1024 = 2048 байт.

Чтобы достичь решения, таблицы страниц должны были бы принимать (4608-2048)/4 = 640 байт после выравнивания, это фиктивное выравнивание (не может быть двух), так что это просто невозможно.

Если мы выровняем PD на любой граничной границе и не выравниваем PDPT, PD и PDPT принимают 2 * (2 * 2^8) = 2 * 512 = 1024 байта. Теперь у нас есть каждая страница таблицу, требуемую для принятия (4608-1024)/4 = 896 байт. Также невозможно.

Теперь, если мы действительно хотим достичь этого решения любой ценой с учетом этих требований, вы можете иметь 4 СТ, занимающих 4 * 1024 байта, иметь 510 байт вашей страницы, выровненный по своему желанию, и иметь только одну запись в PDPT, расположенном сразу после окончания PD, это 4096 + 512 = 4608 байт, решение.Но доступ к чему-либо выше 16MiB-65KiB = 0xFF0000 будет иметь совершенно непредсказуемые результаты, в том числе повреждение случайной памяти (поэтому потенциально может привести к повреждению вашего компьютера). Но по крайней мере первые 256KiB отображаются для вашей задачи!

TL; 0: Утверждение проблемы неверно, или решение, которое вы дали, неверно. Я также хотел бы отметить, что 2B для записи структуры поискового вызова в 32-разрядном адресном пространстве с 1KiB-страницами невероятно глупо.

И я просто растрачу полчаса на этом :)!

+0

Я тоже считаю, что данный ответ (4608 bytes) на этот вопрос неверен. Я действительно хотел знать правильный ответ на этот вопрос. Или я использовал правильный метод для решения этой конкретной проблемы. Что касается размера записи PT, которую я выбрал (2 байта), это абсолютно предположение сделать вычисления немного проще. –

+0

Аналогичная проблема [здесь] (http://www.cs.utexas.edu/~lorenzo/corsi/cs372h/07S/hw/3sol.html) –

Смежные вопросы