Объекты используются для хранения информации либо о файле, либо об области анонимной памяти. Отображен ли файл единственным процессом в системе или множеством процессов в системе, он всегда будет представлен одним объектом. Таким образом, объект отвечает за поддержание всех состояний всех тех страниц файла, которые являются резидентными. Все ссылки на этот файл будут описываться структурами vm_map_entry, которые ссылаются на один и тот же объект. Объект никогда не хранит одну и ту же страницу файла более чем в одной странице физической памяти, поэтому все отображения получат непротиворечивое представление файла. Объект хранит следующую информацию.
* Список страниц для этого объекта, которые присутствуют в настоящий момент в оперативной памяти; страница может быть отображена на множество адресных пространств, но она всегда заявляется ровно одним объектом.
* Подсчет числа структур vmmapentry или других объектов, которые ссылаются на объект.
* Размер файла или анонимной области, описываемой объектом.
* Число резидентных в памяти страниц, удерживаемых объектом.
* Указатель на теневые объекты (описаны в разделе 5.5).
* Тип пейджера для объекта; пейджер отвечает за предоставление данных для заполнения страницы и за предоставление места для хранения страницы, когда она была модифицирована (пейджеры рассматриваются в разделе 5.10).
В системе имеются три типа объектов.
* Именованные объекты представляют файлы; они могут также представлять аппаратные устройства, которые могут предоставлять отображаемую память, такие, как буферы кадров.
* Анонимные объекты представляют области памяти, которые при первом использовании заполняются нулями; когда они больше не нужны, от них отказываются.
* Теневые объекты содержат индивидуальные копии модифицированных страниц; когда на них больше не ссылаются, от них отказываются.
Эти объекты часто называют в исходном коде «внутренними» объектами. Тип объекта определяется типом пейджера, который этот объект использует для завершения запросов отказов страниц.
Именованный объект использует либо пейджер устройства, если он отображает аппаратное устройство, либо пейджер vnode, если он поддерживается файлом в файловой системе. Пейджер устройства обслуживает отказ страницы, возвращая соответствующий адрес для отображаемого устройства. Поскольку память устройства обособлена от основной памяти на машине, она никогда не будет выбрана демоном выгрузки страниц. Таким образом, пейджеру устройства никогда не приходится обрабатывать запрос сброса страницы.
Пейджер vnode предоставляет интерфейс для объектов, которые представляют файлы в файловой системе. Пейджер vnode отслеживает ссылку на vnode, которая представляет отображаемый в объект файл. Пейджер vnode обслуживает запрос загрузки страницы, осуществляя чтение с vnode; запрос сброса страницы он обслуживает, осуществляя запись в vnode. Таким образом, файл сам сохраняет модифицированные страницы. В случаях, когда непосредственно модифицировать файл неуместно, как в случае исполняемого файла, которому не нужно модифицировать свои страницы инициализированных данных, ядро должно вставить между vmjnapentry и объектом, представляющим файл, анонимный теневой объект; см. раздел 5.5.
Анонимные объекты используют пейджер подкачки. Анонимный объект обслуживает запросы загрузки страницы, получая страницу памяти из списка свободных страниц и обнуляя эту страницу. Когда для страницы в первый раз делается запрос выгрузки из памяти, пейджер подкачки отвечает за нахождение неиспользующейся страницы в области подкачки, запись содержимого страницы в это пространство и запись информации о том, где эта страница сохранена. Если запрос загрузки страницы поступает для страницы, которая была ранее выгружена, пейджер подкачки отвечает за нахождение места, где сохранена эта страница, и считывание ее содержимого обратно в свободную страницу в памяти. Последующий запрос выгрузки для этой страницы вызовет ее запись в ранее выделенное место.
Теневые объекты также используют пейджер подкачки. Они работают так же, как анонимные объекты, за тем исключением, что пейджер подкачки предоставляет им начальные страницы, копируя существующие страницы в ответ на отказы копирования при записи, вместо заполненных нулями страниц.
Дальнейшие подробности по пейджерам приведены в разделе 5.10.