Р.У. Себеста - Основные копцепции языков программирования (2001) (1160794), страница 140
Текст из файла (страница 140)
Например, оператор АЫСХ 11вс1 (Ьпс(ех) Х1ТН 11вс2 (1пг(ех+1) указывает, что элемент массива 11вс1 с номером 1пс)ех должен быть размещен в памяти того же процессора, что и элемент массива 11вк2 с номером 1пс(ех+1 для всех значений переменной 1пс(ех. Ссылки на два массива в операторе АЫЯН появляются вместе в некотором операторе программы. Размещение их в одной и той же памяти (т.е. в одном и том же процессоре) гарантирует, что ссылки на них будут максимально близкими друг к другу. Рассмотрим следующий фрагмент кода: КЕАЬ 11вс 1 (1000), 11ак 2 (1000) 1ИТЕЯЕК 11ас 3 (500), 11вг 4 (501) !НРРЯ РКОСЕЯ50КЯ ргос (10) 12.8. Параллельность на уровне операторов ! НРГ$ 01ЯТНХВОТЕ (ВЬОСК) ОНТО ргося:: 11яс 1, 11як 2 !НРГд Аь1ОИ 11вс 3 (1пс)ех) И1ТН 11яс 4 (1пс(ех+1) 11вс 1 (1пс(ех) = 11яс 2 (1пс(ех) 11вс 3 (1пс(ех) = 11вс 4 (1пс)ех+1) При каждом выполнении приведенных выше операторов присваивания два указанных элемента массива будут помещены в память одного и того же процессора.
Операторы спецификации в языке НРР в действительности только предоставляют компилятору информацию, которую он может использовать, а может и не использовать, для оптимизации генерируемого им кода. Что именно сделает компилятор, зависит от уровня его сложности н конкретной архитектуры используемой машины. Оператор ГОРДЕЕ указывает набор операторов, которые могут выполняться параллельно. Например, ГОРАЬЬ (1пс(ех 1:1000) 11яс 1 (1пс)ех) = 11ят 2 (1пс)ех) означает присваивание элементов массива 11вс 2 соответствующим элементам массива 11яг 1. В принципе, это означает, что правые части )000 операторов присваивания могут быть вычислены до того, как будет выполнено хотя бы одно присванванне. Это позволяет параллельно выполнять все операторы присваивания. В этой главе описана только часть возможностей языка НРГ. Однако этого должно быть достаточно лля того, чтобы дать читателю общее представление о том, какого рода расширения языка полезны лля программирования на компьютерах, возможно, имеющих большое количество процессоров.
Параллельное выполнение может осуществляться иа уровне подпрограмм, или модулей, либо на уровне операторов. Мы используем понятие физической параллельности„ когда лля выполнения параллельных модулей действительно используются несколько процессоров. Если параллельные модули выполняются на одном процессоре, мы применяем термин "логическая параллельность". Логическую параллельность можно назвать базовой концептуальной моделью для любого вида параллельности.
Параллельные языки должны обеспечивать две основные возможности: взаимно исключающий доступ к совместно используемым структурам данных (синхронизация конкуренции) и взаимодействие задач. Для синхронизации конкуренции и синхронизации взаимодействия между параллельныМи задачами можно использовать семафоры. Однако при этом легко совершить ошибки, которые невозможно обнаружить с помощью компиляторов, редактора связей или системы поддержки выполнения программ. Мониторы — это абстракции данных, обеспечивающие естественный способ взаимно исключающего доступа к данным, совместно используемым несколькими задачами.
Мониторы есть в нескольких языках про(раммирования. Синхронизация взаимодействия в языках с мониторами обеспечивается некоторымн видами семафоров. Язык Аг(а предусматривает лля обеспечения параллельности сложные, но эффективные конструкции, основанные на модели передачи сообщений. Здесь основными параллельными модулями являются задачи, взаимодействующие между собой с помощью механизма Глава 1 2. Параллельность шне вопросы параллельности подробно обсуждены в работах Апдгежз апд 5сйпе!дег (1983), Но(г ег а).
(1978) и Веп-Ап' (1982). Концепция монитора н ее реалнзацня в языке Сопсштепг Рааса) разработаны н описаны в работе ВппсЬ Напзеп (1977). Впервые разработка модели передачи сообщений для управления параллельными модулямн обсуждалась в работах Ноаге (1978) и ВппсЬ Напзеп (1977). Подробное обсуждение разработки модели задач в языке Ада можно найти в работе 1сЬЬ!аЬ ег а1. (1979).
Язык Ада 95 детально описан в руководстве пользователя ААКМ (1995). Язык Н!8Ь-Рег)оппапсе РОКТКАХ описан в спецификации АСМ (1993Ь). ° а-...гс 1. 2. Назовите три уровня параллельности в программах. Какой уровень программной параллельности лучше всего поддерживается 51МО- компьютерами? Какой уровень программной параллельности лучше всего поддерживается М(МО- компьютерамн? Что представляет собой поток управления в программе? Дайте определение следующих понятий: задача, отдельная задача, синхрониза- ция, синхронизация конкуренции н синхронизация взаииодействия, живучесть н взаинная блокировка. Какие задачи не требуют никакой синхронизации? 4.
5. Вопросы рандеву, представляюшего собой синхронную передачу сообшеннй. Рандеву — это действие, выполняемое задачей, получаюшей сообщение, посланное другой задачей. Язык Ада содержит как простые, так н сложные методы управления рандеву между задачами. Язык Ада 95 содержит дополнительные возможности для поддержки параллельности, в первую очередь, защищенные объекты и асинхронную передачу сообшений. Язык )ача поддерживает параллельное выполнение модулей довольно простым, но эффективным способом. Любой класс, который либо является производным от класса ТЬхеад, либо реализует интерфейс КцппаЬ1е, может замешать наследуемый метод хоп, что приводит к параллельному выполнению кода этого метода с другими такими же методами н методом жауп.
Синхронизацня взаимодействия указывается с помошью определения методов с синхронизированным доступом к совместно используемым данным. Небольшие разделы кода также могут быть синхронизированы. Синхронизация взаимодействия осушествляется с помошью методов иазс н поезду. Язык Н18Ь-Реггоппапсе ГОКТКАХ содержит операторы для определения того, каким именно образом следует распределить данные между модулями памяти, связанными со многими процессорами. В него также входят операторы для указания наборов операторов, которые должны выполняться параллельно.
12. 13. 14. 15. 16. 17. 18. 19. 20. Что делает метод а1еер языка 1ача? Что делает метод уйе1д языка 1ача? 21. 22. 23. 24. 25. 26. 3. 4. 542 Глава 1 2. Параллельность 7. 8. 9. 10. 1!. Назовите вопросы разработки полдержкн параллельности в языке.
Опишите, как действуют операции на1С и ге1еаве над семафорами. Что такое бинарный семафор? Что такое семафор-счетчик? Назовите основные проблемы использования семафоров для синхронизации? Какие преимушества имеют мониторы по сравнению с семафорами? Дайте определение понятий: оператор ассере„оператор епкку, актар, сер- вер, расширенный оператор ессерт„открытый оператор ассерТ закры- тый оператор ассерс н завершенная задача. Какая параллельность является более обшей: параллельность, обеспечиваемая мо- ниторами, нлн параллельность, обеспечиваемая передачей сообщений? Как создаются задачи в языке Ада: статически нли динамически? Для каких целей предназначен расширенный оператор ассерс? Каким обраюм для задач в языке Ада обеспечивается синхронизация взаимодействия? В чем заключается преимушество защищенных объектов в языке Ада 95 над зада- чами при обеспечении доступа к совместно используемым данным? Опишите асинхронный оператор ве1еск в языке Ада 95.
Что именно программный модуль на языке !ача может запускать параллельно с методом жедп в прнклалной программе? Какие две конструкции языка 1ача могут быть синхронизированы? Какие методы языка 1ача используются лля поддержки синхронизации взаимодей- ствия? Объясните, зачем язык Зача содержит интерфейс йцппаЬ1е. Для чего предназначены операторы спецификации в языке Н18В-РегГоппапсе РО КТВД? Для чего служит оператор ГОРА!.1. в языке Н!8й-РегГоппапсе РОКТВАХ? Объясните четко н ясно, почему синхронизация взаимодействия не является про- блемой в среде программирования, имеющей симметричный модуль управления, но не поддерживающей параллельность. Что лучше предпринять системе прн обнаружении взаимной блокировки? Напишите задачу на языке Ада, реализуюшую универсальные семафоры.
Напишите задачу на языке Ада для управления совместно используемым буфером, таким же, как н в описанном в главе примере, но с применением задачи, реали- зующей семафоры нз упражнения 3. 5. Ожилание занятости — это метод, при котором задача ожидает определенного события, непрерывно проверяя, не произошло ли оно. Какая главная проблема связана с этим подходом? б. Прелположим, что в примере "производитель-потребитель" из раздела 12.3 мы неправильно заменили выражение ге1еаве (асеева) в процессе-производителе на выражение найс ( ассе аз ) .
Что может произойти при выполнении системы в результате этой ошибки? 7. По любой книге, посвященной программированию на языке ассемблера машины ЧАХ, определите, какие машинные команды поддерживают создание семафоров. 8. По любой книге, посвященной программированию иа языке ассемблера компьютеров, использующих процессор !и!е! Реп!!цш, определите, какие машинные команды полдерживают создание семафоров. 9.