Методика решения
Методика решения включает в себя общую структуру программы и словесное описание условий блокировки и активизации процессов-пассажиров и процесса-лифта.
Структура программы выглядит следующим образом.
Program Lab7;
Uses MultiObj;
Type
PMonitor = ^TMonitor;
TMonitor = Object
D_U_List, {Очередь, ждущих внизу}
U_D_List, {Очередь, ждущих вверху}
MoveList, {Очередь перевозимых}
LiftList : TList; {Очередь лифта}
Constructor Init(...);
Destructor Done; Virtual;
Procedure Request_D_U;
Procedure Request_U_D;
Procedure Waiting;
End {TMonitor};
{--Методы монитора разрабатываются учащимися--}
Var
Monitor : PMonitor;
- 31 -
Procedure Client_D_U;
Begin
{Движение на нижнем этаже}
Monitor^.Request_D_U;
{Движение на верхнем этаже}
{Самоуничтожение}
End {Client_D_U};
Procedure Client_U_D;
Begin
{Движение на верхнем этаже}
Monitor^.Request_U_D;
{Движение на нижнем этаже}
{Самоуничтожение}
End {Client_U_D};
Procedure Lift;
Begin
While True Do Begin
Monitor^.Waiting;
{Движение}
End {While};
End {Lift};
Procedure KeyManager;
Begin
While True Do Begin
If Клавиша нажата Then Begin
Чтение клавиши;
Case Клавиша Of
'Esc' : Остановить работу ядра;
'U','u' : Создать процесс из процедуры Client_U_D;
'D','d' : Создать процесс из процедуры Client_D_U;
Else
End {Case};
End {If};
End {While};
End {KeyManager};
Begin
Monitor := New(PMonitor, Init);
Создать процесс из процедуры KeyManager;
Создать процесс из процедуры Lift;
- 32 -
Начать работу ядра;
Dispose(Monitor, Done);
End {Lab7}.
Словестное описание запроса пассажира на пользование лифтом
может выглядеть следующим образом:
If Лифт свободен Then Begin
Активизировать лифт;
End {If};
Встать в очередь ожидания;
Передать управление;
Условия функционирования лифта как процесса-сервера могут
выглядеть следующим образом:
If Перевез пассажиров Then Begin
Перевод перевезенных пассажиров из очереди перевозимых в
очередь готовых процессов;
End {If};
If Нет заявок на обслуживание ни на текущем этаже ни на другом
Then Begin
Блокирование;
Передача управления;
End {If};
If Заявка с текущего этажа Then Begin
Перевод не более, чем N процессов, из очереди ждущих в
очередь перевозимых процессов;
End {If};
Учащемуся предстоит формализовать условия блокировки и
активизации лифта и пассажиров для реализации программы.
Задача 8. МОДЕЛЬ ПАРИКМАХЕРСКОЙ
План парикмахерской может быть представлен следующей схемой:
Зал ожидания Салон
--------------T--------¬
--> --> -->
L-------------+---------
Клиенты проходят через зал ожидания в салон, стригутся там и выходят. Если парикмахер занят обслуживанием клиента, то другие клиенты становятся в очередь в зале ожидания, но размер очереди
ожидания не должен превосходить N. Если в зале ожидания N клиентов стоят в очереди, то создается очередь на улице. Если размер очереди на улице равен M, то новый желающий постричься
обходит парикмахерскую и остается необслуженным.
Каждый выходящий из салона клиент позволяет войти к парикмахеру одному клиенту, ждущему в зале ожидания, а тот, в свою очередь, позволяет войти в зал ожидания одному клиенту, ждущему на улице.
Требуется запрограммировать задачу, написав монитор "Парикмахер", регламентирующий доступ клиентов в зал ожидания и в салон. Парикмахер представляет собой процесс-сервер.
Методика решения
Структура программы, реализующей задачу, может иметь
следующий вид.
Program Lab8;
Uses MultiObj;
Type
PMonitor = ^TMonitor;
TMonitor = Object
ServList, {Очередь, в которой парикмахер ждет
активизации}
HallList, {Очередь клиентов в зале ожидания}
StrList, {Очередь клиентов на улице}
ClList : TList; {Очередь, в которой клиент находится,
пока его стригут}
Nh, {Количество клиентов в очереди зала ожидания}
Ns : Integer; {Количество клиентов в очереди на улице}
Constructor Init(...);
Destructor Done; Virtual;
Function InStreet : Boolean;
Procedure InHall;
Procedure Waiting;
End {TMonitor};
{--Методы монитора разрабатываются учащимися--}
Var
Monitor : PMonitor;
Procedure Client;
Begin
- 34 -
{Движение к залу ожидания}
If Monitor^.InStreet Then Begin
{Движение к салону}
Monitor^.InHall;
{Движение из салона}
End Else Begin
{Движение по обходу парикмахерской}
End {If};
{Самоуничтожение}
End {Client};
Procedure Server;
Begin
While True Do Begin
Monitor^.Waiting;
{Случайное время обслуживания клиента}
End {While};
End {Server};
Procedure KeyManager;
Begin
While True Do Begin
If Клавиша нажата Then Begin
Чтение клавиши;
Case Клавиша Of
'Esc' : Остановить работу ядра;
'C','c' : Создать процесс из процедуры Client;
Else
End {Case};
End {If};
End {While};
End {KeyManager};
Begin
Monitor := New(PMonitor, Init);
Создать процесс из процедуры KeyManager;
Создать процесс из процедуры Server;
Начать работу ядра;
Dispose(Monitor, Done);
End {Lab8}.
Словестное описание метода монитора, моделирующего действия
парикмехера (процесса-сервера), может выглядеть следующим
- 35 -
образом:
If Обслужил клиента Then Begin
Активизация этого клиента;
End {If};
If Нет клиентов Then Begin
Блокирование в очереди парикмахера;
Передача управления;
End {If};
Перевод клиента из очереди ожидания в салоне в очередь
обслуживаемых;
Словестное описание метода TMonitor.InStreet выглядит
следующим образом:
If Количество клиентов, ждущих в очереде на улице, больше, чем М
Then Begin
InStreet := False;
End Else Begin
If Количество клиентов, ждущих на улице, больше, чем 0 ИЛИ
Количество клиентов, ждущих в зале ожидания, равно N
Then Begin
Блокирование в очереди клиентов на улице;
Передача управления;
End {If};
InStreet := True;
End {If};
Словестное описание метода TMonitor.InHall выглядит
следующим образом:
If Парикмахер свободен Then Begin
Активизация парикмахера;
End {If};
Блокирование в очереди клиентов в зале ожидания;
Активизация клиента, первого в очереди на улице;
Учащемуся необходимо реализовать представленные описательные условия в программе, а затем дополнить программу вторым процессом-парикмахером и убедиться в повышении скорости обслуживания клиентов.
Содержание
ОБЩАЯ ХАРАКТЕРИСТИКА ЗАДАНИЙ...............................3
Задача 1. МОДЕЛЬ ЖЕЛЕЗНОДОРОЖНОГО ПЕРЕГОНА.................5
Задача 2. МОДЕЛЬ ДОРОЖНОГО ПЕРЕКРЕСТКА ...................11
Задача 3. МОДЕЛЬ ЧИТАТЕЛЕЙ И РЕДАКТОРОВ...................15
Задача 4. МОДЕЛЬ НАЗНАЧЕНИЯ ОДНОРОДНЫХ РЕСУРСОВ...........20
Задача 5. МОДЕЛЬ ОБЕДАЮЩИХ ФИЛОСОФОВ......................23
Задача 6. МОДЕЛЬ КЛИЕНТ-СЕРВЕР............................27
Задача 7. МОДЕЛЬ ФУНКЦИОНИРОВАНИЯ ЛИФТА...................30
Задача 8. МОДЕЛЬ ПАРИКМАХЕРСКОЙ...........................32