Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Все ответы.doc
Скачиваний:
21
Добавлен:
09.09.2019
Размер:
3.79 Mб
Скачать

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

После создания процесса он начинает выполнять свою работу.

Рано или поздно процесс завершит свою работу, часе всего с помощью одного из способов:

Обычный выход (преднамеренно)

Выход по ошибке (преднамеренно)

Выход по неисправимой ошибке (преднамеренно)

Уничтожение другим процессом (преднамеренно)

В основном процессы завершаются по мере выполнения своей работы.

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

Второй причиной завершения процесса может стать неустранимая ошибка.

Интерактивные процессы, рассчитанные на работу с экраном, обычно не завершают работу при получении неверных параметров, вместо этого выводят на экран диалоговое окно и прося пользователя ввести правильные параметры.

Третьей причиной завершения процесса является ошибка, вызванная самим процессом, чаще всего связанная с ошибкой в программе.

Четвертой причиной завершения процесса может служить выполнение другим процессом системного запроса на уничтожение процесса. В UNIX такой системный запрос - kill, а соответствующая функция Win32 - TerminateProcess. В обоих случаях «киллер» должен обладать соответствующими полномочиями по отношению к «убиваемому» процессу.

29. Иерархия процессов

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

В UNIX системах заложена жесткая иерархия процессов. Каждый новый процесс созданный системным вызовом fork, является дочерним к предыдущему процессу. Дочернему процессу достаются от родительского переменные, регистры и т.п. После вызова fork, как только родительские данные скопированы, последующие изменения в одном из процессов не влияют на другой, но процессы помнят о том, кто является родительским. В таком случае в UNIX существует и прародитель всех процессов - процесс init. В Windows не существует понятия иерархии процессов. Хотя можно задать специальный маркер родительскому процессу, позволяющий контролировать дочерний процесс. Но маркер можно передать другому процессу, нарушая иерархию. В UNIX это невозможно.

30. Состояние процессов

Время жизни процесса можно теоретически разбить на несколько состояний, описывающих процесс:

1. Выполнение (или действие) (занимает процессор)

2. Готовность (процесс временно приостановлен, чтобы позволить выполняться другому процессу)

3. Ожидание (или блокировка) (процесс не может быть запущен по своим внутренним причинам, например, ожидая операции ввода/вывода)

Возможные переходы между состояниями:

1. Процесс блокируется, ожидая входных данных

2. Планировщик выбирает другой процесс

3. Планировщик выбирает этот процесс

4. Поступили входные данные

Переход 1 – происходит, когда процесс обнаруживает, что продолжение работы невозможно. Переходы 2 и 3 вызываются часть операционной системы, называемой планировщиком процессов, так что сами процессы даже не знают о существовании этих переходов. Переход 2 осуществляется, если планировщик решил, что следует предоставить процессор следующему процессу. Переход 3 происходит, когда все остальные процессы уже исчерпали свое процессорное время, и процессор снова возвращается к первому процессу. Переход 4 происходит с появлением внешнего события, ожидавшегося процессом (например, прибытие входных данных) Если в этот момент не запущен какой-либо другой процесс, то срабатывает переход 3, и процесс запускается. Иначе процессу приходится находиться в состоянии готовности, пока не освободится процессор. В результате формируется модель, которая состоит из двух уровней. Нижним ровнем является планировщик, представляющий собой небольшую программу. Эта программа обрабатывает прерывания и скрывает детали создания, запуска и остановки процессов. На верхнем уровне находится множество процессов, из которых состоит ОС.