Spec-Zone.ru › Ada 2005
Справочник по Ada 2005

D.7 Ограничения для задач

Этот пункт определяет ограничения, которые могут быть использованы с помощью директивы Restrictions (см. 13.12), для облегчения построения высокоэффективных систем выполнения задач.

Статическая семантика

Ниже приведены определённые языком restriction_идентификаторы:
No_Task_Hierarchy

Все (не-средовые) задачи напрямую зависят от средовой задачи раздела.
No_Nested_Finalization

Объекты типа, требующего завершения (см. 7.6), и типы ссылок, указывающие на тип, требующий завершения, должны быть объявлены только на уровне библиотеки.
No_Abort_Statements

Нет операторов abort_statement, и нет вызовов Task_Identification.Abort_Task.
No_Terminate_Alternatives

Нет selective_acceptов с terminate_alternatives.
No_Task_Allocators

Нет аллокаторов для типов задач или типов, содержащих подкомпоненты задач.
No_Implicit_Heap_Allocations

Нет операций, которые неявно требуют выделения памяти в куче от реализации. Операции, которые неявно требуют выделения памяти в куче, определены реализацией.
No_Dynamic_Priorities

Нет семантических зависимостей от пакета Dynamic_Priorities и не встречается атрибут Priority.
No_Dynamic_Attachment

Нет вызовов ни одной из операций, определённых в пакете Interrupts (Is_Reserved, Is_Attached, Current_Handler, Attach_Handler, Exchange_Handler, Detach_Handler и Reference).
No_Local_Protected_Objects

Защищённые объекты должны быть объявлены только на уровне библиотеки.
No_Local_Timing_Events

Timing_Events должны быть объявлены только на уровне библиотеки.
No_Protected_Type_Allocators

Нет аллокаторов для защищённых типов или типов, содержащих подкомпоненты защищённого типа.
No_Relative_Delay

Нет delay_relative_statementов.
No_Requeue_Statements

Нет requeue_statementов.
No_Select_Statements

Нет select_statementов.
No_Specific_Termination_Handlers

Нет вызовов подпрограмм Set_Specific_Handler и Specific_Handler в Task_Termination.
Simple_Barriers

Булево выражение в барьере входа должно быть либо статическим булевым выражением, либо булевым компонентом содержащего защищённого объекта.
Ниже приведены определённые языком restriction_parameter_идентификаторы:
Max_Select_Alternatives

Указывает максимальное количество альтернатив в selective_accept.
Max_Task_Entries

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

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

Динамическая семантика

Следующий restriction_идентификатор определён языком:
No_Task_Termination

Все задачи не завершаются. То, что происходит, если задача пытается завершиться, определено реализацией. Если для раздела установлен обработчик по умолчанию (см. C.7.3), он должен быть вызван, когда первая задача попытается завершиться.
Следующие restriction_parameter_идентификаторы определены языком:
Max_Storage_At_Blocking

Указывает максимальную часть (в элементах хранения) размера Storage_Size задачи, которую может сохранить заблокированная задача. Если реализация выбирает обнаружить нарушение этого ограничения, Storage_Error должен быть поднят; в противном случае поведение определено реализацией.
Max_Asynchronous_Select_Nesting

Указывает максимальный динамический уровень вложенности asynchronous_selectов. Значение ноль предотвращает использование asynchronous_selectов, и если программа содержит asynchronous_select, это является неверным. Если реализация выбирает обнаружить нарушение этого ограничения для значений, отличных от нуля, Storage_Error должен быть поднят; в противном случае поведение определено реализацией.
Max_Tasks
Указывает максимальное количество созданий задач, которые могут быть выполнены в течение жизненного цикла раздела, не считая создания средовой задачи. Значение ноль предотвращает создание любой задачи, и если программа содержит создание задачи, это является неверным. Если реализация выбирает обнаружить нарушение этого ограничения, Storage_Error должен быть поднят; в противном случае поведение определено реализацией.
Max_Entry_Queue_Length

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

Рекомендации для реализации

По возможности, реализация должна использовать указанные ограничения для получения более эффективной реализации.
ПРИМЕЧАНИЯ
34 Вышеперечисленные Storage_Checks могут быть подавлены с помощью директивы Suppress.


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API