Как определить размер адресного пространства процесса? - PullRequest
0 голосов
/ 13 мая 2019

Я готовлюсь к выпуску операционной системы, и в учебном пособии есть следующая проблема:

Задача 1

В 32-разрядной машине мы подразделяем виртуальный адрес на4 сегмента следующим образом:

| 10-bit | 8-bit | 6-bit | 8 bit |

Мы используем трехуровневую таблицу страниц, такую, что первые 10 битов относятся к первому уровню и т. Д.

  1. Каков размер страницы в такой системе?
  2. Каков размер таблицы страниц для процесса с 256 КБ памяти, начиная с адреса 0?
  3. Что такоеразмер таблицы страниц для процесса, который имеет сегмент кода 48 КБ, начинающийся с адреса 0x1000000, сегмент данных 600 КБ, начинающийся с адреса 0x80000000, и сегмент стека 64 КБ, начинающийся с адреса 0xf0000000 и растущий вверх (как в PA-RISCHP)

И здесь есть ответ:

Решение:

  1. Поле страницы имеет ширину 8 биттогда размер страницы составляет 256 байт.
  2. Используя подраздел вышетаблица страниц первого уровня указывает на 1024 таблицы страниц 2-го уровня, каждая из которых указывает на 256 таблиц 3-го уровня, каждая из которых содержит 64 страницы.Адресное пространство программы состоит из 1024 страниц, поэтому нам нужно 16 таблиц страниц третьего уровня.Поэтому нам нужно 16 записей в таблице страниц второго уровня и одна запись в таблице страниц первого уровня.Поэтому размер: 1024 записи для первой таблицы, 256 записей для таблицы страниц 2-го уровня и 16 таблиц страниц 3-го уровня, содержащих по 64 записи каждая.Предполагая, что на каждую запись приходится 2 байта, требуется 1024 * 2 + 256 * 2 (одна таблица страниц второго уровня) + 16 * 64 * 2 (16 таблиц страниц третьего уровня) = 4608 байтов.
  3. Во-первых,сегменты стека, данных и кода находятся по адресам, для которых требуется наличие активных таблиц из трех страниц в таблице страниц первого уровня.Для 64K вам нужно 256 страниц или 4 таблицы страниц третьего уровня.Для 600 КБ вам нужно 2400 страниц или 38 таблиц третьего уровня, а для 48 КБ вам нужно 192 страницы или 3 таблицы страниц третьего уровня.Предполагая 2 байта на запись, требуемое пространство составляет 1024 * 2 + 256 * 3 * 2 (3 таблицы страниц второго уровня) + 64 * (38 + 4 + 3) * 2 (38 таблиц страниц третьего уровня для сегмента данных,4 для стека и 3 для сегмента кода) = 9344 байта.

(sic)

Моя первая проблема заключается в решении для части 2, где говорится, чтоадресное пространство программы состоит из 1024 страниц.Я понятия не имею, как это определяется, и попытки решить это или найти ответы до сих пор оказались бесплодными.Есть ли какое-то уравнение, которое дало бы мне это, или я что-то упустил?

Я пытался решить это сам, но лучшее, что я могу сделать, это оценить, что 256 КБ это 2 ^ 18 байт, но я непонять взаимосвязь между использованием памяти программой и количеством страниц, которые будут в ее адресном пространстве.

Было бы также полезно, если бы кто-то мог объяснить, как я определяю размер записи страницы на основе данной информации,или это просто то, что, если не дано, должно быть принято за какое-то значение, как у них здесь?

...