Friday, May 18th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Управление памятью Завершение процесса

Завершение процесса

Завершающим изменением состояния процесса, которое имеет отношение к работе системы виртуальной памяти, является exit; этот системный вызов завершает процесс. Та часть exit, которая здесь обсуждается, является освобождением ресурсов виртуальной памяти процесса. Есть два набора ресурсов виртуальной памяти, которые нужно освободить.

Пользовательская часть адресного пространства, как памяти, так и пространства подкачки. Структура пользователя и стек ядра.

Первый набор ресурсов освобождается в exit. Второй набор ресурсов освобождается в wait. Освобождение второго набора ресурсов откладывается, поскольку стек ядра должен использоваться до тех пор, пока процесс не освободит процессор в последний раз.

Первый шаг - освобождение адресного пространства пользователя - идентичен шагу, который происходит во время exec для освобождения старого адресного пространства. Операция освобождения переходит от элемента к элементу через список структур vm_map_entiy, связанных с адресным пространством. Первым шагом в освобождении элемента является прохождение по списку его теневых элементов. Если элемент является последней ссылкой на теневой объект, любая память или пространство подкачки, связанные с объектом, могут быть освобождены. Кроме того, вызываются машинно-зависимые процедуры для снятия отображения и освобождения любых таблиц или структур данных, которые связаны с объектом. Если на теневой объект по-прежнему есть ссылки со стороны других структур vm_map_entry, его ресурсы не могут быть освобождены, но ядру все равно нужно вызывать машинно-зависимые процедуры для снятия отображения и освобождения ресурсов, связанных с отображением текущего процесса. Наконец, если нижележащий объект, на который ссылается vmjnapentry, теряет свою последнюю ссылку, тогда этот объект является кандидатом для удаления. Если это объект, у которого никогда не будет ни единого шанса на повторное использование в будущем (такой, как анонимный объект, связанный со стеком, или область неинициализированных данных), тогда его ресурсы освобождаются, как если бы он был теневым объектом. Однако, если объект связан с vnode (например, он отображает файл, такой, как исполняемый), объект будет сохраняться до тех пор, пока vnode не будет использован повторно для другой цели. Пока vnode не использован повторно, объект и связанные с ним страницы будут доступны для повторного использования вновь выполняющимися процессами или процессами, отображающимися в файл.

Когда все ресурсы освобождены, завершающийся процесс финиширует, отсоединяя себя от своей группы процессов и уведомляя своего родителя, что он закончил. Теперь процесс стал процессом зомби - процессом без ресурсов. Его родитель получает статус завершения посредством вызова wait. Поскольку структура процесса, структура пользователя и стек ядра выделяются с использованием зонального распределителя, они обычно будут сохранены для будущего использования другим процессом, а не разрушены с возвращением их страниц памяти. Таким образом, системе виртуальной памяти нечего делать, когда вызывается wait: все ресурсы виртуальной памяти процесса удалены, когда завершен exit. В wait система просто возвращает вызывающему статус процесса, возвращает структуру процесса, структуру пользователя и стек ядра обратно в зональный распределитель и освобождает пространство, в котором хранилась информация об использовании ресурсов.


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

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

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