Восстанавливают ли операционные системы (POSIX) ресурсы после сбоя процесса? - PullRequest
3 голосов
/ 17 июля 2011

Предположим, у нас есть процесс, который выделяет сокет, прослушивающий определенный порт, что-то делает с ним и затем ненормально завершает работу.Теперь запускается второй процесс, и он хочет выделить сокет, прослушивающий тот же порт, который ранее удерживался обработанным процессом.Доступен ли этот сокет для перераспределения?

  • Как операционная система восстанавливает ресурсы, которые не были освобождены должным образом?Отслеживает ли ОС идентификатор процесса вместе с каждым выделенным ресурсом?

  • Можно ли ожидать от этой очистки любой системы, совместимой с POSIX?

Ответы [ 2 ]

2 голосов
/ 17 июля 2011

Это зависит от операционной системы, но, как правило, ОС поддерживает структуру управления процессом, чтобы, помимо прочего, управлять своими ресурсами.Когда процесс выделяет ресурс из системы (например, открывает файл или выделяет память), детали размещения размещаются в этой структуре.Когда процесс завершается, все, что осталось в нем, очищается, но лучше очистить его по ходу работы.

1 голос
/ 17 июля 2011

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

Таким образом, у ОС есть простой способ узнать, кому какие ресурсы были выделены, и пока она отслеживает эту информацию, очистка ресурсов в случае сбоя процесса так же проста, как получение спискаресурсов, выделенных этому процессу, и снова пометить их как доступные.

...