Функции управления процессами

· signal()

#include <signal.h>.

static void sig_hndl(int signo) // обработчик

{

signal (SIGINT, sig_hndl); // восстановление диспозиции, требуется не всегда

printf(“This is new handler for SIGINT\n”); // сообщение обработчика

}

main()

{

signal(SIGINT, sig_hndl); // смена диспозиции трёх сигналов

signal(SIGUSR1, SIG_DFL);

signal(SIGUSR2, SIG_IGN);

while(1)

pause();

}

$ a.out & - можно пользоваться этим терминалом

5050 - pid порождённого процесса

$ kill SIGINT 5050

This is new handler for SIGINT

$ kill SIGUSR2 5050 - ничего не произойдет

$ kill SIGUSR1 5050 - действие по умолчанию (процесс терминируется).

Функция управления сигналами в POSIX

· sigaction(2)

Набор сигналов – sigset_t (32 разряда – 32 сигнала). Маскирование сигналов.

Реализация функции sigaction различно в различных ОС (меняется структура, которая ей управляет).

#include <signal.h>

int sigaction (int sig, const struct sigaction *act, const struct sigaction *oldact)

Поля структуры sigaction:

- void (*sa_handler) ()

- void (*sa_sigaction) (int, siginfo_t*, void*)

- sigset_t sa_mask; // маска

- int sa_flags; // флаги

Если sa_handler <> 0 или sa_sigaction <> 0, то в поле sa_mask передаётся набор сигналов, которые будут добавлены к маске перед вызовом обработчика. Маска блокирует сигналы, которые в неё добавлены. После возврата из обработчика маска восстанавливается. Обрабатываемый сигнал блокируется. Нет очередей сигналов. sa_flags модифицирует доставку сигналов.

siginfo_t – структура-комментарий о сигнале.

#include <siginfo_t.h>

struct siginfo_t{

int sig_no; // номер сигнала

int sig_errno; // номер ошибки

int sig_code; // причина отправки сигнала

};

Функции управления sigaction()

#include <signal.h>

sigemptyset(sig_set_t *set); // начальная инициализация, очистка битов

sigfillset(sig_set_t *set); // включение битов

sigaddset(sig_set_t *set, int signo); // добавить 1 сигнал

sigdelset(sig_set_t *set, int signo); // убрать 1 сигнал

sigismemberset(sig_set_t *set, int signo); // является ли сигнал в маске

Ресурсоемкость сигналов

Для отправки-доставки требуется системный вызов.

Для доставки – прерывание и его обработка.

Для этого необходимо большое число операций со стеком - копирование пользовательского стека в системную область, извлечение параметров системных вызовов, результатов работы системных вызовов и др. Вывод: затраты слишком велики по сравнению с объемом передаваемой информации.

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

#include <signal.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <unistd.h>

void (*oursignal (int signo, void (*hndlr)(int)) (int) // обработчик

{

struct sigaction act, oldact;

act.sa_handler = hndlr;

sigemptyset(&act.sa_mask);

act.sa_flags = 0;

if (signo != SIGALARM) act.sa_flags |= SA_RESTART;

if (sigaction (signo, &act, &oldact) < 0) return (SIG_ERR);

return (oldact.sa_hndlr);

}

static void sig_hndlr (int signo);

{

printf(“We are int handler\n”); // нет восстановления старой диспозиции

}

main()

{

oursignal(SIGINT, sig_hndl); // смена диспозиции трёх сигналов

oursignal(SIGUSR1, SIG_DFL);

oursignal(SIGUSR2, SIG_IGN);

while(1)

pause();

}

Сообщения в микроядерных ОС.

В микроядерных ОС средства сообщений – базовые средства IPC. Универсальны для локальных и сетевых вариантов. Нет необходимости редиректора.

POSIX <= есть в микроядерных системах.

Это средство реализовано как надстройка над родными средствами сообщений.

В СРВ есть требование точного выполнения в заданные сроки – механизм send msg – с квитированием.

Количество блокировок сильно возрастает в общем перечне состояний процесса

[send – receive – reply]

Общие затраты ресурсов на общую передачу сообщений невелики.

Количество передач сообщений огромно (всё взаимодействие посредством сообщений с квитированием).

Типы:

- send-управляемая передача сообщений

- receive-управляемая передача сообщений

В зависимости от типа меняется структура клиент-серверного приложения.

Процессы и потоки в WinNT

Основная модель функционирования – объектная. Основная часть ОС написана на языке C. Ресурсы представляются объектами (в т.ч. процессы, файлы). Процессы создаются и реализуются как объекты -> доступ посредством объектных сервисов. В адресном пространстве процесса может быть несколько потоков. Есть встроенные средства синхронизации. Для базового процесса не поддерживается наследование

Состав процесса

- исполняемая программа (код + данные)

- закрытое адресное пространство (набор адресов в виртуальной памяти)

- системные ресурсы (то, что выделяется ОС для выполнения программы)

- хотя бы один поток выполнения.

Поток внутри процесса – сущность, управляемая ОС.

Адресное пространство – все ограничения вносятся системой виртуальной памяти. Процессы получают логический образ (окружение потока + пользовательская часть).

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

Собственное АП процессов изолировано от других -> нужны средства IPC. Здесь это сделано в виде иерархии.

API защищённой подсистемы – серверы.

- упрощение базовой системы

- расширение функциональности

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

Клиент-серверная модель – защищённая подсистема определяет набор требуемых функций. Через них эти функции и вызываются. У процесса есть маркер доступа.

Таблица описателей.

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

Маркер доступа также является объектом. Создаётся и уничтожается диспетчером. Открытие описателя маркера доступа выполняется по специальным правам. Маркер содержит заголовок объекта – атрибуты (дескриптор защиты), имя процесса, каталог объектов.

Дополнительные ресурсы – базовый приоритет, процессорное сродство, набор квот на ресурсы. Могут наследоваться.

Атрибуты объекта Назначение
ID Уникальный определитель
Маркер доступа Объект, содержащий информацию о правах процесса
Базовый приоритет Базовый приоритет основного потока
Процессорное сродство Набор процессоров, на которых потоки-процессы могут исполняться по умолчанию
Размер квот Мах V резидентной/нерезидентной системной памяти – пространство в файле подкачки, например процессорное время, выделенное процессу.
Время выполнения Общее время выполнения всех потоков
Счётчик ввода/вывода Переменная, в которой сохраняется число и тип операций ввода/вывода процессов
Счётчик операций вирт. памяти Переменная, в которой сохраняется число и тип операций виртуальной памяти
Код отладки Канал коммуникации между процессами
Код завершения Причина завершения процесса

Атрибуты определяет диспетчер процессов. Атрибуты формируют ограничения на потоки процессов. Приоритеты потоков регулируются ядром NT.

Общее у потока и процесса: АП, маркер доступа, базовый приоритет, описатель объекта.

Для потока-объекта есть свои атрибуты.

Атрибуты объекта Назначение
Клиентский ID Уникальный определитель потока
Контекст потока Набор значений регистров и другие непосредственные данные, определяющие состояние потока
Динамический приоритет Приоритет на данное время
Базовый приоритет Нижний предел приоритета
Процессорное сродство потока Набор процессоров, на которых может выполняться данный поток
Время выполнения потока Общее время выполнения потока в режиме ядра и в режиме задачи
Статус оповещения Наличие асинхронного вызова (процедура APC)
Счётчик приостановок Количество остановок выполнения потока без возобновления
Маркер имперсонации (SUID) Временный маркер доступа от имени другого потока
Код отладки Канал коммуникации
Код завершения Причина завершения потока

Приоритеты 16-31 – приоритеты РВ (нет связи с СРВ) – событийное реагирование.

Наши рекомендации