Как xv6 знает, где находится последний элемент p->pgdir?

В xv6 каждый процесс имеет структуру с именем proc, в которой хранится состояние процесса. у него есть поле с именем pgdir, которое указывает на каталог его страницы. Мой вопрос заключается в следующем: он должен хранить индекс последнего элемента в своем каталоге страниц. Я имею в виду, если он хочет выделить новую таблицу страниц, он должен поместить ссылку на нее в pgdir. Мой вопрос: откуда он знает, где находится следующий элемент каталога страниц?

Это изображение объясняет мой вопрос больше:

Спасибо за вашу помощь.

2 ответа

Я спросил у некоторых людей в реальном мире, и я понял, что p->sz хранит индекс первого свободного элемента в каталоге страницы процесса.

Процесс всегда отслеживает, сколько байтов использует его программа с полем sz в структуре proc. Обладая этими знаниями, легко рассчитать, какая последняя запись таблицы страниц и какая запись каталога страниц были использованы.

Например, если в настоящий момент программа использует 8000 байтов (то есть sz = 8000): в XV6 каждая страница памяти составляет 4096 байтов (PGSIZE), и в каждой записи каталога страниц содержится 1024 записи таблицы страниц. поэтому каждая запись каталога страниц может указывать на 4096 * 1024 байта (4 МБ), а каждая запись таблицы страниц может указывать на 4096 байт (4 КБ).

Это означает, что запись каталога последней страницы процесса: sz / 4 МБ (округлено в меньшую сторону). и что таблица последней страницы процесса в каталоге последних страниц имеет размер: sz / 4 КБ (округлено в меньшую сторону). В примере sz = 8000 это означает: запись каталога страниц 0 (первая) и запись таблицы страниц 1 (вторая).

Другие вопросы по тегам