Как xv6 знает, где находится последний элемент p-> pgdir? - PullRequest
0 голосов
/ 12 января 2019

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

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

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

Ответы [ 2 ]

0 голосов
/ 13 января 2019

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

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

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

0 голосов
/ 12 января 2019

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

...