3.1.1. Аналогия между задачами и машинами

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

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

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

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

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

Станция D представляет собой распределитель заданий. (Для D существуют два нетривиальных особых случая: а) D не распределяет задания ни одной из станций; б) D распределяет задания только для одной станции.)

Другая станция С может служить коллектором заданий (она может также рассматриваться как арбитратор или синхронизатор):

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

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

  1. Как распределитель заданий между одной или несколькими рабочими станциями, или ни для одной из станций.
  2. Как сборщик заданий от двух или более других станций - в этом случае должна осуществляться некоторая форма арбитража, служащая для определения порядка сбора заданий (альтернативной функцией коллектора является синхронизация работы предшествующих ему станций).
  3. Как элемент некоторого конвейера.
  4. Как элемент массива станций, работающих параллельно.

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

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

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

"Прозрачная" многопроцессная обработка в архитектуре i432, описанная в гл. 5, обеспечивает в диапазоне п (где {п<=т}) при возрастании или убывании п соответственно линейное (приблизительное) увеличение или уменьшение параллелизма работы, разумеется, без каких-либо изменений в самой программе. Возможность обеспечения параллелизма подобным способом является главной причиной перестройки важнейших алгоритмов, которые до последнего времени реализовывались только в виде чисто последовательных вычислений.

Задача в языке Ада по своим возможностям существенно мощнее реальной машины, поскольку последняя не в состоянии сама создавать другие реальные машины. Задача в языке Ада, обладая уровнем управления, недоступным реальным машинам, может непосредственно вызвать создание (запуск) и разрушение других задач. Этот новый уровень управления дает возможность задаче Т породить набор из п дочерних задач С1, С2, . . . Сп, переводя каждую из них в активное состояние. В таких условиях задача Т может при необходимости функционировать как запросчик служб от порожденных ею задач. Порожденные задачи могут в свою очередь также порождать другие задачи и функционировать как запросчики, обслуживатели или запросчики-обслуживатели.

назад оглавление вперед
Рейтинг ресурсов "Весь Екатеринбург"