Завершающим изменением состояния процесса, которое имеет отношение к работе системы виртуальной памяти, является exit; этот системный вызов завершает процесс. Та часть exit, которая здесь обсуждается, является освобождением ресурсов виртуальной памяти процесса. Есть два набора ресурсов виртуальной памяти, которые нужно освободить.
Пользовательская часть адресного пространства, как памяти, так и пространства подкачки. Структура пользователя и стек ядра.Первый набор ресурсов освобождается в exit. Второй набор ресурсов освобождается в wait. Освобождение второго набора ресурсов откладывается, поскольку стек ядра должен использоваться до тех пор, пока процесс не освободит процессор в последний раз.
Первый шаг - освобождение адресного пространства пользователя - идентичен шагу, который происходит во время exec для освобождения старого адресного пространства. Операция освобождения переходит от элемента к элементу через список структур vm_map_entiy, связанных с адресным пространством. Первым шагом в освобождении элемента является прохождение по списку его теневых элементов. Если элемент является последней ссылкой на теневой объект, любая память или пространство подкачки, связанные с объектом, могут быть освобождены. Кроме того, вызываются машинно-зависимые процедуры для снятия отображения и освобождения любых таблиц или структур данных, которые связаны с объектом. Если на теневой объект по-прежнему есть ссылки со стороны других структур vm_map_entry, его ресурсы не могут быть освобождены, но ядру все равно нужно вызывать машинно-зависимые процедуры для снятия отображения и освобождения ресурсов, связанных с отображением текущего процесса. Наконец, если нижележащий объект, на который ссылается vmjnapentry, теряет свою последнюю ссылку, тогда этот объект является кандидатом для удаления. Если это объект, у которого никогда не будет ни единого шанса на повторное использование в будущем (такой, как анонимный объект, связанный со стеком, или область неинициализированных данных), тогда его ресурсы освобождаются, как если бы он был теневым объектом. Однако, если объект связан с vnode (например, он отображает файл, такой, как исполняемый), объект будет сохраняться до тех пор, пока vnode не будет использован повторно для другой цели. Пока vnode не использован повторно, объект и связанные с ним страницы будут доступны для повторного использования вновь выполняющимися процессами или процессами, отображающимися в файл.
Когда все ресурсы освобождены, завершающийся процесс финиширует, отсоединяя себя от своей группы процессов и уведомляя своего родителя, что он закончил. Теперь процесс стал процессом зомби - процессом без ресурсов. Его родитель получает статус завершения посредством вызова wait. Поскольку структура процесса, структура пользователя и стек ядра выделяются с использованием зонального распределителя, они обычно будут сохранены для будущего использования другим процессом, а не разрушены с возвращением их страниц памяти. Таким образом, системе виртуальной памяти нечего делать, когда вызывается wait: все ресурсы виртуальной памяти процесса удалены, когда завершен exit. В wait система просто возвращает вызывающему статус процесса, возвращает структуру процесса, структуру пользователя и стек ядра обратно в зональный распределитель и освобождает пространство, в котором хранилась информация об использовании ресурсов.
- 13/11/2010 07:13 - Управление информацией об использовании страницы
- 11/11/2010 20:28 - Изменение для отображений атрибутов доступа и резервирования
- 09/11/2010 09:04 - Операции, определенные пейджером
- 08/11/2010 13:50 - Выделение и освобождение отображения
- 06/11/2010 08:32 - Инициализация и запуск
- 04/11/2010 18:14 - Роль модуля pmap
- 02/11/2010 21:26 - Переносимость
- 02/11/2010 12:16 - Процесс подкачки
- 01/11/2010 22:58 - Подкачка процессов
- 01/11/2010 08:04 - Изменение защиты