Rationale for Ada 2005: Tasking and Real-Time
RUSTOPBACKNEXT
ENG |
4. The Ravenscar profile
@ The purpose of the Ravenscar profile is to restrict the use of many tasking facilities so that the effect of the program is predictable. The profile was defined by the International Real-Time Ada Workshops which met twice at the remote village of Ravenscar on the coast of Yorkshire in North- East England. A general description of the principles and use of the profile in high integrity systems will be found in an ISO/IEC Technical Report [2] and so we shall not cover that material here. @ Here is a historical interlude. It is reputed that the hotel in which the workshops were held was originally built as a retreat for King George III to keep a mistress. Another odd rumour is that he ordered all the natural trees to be removed and replaced by metallic ones whose metal leaves clattered in the wind. It also seems that Henry Bolingbroke landed at Ravenscar in July 1399 on his way to take the throne as Henry IV. Ravenscar is mentioned several times by Shakespeare in Act II of King Richard II; it is spelt Ravenspurg which is slightly confusing – maybe we need the ability to rename profile identifiers. @ A profile is a mode of operation and is specified by the pragma Profile which defines the particular profile to be used. The syntax is
|
|
|
Rationale for Ada 2005: Tasking and Real-Time
@ENGRUSTOPBACKNEXT4. Профиль Ravenscar
@ Назначение конфигурации Ravenscar состоит в том, чтобы ограничить использование многих средств управления задачами так, чтобы эффект программы был предсказуем. Конфигурация была определена Международными Семинарами Ады в реальном времени, которые встретились дважды в отдаленной деревне Ravenscar на побережье Йоркшира на Северо-востоке Англии. Общее описание принципов и использование конфигурации в высокоинтегрированных системах можно найти в ISO/IEC Technical Report [2] и поэтому мы не будем полностью раскрывать этот материал здесь.
@ Вот историческая справка. Считается, что гостиница, в которой проводились семинары, была первоначально построена для Короля Джорджа III, (чтобы сохранить хозяйку?). По другим слухам, он приказал, чтобы все естественные деревья были удалены и заменены металлическими, листья которых гремели на ветру. Также кажется, что Henry Bolingbroke останавливался в Ravenscar в июле 1399 на пути, чтобы занять трон как Генри IV. Ravenscar упоминался несколько раз Шекспиром во II акте Короля Ричарда II; он именовался Ravenspurg, что является немного запутывающим - возможно мы нуждаемся в необходимости переименовать идентификатор конфигурации.
@ Данный профиль это особый режим работы программы который определяется прагмой pragma Profile. Синтаксис такой:
|
@ где profile_argument_associations - просто список аргументов прагмы, отделенных запятыми.
@ Таким образом, чтобы гарантировать, что программа соответствует конфигурации Ravenscar мы должны написать:
|
@ Основная идея состоит в том, что конфигурация эквивалентна ряду прагм конфигурации.
@ В случае Ravenscar прагма эквивалентна совместному эффекту следующих прагм:
|
@ Прагма Detect_Blocking а также многие из идентификаторов Ограничений являются новыми для Ады 2005. Они будут здесь описаны.
@ Прагма Detect_Blocking подразумевает, что если реализация обнаружит потенциально блокирующую операцию в защищенной операции то будет возбуждено исключение Program_Error. Без этой прагмы реализация не обязана обнаруживать разделение на блоки и, таким образом, задачи могут быть блокированы в течение неограниченного времени, и даже основная программа может быть заблокирована.
@ Идентификатор No_Dynamic_Attachment означает, что нет никаких запросов операций в пакете Ada.Interrupts.
@ Идентификатор No_Dynamic_Priorities означает, что нет никакой зависимости от пакета Ada.Priorities так же как никакое использование атрибута Priority (это - новый атрибут для защищенных объектов как объясняется в конце этой секции).
@ Отметим, что правило состои в том, что Вы не можете ни читать ни писать приоритеты - это функция для особой процедуры чтения и записи приоритета задачи для защищенных объектов.
@ Идентификатор No_Local_Protected_Objects означает, что защищенные объекты могут быть объявлены только на библиотечном уровне и идентификатор No_Protected_Type_Allocators означает, что нет никаких программ распределения для защищенных объектов или объектов, содержащих компоненты защищенных типов.
@ Идентификатор No_Local_Timing_Events означает что объекты типа Timing_Event в пакете Ada.Real_Time.Timing_Events может быть объявлен только на библиотечном уровне. Этот пакет описан в Секции 6 ниже.
@ Идентификаторы No_Relative_Delay, No_Requeue_Statements, и No_Select_Statements означают, что нет никакой относительной задержки, постановки в очередь или операторов выбора соответственно.
@ Идентификатор No_Specific_Termination_Handlers означает, что нет никаких запросов процедуры Set_Specific_Handler или функции Specific_Handler в пакете Task_Termination и идентификатор No_Task_Termination означает, что все задачи должны работать всегда. Отметим, что нам разрешено установить обработчик системы восстановления так, чтобы, если какая-нибудь задача действительно попытается закончиться тогда, она будет обнаружено.
@ Идентификатор Simple_Barriers означает, что Булево выражение в барьере входа защищенного объекта должно быть любой статическим выражением (таким как Истина) или Булев компонент защищенного объекта непосредственно.
@ Идентификатор Ограничений Max_Entry_Queue_Length устанавливает предел для числа запросов, разрешенных для очереди входа. Это - важная особенность конфигурации Ravenscar в которой только один запрос разрешен за один раз в очереди входа защищенного объекта.
@ Идентификатор No_Dependence не является определенным для Систем реального времени, и должным образом описан в следующей статье. В основном он указывает, что программа не зависит от определенного пакета данного языка. В этом случае это означает, что программа, соответствующая конфигурации Ravenscar, не может использовать ни один из пакетов Asynchronous_Task_Control, Calendar, Execution_Time.Group_Budget, Execution_Time.Timers и Task_Attributes. Некоторые из этих пакетов являются новыми и описываются ниже в этой статье.
@ Отметим, что No_Dependence не может использоваться для No_Dynamic_Attachment, потому что это предотвратило бы использование дочернего пакета Ada.Interrupts.Names.
@ Все другие идентификаторы ограничений, используемые конфигурацией Ravenscar, были уже определены в Аде 95.
@ Отметим также, что идентификатор No_Asynchronous_Control был перемещен в Приложение J, потому что он может теперь быть заменен на No_Dependence.
2010-10-24 00:26:55
. .