Главная » Просмотр файлов » Н. Джехани - Язык Ада (1988)

Н. Джехани - Язык Ада (1988) (1160771), страница 30

Файл №1160771 Н. Джехани - Язык Ада (1988) (Н. Джехани - Язык Ада (1988)) 30 страницаН. Джехани - Язык Ада (1988) (1160771) страница 302019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 30)

Приоритет используется для того, чтобы показать важность или срочность некоторой задачи, и его не следует применять для управления порядком синхронизации. 4.13. Атрибуты задач и входов 19.91 Для задач и входов определены следующие атрибуты: Т'САЬЬАВЬЕ принимает значение РАЬБЕ, если выполнение задачи Т либо закончено, либо завершено или если задача аварийная, и ТЛŠ— в противном случае.

Т'ТЕКМ1ХАТЕО принимает значение ТЛЕ, если задача Т завершена, и РАЬБŠ— в противном случае. Е'СО(ЛЧТ определяет число задач, ожидающих выполнения рандеву у входа Е. 4.14. Примеры Продемонстрируем возможности параллельной обработки в языке Ада на примерах. Здесь рассматриваются: реализация средств синхронизации низкого уровня — сигналов и семафоров; реализация обмена данными между задачами с помощью буфера; реализация механизма планирования обработки задач, отличного от предоставляемого языком Ада механизма Р1РО (первым пришел — первым вышел). В качестве примера приводится задача об обедающих философах, которая иллюстрирует многие проблемы, возникающие при параллельном про- !аз П ь ность граммировании. Программирование в режиме реального времени представлено задачами управления светофором и кабиной лифта.

В примерах также демонстрируется механизм обработки сбоев оборудования с помошью вызовов входа. Программа управления движением кабины лифта является достаточно сложной и демонстрирует многие нз рассмотренных выше аспектов языка Ада. 4.14.1. Реализация сигналов с помощью механизма задач язьиа Ада Сигналы — это средства низкого уровня для синхронизации параллельных процессов (задач в терминологии языка Ада), используемые в некоторых языках программирования (например, ПЛ/1 [1ВМ70! и Модула-2 (%1К80!).

Если сигнал послан одному нз процессов, ожидающему этот сигнал, то процесс возобновляет свое выполнение. Сигнал теряется, если ни один из процессов не ожидает сигнала. Сигналы можно реализовать как задачи языка Ада. Например, сигнал 810- ХА1. реализуется как задача 510ХАЬ с входами %А1Т и %АКЕ1)Р, гав)г Б10ХАЬ !я ев!гу %А1Т; ев!гу %АКЕЫР; ева В10ХАЬ; Обрашение к входу %А1Т (ждать) задачи 510ХАЬ заставляет вызываюшую задачу ждать до тех пор, пока Б10ХАЬ не примет вызов входа %АКЕЫР. Во время рандеву на входе %АКЕ()Р освобождается только одна ожидающая задача. Если нет ни одной задачи, находящейся в состоянии ожидания, принятие вызова входа %АКЕ1)Р не повлечет за собой никакого действия. Это равносильно потере сигнала. Задача 510ХАЬ реализуется следующим образом: !аФ !нн!у В10ХАЬ !я ве(рп !вор асеер! %АКЕ11Р; — освободить одну ожндаюшую задачу (еслн она есть) !1%А1Т СО1)ХТ > О гпеп ассер! %А1Т; ева !1; епа !вор; епя В10ХАЬ; Атрибут СО()ХТ следует использовать очень осторожно, чтобы избежать возможных ошибок.

Так, приведенная выше реализация задачи 310ХАЬ будет ошибочной, если задачи, вызывающие вход %А1Т, по истечении некоторого времени захватывают (забирают) зти вызовы, т. е. если имеет место временной вызов входа. Ошибка возникает, если все вызовы входа %А!Т были отменены в тот Глава 4 момент, когда задача Б1ОХАЬ уже определила, что атрибут %А1Т'СОЫХТ положителен, но не успела принять ни одного вызова входа 1. Для каждого сигнала должна быть описана отдельная задача.

Если необходимо реализовать несколько сигналов, то для их описания удобнее использовать задачный тип. Например, вместо описания задачи Б10ХАЬ вводится описание задачного типа Б1ОХА1. ТУРЕ (описание типа Б1ОХА1. ТУРЕ аналогично описанию Б10ХАЬ, за исключением использования зарезервированного слова 1уре в описании ЯОХАЬ ТУРЕ). Теперь несколько сигналов Б1, Б2, БЗ, Б4 и Б5 можно легко описать как Б1, Б2, БЗ, Б4, Б5: Б10ХАЬ ТУРЕ; Задача не может существовать отдельно: она должна быть частью подпрограммы или частью пакета.

Задачу, которую нужно сделать доступной пользователю, следует поместить в пакет. Так, задачу Б1ОХА1. можно поместить в пакет Б1ОХАЬ РАСКАОЕ, описываемый как рас)саде ЯОХА1. РАСКАОЕ 1в ргосес1иге зУА1Т Б1ОХАЬ; ргосес1иге %АКЕЫР Б!ОХАЬ; епе' Б10ХАЬ РАСКАОЕ; рвуще Ьое1у ЯОХА1. РАСКАОЕ 1а — спецификация задачи ЯОХАЬ вЂ” спецификация задачи Б1ОХАЬ должна быть задана перед — процедурами %А!Т Б10ХАЬ н ЪАКЕ !)Р Б10ХАЬ, т. к. --онн являются входами задачи ЯОХАЬ ргосееиге ЪУА1Т Б1ОХА1.

1в Ьея1п Б1ОХАЬ.ЖА1Т; епе' 'уЧА1Т Б10ХАЬ; ргосе1иге %АКЕЫР Б10ХА1. 1в Ьей1п Б10ХАЬ.'зУАКЕ1)Р; " Пусть в этом примере для вызова входа йгА!Т используются временные вызовы входа. Тогла возникающие вследствие этого проблемы можно устранить, если вместо условного оператора, использующего атрибут СО!!!ЧТ входа ХагА1Т: яезес! ассерг ГтА1Т; е1яе пвн; еаа яе1есс; применить оператор отбора с ожиданием и ттА1Т СО1ЛЧТ > О Гвен ассерс %А1Т; еаа и; 145 и ьиоогь еио %АКЕ13Р Б10ХАЬ; — тело задачи $10ХАЬ епо 81ОХАЬ РАСКАОЕ Входы задачи 510ХАЬ вызываются с помошью соответствующих процедур, описанных в пакете Б[ОХАЬ РАСКАОЕ.

В этом примере спецификация и тело задачи описаны в теле охватывающего пакета. Аналогичным образом спецификацию задачи можно было бы поместить в спецификацию пакета 510- ХАЬ РАСКАОЕ и входы задачи Я1ОХАЬ вызвать непосредственно, т. е. Б10ХАЬ РАСКАОЕ.Б10ХАЬ.%А1Т; Предположим, что пользователю нужен такой вид сигнала, что после его принятия всем (а не одному) процессам разрешается продолжить выполнение.

Такой сигнал можно реализовать, немного изменив приведенный выше пример. Задача 81ОХАЬ АЬЬ аналогична задаче 810ХАЬ, за тем исключением, что, приняв вызов входа %АКЕ~ЗР, задача 310ХАЬ А1.Ь освобождает все задачи, находящиеся в состоянии ожидания: 1аа)г В10ХАЬ АЬЬ 1в еп(гу %А1Т; еп(гу %АКЕ()Р; епо Б10ХАЬ АЬ1.; гавк ое$у Б10ХАЬ А1.Ь 1в Ьей(п !оор аесерг %АКЕЫР; — все процессы, находяшиеся в состоянии ожидания — во время вычисления выражения %А1Т'СОБХТ (число процессов, — ожидающих у входа Е), будут освобождены согласно дисциплине -НРО; 1ог 1 ш 1 .. %А1Т'СО()ХТ 1оор ассар! %А1Т; еги3 1оор; еий 1оор; ево Б10ХАЬ АЬЬ; 4. 14.2.

СемаФоры Семаеуор — это средство синхронизации, изобретенное Дейкстрой (015681. Семафор — это переменная, которая используется для обмена синхропизнруюшими сигналами меясду параллельными процессами (задачами в языке Ада) с помощью операций Р (ждать) и Ч (сигналнзировать) и [ВВ1731. " Р и Ч вЂ” сокрагление голландских слов. Глава а Одно из возможных применений семафоров — реализация взаимно исключающего доступа. Перед доступом к совместно используемым данным некоторый процесс выполняет операцию Р. После того как доступ к данным завершен, этот процесс выполняет операцию Ч.

Процесс, выполняющий операцию Р, приостанавливается, если в это время другой процесс осуществляет доступ к данным. Выполнение операции Р будет разрешено только после того, как другой процесс закончил доступ к совместно используемым данным и выполнил свою операцию Ч. В одной из версий семафоров процессы, выполняющие операцию Р, помещаются в очередь, а затем после выполнения операции Ч удаляются из нее в порядке Р[РО: первым пришел — первым вышел. Приведенный ниже задачный тип БЕМАРНОКЕ используется для реализации семафоров: пьзй $уре БЕМАРНОКЕ!а еп1гу Р; визгу Ч; епв БЕМАРНОКЕ; 1авй ]ни]у БЕМАРНОКЕ ]в Ьей[п !оор ассер1 Р; ассерз Ч; епй 1оор; епо БЕМАРНОКЕ; Семафор задается путем описания задачи типа БЕМАРНОКЕ. Б1: БЕМАРНОКЕ; Для получения исключительного доступа к совместно используемым данным все параллельные процессы, осуществляющие такой доступ, должны содержать следующие фрагменты: Б1.Р; доступ к совместно используемым данным Б1,Ч; Семафоры являются средством синхронизации низкого уровня, поэтому при их использовании нередки ошибки [ВК173, ООО796].

Например, программист может забыть обратиться к синхронизирующнм вызовам или по ошибке пропустить операции Р. Чтобы избежать подобных ошибок, в языке Ада для синхронизации и реализации взаимно исключающего доступа используется средство высокого уровня — механизм рандеву. 4.14.3. Взаимодействие задач через задачу-бурер В языке Ада при взаимодействии задач буфер автоматически не создается. Если же буферизация необходима,то ее механизм должен явным образом предоставляться некоторой задачей.

Задачи РК011с1СЕК и СОХЯ5МЕК в рассмотренной ранее процедуре СОХЧЕКТ ТО 13РРЕК САБЕ должны выполнять рандеву при передаче каждо- 14? П явность го символа. Различная скорость выполнения этих задач невозможна, потому что при обмене данными между ними отсутствует буфер. Ниже приводится модифицированный вариант процедуры СОХЧЕКТ ТО ОРРЕК САБЕ. В новой процедуре СОХЧЕКТ ТО ()РРЕК САБЕ2 обмен данными между задачами осуществляется через буфер, что позволяет задачам работать с разной скоростью. Буферизация выполняется путем введения задачи В()РЕЕК, моделирующей буфер емкостью 50 символов. Теперь обе задачи, РКО(НЗСЕК и СОХБ()МЕК, для посылки и получения символа вызывают задачу В()РЕЕК, а не взаимодействуют непосредственно друг с другом.

Задача РКО1)()СЕК вынуждена ждать, если она вырабатывает символы быстрее, чем задача СОХБ()МЕК может их обработать (т. е. когда буфер содержит 50 символов). С другой стороны, задача СОХЯЗМЕК вынуждена ждать, если она обрабатывает символы быстрее, чем задача РКО1ШСЕК поставляет их (т.

е. когда буфер пуст). Стандартнын вывод Стандартныя ввод — — виггва п!гп ТЕХТ 1О; пяе ТЕХТ 1О; ргосеннге СОХЧЕКТ ТО ()РРЕК САБЕ2 Ь ганн РКО(а()СЕК; — — посылает символы в буфер !ан!т СОХБ()МЕК; — читает символы из буфера !азк В()ГРЕК Ь вЂ” запоминает до 50 символов еп!гу %К)ТЕ(С: !п СНАКАСТЕК); епггу КЕАР(С: ои! СНАКАСТЕК); епа В()ГРЕК; Гнпсбоп ()РРЕК(С; !п СНАКАСТЕК) ге!нгп СНАКАСТЕК Ь вЂ” как предварительно описано в — процедуре СОХЧЕКТ ТО ()РРЕК САЯЕ епй ()РРЕК; !ая!т Ьопу РКОР()СЕК Ь С: СНАКАСТЕК; Ьей1в пЫ!е ио! ЕХ() ОР Р!(.Е(ЯТАХОАК() 1ХР()Т) !оор ОЕТ(С); В~ЗГГЕК.%К!ТЕ(С); енв! 1оор; епп РКОГПЗСЕК; !ая(г Ьог)у СОХЯ3МЕК Ь Х: СНАКАСТЕК; Глава 4 Ьей!и !оор ВОРРЕК.КЕА)ИХ); Р()ТФРРЕК(Х)); епо !оор; епп' СОХЯ)МЕК: ГавЬ Ьоду В()РЕЕК !я Х: сопя!во! 1ХТЕОЕК: 5 1; О: а~тау(! ..Х) оГ СНАКАСТЕК; -- максимальное число элементов в буфере будет Х-1 1ХВ, О()ТВ: 1ХТЕОЕК ганне ! ..Х: 1; — 1ХВ шоп Х: очередной свободный элемент в Π— О()ТВ шой Х: первый элемент в О, если такой имеется — 1ХВ 01)ТВ: О пусто; начальное значение — истина — 1ХВ тоо Х+ 1 01)ТВ; () полон; в этой схеме — реализации буфер имеет всегда один — неиспользованный элемент Ьей1п 1оор ее!ее! пЬеп 1ХВ воо Х + ! / О()ТВ > — О не полон — еше один символ можно запомнить ассер! %К!ТЕ(С: !и СНАКАСТЕК) до О(1ХВ пни! Х): С; епй зЧК1ТЕ; — задача РКО()()СЕК может возобновить выполнение 1ХВ: 1ХВ пнн! Х+ 1; ог пЬеп 1ХВ / Ос)ТВ > — (~ не пуст, символ — может быть считан ассерФ КЕА0(С: оп! СНАКАСТЕК) йо С: О(О()ТВ той Х); епп' КЕАО; — задача СОХЯ)МЕК может возобновить выполнение О()ТВ: О()ТВ вод Х + 1; ог еегш1ш!е; егн$ ае!ее!; еаза !оор; епй В()ЕРИК; Ьея!п — задачи РКОО()СЕК„СОХЯ)МЕК и В(/РЕЕК активизируются пп!1; епй СОХЧЕКТ ТО ()РРЕК САБЕ2; По достижении конца стандартного входного файла задача РКО(з1)СЕК завершается.

Однако зацача СОХЯ)МЕК не завершится даже после того, как все символы, переданные задачей РКОО()СЕК, будут обработаны. Задача В()РЕЕК не мо- 149 Л вллельность жет завершиться, пока обе задачи РКО()(ЗСЕК и СОХЯЗМЕК не завершатся нли не будут готовы завершиться. Теперь задачу СОХЯЗМЕК нельзя изменить так же легко, как в случае процедуры СОХЧЕКТ ТО ()РЕЕК САБЕ, приведенной ранее. Это происходит потому, что теперь в задаче СОХЯЗМЕК нельзя использовать альтернативу завершения, так как она не принимает вызовов входа (альтернативу завершения можно использовать только в операторах отбора с ожиданием). Однако данную проблему можно решить одним из следующих способов: 1. Изменить задачу РКО1НЗСЕК таким образом, чтобы при достижении конца данных она посылала символ конца передачи.

Характеристики

Тип файла
DJVU-файл
Размер
4,41 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6447
Авторов
на СтудИзбе
306
Средний доход
с одного платного файла
Обучение Подробнее