3.6. Напишите программу, которая работает по следующему сценарию:
1) вызвать функцию procinfo()
2) породить новый процесс и в нем запустить программу procinfo
3) ждать завершения процесса-потомка с помощью вызова wait()
4) породить для запуска procinfo() новый поток выполнения
5) ждать завершения порожденного потока
6) завершить работу.
4. Содержание отчета
4.1. Синтаксис и краткое описание изученных системных вызовов.
4.2. Исходные тексты и результаты выполнения программ п. 3.2 - 3.6 с комментариями.
5. Конторльные вопросы
Лабораторная работа N8
Интерфейс прикладного программирования ОС UNIX:
Сигналы и управление процессами
1. Цель работы
Изучение программного интерфейса сигналов а также механизмов посылки, получения и обработки сигналов процессами.
2. Основные положения
Сигналы в ОС UNIX являются средством оповещения процесса о внешних или внутренних по отношению к процессу событиях. Собственно посылка сигнала осуществляется ядром ОС путем установки соответствующего сигналу бита в специальной переменной контекста процесса. Процесс обрабатывает полученные сигналы при переходе из режима ядра в режим задачи. Сигналы различают по номерам, обычно их в системе не более 32. Список использующихся в системе сигналов обычно можно посмотреть в системе помощи "man" или "info". Например, сигналы ОС Linux описаны в 7-ой секции "man". Сигналы некоторых типов могут быть сгенерированы ядром ОС при возникновении соответствующих событий, кроме того, процесс может с помощью ядра послать сигнал другому процессу или группе процессов (если имеет на это право). Реакция процесса на получение конкретного сигнала задается с помощью системных вызовов signal() и sigaction(). Посылка или проверка полномочий на посылку сигнала осуществляется системным вызовом kill() (или raise() - самому себе). Во многих системах процесс может блокировать получение сигналов (кроме SIGKILL и SIGSTOP) с помощью так называемой сигнальной маски, которая устанавливается и опрашивается вызовом sigprocmask().
Пользовательский обработчик сигнала должен представлять собой функцию, получающую в качестве параметра номер пришедшего сигнала и указатель на структуру с дополнительной информацией (только если обработчик был установлен с помощью sigaction()). При получении сигнала ядро ОС может восстановить для процесса реакцию по-умолчанию на этот сигнал, кроме того, выполнение функции-обработчика может быть "прервано" таким же или другим сигналом. Такое поведение системы зависит от реализации и обычно может быть задано параметрами sigaction().
При получении большинства сигналов стандартной реакцией процесса является завершение работы, а при получении некоторых - еще и создание файла 'core' в текущем каталоге. Файл 'core' представляет собой образ процесса на момент получения сигнала и может быть передан в качестве параметра отладчику для выяснения причин возникновения сигнала. Поведение программы при перехвате таких сигналов зависит от реализации системы.
3. Порядок выполнения работы
3.1. Ознакомьтесь с синтаксом и особенностями работы перечисленных в предыдущем пункте системных вызовов API сигналов.
3.2. Выясните формат файла 'core' для используемой системы и поместите его в отчет.
3.3. Поместите в отчет имя, номер и краткое описание для сигналов управления процессами.
3.4. В соответствии с индивидуальным вариантом напишите программу, реагирующую на перехватываемые сигналы выводом на экран строки вида "Получен сигнал SIGXXX от процесса YYY". Позаботьтесь о демонстрации правильности установки реакции на сигналы в соответствии с заданием (возможно, понадобится еще одна программа).
Варианты заданий
Вариант | Сигнал № | |||||
Перехватывать | Маскировать | Восстанавливать реакцию по умолчанию при получении | Не восстанав-ливать реакцию по умолчанию при получении | Разрешить получение сигнала внутри его обработчика | Не разрешать получение сигнала внутри его обработчика | |
1 | 1,10,17 | 22 | 10 | 1,17 | 1 | 17 |
2 | 2,13,21 | 1 | 13,21 | 2 | 2,21 | 13 |
3 | 14,18,27 | 4 | 18 | 14,27 | 14,18 | 27 |
4 | 4,11,12 | 14 | 12 | 4,11 | 4,11,12 | - |
5 | 1,3,15 | 18 | - | 1,3,15 | 1 | 3,15 |
6 | 6,17,28 | 3 | 17,28 | 6 | - | 6,17,28 |
7 | 5,14,20 | 7 | 14,20 | 5 | 20 | 5,14 |
8 | 2,7,18 | 11 | 7 | 2,18 | - | 2,7,18 |
9 | 10,13,28 | 2 | 10,13 | 28 | 13,28 | 10 |
10 | 4,12,21 | 13 | 4 | 12,21 | 4,12,21 | - |
11 | 3,13,22 | 6 | 13 | 3,22 | 3,22 | 13 |
12 | 7,15,20 | 21 | - | 7,15,20 | 15 | 7,20 |
4. Содержание отчета
4.1. Синтаксис и краткое описание изученных системных вызовов.
4.2. Формат файла 'core'.
4.3. Описание сигналов, используемых для управления процессами.
4.2. Исходные тексты и программы п. 3.4 с комментариями.
5. Конторльные вопросы
Лабораторная работа N9
Интерфейс прикладного программирования ОС UNIX:
Межпроцессное взаимодействие
1. Цель работы
Изучение программного интерфейса обмена данными между процессами (IPC).
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 |


