- •5. Процессы и потоки
- •Мультипрограммирование
- •Мультипрограммирование в системах пакетной обработки
- •Мультипрограммирование в системах разделения времени
- •Мультипрограммирование в системах реального времени
- •Мультипроцессорная обработка
- •Планирование процессов и потоков
- •Понятие «процесс» и «поток»
- •Создание процессов и потоков
- •Планирование и диспетчеризация потоков
- •Состояния потока
- •Вытесняющие и невытесняющие алгоритмы планирования
- •Алгоритмы планирования, основанные на квантовании
- •Алгоритмы планирования, основанные на приоритетах
- •Планирование с абсолютными и относительными приоритетами
- •Смешанные алгоритмы планирования
- •Планирование в системах реального времени
- •Моменты перепланировки
- •6. Мультипрограммирование на основе прерываний Назначение и типы прерываний
- •Механизм прерываний
- •Программные прерывания
- •Диспетчеризация и приоритезация прерываний в ос
- •Функционирование централизованного диспетчера прерываний на примере Windows nt
- •Системные вызовы
- •7. Процессы в ос unix Введение
- •Компоненты процесса
- •Атрибуты процесса Идентификатор процесса (pid)
- •Идентификатор родительского процесса (ррid)
- •Идентификатор пользователя (uid) и эффективный идентификатор пользователя (euid)
- •Идентификатор группы (gid) и эффективный идентификатор группы (egid)
- •Приоритет и значение nice
- •Жизненный цикл процесса
- •Сигналы
- •Дамп памяти
- •Список процессов: ps
- •Версия bsd
- •Версия System V
- •Установка приоритета процесса при запуске: nice
- •Изменение приоритета запущенного процесса: renice
- •Отправка сигнала: kill
- •Отправка сигналов командам: killall
- •Прекращение процесса
- •Временная приостановка процесса
- •Список заданий: jobs
- •Фоновый режим работы
- •Перевод задания на передний план: fg
- •Отправка задания на задний план: bg
- •Список литературы
- •ОГлавление
Сигналы
Как правило, процессы работают сами по себе. Однако иногда появляется необходимость воздействовать на них со стороны. Обычно это происходит в следующих случаях:
-
прекращение выполнения программы в результате ошибочного действия, неправильного исходного параметра или если программа больше не нужна;
-
временная остановка процесса;
-
получение информации для системной программы, например, об изменении важного файла;
-
пересылка сообщения между двумя процессами, один из которых сообщает второму, что он закончил выполнение какого-то определенного задания.
Для этого предусмотрены сигналы. Однако под ними не следует понимать нечто вроде зеленого или красного сигнала светофора, Они, скорее всего, напоминают условное «перестукивание», с помощью которого процесс узнает, что произошло нечто важное. При этом процесс узнает, что произошло нечто важное. При этом процесс может реагировать трояко:
-
игнорировать сигнал. Все работает так, как будто ничего не случилось;
-
принять сигнал. Процесс запускает программу обработки сигнала, которая, является причиной всех последующих действий. Нормальный ход работы не прерывается;
-
интерпретировать сигнал согласно процедурам, установленным по умолчанию. Чаще всего процесс должен прекратить работу. В большинстве случаев это означает немедленное его завершение, но сигналы STOP, TSTP, ТТIN, ТТОU только задерживают его работу, которая может быть продолжена сигналом СОNT.
Перед появлением сигнала процесс должен определить, как он будет на него реагировать. В противном случае будут выполняться действия, предусмотренные предварительными системными установками по умолчанию (если, конечно, процесс не получил каких-либо других настроек от родительской программы). Некоторые сигналы (такие как KILL) не могут быть игнорированы или приняты. KILL немедленно вызывает прекращение процесса.
В табл. 7.2 дан перечень важнейших сигналов и их значений. Имена сигналов указаны без обычного добавления SIG. Как правило, вместо INT используется обозначение SIGINT. Номера сигналов даны только в качестве дополнительной информации, так как, к счастью, они одинаковы для большинства систем. Противоречий между номерами и именами сигналов нет.
Важнейшие сигналы
Таблица 7.2
Название |
Номер |
Значение |
HUP |
1 |
Hangup. Этот сигнал получает программа, которая запускается сразу же при входе пользователя в систему, если пользователь выходит из системы или прерывается связь с терминалом. Эта программа отправляет сигнал HUP всем процессам, которые находятся под ее контролем и затем сами закрываются. |
INT |
2 |
Interrupt. Этот сигнал чаще всего генерируется комбинацией клавиш Ctrl+C или Del. В случае выполнения простых команд вызывает прекращение выполнения, в интерактивных программах прекращение активного процесса. |
QUIT |
3 |
Quit. Как правило, сильнее сигнала Interrupt. Обычно вызывается сочетанием клавиш Ctrl+\. |
ILL |
4 |
Illegal Instruction. Центральный процессор столкнулся с незнакомой командой. Сигнал отправляется программе, в которой возникла проблема. В большинстве случаев это означает, что допущена программная ошибка. |
KILL |
9 |
KILL. Всегда убивает процесс. |
Окончание табл. 7.2
SEGV |
11 |
SegmentationViolation. Появляется в результате доступа к недозволенной области памяти. Обычно означает ошибку программы или отсутствие свободной памяти. |
TERM |
15 |
Software Termination. Требование закончить процесс. |
CHILD |
17 |
Child. Образуется в случае завершения дочернего процесса, после чего отсылается родительскому. Последующие действия зависят от реакции родительского процесса. |
CONT |
18 |
Continue. Повторный запуск остановленной программы. |
STOP |
19 |
Stop. Останов программы. |
TSTP |
20 |
Terminal Stop. Останов программы, обычно вырабатывается клавишами Ctrl+Z. |
TTIN |
21 |
Terminal Interrupt. Этот сигнал получают процессы, работающие в фоновом режиме, но все еще пытающиеся прочитать данные с терминала. |
При написании программ на С к началу имени сигнала в таблице добавляется SIG.
Существует множество способов использования сигналов. Они могут посылаться одним процессом в другой для обеспечения связи между процессами, управляющим терминалом процесса для предоставления пользователю возможности прерывания или приостановки этого процесса ядром в очень многих ситуациях (многие сигналы означают ту или иную ошибку выполнения) и даже процессом самому себе.
В качестве простого примера использования сигналов давайте посмотрим, что произойдет, если нажать клавиши Ctrl+C. Драйвер терминала обработает введенную комбинацию клавиш и выдаст в группу активных процессов сигнал прерывания INT. Поскольку в подпрограмме обработки сигнала INT по умолчанию задано завершение, выполнение большинства программ при получении этого сигнала завершается.