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

TVP_Lab03

.doc
Скачиваний:
54
Добавлен:
26.05.2014
Размер:
71.17 Кб
Скачать

Лабораторная работа 3.

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

Цель работы:

  • изучить проектирование параллельных вычислительных процессов

  • изучить причины возникновения конфликтных ситуаций (гонки, тупики),

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

Порядок выполнения

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

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

  3. Построить сеть Петри для своего варианта задачи.

  4. Описать алгоритмы решения задачи.

  5. Составить программу.

  6. Сделать анализ результатов ее работы для различных входных данных.

  7. Ответить на контрольные вопросы.

Содержание отчета

  1. Титульный лист.

  2. Описание варианта.

  3. Сеть Петри для Вашего варианта задания.

  4. Описание данных задачи.

  5. Описание алгоритма.

  6. Программа.

  7. Анализ ее работы для различных тестовых данных.

  8. Ответы на контрольные вопросы.

Контрольные вопросы

  1. Какие последовательные вычислительные процессы называются параллельными и почему. Какие параллельные процессы называются независимыми, а какие - взаимодействующими?

  2. Опишите алгоритм Деккера, позволяющий разрешить проблему взаимного исключения путем использования одной только блокировки памяти?

  3. Опишите работу семафора Дейкстры. Чем обеспечивается взаимное исключение при выполнении Р- и V-примитивов?

  4. Как могут быть реализованы семафорные примитивы для мультипроцессорной системы?

  1. Что такое мьютекс?

  2. Что такое «монитор Хоара»? Приведите пример.

  3. Что такое «почтовый ящик»?

  4. Что такое «конвейер»?

  5. Чем отличаются «очереди сообщений» от «почтовых ящиков»? Пример.

  1. Приведите условия возникновения тупика? Гонок?

  2. Приведите пример графического представления сети Петри. Приведите пример теоретико-множественного описания сети Петри. Что такое маркировка сети Петри? Для чего используют сети Петри?

  3. Что представляет собой «обход тупика»? Приведите алгоритм банкира (Дейкстра).

  4. Приведите примеры алгоритмов обнаружения тупика.

Варианты заданий

Задача

Механизм синхронизации

1.

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

Вариант 1

2.

«Спящий парикмахер»

Монитор

3.

«Общая душевая»

Семафор

4.

«Медведь и пчелы»

Монитор

5.

«Курильщики»

Семафор

6.

«Писатели и читатели»

Как задача исключения

7.

«Узкий мост»

Семафор

8.

«Голодные птицы»

Монитор

9.

«Американские горки»

Семафор

10.

«Задача о молекуле воды »

Монитор

11.

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

Вариант_2

12.

«Спящий парикмахер»

Семафор

13.

«Общая душевая»

Монитор

14.

«Медведь и пчелы»

Семафор

15.

«Курильщики»

Метод передачи эстафеты

16.

«Писатели и читатели»

Условная синхронизация

17.

«Узкий мост»

Метод передачи эстафеты

18.

«Голодные птицы»

Семафор

19.

«Американские горки»

Монитор

20.

«Задача о молекуле воды »

Семафор

Текст задач:

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

Пять философов сидят возле круглого стола. Они проводят жизнь, чередуя приемы пищи и размышления. В центре стола находится большое блюдо спагетти. Спагетти длинные и запутанные, философам тяжело управляться с ними, поэтому каждый из них, чтобы съесть порцию должен пользоваться двумя вилками. К несчастью философам дали только пять вилок. Между каждой парой философов лежит одна вилка. Поэтому они договорились, что каждый из них пользуется только теми вилками, которые лежат рядом с ним (слева и справа). Задача: написать программу, моделирующую поведение философов. Программа должна избегать неудачной ситуации, когда все философы голодны. Но ни один из них не может взять обе вилки. Например, когда каждый из них держит по одной вилке и не хочет отдавать. Вариант 1: Решите данную задачу, уделив основное вниманию состоянию философов, а не вилок. Определите глобальный инвариант, разработайте крупномодульное решение, а затем мелкомодульное с семафором для синхронизации. Измените решение так, чтобы философы не могли голодать бесконечно, т.е. если философ хочет есть, то он, в конце концов, поест. Вариант 2: Решите данную задачу, используя центральный управляющий процесс. Когда философ хочет есть, он сообщает управляющему и ждет разрешения, т.е. ждет, что ему дадут обе вилки. Для синхронизации используйте семафоры. В решении не должно быть взаимных блокировок и бесконечного голодания философов.

«Неделимое оповещение»

Пусть один процесс-производитель и N процессов-потребителей совместно используют кольцевой буфер, состоящий из В ячеек. Производитель помещает в буфер сообщение, потребители извлекают их. Каждое сообщение, помещаемое производителем должно получить все N потребителей, кроме того, каждый потребитель должен получать сообщение в разное время. Например, разница в количестве полученных сообщений между быстрым и медленным потребителями может достигать В. Разработайте реализацию, используя механизм синхронизации, указанный в варианте, которая обеспечит такое взаимодействие.

«Общая душевая»

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

«Медведь и пчелы»

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

«Курильщики»

Предположим, что есть три процесса-курильщика и один процесс-посредник. Курильщик непрерывно скручивает сигареты и курит их. Чтобы скрутить сигарету необходимо три компонента: табак, бумага, спички. У одного курильщика - табак, у другого - бумага, у третьего - спички, и запасы этих компонент - бесконечны. Посредник кладет на стол по два случайных компонента. Тот процесс, у которого есть третий компонент, забирает два компонента со стола, скручивает сигарету и курит ее. Посредник дожидается, пока курильщик закончит. После этого цикл повторяется. Разработайте решение этой задачи с заданным механизмом синхронизации.

«Писатели и читатели»

Базу данных разделяют два типа процессов: читатели и писатели. Читатели выполняют транзакции, которые просматривают записи базы данных, а транзакции писателей просматривают и изменяют записи. Предполагается, что в начале база данных находится в непротиворечивом состоянии, т.е. отношения между данными имеют смысл. Каждая отдельная транзакция переводит базу данных из одного непротиворечивого состояния в другое. Для предотвращения взаимного влияния транзакций процесс-писатель должен иметь исключительный доступ к базе данных. Если к базе данных не обращается ни один из процессов-писателей, то выполнять транзакции могут одновременно сколько угодно читателей. Напишите реализацию так, чтобы у писателей было преимущество перед читателями.

«Узкий мост»

К узкому мосту приезжают машины с Севера и Юга. Машины, движущиеся в одном направлении могут переезжать мост одновременно, а в противоположных нет. Разработайте решение этой задачи с заданным механизмом синхронизации. Измените решение так, чтобы любая машина, подъехавшая к мосту, в конце концов, через него переехала.

«Голодные птицы»

Есть N птенцов и их мать. Птенцы едят из общей миски, в которой сначала находятся F порций пищи. Каждый птенец съедает порцию еды, спит некоторое время, затем снова ест. Когда кончается еда, птенец, питавшийся последним, зовет мать. Птица наполняет миску F порциями еды и снова ждет, пока миска опустеет. Эти действия повторяются без конца. Представьте птиц процессами и разработайте код, моделирующий их действия. Для синхронизации используйте указанный в варианте механизм.

«Американские горки»

Есть N процессов-пассажиров и один процесс-вагончик. Пассажиры ждут очередь, чтобы проехать в вагончике, вмещающем С человек (C<N). Вагончик может ехать только заполненным:

a. разработайте коды процесса-пассажира и процесса-вагончика для синхронизации используйте указанный в варианте механизм;

b. обобщите ответ к пункту а), чтобы использовались М процессов- вагончиков (М>1)

Дорога одна, так что обгон вагончиков невозможен, и закончить движение по дороге они должны в том же порядке, в каком и начали. Как и ранее, вагончик может ехать только заполненным.

«Задача о молекуле воды»

Атомы водорода и кислорода колеблются в пространстве, пытаясь собраться в молекулы воды. Для этого нужна взаимная синхронизация двух атомов водорода и одного атома кислорода. Пусть атомы кислорода и атомы водорода моделируются процессами (потоками). Каждый атом водорода вызывает процедуру ГОТОВНОСТИ, когда он готов объединиться в молекулы. Аналогично обстоит дело и с атомами кислорода. Напишите реализацию этих процедур, используя указанный в варианте механизм синхронизации. Обеспечьте отсутствие взаимной блокировки и зависания.

Соседние файлы в предмете Теория вычислительных процессов