Смекни!
smekni.com

Неправильный перевод информации как причина ошибок в программных средствах (стр. 6 из 7)

Основные задачи разработки архитектуры ПС:

• выделение программных подсистем и отображение на них внешних функций (заданных во внешнем описании) ПС;

• определение способов взаимодействия между выделенными программными подсистемами.

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

6.2. Основные классы архитектур программных средств

Различают следующие основные классы архитектур программных средств [35]:

• цельная программа;

• комплекс автономно выполняемых программ;

• слоистая программная система;

• коллектив параллельно действующих программ.

Цельная программа представляет вырожденный случай архитекту­ры ПС: в состав ПС входит только одна программа. Такую архитектуру выбирают обычно в том случае, когда ПС должно выполнять одну ка-

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

Комплекс автономно выполняемых программ состоит из набора программ, такого, что:

• любая из этих программ может быть активизирована (запущена) пользователем;

• при выполнении активизированной программы другие программы этого набора не могут быть активизированы до тех пор, пока не за­кончит выполнение активизированная программа;

• все программы этого набора применяются к одной и той же информационной среде.

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

Слоистая программная система состоит из упорядоченной сово­купности программных подсистем, называемых слоями, такой, что:

• на каждом слое ничего не известно о свойствах (и даже существова­нии) последующих (более высоких) слоев;

• каждый слой может взаимодействовать по управлению (обращаться к компонентам) с непосредственно предшествующим (более низким) слоем через заранее определённый интерфейс, ничего не зная о внутреннем строении всех предшествующих слоев;

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

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

В качестве примера рассмотрим использование такой архитектуры для построения операционной системы. Такую архитектуру применил Дейкстра при построении операционной системы THE [60]. Эта опера­ционная система состоит из четырёх слоев (см. рис. 6.1). На нулевом слое производится обработка всех прерываний и выделение централь-

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

Прикладные программы

3: Управление входными и выходными потоками данных

2: Обеспечение связи с консолью оператора

1: Управление памятью

0: Диспетчеризация и синхронизация процессов

Компьютер

Рис. 6.1. Архитектура операционной системы THE

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

Простейшей разновидностью такой архитектуры является конвей­ер. Возможности для организации конвейера имеются, например, в опе­рационной системе UNIX [28]. Конвейер представляет собой последова-

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

Рис. 6.2. Конвейер параллельно действующих программ

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

Пример программной системы с портами сообщений приведен на рис. 6.3. Порт Uможет рассматриваться как порт вводных сообщений для представленного на этом рисунке коллектива параллельно дейст­вующих программ, а порт W - как порт выводных сообщений для этого коллектива программ.

Рис. 6.3. Пример программной системы с портами сообщений

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

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

6.3. Архитектурные функции

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