Главная » Просмотр файлов » Н. Вирт - Программирование на языке Модула-2

Н. Вирт - Программирование на языке Модула-2 (1160777), страница 27

Файл №1160777 Н. Вирт - Программирование на языке Модула-2 (Н. Вирт - Программирование на языке Модула-2) 27 страницаН. Вирт - Программирование на языке Модула-2 (1160777) страница 272019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

Но здесь справедливость достигается благодаря передвижению по кольцевомусписку, начиная с ТекПроцесс. Дополнительный признак, называемый готов, используется длябыстрого определения того, готов ли процесс для возобновления. (Это решение предпочтительнеетого, когда ждущие процессы убираются из кольцевого списка, а затем требуют повторнойвставки при реактивации. Предпочтение основывается на предположении, что число процессов неслишком велико.)В принципе взаимодействие процессов должно быть заключено внутрь монитора, т.е.модуля, гарантирующего взаимное исключение.

Однако, поскольку мы условились, что этотмодуль реализуется на однопроцессорной машине, параллельное взаимодействие невозможно поопределению и, следовательно, описание монитора, т.е. указание приоритета в заголовке модуля,избыточно.31. УПРАВЛЕНИЕ ВНЕШНИМИ УСТРОЙСТВАМИ,ПАРАЛЛЕЛЬНОСТЬ И ПРЕРЫВАНИЯВ предыдущем разделе мы обсудили системы с несколькими процессами и то, какимитировать параллельные процессы, разделяя между ними во времени один процессор. Теперьмы рассмотрим обратную ситуацию, когда несколько процессоров участвуют в выполненииединственного процесса.

Рассмотрим для простоты циклический процесс, состоящий из двухчастей - поставщика и потребителя. Пусть этот процесс изображается так:LOOP произвести(х); потребить(х) ENDТеперь допустим, что каждая часть должна выполняться особым процессором. Понятно,что в каждый момент только один из двух процессоров может быть активным. Следовательно, ихнадо синхронизировать, что легко достигается введением синхронизирующей переменной s,имеющей смысл "потребитель активен" (с начальным значением FALSE). Каждый из этих двухпроцессоров описывается своей собственной программой, которые в свою очередь тожециклические.Поставщик:LOOP ждать(NOТ s);произвести(х); s := TRUEEND135Потребитель:LOOP ждать(s);потребить(х); s := FALSEENDОперацию walt(b) можно понимать как эквивалентную операторуREPEAT (*опрос*) UNTIL bПеременные х и s образуют интерфейс между процессорами.

Эти переменные обычнореализуются как специальные аппаратные регистры, называемые регистрами устройств внекоторых ЭВМ доступ к ним осуществляется специальными командами (в соответствующихреализациях Модулы доступ к этим регистрам осуществляется с помощью специальныхпроцедур). В других ЭВМ эти регистры реализованы как ячейки памяти с Фиксированнымиадресами (так называемый ввод-вывод через адреса памяти).В качестве примера рассмотрим взаимодействие процесса ввода с клавиатуры с"регулярным" процессом-потребителем, запрограммированным для ЭВМ PDP-11. Эта машинаиспользует ввод-вывод через адреса памяти.

Ее переменная состояния клавиатуры s, например,представляется седьмым битом слова памяти с адресом 777560В, а буферная переменная х - 0..7битами слова с адресом 777562В. Поскольку в PDP-11 может (в принципе) быть много такихинтерфейсных регистров, то соответствующая реализация предоставляет возможность задать вописании адрес переменной, как в приведенном ниже примере.

Мы настоятельно рекомендуемпрограммистам ограничить использование этого средства переменными, представляющими собойрегистры устройств, и избегать злоупотребления ими для других целей. Два соответствующихрегистра вводятся следующими описаниями:VAR s[777560B]: BITSET;х[777562В]: CHAR;Тогда как программа-поставщик реализована на аппаратном уровне, программапотребитель записывается по следующей схеме:LOOPREPEAT UNTIL 7 IN s;потребить(х)ENDОтсутствие оператора "s := TRUE" объясняется тем, что интерфейс клавиатурыспроектирован так, что обращение к х автоматически устанавливает s.На этом завершим, описание простого примера работы с клавиатурой, использующегоциклический опрос устройства.Недостаток описанной схемы в том, что процессы слишком тесно связаны, они жесткочередуются. Пока один активен - другой бездействует.

Часто требуется, чтобы процессы не былитак тесно связаны. Это достигается использованием буфера, причем желательно, чтобы его размербыл побольше (в разумных пределах). Для работы буфера мы используем уже описанную впредыдущей главе схему поставщик - потребитель. И тот и другой представляютсясопрограммами.136Здесь возникает следующий принципиальный вопрос: когда должны происходитьпередачи управления от сопрограммы к сопрограмме, т.е. обмен сигналами, так, чтобы обеспечитьобоим процессорам (центральному и контроллеру клавиатуры) максимальную активность приминимальном возможном взаимодействии?Для того чтобы отчетливее представить проблему, обратимся опять к конкретномупримеру, включающему клавиатуру в качестве поставщика. Процесс-потребитель чередуетдействия по извлечению элементов из буфера и их потреблению.

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

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

Фактически мы должны уметь прервать процесс-потребитель в любой точке. Или,выражаясь в терминах Модулы, должны уметь вставить оператор передачи управления впроизвольное место программы, не задавая его заранее.Большинство ЭВМ предлагает именно эту возможность — непрограммируемую передачууправления, называемую прерыванием. Для иллюстрации ее применения запрограммируем двапроцесса, использованные нами в качестве примера. Будем считать, что использование литерпроисходит в главной программе, мы же будем интересоваться лишь процедурой взять выборкилитеры из буфера.

Поставщик оформлен в виде сопрограммы, взаимодействующей с клавиатуройчерез интерфейсную переменную х. Совместно с частью процесса-поставщика, помещающейлитеру в буфер, эта переменная описывает интерфейс между процессами и, следовательно,заключена внутри монитора, скрывая буфер (см. предыдущий раздел). В то время как операциявыборки литеры из буфера оформлена в виде процедуры, действия по помещению в буфервставлены непосредственно в текст сопрограммы-поставщика, которая целиком содержитсявнутри монитора, поскольку выработка новой литеры клавиатурой не считается ограниченнойтребованием взаимного исключения процессов. Эта сопрограмма представляет собой то, что частоназывают обработчиком прерываний.MODULE Клавиатура [4];IMPORT ADR,SIZE,WORD,NEWPROCESS,TRANSFER,IOTRANSFER;EXPORT взять,n(*только на чтение*);CONST N = 32;VAR x[777562B]: CHAR; (*данные клавиатуры*)s[777560B]: BITSET; (*состояние клавиатуры*)VAR n,in,out: CARDINAL;буфер: ARRAY [0..N-1] OF CHAR;137ПОСТ,ПОТР: ADDRESS;РОбл: ARRAY [0..177B] OF WORD;PROCEDURE B3ЯTЬ(VAR ch: CHAR);BEGIN (* должна вызываться только при n > 0 *)IF n > 0 THENch := буФер[оut]; out := out + 1 MOD N;n := n - 1ELSE ch := 0CENDEND взять;PROCEDURE поставщик; (* работает как сопрограмма *)BEGINLOOP IOTRANSFER(ПОСТ.ПОТР,60В);(* нажатие клавиши на клавиатуре вызывает действие, подобное операцииTRANSFER(ПОТР,ПОСТ) в текущей точке программы-потребителя (=прерывание), и поставщик возобновляется в этой точке *)IF n < N THENбуфер[in] := х; in := (in + 1) MOD N;n := n + 1(* игнорировать литеры, если буфер полон *)END ENDEND поставщик;BEGIN n := 0; in := 0; out := 0;NEWPROCESS(поставщик,ADR(РОбл),SIZE(РОбл),ПОСТ);EXCL(s,6); TRANSFER(nOTP.nOCT)END КлавиатураПриведенный модуль описывает обработку литер с клавиатуры для ЭВМ PDP-11.

Ониспользует средства, зависящие от реализации, в частности интерфейсные переменные х и s.Необходимо упомянуть три детали:1. Передача управления из прерывающей сопрограммы (поставщик) в прерываемую(потребитель) должна осуществляться оператором IOTRANSFER(источник,приемник,ВектПрер)138где ВектПрер - дополнительный параметр, обозначающий зависящий от аппаратуры адрес такназываемого вектора прерывания.2.

Для каждого устройства должна быть явным образом включена возможностьпрерывания. Это осуществляется оператором EXCL(s,6), который сбрасывает бит запретапрерывания в регистре состояния клавиатуры. Начиная с этого момента, прерывание будетвозникать всякий раз, когда будет нажиматься какая-либо клавиша на клавиатуре.3. Важная возможность - запрещение непрограммируемого прерывания в тех точках, гдеоно могло бы оказаться опасным. Прерывания должны запрещаться во время выполнениякритических операций над разделяемыми переменными.

Следовательно, все такие операциидолжны быть помещены внутрь монитора, который бы гарантировал непрерываемость его частей.Это достигается указанием приоритета прерывания, который жестко определяетсяобслуживаемым внешним устройством; для клавиатуры PDP-11 приоритет равен четырем.(Отметим, что простой прием достижения взаимного исключения - запрещение прерываний-)4. ЭВМ, имеющие так называемую систему приоритетных прерываний, позволяютвыключать сигналы прерываний избирательно, в зависимости от назначенных приоритетов.Каждый источник прерываний имеет свой Фиксированный приоритет q. Процессор же имеет непросто состояния запрета и разрешения прерываний, а уровень прерывания р, подразумевающий,что процессор может быть прерван только сигналами с приоритетом q > р.На этом примере ввода с клавиатуры закончим демонстрацию использования сопрограмми непрограммируемых передач управления.

Добавим еще, что описанный здесь циклическийпроцесс часто называют обработчиком прерываний, циклическая природа которого скрытасодержащимся в нем оператором передачи управления от сопрограммы к сопрограмме ипоследующим возвратом управления. Мы отдаем радикальное предпочтение явной записициклического процесса и в особенности подчеркиваем, что удобнее всего рассматриватьпрерывания как непрограммируемые передачи управления.Мы должны также упомянуть, что во многих вычислительных системах работа свнешними устройствами (а следовательно, и использование прерываний) является прерогативойрезидентной операционной системы. В таких ЭВМ программист не должен пользоваться этимисредствами, даже если такие нарушения и могут остаться незамеченными, поскольку эти действиямогут представлять серьезную угрозу правильной работе операционной системы, а значит, идругим ее пользователям.

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

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

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

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