Задача о стрелках, которая является классической задачей межпроцессного взаимодействия
Рисунок 2.3.2 — Демонстрация работы программы — Состояние готовности. Рисунок 2.3.1 — Демонстрация работы программы — Состояние ожидания. Установить свой номер: взять номер соседа слева и увеличить на 1. Код программы представлен в разделе «Приложение». Автоматная модель стрелков и офицера: Состояние соседа справа «Готов»? Состояние соседа слева «Огонь»? Уменьшить свой номер на 1. Свой номер… Читать ещё >
Задача о стрелках, которая является классической задачей межпроцессного взаимодействия (реферат, курсовая, диплом, контрольная)
В данной части работы рассматривается задача о стрелках, которая является классической задачей межпроцессного взаимодействия. Решение этой проблемы, приведенное ниже, основано на синхронизации процессов с помощью конечного автомата.
Постановка задачи
Имеется цепь стрелков и офицер. Каждый находящийся в цепи солдат может общаться только со своими соседями справа и слева. Офицер размещается на фланге цепи и может подавать команды только крайнему в цепи стрелку. Общее количество стрелков в цепи каждому из стрелков неизвестно. Общаться каждый из стрелков может только со своими соседями справа и слева. Требуется обеспечить одновременный залп всех стрелков цепи после подачи команды офицером.
Решение задачи
Автоматная модель стрелков и офицера:
X1. | Состояние соседа слева «Огонь»? |
X2. | Состояние соседа справа «Готов»? |
X3. | Свой номер не равен нулю? |
Y1. | Установить свой номер: взять номер соседа слева и увеличить на 1. |
Y2. | Уменьшить свой номер на 1. |
Y3. | Стрелять. |
Решение задачи выполняется следующим образом: первым команду офицера слышит, естественно, крайний в цепи солдат. Получив команду, он передает ее своему соседу с указанием своего номера в цепи («первый») и начинает считать: один, два, три и т. д. Получивший команду вычисляет свой номер в цепи («второй», «третий» и т. д.) и передает его следующему. Последний в цепи солдат будет знать общее количество стрелков в цепи. Получив команду, он сообщает об этом соседу, ее сообщившему («команду принял»), и начинает отсчет от значения, соответствующего количеству стрелков в цепи, до нуля. Каждый из стрелков цепи, получив обратный сигнал, начинает обратный отсчет от значения, до которого он успел добраться при прямом счете (то есть от своего фактического номера в цепи), до нуля. Досчитав до нуля, стрелок открывает огонь. Как только каждый из стрелков доберется до нуля, цепь выстрелит одновременно. На передачу сигнала от стрелка к стрелку тратится 1 с. Значение счетчика изменяется на 1 за 1 с. Данная задача решается при помощи автоматной модели поведения стрелка. В течение работы программа-стрелок может находиться в одном из следующих состояний:
- · «Ожидание»;
- · «Прямой счет»;
- · «Обратный счет»;
- · «Открытие огня».
В состояние прямого счета и обратного счета стрелок переходит в случае изменения состояния соседних стрелков. В состояние прямого счета стрелка переводит изменение состояния соседа слева, в состояние обратного счета переводит изменение состояния соседа справа.
Рисунок 2.3.1 — Демонстрация работы программы — Состояние ожидания.
Код программы представлен в разделе «Приложение».
Демонстрация работы программы
Рисунок 2.3.2 — Демонстрация работы программы — Состояние готовности.
Рисунок 2.3.3 — Демонстрация работы программы — Состояние открытия огня и переход в состояние ожидания.
Заключение
В данной курсовой работе были рассмотрены виды ядер операционной системы, а также характеристики ядер различных ОС. Ядро ОС может быть:
- · монолитным;
- · модульным;
- · микроядром;
- · наноядром;
- · гидроядром;
- · экзоядром.
В практической части было рассмотрено решение задачи Майхилла «О синхронизации стрелков». Данная задача была решена с использованием автоматной модели поведения стрелков. Основная проблема синхронизации заключалась в обеспечении одновременного залпа всех стрелков цепи. В результате решения все стрелки производят выстрел в одно и то же время.