Н. Джехани - Язык Ада (1988) (1160771), страница 32
Текст из файла (страница 32)
ргосеопге БЕХ1)(Б: Фп Б10ХА1.); Фппсг!оп АЪУА1ТЕ1)(Б: Фп Б10ХАЬ) геФвгп ВОО1.ЕАХ; РПгаФе Фав)г Фуре Б10ХАЬ В епФгу %А1Т Б10ХАЬ(ВАХК); — семейство входов еаФгу БЕХ1) Б1ОХА1.; епФгу А%А!ТЕ!) Б10ХАЬ(В: опг ВО01.ЕАХ); епо Б10ХАЬ; епй Б10ХА1.Б РАСКАОЕ; Каждая подпрограмма содержит вызов соответствующего входа задачи, реализующей заданный сигнал.
Приняв вызов входа БЕХΠ— Б10ХА1., задача Б1ОХАЬ передает сигнал входу из семейства входов %А!Т ЯОХАЬ, который П льносгь имеет наименьшее значение индекса (т. е наименьшее значение ранга задержки) и задержанные вызовы входов. Задача, вызов входа которой был принят, может возобновить свое выполнение. Вызов входа А%А1ТЕП Б1ОХАЬ используется для того, чтобы определить, имеются ли еще задачи, ожидающие поступления сигналов. Это делается путем вычисления атрибута С01)ХТ для каждого входа из семейства задач %А1Т Б1ОХА1.. Тело задачного типа Б1ОХАЬ имеет следуюший внд: ~аз!г !ии$у Б10ХАЬ !в Ьей!и 1оор ве!ес! вссер! БЕХ)З Б1ОХАЬ; — принимает посланный сигнал и передает его — процессу с минимальным рангом задержки (если такой процесс есть) 1ог 1 !и КАХК !оор ве1ес! ассар! %А1Т Б10ХАЬ(1); ех11; е)ве ппМ; еао ве!ес1; епо' 1оор; ог ассар! А%А1ТЕР Б10ХАЬ!В: ов! ВООЬЕАХ) оо В ".
ГАЬБЕ; 1ог 1 ю КАХК !оор !1%А1Т Б1ОХА1.(1)'СО1)ХТ / 0 !йеп В: ТИ)Е; ех!1; епо !1; епо 1оор; епо А%А1ТЕР Б10ХАЬ; ог !епп!па!е; ев2 ве1есв; еп4 !оор; епо Б10ХАЬ; Тело пакета Б10ХАЬБ РАСКАОЕ имеет вид Глава 4 расйапе !ни!у Б10ХАЕБ РАСКАОЕ !в ргосеппге %А!Т(Б; !п Б!ОХА(,; К: !п КАХК: 1) )в Ьеп!и Б.ИА!Т Б10ХАЕ(К); епй %А!Т; ргосепвге БЕХР(Б: !п Б10ХА1.) !з Ьеп!п Б.БЕХР Б10ХА1.; епо БЕХР; (ппсаоп А%А!ТЕР(Б: !п ЯОХАО гегпгп ВООЕЕАХ !я В: ВОО1.ЕАХ; Ьеп!и Б.А%А!ТЕР Б10ХА1. (В); гепзгп В; епо А1тА1ТЕР; — Тело типа задачи ЯОХАЕ, приведенное ранее, — помещается сюда епй ЯОХАЕБ РАСКАОЕ; 4.14.6. Планировщик заданий В данном разделе рассматривается реализация задачи, планирующей обработку заданий в порядке увеличения времени их выполнения.
Планировщик получает задания (идентификационный номер задания и предполагаемое время его выполнения) от нескольких входных процессов. Несколько процессов, осуществляющих диспетчеризацию заданий, запрашивают у планировщика следующее выполняемое задание. Планировщик выбирает задание с минимальным временем выполнения и передает его очередному процессу, осуществляющему диспетчеризацию. Планировщик использует пакет ОКРЕКЕР БЕТ, описанный в гл. 3. Повторим спецификацию пакета ОКРЕКЕР БЕТ: расйапе ОКРЕКЕР БЕТ !в ргосейпге !ХБЕКТООВ: !п !Р; Т: )п Р()КАТ10Х); ргосеппге БМАП.ЕБТООВ: оп! ! Р); (ппсаоп ЕМРТ г' ге!пгп ВООЕЕАХ; епй ОКРЕКЕР БЕТ; Спецификация задачи БСНЕР(Л ЕК имеет внд гавЬ БСНЕР(Л.ЕК !в еп!гу АРРООВ: 1п 1Р; Т: !п Р(ЗКАТ1ОХ); епггу ХЕХТООВ: оп! 1Р); — возвращает очередное задание, которое должно обрабатываться, — н удаляет его из списка заданий епй БСНЕР(Л.ЕК; 167 Пв ллеяьность Задача БАСНЕР()ЬЕВ принимает задания от входных процессов и помешает эти задания в некоторое упорядоченное множество.
Когда это множество содержит задания, БСНЕРБЬЕй принимает запросы от процессов-диспетчеров и передает им задания в порядке возрастания времени их выполнения. Предположив, что была задана спецификация использования вве ОВРЕВЕР БЕТ; тело задачи БАСНЕР()ЬЕВ можно описать следующим образом: пзв!г !ии!у БСНЕРЫЬЕК !в 1: 1Р; РЕВ1ОР: 1НЗВАТ1ОМ; !зей!и !вор ве!ес! аееер! АРРООВ: !и 1Р; Т: ш 1НЗВАТ1ОН) йо 1: ЗОВ; РЕВ1ОР: Т; епЬ АРР; ИМБЕР(1, РЕВ.1ОР); ог ивен ио! ЕМРТУ ) аесер! НЕХТООВ: ои! ЬР) Ио БМАЬЬЕЯТ ООВ); епй ХЕХТ; епв ве!есг; еив !вор; еив БАСНЕР()ЬЕВ; 4.14.7.
Управление работой светофора В данном разделе рассматривается задача, управляющая работой светофора, стоящего на пересечении главной дороги с второстепенной. Несколько пешеходов переходят дорогу. Все транспортные средства должны остановиться, если зажигается красный свет. Обычно для главной дороги горит зеленый свет, а для второстепенной красный свет светофора меняется, когда !) сенсорное устройство определило, что по второстепенной дороге к перекрестку подъехал автомобиль; 2) пешеход, который хочет перейти главную дорогу, нажимает предусмотренную на этот случай кнопку.
Сенсорное устройство и кнопка вызывают прерывание по адресу 8гх2000кг (восьмеричное 2000). При управлении работой светофора необходимо соблюдать следующие условия: !. Транспортный поток на главной дороге можно остановить только в том случае, если перед этим на главной дороге зеленый свет горел не менее трех минут. 2. Транспортный поток на главной дороге можно остановить каждый раз только на 30 с. збВ Глава 4 Рнс.
4.4. Светофор нв «незагруженной» втоРостепенной дороге. 3. Многократные запросы на прекращение движения по главной дороге имеют тот же результат, что и единственный. Это позволяет избежать необязательных переключений светофора, которые могли бы быть вызваны многократным нажатием кнопки. Пакет ТКАЕНС ЫОНТ имеет следующую спецификацию: расйайе ТКАЕЕ1С ЫОНТ 1й ргоседнге ЗТАКТ ЫОНТ; — включает светофор, зеленый свет горит для главной дороги ргосее1нге СНАХОЕ ЫОНТ; — переключает свет с зеленого на красный в — одном направлении и с красного на зеленый в другом.
енса ТКАгг1С ЫОНТ; Пакет ТКАЕНС ЫОНТ осуществляет весь контроль за переключениями. При реализации процедуры СОХТКО1.-ТКАЕНС ЫОНТ используется следующий абстрактный алгоритм: Зажечь светофор Начало управления работой светофора 1оор Ждать 3«0 мин Принять запрос на прекращение движения по главной дороге и переключить свет 169 Па ьноегь Ждать 30.0 с Убрать дополнительные запросы на остановку движения по главной дороге Переключить свет епо !оор Процедура СОХТКОЬ ТКАГГ1С-ПОНТ имеет следуюшее описание: пЫЬ ТКАГГ1С 1.1ОНТ; вас ТКАГГ1С ПОНТ; ргосеооге СОХТКОЬ ТКАГГ1С ПОНТ !в гавЬ ПОНТ 1в епггу БТОР МА1Х; — кнопка и датчик 1ог ВТОР МА1Х пве а! 8№2000№; — прерывание в языке Ада является вызовом входа. — Ячейка прерывания связана с вызовом входа.
— Эта спецификация представления зависит от реализации епо' ПОНТ; гавЬ Ьооу ПОНТ !в СЫТ ОГГ: сопя!оп! 13ЫКАТ1ОХ:- 180.0; — движение по главной дороге должно продолжаться по край--ней мере 3 мин. БОНЗЕ КОА13 ОРЕХ: сопаГап! 1НЗКАТ1ОХ: 30.0; Ьей!п БТАКТ ПОНТ; 1оор йе!ау С13Т ОГГ; ассер! БТОР МА1Х; СНАХОЕ 1.1ОНТ; ее!ау ЕНЗЕ КОА13 ОРЕХ; — убрать дополнительные запросы на остановку движения по — главной дороге 1ог 1 !п 1..ВТОР МА1Х СОЫХТ 1оор ассер! БТОР МА1Х; епо !оор; СНАХОЕ 1.1ОНТ; епо' !оор; епо ПОНТ; Ьей!п пой; епо СОХТКОЬ ТКАГГ1С 1.1ОНТ; Фактическое время, в течение которого горит зеленый свет соответственно для главной и второстепенной дороги, будет несколько больше, чем С15Т ОГГ 'и 51РЕ КОАР ОРЕХ. Эта разница возникает из-за времени, которое требуется на выполнение других операторов в цикле, т. е.
в цикле возникает накопленный Глава 4 сдвиг времени. Чтобы избежать подобных временных сдвигов, там, где они не- желательны, следует использовать следуюший фрагмент программы: 1ХТЕКЧАЬ: ГНЗКАТ1ОХ: ХЕХТ Т1МЕ: Т1МЕ: — очередной момент времени, когда выполняются — некоторые действия !оор ое!ау ХЕХТ Т!МŠ— СЬОСК; Некоторые действия ХЕХТ Т1МЕ: ХЕХТ Т1МЕ + 1ХТЕКЧАЬ; епо !оор„ Функция СЬОСК содержится в предопределенном пакете САЬЕХОАК, имеющем следуюшую спецификацию: рас)саяе САЬЕХ!)АК !я гуре Т1МЕ 1в рпга!е; вне!ура УЕАК ХЫМ ВЕК !в 1ХТЕОЕК ганне ! 90! ..2099; виЬ(уре МОХТН ХЬ)МВЕК !в 1ХТЕОЕК ганне ! ..12; вне!ура РАУ Х()МВЕК !в 1ХТЕОЕК гапйе 1..31; вп(ггуре ОАУ ГН1КАТ1ОХ !в Г)ЫКАТ1ОХ ганне 0.0 ..
86 400.0; Гвпсбоп СЬОСК гегпгп Т1МЕ; Гвпсбоп УЕАК(РАТЕ: Т1МЕ) ге(вгп УЕАК ХЫМВЕК; Гппсбоп МОХТНФАТЕ: Т1МЕ) ге!ага МОХТН Х!.1МВЕК; Гнпсбоп 0АУ(Г)АТЕ: Т!МЕ) ге!ига Г)АУ ХЫМВЕК; Гппсбоп БЕСОХГ)Б(1)АТЕ: Т1МЕ) гегагп ОАУ ГНЖАТ!ОХ; ргосеч)пге БРЬ1Т®АТЕ: !п Т1МЕ; УЕАК: овг УЕАК Х()МВЕК; МОХТН: ош МОХТН Х()МВЕК; ОАУ: оп! 1)АУ Х()МВЕК; БЕСОХГ)Б: он( ОАУ ГИ/КАТ!ОХ); Гипсбоп Т1МЕ ОР(УЕАК: УЕАК ХОМВЕК; МОХТН: МОХТН Х()МВЕК; РАУ: !)АУ Х()МВЕК; КЕСОХОЯ: РАУ 0()КАТ1ОХ: 0.0) ге!ига ТГМЕ; Гипсбоп "+" (ЬЕРТ: Т1МЕ; К1ОНТ: 0()КАТ!ОХ) ге!ого Т! МЕ; Гвпсбоп "+"(ЬЕРТ: ГНЗКАТ1ОХ; К1ОНТ: Т1МЕ) ге!ига Т1МЕ; Гвпсбоп "— "И.ЕРТ: Т1МЕ; К1ОНТ: ГП/КАТ1ОХ) геепгп Т1МЕ; Гипсбоп "-"(ЬЕРТ; ТГМЕ; К1ОНТ: Т!МЕ) ге!ага 0()КАТ1ОХ; Гипс!!оп "("(ЬЕРТ, К1ОНТ: Т1МЕ) гегвгп ВОО1.ЕАХ; 161 П ЯМ7ЯМЬ МОЕ ГЬ 1ппсйоп "< "(1.ЕРТ, К1ОНТ; Т1МЕ) геГпгп ВОО1.ЕАХ; рапсаоп ") "((.ЕГТ, К10НТ; Т1МЕ) ге(пгп ВОО(.ЕА)я); Рдпсапп ") "(1.ЕРТ, К!ОНТ: Т1МЕ) гегпгп ВОО(,ЕА)Я); Т1МЕ ЕККОК: ехсер11вп; — может быть возбуждено функциями — Т1МЕ ОР,"+ "и" —" рпгаге — средства, зависящие от реализации епя) СА).ЕХОАК 4.14.8.