Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ОС / 5. ОС - Управление процессами - 2

.pdf
Скачиваний:
56
Добавлен:
01.06.2015
Размер:
408.67 Кб
Скачать

21

Посылка сообщений

Асинхронная посылка (функция PostMessage): не оказывает влияния на дальнейшую работу отправителя.

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

В ранних (невытесняющих) версиях Windows функция SendMessage просто вызывала функцию обработки сообщений из программы адресата. В современных версиях используется более аккуратная схема синхронизации нитей отправителя и получателя.

Операционные системы. Управление процессами - 2

22

Обработка сообщений

Асинхронные сообщения ждут обработки в очереди сообщений нити-получателя.

Нить-получатель в цикле вызывает функцию GetMessage, которая выбирает очередное сообщение из очереди или блокирует нить, если очередь пуста.

Можно также использовать функцию PeekMessage, которая не блокирует нить.

Сообщения WM_PAINT и WM_TIMER не присутствуют в очереди, а генерируются при вызове GetMessage, если нет других сообщений в очереди и нужно перерисовать окно либо сработал таймер.

Синхронные сообщения образуют как бы «очередь внеочередников» и обрабатываются первыми при вызове GetMessage или PeekMessage.

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

Операционные системы. Управление процессами - 2

23

Процессы в UNIX / Linux

Процесс – самостоятельная сущность, не связанная жестко с выполнением конкретной программы.

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

Программу иногда рассматривают как специфический ресурс, используемый процессом.

Каждому процессу при создании присваивается числовой идентификатор (pid).

При загрузке UNIX процесс ядра (KERNEL, pid = 0) порождает процесс INIT (pid = 1). Все остальные процессы, системные и пользовательские, будут потомками INIT.

Операционные системы. Управление процессами - 2

24

Жизненный цикл процесса

Единственный способ создания процесса – вызов функции fork().

Эта функция создает точную копию вызвавшего ее процесса («клонирует» процесс-родитель).

Единственное отличие порожденного процесса от родителя – значение pid.

pid = fork();

//

Создание нового процесса

if (pid == -1)

//

Процесс не создан

{обработка ошибки создания процесса} else if (pid == 0) // Это порожденный процесс

{операторы, выполняемые процессом-потомком }

else // Это процесс-родитель

{ операторы, выполняемые процессом-родителем }

Операционные системы. Управление процессами - 2

25

Жизненный цикл процесса

После создания процесс может (но не обязан) вызвать функцию execxxx(…), указав путь к новой программе, которую он будет исполнять. При этом перестраивается заново контекст процесса.

Нормальное завершение процесса – функция exit(status). В системной таблице процессов запоминается код завершения status.

Процесс-родитель может (но не обязан) вызвать функцию pid = wait(&status); она ожидает завершения любого из потомков, возвращает его pid и читает status.

Операционные системы. Управление процессами - 2

26

Жизненный цикл процесса

Особые случаи.

Если процесс-потомок завершает свое выполнение до того, как родитель вызвал функцию wait, то завершившийся процесс переходит в состояние, которое принято называть «зомби». Фактически от процесса остается лишь запись в таблице процессов, содержащая код завершения и информацию о затраченном процессорном времени.

Если процесс-родитель завершается до того, как завершен его потомок, то «осиротевший» потомок будет «усыновлен» системным процессом INIT.

Операционные системы. Управление процессами - 2

27

Группы процессов

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

Идентификатор группы = идентификатор (pid) ее лидера.

Терминал, с которого пользователь вошел в систему, становится управляющим терминалом группы.

Любой процесс может объявить себя лидером новой группы, к которой будут относиться его потомки.

Одна из групп является текущей (foreground), остальные группы – фоновыми (background). Процессы текущей группы могут получать ввод с управляющего терминала.

Процесс – лидер группы может открепиться от управляющего терминала. Такой процесс (демон) теряет возможность вести диалог с пользователем, но зато он не будет завершаться, когда пользователь закончит сеанс работы с системой. Демоны в UNIX выполняют обычно общесистемные задачи

Операционные системы. Управление процессами - 2

28

Взаимодействие процессов: pipes

Программный канал (pipe) – средство обмена данными между процессорами, имитирующее файловый ввод/вывод.

Безымянный канал служит для обмена между родственными процессами. Функция создания канала pipe возвращает два хэндла, для записи в канал и для чтения из него.

Именованный канал позволяет двум неродственным процессам общаться, зная только имя канала. Функция mknod создает канал и записывает его имя в один из каталогов файловой системы. Канал открывается обычной функцией open.

Операционные системы. Управление процессами - 2

29

Работа с каналами

Процесс, имеющий хэндл записи в канал, записывает туда данные, как в файл.

Процесс, имеющий хэндл чтения, читает данные из канала, как из файла.

На самом деле, файла там нет, данные хранятся в системном буфере.

Если в канале нету данных, процесс-читатель блокируется до их появления.

Если процесс-писатель закрыл хэндл записи, то при попытке чтения выдается признак «конец файла».

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

С каждого конца канала может быть более одного процесса, если они владеют соответствующими хэндлами.

Операционные системы. Управление процессами - 2

30

Взаимодействие процессов: сигналы

Сигнал – уведомление процесса о некотором событии, посылаемое системой или другим процессом.

Основные характеристики сигнала – номер (тип) и адресат сигнала.

Адресатом может быть:

конкретный процесс;

группа процессов;

все процессы данного пользователя;

все процессы в системе (кроме pid = 0 и 1).

Операционные системы. Управление процессами - 2