Руководство по Ada (Ada 2022)
D.13 Профили Ravenscar и Jorvik
В этом подпункте определяются профили Ravenscar и Jorvik.
Абзацы 2 и 3 были перемещены в 13.12, «Предикаты ограничений и предикат профиля».
Правила законности
profile_идентификатор Ravenscar и profile_идентификатор Jorvik являются профилями использования (см. 13.12). Для профилей использования Ravenscar и Jorvik не должно быть profile_ассоциаций_с_аргументом_предиката.
Статическая семантика
Профиль использования Ravenscar эквивалентен следующему набору предикатов:
pragma Task_Dispatching_Policy (FIFO_Within_Priorities);
pragma Locking_Policy (Ceiling_Locking);
pragma Detect_Blocking;
pragma Restrictions (
No_Abort_Statements,
No_Dynamic_Attachment,
No_Dynamic_CPU_Assignment,
No_Dynamic_Priorities,
No_Implicit_Heap_Allocations,
No_Local_Protected_Objects,
No_Local_Timing_Events,
No_Protected_Type_Allocators,
No_Relative_Delay,
No_Requeue_Statements,
No_Select_Statements,
No_Specific_Termination_Handlers,
No_Task_Allocators,
No_Task_Hierarchy,
No_Task_Termination,
Simple_Barriers,
Max_Entry_Queue_Length => 1,
Max_Protected_Entries => 1,
Max_Task_Entries => 0,
No_Dependence => Ada.Asynchronous_Task_Control,
No_Dependence => Ada.Calendar,
No_Dependence => Ada.Execution_Time.Group_Budgets,
No_Dependence => Ada.Execution_Time.Timers,
No_Dependence => Ada.Synchronous_Barriers,
No_Dependence => Ada.Task_Attributes,
No_Dependence => System.Multiprocessors.Dispatching_Domains);
pragma Locking_Policy (Ceiling_Locking);
pragma Detect_Blocking;
pragma Restrictions (
No_Abort_Statements,
No_Dynamic_Attachment,
No_Dynamic_CPU_Assignment,
No_Dynamic_Priorities,
No_Implicit_Heap_Allocations,
No_Local_Protected_Objects,
No_Local_Timing_Events,
No_Protected_Type_Allocators,
No_Relative_Delay,
No_Requeue_Statements,
No_Select_Statements,
No_Specific_Termination_Handlers,
No_Task_Allocators,
No_Task_Hierarchy,
No_Task_Termination,
Simple_Barriers,
Max_Entry_Queue_Length => 1,
Max_Protected_Entries => 1,
Max_Task_Entries => 0,
No_Dependence => Ada.Asynchronous_Task_Control,
No_Dependence => Ada.Calendar,
No_Dependence => Ada.Execution_Time.Group_Budgets,
No_Dependence => Ada.Execution_Time.Timers,
No_Dependence => Ada.Synchronous_Barriers,
No_Dependence => Ada.Task_Attributes,
No_Dependence => System.Multiprocessors.Dispatching_Domains);
Профиль использования Jorvik эквивалентен следующему набору предикатов:
pragma Task_Dispatching_Policy (FIFO_Within_Priorities);
pragma Locking_Policy (Ceiling_Locking);
pragma Detect_Blocking;
pragma Restrictions (
No_Abort_Statements,
No_Dynamic_Attachment,
No_Dynamic_CPU_Assignment,
No_Dynamic_Priorities,
No_Local_Protected_Objects,
No_Local_Timing_Events,
No_Protected_Type_Allocators,
No_Requeue_Statements,
No_Select_Statements,
No_Specific_Termination_Handlers,
No_Task_Allocators,
No_Task_Hierarchy,
No_Task_Termination,
Pure_Barriers,
Max_Task_Entries => 0,
No_Dependence => Ada.Asynchronous_Task_Control,
No_Dependence => Ada.Execution_Time.Group_Budgets,
No_Dependence => Ada.Execution_Time.Timers,
No_Dependence => Ada.Task_Attributes,
No_Dependence => System.Multiprocessors.Dispatching_Domains);
pragma Locking_Policy (Ceiling_Locking);
pragma Detect_Blocking;
pragma Restrictions (
No_Abort_Statements,
No_Dynamic_Attachment,
No_Dynamic_CPU_Assignment,
No_Dynamic_Priorities,
No_Local_Protected_Objects,
No_Local_Timing_Events,
No_Protected_Type_Allocators,
No_Requeue_Statements,
No_Select_Statements,
No_Specific_Termination_Handlers,
No_Task_Allocators,
No_Task_Hierarchy,
No_Task_Termination,
Pure_Barriers,
Max_Task_Entries => 0,
No_Dependence => Ada.Asynchronous_Task_Control,
No_Dependence => Ada.Execution_Time.Group_Budgets,
No_Dependence => Ada.Execution_Time.Timers,
No_Dependence => Ada.Task_Attributes,
No_Dependence => System.Multiprocessors.Dispatching_Domains);
Абзацы 7 и 8 были удалены.
Рекомендации по реализации
В многопроцессорной системе реализация должна поддерживать полностью разнесенный подход, если указан один из этих профилей. Каждый процессор должен иметь отдельные и непересекающиеся очереди готовности.
ПРИМЕЧАНИЕ 1 Для профиля Ravenscar эффект ограничения Max_Entry_Queue_Length => 1 применяется только к очередям защищенных записей из-за сопутствующего ограничения Max_Task_Entries => 0. Ограничение Max_Entry_Queue_Length не применяется профилем Jorvik.
ПРИМЕЧАНИЕ 2 При действии профиля Ravenscar или Jorvik (через действие ограничения No_Dynamic_CPU_Assignment) все задачи в разделе будут выполняться на одном процессоре, если программист не использует явно аспект CPU для указания назначений процессоров для задач. Использование нескольких процессоров требует осторожности, так как многие гарантии расписания на одном процессоре больше не действуют.
ПРИМЕЧАНИЕ 3 Не рекомендуется указывать процессор задачи как Not_A_Specific_CPU, когда в действии профиль Ravenscar или Jorvik. Способ выполнения раздела сильно зависит от назначения задач процессорам.
ПРИМЕЧАНИЕ 4 Любой модуль, удовлетворяющий требованиям профиля Ravenscar, также удовлетворяет требованиям профиля Jorvik.