Главная » Мануалы

1 ... 4 5 6 7 8 9 10 ... 32

Пакет Личная картотека

Такет Общедоступная картотека личных.дел сотрудников

I put I [get]


Задача Секретарь

Управляющий по кадрам


Сообщение


Задача Помощник

Задача Диспетчер бюро

{6) Описание на языке Ада.

Рис. 3.6. Фрагменты структурного графа учреждения. Условные обозначения: PUT ПОМЕСТИТЬ

GET ПОЛУЧИТЬ

DO-IT ВЫПОЛНИТЬ

PICKUP взять

DEPOSIT ПЕРЕДАТЬ

3 Зак. 455



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

task body ViCE PRESIDENT is данных В любом направлении.

~ Пока длится рандеву, в состоя-

egin НИИ ожидания находится вызы-

loop вающая задача, но начала ран-

деву может ожидать любая из PRIVATE FILE.GET (...); двух задач. Например, может

оказаться, что вице-президенту PRIVATE FILE.PUT ( .); придется ждать, пока управ-

ляющий отреагирует на его PERSONNEL RLE.PUT (...); , обращение, ИЛИ управляющий,

personnel manager.do itC ,); которому, возможно, предстоит

вызов к вице-президенту, вы-end loop; нужден будет ожидать, пока

end УЮЕ РВЕ5ЮЕМТ; совершится это событие, и

Рис. 37. Скелет Ада-программы для ЛИШЬ после этого сможет на задачи вице-президента. него отреагировать (пойти на

прием).

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

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

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



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

Допустим, что для обработки карточки сотрудника управляющий по кадрам должен выполнить следующие операции: извлечь указанный документ, выбрать из него и отпечатать необходимые сведения, передать эту информацию управляющему соответствующего отдела и попросить своего помощника, чтобы он проследил за дальнейшими действиями. Возможно, управляющий по кадрам предпочтет непосредственно обратиться к машинописному бюро и к своему помощнику, зная, что здесь ему не придется долго ждать. Однако прямое взаимодействие с нужным управляющим может оказаться неудобным по причине его обычной занятости. Поэтому управляющий по кадрам может принять решение провести рандеву с секретарем нужного руководителя и передать для него сообщение. Когда управляющий будет иметь рандеву со своим секретарем по поводу этого сообщения-до или после того как оно передано, - для управляющего по кадрам значения не имеет; в любом случае он может рассчитывать на то, что документ в конечном счете поступит по назначению. Скелет Ада-программы для задачи управляющего по кадрам приведен на рис. 3.8.

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

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

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

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



третьего лица, выполняющего

по различным с множеством

каналам опре-потенциальных

координация с помощью роль диспетчера;

непосредственное общение деленной группы людей клиентов.

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

task PERSONNEL MANAGER is

entry DO IT(. ); end PERSONNEL MANAGER;.

task body PERSON N EL MANAGER is

begin loop

accept DO IT (...) do ... end; PERSONNEL FILE.GET (...);

TYPING POOL.DEPOSIT (..,);

TYPING POOL.PICKUP (..,); SECRETARY.PUT (...); ASSISTANT.DO iT (...);

end loop;

end PERSONNEL IVIANAGER;

Рис. 3.8. Ске.пет Ада-программы для Рис. 3.9. Скелет Ада-программы для задачи управляющего по кадрам. задачи секретаря.

task SECRETARY is entry PUT (...); entry GET (...); end SECRETARY;

task body SECRETARY is

begin loop

select

accept PUT (,...) do.,. end;

accept GET (...) do ... end; end select;

end loop;

end SECRETARY;

Диспетчер и машинистки рассматриваются клиентами как совокупный ресурс определенного назначения. Такой ресурс является аналогом активного пакета.

Сложнее описать прямые многоаспектные взаимодействия между клиентами машинописного бюро и машинистками. Клиент может зайти в машбюро и оповестить о своей просьбе всех машинисток. Это можно сделать по-разному: прокричать, позвонить в звонок, посмотреть, нет ли свободных машинисток, переговорить с кем-нибудь персонально и т. д. Если свободных машинисток несколько, они должны уметь договориться между собой, кто из них выполнит поступившую работу. И наоборот, опи все могут предложить свои услуги, а клиент самостоятельно выберет одну из них, отклонив или проигнорировав



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

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

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

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

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



диаграмме. Отложим, однако, обсуждение этих проблем до разд. 3.3 и перейдем к более детальному исследованию механизма рандеву.

3.2.3. Представление механизма рандеву в языке Ада как взаимодействий между людьми

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

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

Более общий случай представлен на рис. 3.12. Несколько клиентов выстраиваются за дверью кабинета в очередь на прием в том порядке, в каком пришли, это соответствует дисциплине первым пришел - первым обслужен (наличие нескольких дверей свидетельствует о существовании нескольких входов). На языке Ада это означает, что на каждом входе образуется отдельная очередь, организованная по правилу первым пришел - первым обслужен . В то время, когда служащий, ведущий прием, ждет клиентов, не все двери его кабинета могут быть открыты; при этом закрытые двери соответствуют в языке Ада закрытым (с помощью защитных блокировок)! входам.

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



Служащий, ведущий прием


Занят работой в своем кабинете


Бланк заявки

Занят работой в своем кабинете за закрытой дверью


Ждет при открытой двери


Клиент покидает свое учреждение


Рандеву н^нинается


Рандеву идет при закрь(той двери кабинета служащего


Бланк результата

Кл иент возвращается в свое учреждение


Рандеву закончено; в приемной опять дверь открыта

Рис. 3.10. Функционирование механизма рандеву в языке Ада: простейший случай.

у служащего и после этого возвращается с окончившегося рандеву.

Сразу после завершения рандеву служащий, ведущий при-.ем может снова закрыть дверь своего кабинета (даже при




Клиент занят

ггг

(\z / Служащий ждет I с открытой

дверью


IЯвляется клиент с заявкой, и рандеву начинается

(а) Служащий ждет.пока освободится клиеит.

Рандеву ида*


Клиент ждет, ,лока освободитсй служащий



Служащий открывазг-дверь и обнаруживав г ожидающего efo клиента рандеву начинается

(б) Клиент ждет, пока освободитсй служащий

Рис, 3,11. Несколько примеров рандеву.

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

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



Клиенты, обнаружив закрытые аходы, выстраиваются СО своими заявками в очередь

Клиенты, Попадающие иа открытые входы, обслуживаются ЛО одному


Рис. 3.12. Рандеву пр-и наличии нескольких очередей на защищенных входах.

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

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

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



С другом, то не существенно, какая из них вызывает другую.

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

3,3, Разработка набора компонентов стандартных системных структур

3.3.1. Введение в проблему

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

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

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



1 ... 4 5 6 7 8 9 10 ... 32

Яндекс.Метрика