Справочник Ada 2005
E.1 Разбиения
Разбиения распределённой программы классифицируются как активные или пассивные.
Правила после компиляции
Активное разбиение — это разбиение, как определено в 10.2. Пассивное разбиение — это разбиение, не имеющее собственной нити управления, все его библиотечные единицы предварительно обработаны, а данные и подпрограммы доступны одному или нескольким активным разбиениям.
Пассивное разбиение должно содержать только library_item, которые либо объявлены чистыми, либо являются общими пассивными (см. 10.2.1 и E.2.1).
Активное разбиение должно быть сконфигурировано на процессорном узле. Пассивное разбиение должно быть сконфигурировано либо на узле хранения, либо на процессорном узле.
Конфигурация разбиений программы на распределённой системе должна соответствовать возможности ссылок на данные или вызовов между разбиениями, подразумеваемыми их семантическими зависимостями. Любая ссылка на данные или вызов подпрограммы через разбиения называется удаленным доступом.
Динамическая семантика
library_item обрабатывается как часть обработки каждого разбиения, которое его включает. Если обычная библиотечная единица (см. E.2) имеет состояние, то отдельный экземпляр состояния существует в каждом активном разбиении, которое его обрабатывает. Состояние развивается независимо в каждом таком разбиении.
Активное разбиение завершается, когда завершается его окружение задачи. Разбиение становится недоступным, если оно завершается или если оно прерывается. Активное разбиение прерывается, когда его окружение задачи прерывается. Кроме того, если разбиение терпит неудачу во время обработки, оно становится недоступным для других разбиений. Другие определяемые реализацией события также могут привести к тому, что разбиение станет недоступным.
Для префикса D, обозначающего объявление на уровне библиотеки, за исключением объявления или внутри объявленной чистой библиотечной единицы, определен следующий атрибут:
D'Partition_Id
Обозначает значение типа universal_integer, которое идентифицирует разбиение, в котором D было обработано. Если D обозначает объявление библиотечной единицы интерфейса удалённого вызова (см. E.2.3), указанное разбиение — это разбиение, в котором был обработан тело D.
Ограниченные (временно́й ошибки)
Наличие циклических зависимостей обработки между активными разбиениями одной распределенной программы является ограниченной ошибкой. Возможные последствия в каждом из вовлеченных разбиений — тупик во время обработки или поднятие исключения Communication_Error или Program_Error.
Разрешения реализации
Реализация может разрешить конфигурирование нескольких активных или пассивных разбиений на одном процессорном узле и нескольких пассивных разбиений на одном узле хранения. В этих случаях политики планирования, обработка приоритетов и управление общими ресурсами между этими разбиениями определяются реализацией.
Реализация может разрешить конфигурирование отдельных копий активного разбиения на разных процессорных узлах и обеспечить соответствующие взаимодействия между копиями для представления согласованного состояния разбиения другим активным разбиениям.
В реализации разбиения распределенной программы не обязательно загружать и обрабатывать все сразу; их можно загружать и обрабатывать по одному в течение длительного периода времени. Реализация может предоставить средства для прерывания и повторной загрузки разбиения во время выполнения распределенной программы.
Реализация может позволить сохранению состояния некоторых разбиений распределённой программы, в то время как другие разбиения программы завершаются и позднее вызываются повторно.
ПРИМЕЧАНИЯ
3 Библиотечные единицы группируются в разбиения после компиляции, но до выполнения. Во время компиляции с помощью категорийных псевдокоманд идентифицируются только соответствующие свойства библиотечной единицы.
4 Возвращаемое значение атрибута Partition_Id может использоваться в качестве параметра для подпрограмм, предоставляемых реализацией, для запроса информации о разбиении.