Friday, May 18th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Управление памятью Интерфейс пейджера

Интерфейс пейджера

Интерфейс пейджера (pager interface) предоставляет механизм, посредством которого данные перемещаются между резервным хранилищем и физической памятью. Интерфейс пейджера FreeBSD является развитием интерфейса, имеющегося в Mach 2.0 и развившегося к 4.4BSD. Интерфейс основан на страницах, все запросы данных осуществляются в размерах, кратных программным размерам страницы. В качестве дескрипторов передаются структуры vmpage, предоставляя смещение резервного хранилища и адрес физической памяти нужных данных. Этот интерфейс не следует смешивать с внешним страничным интерфейсом Mach 3.0 [Young, 1989], в котором пейджерами обычно являются пользовательские приложения вне ядра, вызываемые посредством асинхронных вызовов удаленных процедур с использованием механизма межпроцессного взаимодействия Mach. Интерфейс FreeBSD является внутренним в том смысле, что пейджеры встроены в ядро и процедуры пейджера вызываются через простые вызовы функций.

У каждого объекта виртуальной памяти есть тип пейджера, обработчик пейджера и индивидуальные данные пейджера, связанные с ним. Концептуально пейджер описывает логически непрерывный участок резервного хранилища, такого, как порция пространства подкачки или дискового файла. Тип пейджера идентифицирует пейджер, ответственный за предоставление содержимого страниц в объекте. Каждый пейджер регистрирует набор функций, которые определяют его операции. Эти наборы функций хранятся в массиве, индексируемом по типу пейджера. Когда ядру нужно выполнить операцию пейджера, оно использует тип пейджера в качестве индекса массива функций пейджера, а затем выбирает процедуру, которая ему нужна, такую, как получение или помещение страниц. Например,

Помещает count страниц, начиная со страницы vmpage, из object.

Тип пейджера определяется при создании объекта для отображения в адресное пространство процесса файла, устройства или участка анонимной памяти. Пейджер управляет объектом в течение всего времени его жизни. Когда возникает отказ страницы для виртуального адреса, отображающего определенный объект, код обработки отказа выделяет структуру vm_page и преобразует адрес, вызвавший отказ, в смещение внутри объекта. Это смещение записывается в структуру vm_page, и страница добавляется к списку страниц, кешированных объектом. Затем кадр страницы и объект передаются в нижележащую процедуру пейджера. Процедура пейджера отвечает за заполнение структуры vm_page соответствующим начальным значением для этого смещения объекта, который она представляет.

Пейджер отвечает также за сохранение содержимого грязной страницы, если система решает сбросить последнюю в резервное хранилище. Когда демон выгрузки решает, что определенная страница больше не нужна, он запрашивает у объекта, владеющего страницей, ее освобождение. Объект сначала передает страницу со связанным логическим смещением нижележащему пейджеру, чтобы сохранить для будущего использования. Пейджер отвечает за нахождение подходящего места для сохранения страницы, осуществление необходимого для сохранения ввода/вывода, а затем уведомления объекта о том, что страница была освобождена. Когда это сделано, пейджер помечает страницу как чистую таким образом, что демон выгрузки может переместить структуру vm_page в кеш или список свободных страниц для будущего использования.


Похожие:
Еще по теме:
Советуем прочитать:

Сейчас 45 гостей онлайн

Реклама на сайте: