Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТОС_2013 / ТОС_6_процессы_слайды.doc
Скачиваний:
7
Добавлен:
03.03.2016
Размер:
899.58 Кб
Скачать

Состояния процесса

Жизненный цикл процесса может быть разбит на несколько состояний. Переход процесса из одного состояния в другое происходит в зависимости от наступления тех или иных событий в системе.

На рисунке представлена диаграмма состояния процесса.

  1. Процесс выполняется в режиме задачи. При этом процессором выполняются прикладные инструкции данного процесса.

  2. Процесс выполняется в режиме ядра. При этом процессором выполняются системные инструкции ядра ОС от имени процесса.

  3. Процесс не выполняется, но готов к выполнению

  4. Процесс находится в состоянии сна, ожидая недоступного в данный момент ресурса, например завершения операции ввода-вывода.

  5. Процесс возвращается из режима ядра в режим задачи, но ядро прерывает его и производит переключение контекста для запуска более высокоприоритетного процесса.

  6. Процесс только что создан вызовом fork и находится в переходном состоянии: он существует, но не готов к запуску и не находится в состоянии сна.

  7. Процесс выполнил системный вызов exit() и перешел в состояние зомби. Как такового процесса не существует, но остаются записи. Это состояние является конечным в жизненном цикле процесса.

Не все процессы проходят через вышеописанные состояния.

Процесс начинает свой жизненный путь с состояния 6, когда родительский процесс выполняет системный вызов fork, после создания процесса он переходит в состояние 3 готовности к запуску, ожидая своей очереди на выполнение. Когда планировщик выбирает процесс из очереди готовых процессов, он переходит в состояние 1 и выполняется в режиме задачи.

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

Когда ресурс становится доступным ядро пробуждает процесс, используя функцию wakeup(), и помещает его в очередь на выполнение, и процесс переходит в состояние «готов к запуску».

Процесс состоит из адресного пространства и набора структур данных, содержащихся внутри ядра.

Адресное пространство представляет собой совокупность страниц памяти, которые ядро выделило для выполнения процесса.

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

В структурах данных ядра хранится различная информация о каждом процессе.К наиболее важным сведениям относятся:

  • Таблица распределения памяти процесса;

  • Текущий статус процесса;

  • Приоритет выполнения процесса;

  • Информация о ресурсах, которые использует процесс;

  • Владелец процесса.

Сигналы

Сигналы являются способом передачи от одного процесса другому или от ядра ОС ому-либо процессу уведомления о возникновении определенного события.

Сигналы можно рассматривать как простейшую форму межпроцессного взаимодействия. В то же время сигналы больше напоминают программные прерывания, — средство, с помощью которого нормальное выполнение процесса может быть прервано.

Например, если процесс производит деление на 0, ядро посылает ему сигнал sigfpe, а при нажатии клавиш прерывания, обычно <Det> или* <Ctrl>+<C>, текущему процессу посылается сигнал sigint.

Рис. 1.6. Типичное "дерево" процессов в UNIX

Для отправления сигнала служит команда kill(l):

kill sig_no pid

где sig_no — номер или символическое название сигнала, a pid — иден­тификатор процесса, которому посылается сигнал. Администратор систе­мы может посылать сигналы любым процессам, обычный же пользователь может посылать сигналы только процессам, владельцем которых он явля­ется (реальный и эффективный идентификаторы процесса должны совпа­дать с идентификатором пользователя9).

Например, чтобы послать процес­су, который вы только что запустили в фоновом режиме, сигнал заверше­ния выполнения SIGTERM, можно воспользоваться командой:

5 long_program & Запустим программу в фоновом режиме

5 kill $ i По умолчанию команда kill(1) посылает сигнал SIGTERM; переменная $! содержит PID последнего процесса, запу­щенного в фоновом режиме

При получении сигнала процесс имеет три варианта действий для выбора:

  1. Он может игнорировать сигнал.

Не следует игнорировать сигналы, вы­званные аппаратной частью, например, при делении на 0

  1. Процесс может потребовать действия по умолчанию.

обычно это сводится к завершению выполнения процесса

  1. процесс может перехватить сигнал и самостоятельно обработать его.

Например, перехват сигнала SIGINT позволит процессу удалить созданные им временные файлы, короче, достойно подготовиться к "смерти". Следует иметь в виду, что сигналы SIGKILL и sigstop нельзя ни перехватить, ни игнорировать.

По умолчанию команда kill(l) посылает сигнал с номером 15 — sigterm10, действие по умолчанию для которого — завершение выполнения процесса, получившего сигнал.

Иногда процесс продолжает существовать и после отправления сигнала sigterm. В этом случае можно применить более жесткое средство — отослать процессу сигнал SIGKILL с номером (9), — поскольку этот сигнал нельзя ни перехватить, ни игнорировать .

$ kill -9 pid I

возможны ситуации, когда процесс не исчезает и в этом случае! Это может произойти для следующих процессов:

  • Процессы-зомби. Фактически процесса как такового не существует, осталась лишь запись в системной таблице процессов, поэтому уда­лить его можно только перезапуском ОС

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

  • Процессы, ожидающие недоступные ресурсы NFS (Network File System), например, записывающие данные в файл файловой системы удаленного компьютера, отключившегося от сети. Эту ситуацию можно преодолеть, послав процессу сигнал SIGINT или SIGQUIT.

  • Процессы, ожидающие завершения операции с устройством, напри­мер, перемотки магнитной ленты.

Текущий контроль процессов: команда ps

ps - выдача информации о состоянии процессов

STAT – текущий статус процесса:

R – выполнимый;

D – кратковременное ожидание;

S – ожидающий > 20 c;

I – ожидающий <20 c;

Z – зомби;

T – остановленный;

L – блокирован;

S – процесс лидер сеанса.

Улучшенный текущий контроль процессов: команда top.

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

Изменение приоритета выполнения: команды nice и renice.

nice - выполнение команды с пониженным приоритетом

СИНТАКСИС

nice [-коэффициент_понижения] команда [аргумент ...]

ОПИСАНИЕ

Команда nice выполняет команду с пониженным приоритетом. Коэффициент_понижения задается в диапазоне 1-19 (по умолчанию равен 10).

Суперпользователь может выполнять команды с повышенным приоритетом, для этого нужно указать отрицательный коэффициент_понижения, например --10.