Задача 6. МОДЕЛЬ КЛИЕНТ-СЕРВЕР




Работа №4

 

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

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

Монитор может иметь следующее общее описание (в терминах объектно-ориентированного языка Pascal):

 

Type

TMonitor = Object

данные - переменные состояния

Constructor Init(...);

Destructor Done; Virtual;

Procedure Enter;

Procedure Exit; End TMonitor.

 

В качестве данных выступают параметры спецификации задачи и очереди ожидания процессов.

Метод TMonitor.Enter, анализируя данные, выполняет следующие действия:

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

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

Метод TMonitor.Exit выполняет следующие действия:

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

- проверяет условия возможной активизации ждущих процессов и активизарует их при выполнении этих условий.

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

 

Procedure Process;

Begin

действия процесса до входа в критический участок

Monitor.Enter;

действия процесса в критическом участке

Monitor.Exit;

действия процесса после выхода из критического участка

End Process;

 

здесь Monitor - это переменная типа TMonitor, являющаяся

экземпляром указанного объекта.

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

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

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

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

Практическое решение задачи оформляется в виде отчета. Отчет должен содержать:

- спецификацию задачи;

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

- текст программы с комментариями.

Требования к программам, реализующим задания:

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

Задача 6. МОДЕЛЬ КЛИЕНТ-СЕРВЕР

 

Имеется N процессов-клиентов и один процесс-сервер.

Процессы-клиенты в случайные моменты времени запрашивают обслуживание у процесса-сервера. Если процесс-сервер свободен, то он выполняет обслуживание клиента и переходит в состояние ожидания запроса.

Если процесс-клиент запрашивает обслуживание, когда процесс-сервер занят, то клиент приостанавливает свое выполнение и ждет обслуживания в очереди.

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

Методика решения

 

Ведем дополнительные условия:

- процесс-сервер запускается первым и ждет запросов на обслуживание;

- процесс-клиент блокируется не только при ожидании обслуживания, но и на время самого обслуживания.

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

 

Program Lab6;

Uses MultiObj;

Type

PMonitor = ^TMonitor;

TMonitor = Object

Cl_List, очередь клиентов, ждущих обслуживания Cl_s_List, очередь из одного клиента, обслуживаемого

в данный момент

Sr_List: List; очередь, в которой сервер ждет запросов на обслуживание

Constructor Init;

Destructor Done;

Procedure Request; запрос клиента на обслуживание Procedure Waiting; ожидание сервером запросов

End TMonitor;

--Методы монитора разрабатываются учащимися--

Var

Monitor: PMonitor;

Procedure Client_1;

Begin

While True Do Begin

случайное время до запроса на обслуживания Monitor^.Request;

End While;

End Client_1;

Procedure Client_2;

Begin

While True Do Begin

случайное время до запроса на обслуживания Monitor^.Request;

End While;

End Client_2;

Procedure Client_3;

Begin

While True Do Begin

случайное время до запроса на обслуживания Monitor^.Request;

End While;

End Client_3;

Процессы-клиенты отличаются друг от друга только координатами вывода на экран своих состояний - "работа вне обслуживания", "ожидание обслуживания", "обслуживание"

Procedure Server;

Begin

While True Do Begin

Monitor^.Waiting;

случайное время обслуживания клиента

End While;

End Server;

Procedure KeyManager;

Процедура KeyManager аналогична с задачами 3, 4 и 5

End KeyManager;

Begin

Monitor:= New(PMonitor, Init);

Создать процесс из процедуры Server;

Создать процесс из процедуры KeyManager;

Создать процесс из процедуры Client_1;

Создать процесс из процедуры Client_2;

Создать процесс из процедуры Client_3;

Начать работу ядра;

Dispose(Monitor, Done);

End Lab6.

 

Структура метода TMonitor.Request, который выполняется клиентом, может быть представлена следующим образом:

 

If Сервер свободен Then Begin

Активизация сервера;

End If;

Встать в очередь ожидания обслуживания;

Передача управления;

 

Структура метода TMonitor.Waiting, который выполняется сервером, может выглядеть следующим образом:

 

If Обслужен процесс Then Begin

Активизировать обслуженный процесс;

End If;

If Нет клиентов, запрашивающих обслуживание Then Begin Блокирование процесса-сервера;

Передача управления;

End If;

Перевод процесса, первого в очереди ожидания обслуживания, в очередь обслуживаемых процессов;

 

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



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-04-30 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: