Материал: 6262

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

166

4.6 Лабораторная работа по теме №10

Выполнение лабораторной работы №10 опирается на теоретический материал и примеры, изложенные в данном разделе данного методического руководства, поэтому, приступая к выполнению работы, следует сначала подробно изучить подразделы 4.1 и 4.2, где дано описание проблематики синхронизации процессов, которые выполняют свою работу асинхронно.

Изучив основную идею и назначение системного пакета System V IPC, следует познакомиться с набором утилит, которые поддерживат этот пакет. Для этого, следует изучить подраздел 4.3 и, например, запустить утилиту ipcs без параметров, которая, как показано на рисунке 4.3, выведет информацию о семафорах, разделяемых сегментах памяти и очередях сообщений, используемых в данный момент в среде ОС.

Рисунок 4.3 — Вывод информации утилитой ipcs без параметров

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

167

посвящена изучению семафоров, где вся последовательность выполнения заданий разделена на две группы:

подраздел 4.6.1 — синхронизация двух процессов, позволяет закрепить основные навыки работы с системными вызовами семафоров;

подраздел 4.6.2 — задача «Обедающие философы», демострирует реальный

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

Чтобы во время выполнения работы были доступны проекты примеров среды разработки Eclipse, следует:

выйти из среды разработки Eclipse, если она - запущена;

правой кнопкой мыши активировать меню значка EclipseC, расположенного на рабочем столе и выбрать пункт меню «Свойства...»;

отредактировать команду запуска, указав рабочую область среды Eclipse в директорию /home/upk/lab10, как показано на рисунке 4.4.

закрыть окно «Eclipse — Свойства» и снова запустить среду разработки, которая должна содержать проекты лабораторной работы №10.

Рисунок 4.4 — Настройка среды разработки Eclipse С

168

4.6.1 Синхронизация двух процессов

Системные вызовы для работы с семаформами описаны в подразделе 4.4 данного руководства.

Следует изучить учебный материал этого подраздела и выполнить следующее задание.

Задание 4.1

Запустить среду разработки EclipseС, с настройками, указанными ранее, а затем разобраться с примерами программ, реализованными в виде двух проектов: lab10.1

и lab10.2.

Провести исследование, посредством запуска прогамм этих проектов, обратив внимание на разные результаты взаимодествия, при разной последовательности запуска этих программ.

Отразить содержание проделанной работы в личном отчете.

4.6.2 Задача «Обедающие философы»

Задача «Обедающие философы» является классическим примером взаимодействия процессов, которое может привести к их взаимной блокировке. Поэтому, решение данной задачи подробно изложено в подразделе 4.5 данного рукововдства.

Задание 4.2

Запустить среду разработки EclipseС и, в процессе изучения подраздела 4.5, выполнить данное задание, воспользовавшись модержимым проектов lab10.3 и lab10.4.

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

Отразить содержание проделанной работы в личном отчете.

169

5 Тема 11. Эффективное взаиодействие процессов

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

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

В общем случае, любое взаимодействие обеспечивается передачей между процессами некоторого количества структурированных данных, которое можно реализовать через файловую систему ОС. Но такой подход, во многих случаях, является неэффективным, поскольку требует значительных затрат времени на пере-мещение данных на внешние носители ЭВМ и обратно.

Интсрументальные средства пакета IPC предоставляют программисту два варианта эффективной реализации асинхронного взаимодействия многих процессов:

разделяемая память;

очереди сообщений.

Учебный материал данной темы и посвящен изучению этих средств пакета IPC. Весь изложенный ниже учебный материал разделен на четыре части:

подраздел 5.1 - раскрывает идейный аспект изучаемых средств;

подраздел 5.2 - посвящен описанию системных вызовов, обеспечивающих работу с разделяемой памятью;

подраздел 5.3 - демонстрирует решение типовой проблемы синхронизации, известной как «Задача о читателях и писателях»;

подраздел 5.4 - посвящен описанию системных вызовов, обеспечивающих работу с очередями сообщений.

5.1 Прикладные средства пакета IPC

Безусловно, ПО ЭВМ предназначено для решения прикладных задач. Разрабатывая и реализовывая алгоритм решения конкретной задачи, прикладной программист стремится сделать ее наиболее надежной, привлекательной и быстродействующей. На этом пути он, естественным образом, стремится использовать наиболее эффективные системные средства ОС, которые бы помогли ему достичь желаемой цели.

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

Тем не менее, как мы убедились ранее, системные вызовы требуют излишней

170

детализации приложения, например, при взаимодействии процессов через полудуплексные каналы или детального знания работы ядра ОС, например, при использовании сигналов. Поэтому, чтобы обеспечить эффективную разработку приложений, особенно в плане взаимодействия асинхронно выполняющихся процессов, был разработан пакет System V IPC, включающий единые средства идентификации (адресации), а также универсальное средство синхронизации, поддерживающее функции семафоров, первоначально разработанные Дейкстрой.

Дополнительно, чтобы освободить программиста от рутинной работы, связанной с «изобретением» индивидуальных средств передачи сообщений, а также для создания инструмента работы с данными, который бы не уступал по простоте использования модели потоков процессов (нитей, threads), были разработаны средства:

разделяемой памяти и очередей сообщений.

Разделяемая память информационный объект данных, создаваемый и хранящийся в ядре ОС, который процесс может:

создать или удалить;

подключить к своему пространству данных или отсоедениться от него;

работать с ним как с собственной структурой данных.

Очередь сообщений — универсальный «механизм» временного хранения в ядре ОС последовательности типизированных данных, которые процессы могут помещать и извлекать для своих нужд.

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

набор прикладных средств системного пакета System V IPC.

5.2Разделяемые сегменты памяти

Встандарте POSIX-2001 разделяемый объект памяти определяется как объект, представляющий собой память ЭВМ, который может быть параллельно отображен в адресное пространство более чем одного процесса.

Таким образом, процессы могут иметь общие области виртуальной памяти и

разделять содержащиеся в них данные.

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

Такой сегмент продолжает существовать, пока один из процессов не удалит его или ядро ОС не будет перезапущено.

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

Источник: https://studfile.net/preview/16438530/