Н. Джехани - Язык Ада (1988) (1160771), страница 101
Текст из файла (страница 101)
если задержки у них одинаковы), то одна из них выбирается произвольно. ° Отбирается раздел е)ве и выполняется последовательность операторов этого раздела, если нельзя немедленно отобрать альтернативу принятия, в частности если все альтернативы закрыты. ° Отбирается открытая альтернатива завершения, если перечисленные в равд.
9.4 условия удовлетворены. Из других правил следует, что нельзя отобрать альтернативу завершения, пока существует очередь вызовов любого входа задачи. Исключение РНООНАМ ЕННОН возбуждается, если все альтернативы закрыты и раздел е)ве отсутствует. Пример оператора отбора: свисс ассврэ рл!УЕВ АУУАКЕ 3!ВМАО дв!ау 30.0 ЗЕСОЙРЗ; ВТОР ТНЕ ТЯА!Ко впд сапмп Пример тела задачи с оператором отбора: тввз Воду ВЕЗООВСЕ !в ВОЗУ: ВООЬЕАВ:= РАЬЗЕ; Ьавй| !сор ва!всу ь т вОзу => ассару ЗЕ!ЕЕ до ВОЗУ:= ТЯОЕ; впд; ог ассар! ЯЕЬЕАЗЕ до ВОЗУ:= РАЬЗЕ; апд; ог эмтпвмза; впд ввшсз; впд !оор; апд ВЕЗООЯСЕ; Примечание.
В отборе с ожиданием допускаются несколько открытых альтернатив задержки или несколько открытых альтернатив принятия одного и того же входа. Ссылки: вход 9.5, вызов входа 9.5, выражение задержки 9.6, длительность 9.6, задача 9, индекс входа 9.5, исключение РНООНАМ ЕННОН 11.1, оператор задержки 9.6, оператор отбора 9.7, оператор принятия 9.5, описание 3.1, очередь вызовов входа 9.5, последовательность опе. раторов 5.1, рандеву 9.5, условие 5.3. За ачн 9.7.2. УСЛОВНЫЕ ВЫЗОВЫ ВХОДОВ Условный вызов входа производит вызов входа, который отменяется, если рандеву нельзя осуществить немедленно. условный вызов входа;: = ае)ес1 оператор вызова входа (последовательность..операторов) е1зе последовательность операторов епб ве1ес1; При выполнении условного вызова входа вначале вычисляется имя входа.
Затем выполняются требуемые вычисления фактических параметров, как при вызове подпрограмы (см. 6.4). Вызов входа отменяется, если выполнение вызванной задачи не достигло точки, в которой она готова к принятию входа (т.е. не достигнуты оператор принятия соответствующего входа или оператор отбора с открытой альтернативой принятия этого входа), или существует очередь ранее сделанных вызовов этого входа. Если вызванная задача достигла оператора отбора, но альтернатива принятия этого входа не отобрана, то вызов входа отменяется. Если вызов входа отменен, то выполняются операторы раздела иначе. В противном случае происходит рандеву и выполняется последовательность операторов после вызова входа (если она есть].
Выполнение условного вызова входа возбуждает исключение.ТАВК1НВ ЕННОН, если вызванная задача уже закончила свое выполнение (см. равд. 9.10 для случая, когда вызванная задача становится аварийной). Пример: ПтвоппптВ ЕР!М(Я: йЕЕООЯСЕ) 1 ° ьмм Ьоп ав1воз Я.ЕЕ12Е; звтапз; вмв пад; — -занято, надо подождать па амаьч; впе Ьоп; впк; Ссылки: аварийная задача 9.10, выполнение 4.5, выражение 4.4, задача 9, законченная задача 9.4, индекс входа 9.5, исключение ТАВК)НВ ЕННОН 11.1, оператор вызовов входа 9.5, оператор отбора 9.7, оператор принятия 9.5, открытая альтернатива 9.7.1, очередь вызова входа 9.5, последовательность операторов 5.1, раздел фактических параметров 6.4, рандеву 9.5, семейство входов 95 9.7.3. ВРЕМЕННЫЕ ВЫЗОВЫ ВХОДОВ Временнбй вызов входа производит вызов входа, который отменяется, если рандеву не началось на протяжении заданной задержки.
временной вызов входа:;= зе)есз оператор вызова входа (последовательность операторов) ог альтернатива задержки епб зе1ес(; При выполнении временного вызова входа вначале вычисляется имя входа. Затем выполняются требуемые вычисления фактических параметров, как при вызове подпрограммы (см. 6.4). После этого вычисляется выражение, задающее задержку, и, наконец, производится вызов входа. 410 Глава В Если рандеву может начаться в течение указанной длительности (или немедленно, как для условного вызова входа, если задержка отрицательная или нулевая), то оно происходит, и затем после вызова входа отменяется и выполняется возможная последовательность операторов альтернативы задержки. Выполнение временного вызова входа возбуждает исключение ТАЗК)МВ ЕЙЙОЙ, если вызванная задача закончила свое выполнение до принятия вызова (см.
также равд. 9.10 для случая, когда вызванная задача становится аварииной). Пример: вв)есз сОнтйоььей.йебцезт(ме0)цм)160ме 1тем): дв)вт 45.0; -- контроллер ели~иком занят, попробуйте - ° что-либо еще вла ев1вей Ссылки: аварииная задача 9.10, выполнение 4.5, выражение 4.4, выражение задержки 9.6, длительность 9.6; задача 9, законченная задача 9.4, индекс входа 9.5, исключение ТАЗК)МО ЕЙЙОЙ 11.1, оператор вызова входа 9.5, оператор задержки 9.6, оператор принятия 9.5, последовательность операторов 5.1, раздел фактических параметров 6.4, рандеву 9.5, семейство входов 9.5, условный вызов входа 9.7.2.
9.8. ПРИОРИТЕТЫ Каждая задача может (но не обязательно) иметь приоритет со значением подтипа РЙЮЙ1ТУ (типа )МТЕОЕЙ], описанного в предопределенном библиотечном пакете ЗУЗТЕМ (см. 13.7). Меньшее значение приоритета указывает на меньшую степень важности; диапазон приврите. тов определяется реализацией. Приоритет связывается с задачей, если в спецификации соответствующей задачи присутствует прагма: ртв9п)а РЙЮЙ)ТУ (статическое выражение); Приоритет задается значением выражения. Если такая прагма присутствует в самом внешнем разделе описаний главной программы, то приоритет связывается с главной программой. В спецификации данной задачи или при подпрограмме — библиотечном модуле может употребляться не более одной такой прагмы, и это единственные места, допустимые для этой прагмы.
Прагма РЙЮЙ)ТУ игнорируется при ее появлении в подпрограмме, не являющейся главной программой. Спецификация приоритета является указанием, помогающим реализации в распределении ресурсов между параллельными задачами, когда число выполняемых задач превышает воэможности их одновременной обработки имеющимися ресурсами. Влияние приоритетов на порядок очередности выполнения задач определяется следующим правилом.
Если две задачи с разными приоритетами готовы к выполнению и могут практически выполняться, используя одни и те же физические процессоры н одни и те же ресурсы обработки, то нельзя чтобы выполнялась задача с более низким приоритетом, а не выполнялась зада. ча с более высоким приоритетом. Для задач с одинаковыми приоритетами порядок выполнения не определен. Дпя задач, приоритеты которых не заданы, правила очередности не определены, исключая случаи, когда между задачами происходит рандеву. Если приоритеты обеих задач определены, то рандеву выполняется с той задачей, чей приоритет является наибольшим. Если приоритет определен только для одной задачи, то рандеву выполняется как минимум с приоритетом этой задачи.
Если приоритеты задач не заданы, то приоритет рандеву также не определен. Примечание. Приоритет задачи является статическим и поэтому фиксирован. Однако при. оритет во время рандеву может и не быть статическим, поскольку он также зависит от при. оритета задачи, вызывающей вход. Приоритеты следует испольэовать только для указания относительной степени важности; их не следует использовать для синхронизации задач. Ссылки: главная программа 10.1, задача 9, оператор вызова входа 9.5, пакет ЗТЗТЕМ 13.7, подтип 3.3, прагма 2.8, раздел описаний 3.9, рандеву 9.5, спецификация задачи 9.1, статическое выражение 4.9, целый тип 3.5.4. 411 9.9.
АТРИБУТЫ ЗАДАЧ И ВХОДОВ Для задачного объекта или значения Т определены следующие атрибуты: Т'СА(.(.АВ(.Е Вырабатывает значение ЕАЕВЕ, если выполнение указанной задачи Т либо закончено, либо завершено либо задача аварийная. В остальных случаях вырабатывает значение ТВОЕ. Значение этого атрибута имеет предопределенный тип ВООЕЕАМ.
Т'ТЕЛМ(МАТЕО Вырабатывает значение ТВОЕ, если указанная Т задача завершена. В остальных случаях вырабатывает значение РАЕЗЕ, Значение этого атрибута имеет предопределенный тип ВООЕЕАМ. В дополнение к приведенным для эадачного объекта Т или задачного типа Т определены атрибуты представления ВТОЙАОЕ 812Е, 8)ЕЕ и АООЛЕ88 (см. 13.7.2). Атрибут СООМТ определен для входа Е задачного модуля Т. Вход может быть либо одиночным входом, либо входом семейства (в любом случае имя одиночного входа ипи семейства входов может быть либо простым, пиво расширенным).
Этот атрибут допустим только в теле Т, но не во вложенном в тело Т программном модуле. Е'СООМТ Вырабатывает число вызовов входа, присутствующих в очереди входа Е в данный момент (если атрибут вычисляется при выполнении оператора принятия входа Е, то в зто число не включается вызывающая задача). Значение атрибута имеет тип универсальный целый. Примечание. Алгоритмы, соответствующие программы которых используют атрибут Е'СООМТ, обязаны учитывать воэможность увеличения значения атрибута с появлением но.
вых вызовов и уменьшения этого значения, например, при временных вызовах входа. Ссылки: аварийная задача 9.10, атрибут 4.1.4, временной вызов входа 9.7.3, вход 9.5, завер. щенная задача 9.4, задача 9, эадачный объвкт 9.2, задачный тип 9.1, законченная задача 9.4, значение логического типа ТВОЕ 3.5.3, значение логического типа РАББЕ 3.5.3, квант памяти 13.7, логический тип 3.5.3, оператор принятия 9.5, очередь вызовов входов 9.5, тип универсальный целый 3.5.4, указывать 9.1.