Справочник Ada 2012
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 может быть использовано в качестве параметра для подпрограмм, предоставляемых реализацией, для запроса информации о разбиении.