141
Выполнение лабораторной работы №9 опирается на теоретический материал и примеры, изложенные в первом разделе данного методического руководства. Поэтому, приступая к выполнению работы, следует сначала подробно изучить подразделы 3.1 — 3.3 данного пособия, особо обратив внимание на подраздел 3.3, где дан перечень основных определений атрибутов процессов.
Хотя основная тематика лабораторной работы посвящена обработке сигналов, последовательность выполнения заданий разделена на три группы, представленные в соотвествующих пунктах данного подраздела:
•подраздел 3.8.1 — системные вызовы общей группы, включающие «Функции управления атрибутами процессов» и «Функции порождения и завершения процессов»;
•подраздел 3.8.2 — управление потоками процессов, относящийся к группе системных вызовов «Управление потоками и сигналами»;
•подраздел 3.8.3 — обработка сигалов ОС, составляющий основу группы системных вызовов «Управление потоками и сигналами».
Чтобы, во время выполнения работы, были доступны проекты примеров среды разработки Eclipse C (PDP), следует:
•выйти из среды разработки Eclipse, если она еще запущена;
•правой кнопкой мыши активировать меню значка EclipseC, расположенного на рабочем столе и выбрать пункт меню «Свойства...»;
•отредактировать команду запуска, указав рабочую область среды Eclipse в директорию /home/upk/lab9, как показано на рисунке 3.9.
•закрыть окно «Eclipse — Свойства» и снова запустить среду разработки, которая должна содержать проекты лабораторной работы №9.
Рисунок 3.9 — Настройка среды разработки Eclipse С (PDP)
142
Описание системных вызовов общей группы приведено в подразделах 3.4 и 3.5 данного руководства.
Сначала, необходимо обратиться к подразделу 3.4 и изучить перечень системных вызовов, представленных в таблице 3.2. Затем, следует приступить к выполнению задания 3.1.
Задание 3.1
Запустить среду разработки Eclipse С и убедиться, что доступны проекты lab9.1 — lab9.8.
В процессе изучения системных вызовов подраздела 3.4, изучить и запустить на выполнение проекты lab9.1 и lab9.2, которым соответствуют примеры программ, представленных на листингх 3.1 и 3.2.
Отразить результаты работы в личном отчете.
Завершив выполнение задания 3.8.1, следует перейти к изучению подраздела 3.5 и выполнению задания 3.2.
Задание 3.2
В процессе изучения системных вызовов подраздела 3.5, разобраться с текстом листинга 1.3, а затем, запустить на выполнение проект lab9.3.
Продолжая изучение учебного материала подраздела 3.5:
•рассмотреть пример создания каналов процессов, изучив программу листинга 3.4 и запустив на выполнение проект lab9.4;
•рассмотреть пример программы, имитирующей создание каналов интепретатором shell, изучив программу листинга 3.5 и запустив на выполнение проект
lab9.5;
Отразить результаты работы в личном отчете.
Управление потоками процессов занимает особое место в нашей теме, потому что реализация этой идеи может сильно отличаться в разных операционных системах. Мы будем рассматривать реализацию потоков (нитей, threads) в плане реализации их по стандарту POSIX, который предлагает нам набор системных вызовов с общим обозначением pthread_*(...).
Замечание
Весь набор системных вызовов pthread_*(...) - гораздо шире, чем мы рассмотрели в данной теме. Тем не менее, он является достаточным для реализации многих приложений.
143
Задание 3.3
В процессе изучения подраздела 3.6 разобрать пример, демонстрирующий работу программы с разделяемым массивом данных.
Реализация этого алгоритма представлена текстом программы, приведеной на листинге 3.6. Следует запустить на исполнение проект lab9.6 и исследовать работу этой программы.
Результаты исследования следует отразить в личном отчете.
Замечание
Для правильной компиляции программы проекта необходимо использовать дополнительный ключ: -lthread
Для этого, необходимо мышкой выделить имя проекта и, правой кнопкой, вызвать меню выбора, в котором активировать пункт «Properties».
Затем, установить нужный параметр, как показано на рисунке 3.10.
Рисунок 3.10 - Установка дополнительного ключа проекта
144
Вопросы обработки сигналов ОС достаточно сложны и многообразны. Они, как правило, могут сильно отличаться для различных операционных систем.
В данной теме нами рассмотрен лишь классический способ обработки сигналов, который также соответствует стандарту POSIX.
Задание 3.4
В процессе изучения подраздела 3.6 следует разобраться с двумя примерами программ, представленных листингами 3.7 и 3.8. Им соответствуют проекты примеров lab9.7 и lab9.8.
Следует провести исследование работы указанных программ. Отразить результаты их исследования в личном отчете.
Этим заданием мы завершаем практическое изучение базовых системных вызовов, предназначенных для взаимодействия процессов.
Последующие три темы посвящены развитию этой тематики и предполагают наличие хороших навыков студента, полученных в процессе выполнения данной лабораторной работы.
145
В предыдущей теме были комплексно рассмотрены базовые средства межпроцессного взаимодействия:
•системные вызовы fork(), exec(), wait() и exit() порождают новые процессы, запускают новые программы на выполнение и завершают работу процессов;
•неименованные каналы pipe() и потоки процессов pthread_*() обеспечивают синхронное взаимодействие;
•именованные каналы mkfifo(), сигналы и файловая система ОС обеспечивают асинхронное взаимодействие процессов.
Все перечисленные средства взаимодействия процессов имеют различную степень эффективности их применения, но имеют ряд существенных недостатков:
•требуют от программиста знания всех тонкостей реализации системных вызовов в конкретной реализации ОС, например, при обработке сигналов;
•требуют реализации в программе всего кода обработки данных, соответству-
ющих, конкретному взаимодействию процессов; например, обработка данных, передаваемых через именованные и неименованные каналы ядра ОС;
•не содержат явных средств разрешения конфликтов процессов, связанных с
«борьбой» за ресурсы ЭВМ, а также возможной взаимной блокировкой процессов.
Для устранения перечисленных недостатков был создан системный пакет IPC (Inter Process Communication), к изучению которого мы и приступаем.
Вцелом, теоретическая часть данной темы разбита на пять подразделов:
•4.1 содержит описание основной проблематики связанной с взаимодействием процессов;
•4.2 дает описание пакета IPC;
•4.3 описывает утилиты ОС, обеспечивающие поддежку пакета IPC из командной строки ОС;
•4.4 посвящен изучению базовых системных средств пакета IPC, включающих в себя идею семафоров;
•4.5 описывает задачу об обедающих философах, которая демострирует при-
мер проблемного приложения, связанного с возможностью взаимной блокировки реализуемого алгоритма.
Многие задачи взаимодействия процессов можно свести к задачам борьбы за ресурсы ЭВМ. В частности, таким ресурсом может быть память ЭВМ или, например, очередь процессов на печать.