Я никогда не занимался занятиями ОС, поэтому я всегда хотел сделать одно из этих глупых упражнений. Вот оно. Я собираюсь предположить, что это работает примерно как 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-страницами невероятно глупо.
И я просто растрачу полчаса на этом :)!
Я тоже считаю, что данный ответ (4608 bytes) на этот вопрос неверен. Я действительно хотел знать правильный ответ на этот вопрос. Или я использовал правильный метод для решения этой конкретной проблемы. Что касается размера записи PT, которую я выбрал (2 байта), это абсолютно предположение сделать вычисления немного проще. –
Аналогичная проблема [здесь] (http://www.cs.utexas.edu/~lorenzo/corsi/cs372h/07S/hw/3sol.html) –