Главная » Просмотр файлов » Р.У. Себеста - Основные копцепции языков программирования (2001)

Р.У. Себеста - Основные копцепции языков программирования (2001) (1160794), страница 134

Файл №1160794 Р.У. Себеста - Основные копцепции языков программирования (2001) (Р.У. Себеста - Основные копцепции языков программирования (2001)) 134 страницаР.У. Себеста - Основные копцепции языков программирования (2001) (1160794) страница 1342019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

В данном случае совместно используемый буфер хранит целые числа н имеет круговую логическую структуру. Он разработан для возможного использования несколькмми задачами типа "производитель- потребитель". Приведенный ниже код представляет собой определение залач типа "производитель- потребитель". Для предотвращения потери значимости и переполнения буфера используются два семафора, которые обеспечивают синхронизацию взаимодействия. Предположим, что буфер имеет размер ВОГЕЗ, а подпрограммы, которые с ннм действительно работают,— это описанные выше подпрограммы ГЕТСВ и ОЕРОЯ1т.

Обращения к счетчику семафора обозначиотся точкой. Например, если йи11зрогв — это семафор, то к его счетчику можно обратиться с помощью выражения йц11зрогз. соипг. вещарпоге Йц11зросз, ешртузротзГ 1и11зросз.соцпс := ОГ ешртувросз.соцпс := ВОГЬЕИ; пав)г ргог(цсегг 1оор -- вычислить значение ЧАЕУЕ-- 12.3. Семафоры найт(еирсуяросз]; ( ждать появления свободного места ) РЕРОЯ1Т(ЧАДРЕ)г ге1еазе(1и11зрогз)) ( увеличить количество заполненных ячеек епб 1оорг епс( ргос(цсегг Еав)с сспзишег> 1оор на1г(1ц11зрогз)г ( убедиться, что буфер не пуст РЕТОН(ЧАЕРЕ)) ге1еазе(епрсузросз)) ( увеличить количество пустых ячеек получить значение ЧА)ЛЕ-- епй 1оор епс( сопзшпег) Если буфер в данный момент пуст, семафор йи11зрогя ставит задачу сопзцвег в очередь ожидать, пока в буфере не появится заполненная ячейка.

Если буфер в данный момент полон, семафор ешрсузрогз ставит задачу ргос(исег в очередь ожидать, пока в буфере не появится свободное место. 12.3.3. Синхронизацив конкурвнции Описанный выше буфер не обеспечивает синхронизации конкуренции. Доступом к структуре можно управлять с помощью дополнительного семафора. Этот семафор не должен ничего подсчитывать. Он просто отмечает с помощью своего счетчика, используется ли буфер в данный момент.

Оператор надг открывает доступ к буферу, только если счетчик семафора равен 1, т,е. когда совместно используемый буфер в данный момент не находится в распоряжении ни одной задачи. Если счетчик семафора равен О, т.е. в данный момент буфер кем-то используется, задача помещается в очередь семафора. Заметим, что счетчик семафора должен быть инициализировал единицей. Очередь семафора всегда инициализируется пустой.

Семафор, использующий бинарный счетчик, такой, например, какой мы используем для синхронизации конкуренции, называется бинарным семафором (Ь(па~у зещарйоге). Приведенный ниже пример кода иллюстрирует применение семафора для обеспечения как синхронизации конкуренции, так и синхронизации взаимодействия при параллельном доступе к совместно используемому буферу. Семафор ассезз используется для обеспечения взаимно исключающего доступа к буферу.

Снова заметим, что могут существовать несколько производителей и потребителей. вееарЪоге ассезз, 1ц11зрогз, ежргузрогаг ассезз.соцпс : 1; 1и11зроге.ссцпг := Ог еир узрссз.ссипс := ВУРЕЕИг Сев)с ргос(исегг 1оор -- произвести значение ЧА1ЛЕ-- надс(епрсуяроса)г ( ожидать появления свободного места 514 Глава 1 2. Параллельность иалп(ассеяв); 0ЕРОЯ1Т(ЧАЕ()Е)г ге1еаяе(ассевв); ( освободить доступ ) ге1еаве(йи11врогв)> ( увеличить количество заполненных мест ) епс( 1оор) епс( ргос)исег; пав)с сопвшпег; 1оор иайг(йи11вросв); иа1г (ассевв); ГЕТСН(ЧАЕ(ЗЕ)з ге1еазе(ассевв)) ге1еаяе(еарпувропв)г -- получить значение еп6 1оор епб сопвшпег; ( убедиться, что буфер не пуст ( ожидать доступ ( освободить доступ ) ( увеличить количество пустых мест ) ЧА1Л) Е Даже беглого взгляла на этот пример достаточно, чтобы убедиться в наличии некоторой проблемы.

А именно, предположим, что, пока задача ожидает вызова иалп (ассе я в ) в задаче сопвшпег, другая задача считывает последнее значение из совместно используемого буфера. К счастью, этого случиться не может, поскольку вызов иа(г (ассевв) резервирует значение в буфере для залачи, содержащей этот вызов, с помощью увеличения счетчика семафора Ец11вропв. Есть один важный аспект, связанный с семафорами, который мы еше не обсуждали. Напомним предыдущее описание проблемы синхронизации конкуренции. Операции над совместно используемыми данными не должны прерываться. Если вторая операция может начинаться в то время, когда первая операция все еше выполняется, то совместно используемые данные могут быть повреждены. Семафоры сами по себе являются совместно используемыми объектами, так что операции нал семафорами могут порожлать ту же проблему.

Следовательно, важно. чтобы операции над семафорами нельзя было прерывать. Многие компьютеры имеют команды (выполнение которых нельзя прерывать), разработанные специально для операций над семафорами. Если таких команд нет, то использование семафоров лля синхронизации конкуренции становится серьезной проблемой, не имеющей простого решения. Язык Р(Л был первым языком программирования, допускающим параллельное выполнение задач. Он позволял программам пользователя выполнять любую подпрограмму параллельно с вызывающим ее модулем. Механизм синхронизации этих параллельных вычислений был. однако, совершенно неадекватным.

Он состоял только из бинарных семафоров, называемых событиями (ечепгв), и был способен определить момент, когда задача закончила свое выполнение. Язык А1.0ОЕ 68, допускавший параллельность на уровне составных операторов, содержал тип данных лля семафоров под названием вава. 12.3.4. Оценка 12.3. Семафоры Применение семафоров для синхронизации взаимодействия создает небезопасную среду программирования. Не существует способа статической проверки правильности их применения, зависящего от семантики программы, в которой они появляются.

Так, если в примере с буфером пропустить оператор иагс (ежрсувротв) в ЗадаЧе ргос(цсег, зто может привести к переполнению буфера. Если в этом примере пропустить оператор на(г ( йи11в рог в ) в задаче соп веже г, зто может привести к потере значимости.

Если в обеих задачах пропустить операторы ге1еаве, это может привести к взаимной блокировке. Все это — примеры отказов механизма синхронизации взаимодействия. Проблемы надежности, связанные с использованием семафоров при синхронизации взаимодействия, возникают также при их использовании для синхронизации конкуренции. Если пропустить оператор назг (ассевв) в какой-либо из задач, зто может привести к несанкционированному доступу к буферу. Пропуск оператора ге1еаве (ассевв ) в какой-либо из задач приводит к взаимной блокировке. Все зто — примеры отказов механизма синхронизации конкуренции. Заметив опасность использования семафоров, Пер Бринч Хансен (Рег Вг)псЬ Напзеп) написал: "Семафор — это элегантный инструмент синхронизации для идеального программиста, никогда не допускающего ошибок" (Вппс!) Напзеп, 1973). К сожалению, такие программисты — большая редкость.

12.4. Мониторы Один из способов решения задач, связанных с использованием семафоров в параллельной среде, — инкапсулировать совместно используемые структуры данных вместе с операциями и скрыть их представление. т.е. слелать совместно используемые структуры данных абстрактными типами ланных. Это решение может обеспечить синхронизацию конкуренции без применения семафоров путем перекладывания ответственности за синхронизацию на систему полдержки выполнения программ.

12.4.з. Введение Когда были сформулированы понятия абстракции данных, люди, вовлеченные в их разработку, попытались применить те же концепции к совместно используемым данным в параллельных средах программирования, для того чтобы создать мониторы. Следуя идеям Пера Бринча Хансена (Вг!пс)з Напзеп, 1977, рабе хт!), Эдсгер Дийкстра предложил в 1971 году собрать все операции синхронизации над совместно используемыми данными в отдельный программный модуль. Бринч Хансен формализовал зто понятие применительно к операционным системам (Вг(пс)з Напзеп, 1973). В следующем году Хоар (Ноаге) назвал зти структуры мониторами (Ноаге, 1974). Первым языком программирования, содержащим мониторы, был Сопсцггеп! Рааса! (Вг!пей Напзеп, 1975).

Языки Моди)а (9(()п)з, 1977), СЬРЛс (Но!( ег а1., 1978) и Меза (Мпсйей ег а1., 1979) также поддерживают мониторы. Дальнейшее обсуждение мониторов основано на их реализации в языке Сопсцпеп( Рааса). Язык Сопсштепг Рааса) — это язык Рааса!, разработанный Виртом и дополненный тремя важными видами конструкций: классами нз языка Б!М()) А 67, процессами (так в языке Сопсцпепг Рааса! называются задачи) и мониторами.

Здесь мы обсудим свойства, связанные с поддержкой параллельного программирования: процессы и мониторы. Процесс в языке Сопсцггеп! Рааса) имеет синтаксическую форму, похожую на процедуру. но его семантика совершенно иная. Все процессы являются типами, поэтому они определяются операторами Куре следующего вида: Ку)ре имя процесса = ргосевв (формальные параметры) -- локальные объявления 316 Глава 12. Параллельность -- тело процесса а Поскольку процессы являются типами, их определения — это просто шаблоны фактических процессов. Поскольку для создания процессов используются объявления переменных, процессы можно созлавать как статически, так и динамически. Объявление переменной в качестве процесса создает код процесса, но не делает ничего, кроме этого. Чтобы разместить локальные данные процесса и начать его выполнение, следует использовать оператор диде с фактическими'параметрамн, как показано ниже: дпдк имя переменной процесса (фактические параметры) После выполнения оператора Дпйе процесс остается в состоянии текущей задачи на протяжении всей программы.

если он не будет заблокирован. Общий вид мониторов в языке Сопсцггепг Разса1 таков: куре имя монитора = жопъеок (формальные параметры) -- объявления совместно используемых переменных-- -- определения локальных процедур-- код инициализации-- а Экспортированные процедуры монитора синтаксически отличаются от локальных процедур только тем, что они содержат зарезервированное слово опеку в своих операторах ркооейике. Оператор з.пде с фактическими параметрами используется для создания экземпляров мониторов. Это вызывает размещение переменных процесса в динамической памяти и выполнение кода инициализации.

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

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

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

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