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

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

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

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

ПРОЦЕССЫМодула-2 разработана прежде всего для реализации на обычной однопроцессорноймашине. Для мультипрограммирования она предлагает только некоторые основные возможности,позволяющие определять квазипараллельные процессы и действительную параллельность дляпериферийных устройств. Под процессами здесь понимаются сопрограммы, исполняемые (одним)процессором поочередно.13.1. Порождение процессов и передача управленияНовый процесс порождается обращением кPROCEDURE NEWPROCESS(P:PROC; A:ADDRESS;165n:CARDINAL; VAR p1: ADDRESS) (!)гдеP - процедура, образующая процесс,A - базовый адрес рабочего пространства процесса,n - размер этого пространства,p1 - параметр результат.Новый процесс с программой Р и рабочим пространством А размером п присваивается p1.Этот процесс размешается, но не активируется.

Р должна быть, процедурой без параметров,описанной на уровне 0.Передача управления между двумя процессами осуществляется обращением кPROCEDURE TRANSFER(VAR p1,p2:ADDRESS) (!)При этом приостанавливается выполнение текущего процесса, он присваивается p1, ивозобновляется процесс, присвоенный р2. Очевидно, что р2 должен к этому моменту иметьзначение, присвоенное либо обращением к NEWPROCESS, либо к TRANSFER. Обе процедурыдолжны импортироваться.

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

Эта передача управления черезпрерывание (в реализации Модулы-2 на PDP-11) подготавливается одновременно с передачейуправления после инициализации устройства. Эти действия объединяются обращением кPROCEDURE IOTRANSFER(VAR p1,p2:ADDRESS;va:CARDINAL) (!)Аналогично TRANSFER, вызов IOTRANSFER приостанавливает вызывающий процессустройства, присваивая его p1, возобновляет (передает управление) приостановленный ранеепроцесс р2 и, кроме того, осуществляет передачу управления по прерыванию, возникающему призавершении работы устройства, присваивая прерванный процесс р2 и возобновляя процессустройства p1.

Здесь va - адрес вектора прерывания, назначенный устройству. ПроцедураIOTRANSFER должна импортироваться, и она рассматривается как зависящая от реализации наPDP-11.Необходимо, чтобы в некоторых случаях прерывания можно было откладывать(запрещать), например при обращении к переменной, общей для взаимодействующих процессов,или когда требуется выполнить другую операцию с более высоким приоритетом. Поэтому каждыймодуль снабжается некоторым уровнем приоритета, и каждое устройство, которое может вызватьпрерывание, также снабжается некоторым уровнем приоритета. Исполнение программы можетбыть прервано тогда и только тогда, когда устройство, вызывающее прерывание, имеет приоритетбольший, чем уровень приоритета модуля, содержащего исполняемый в данный момент оператор.В то время как приоритет устройства определяется аппаратурой, уровень приоритета каждогомодуля указывается в его заголовке.

Если явная спецификация отсутствует, любая процедураимеет такой же уровень, как и вызывающая программа. IOTRANSFER можно использовать внутримодулей только со специфицированным приоритетом.16614. ЕДИНИЦЫ КОМПИЛЯЦИИТекст, воспринимаемый компилятором как единое целое, называется единицейкомпиляции. Имеются три разновидности единиц компиляции: главные модули, модулиопределений и модули реализации. Главный модуль - основная программа: он состоит из такназываемых программных модулей.

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

Соответствующий модуль реализации содержит полные описания процедур и, крометого, возможно, описания неэкспортируемых объектов. Модули определений и реализацийсуществуют в паре. И тот и другой могут содержать списки импорта, и все объекты, описанные вмодуле определений, доступны в соответствующем модуле реализации без явного импорта.$МодульОпределений = DEFINITION MODULE Идентификатор$";"(Импорт) {Определение} END$Идентификатор ".".(!)$Определение = CONST {ОписаниеКонстанты ";*} |$TYPE {Идентификатор ["=" Тип]":"}|$VAR {ОписаниеПеременной ":"}|$ЗаголовокПроцедуры ";".$ПрограммныйМодуль = MODULE Идентификатор$[Приоритет]":"{Импорт} Блок Идентификатор ".".$$ЕдинииаКомпиляции = МодульОпределений |[IMPLEMENTATION] ПрограммныйМодуль.Очевидно, что модуль определений представляет собой интерфейс между модулемреализации, с одной стороны, и его пользователями - с другой.

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

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

Скрыто экспортировать можно только тип указатель. Ко всемскрытым типам применимы присваивания и проверка на равенство.Как и в случае локальных модулей, тело модуля реализации действует как инициализаторсвоих локальных объектов. Перед его исполнением инициализируются импортируемые модули впорядке их перечисления. Если среди модулей имеются циклические ссылки, порядок их167инициализации не определен, который скрывает свойства типа.

Скрыто экспортировать можнотолько тип указатель. Ко всем скрытым типам применимы присваивания и проверка на равенство.Как и в случае локальных модулей, тело модуля реализации действует как инициализаторсвоих локальных объектов. Перед его исполнением инициализируются импортируемые модули впорядке их перечисления. Если среди модулей имеются циклические ссылки, порядок ихинициализации не определен.ПРИЛОЖЕНИЕ 1 СИНТАКСИС МОДУЛЫ-21 Идентификатор = Буква {Буква | Цифра}.2 Число=Целое | Действительное.3 Целое = Цифра { Цифра } | ВосьмеричнаяЦиФра4{ ВосьмеричнаяЦиФра } ("В"|"С") |5Цифра { Шестнадцатеричнаяцифра } "Н".6 Действительное = Цифра {Цифра}7"." {Цифра} [Порядок].8 Порядок = "Е" [ "+" | "-" ] Цифра { Цифра }.9 ШестнадцатеричнаяЦифра =10Цифра |"A"|"B"|"C"|"D"|"E"|"F".11 Цифра = ВосьмеричнаяЦиФра |"8"|"9".12 ВосьмеричнаяЦиФра =13"0"|"1"|"2"|"3"|"4"|"5"|"6"|"7".14 Цепочка = "'" { Литера ) "'" | '"' { Литера } '"'.15 КвалИдент = Идентификатор { "." Идентификатор }.16 ОписаниеКонстанты =17Идентификатор "=" КонстВыражение.

181 КонстВыражение = Выражение.19 ОписаниеТипа = Идентификатор "=" Тип.20 Тип = ПростойТип | ТипМассив | ТипЗапись21| ТипМножество | ТипУказатель | ТипПроцедура.22 ПростойТип = КвалИдент | Перечисление23| ТипДиапазон.24 Перечисление = "(" СписИдент ")" .25 СписИдент = Идентификатор { "," Идентификатор } .26! ТипДиапазон = [Идентификатор]27"[" КонстВыражение ".." КонстВыражение "]" .28 ТипМассив = ARRAY ПростойТип {"," ПростойТип}16829OF Тип.30 ТипЗапись = RECORD ПослСписковКомпонент END .31 ПослСписковКомпонент = СписокКомпонент32{":" СписокКомпонент}.33 СписокКомпонент = [СписИдент ":" Тип|3435!36CASE [Идентификатор]": "КвалИдент OF Вариант{"|" Вариант }[ELSE ПослСписковКомпонент] END].37! Вариант = [СписокМетокВарианта ":"38ПослСписковКомпонент].39 СписокМетокВарианта = МеткиВарианта40{"," МеткиВарианта}.41 МеткиВарианта=КонстВыражение [".."КонстВыражение].42 ТипМножество = SET OF ПростойТип.43 ТипУказатель = POINTER TO Тип.44 ТипПроцедура = PROCEDURE [СписокФормТипов] .45 СписокФормТипов = "(" [[VAR] ФормТип46{"," [VAR] ФормТип }] ")" [":" КвалИдент].47 ОписаниеПеременной - СписИдент ":" Тип.48 Обозначение = КвалИдент {"." Идентификатор |49"[" СписВыражений "]" | "^" }.50 СписВыражений = Выражение {"," Выражение}.51 Выражение = ПростоеВыражение52[Отношение ПростоеВыражение].53 Отношение = "=" | "#" | "<" | "<="54| ">" | ">=" | IN.55 ПростоеВыражение = ["+"|"-"] Слагаемое56{ОперацияТипаСложения Слагаемое}.57 ОперацияТипаСложения = "+" | "-" | OR.58 Слагаемое = Множитель59{ОперацияТипаУмножения Множитель).60 ОперацияТипаУмножения = "*" | "/" | DIV16961| MOD | AND.62 Множитель = Число | Цепочка | Множество |63Обозначение [ФактическиеПараметры] |64"(" Выражение ")" | NOT Множитель.65 Множество = [КвалИдент]66"{"[Элемент{","Элемент} ]"}".67! Элемент = Выражение [".." Выражение].68 ФактическиеПараметры = "(" [СписВыражений]")".69 Оператор = [Присваивание | ВызовПроцедуры |70УсловныйОператор | ОператорВыбора |71ЦиклПока | ЦиклДо | БезусловныйЦикл |72ЦиклСШагом | ОператорПрисоединения |73EXIT | RETURN [Выражение]].74 Присваивание = Обозначение ":=" Выражение.75 ВызовПроцедуры =76Обозначение [ФактическиеПараметры].77 ПослОператоров = Оператор {":" Оператор).78 УсловныйОператор = IF Выражение THEN ПослОператоров79{ELSIF Выражение THEN ПослОператоров)80[ELSE ПослОператоров] END.81 ОператорВыбора = CASE Выражение OF Альтернатива82{"I" Альтернатива } [ELSE ПослОператоров] END.83! Альтернатива = [СписокМетокВарианта ":"84ПослОператоров].85 ЦиклПока = WHILE Выражение DO ПослОператоров END.86 ЦиклДо = REPEAT ПослОператоров UNTIL Выражение.87 ЦиклСШагом = FOR Идентификатор ":="88Выражение ТО Выражение89[BY КонстВыражение] DO ПослОператоров END.90 БезусловныйЦикл = LOOP ПослОператоров END.91 ОператорПрисоединения = WITH Обозначение92DO ПослОператоров END.17093 ОписаниеПроиедуры = ЗаголовокПроиедуры ":"94Блок Идентификатор .95 ЗаголовокПроиедуры = PROCEDURE Идентификатор96[ФормальныеПараметры].97 Блок = (Описание) [BEGIN ПослОператоров] END.98 Описание = CONST {ОписаниеКонстанты ";"}|99TYPE {ОписаниеТипа ":"}|100VAR {ОписаниеПеременной ";" }|101ОписаниеПроиедуры ";" | ОписаниеМодуля ";".102 ФормальныеПараметры =103"(" [ФПСекция {":" ФПСекция}]")"[":" КвалИдент].104 ФПСекция = [VAR] СписИдент ":" ФормТип.105 ФормТип = [ARRAY OF] КвалИдент.106 ОписаниеМодуля = MODULE Идентификатор [Приоритет]107":" (Импорт) [Экспорт] Блок Идентификатор.108 Приоритет = "[" КонстВыражение "]".109 Экспорт = EXPORT [QUALIFIED] СписИдент ":".110 Импорт = [FROM Идентификатор] IMPORT СписИдент ":".111 МодульОпределений = DEFINITION MODULE Идентификатор 112!{Определение) END113":"{Импорт}Идентификатор ".".114 Определение = CONST {ОписаниеКонстанты ": "} |115TYPE {Идентификатор ["=" Тип]";"}|116VAR {ОписаниеПеременной ";"}|117ЗаголовокПроиедуры ";".118 ПрограммныйМодуль = MODULE Идентификатор119[Приоритет]":"{Импорт} Блок Идентификатор120 ЕдиницаКомпиляции = МодульОпределений |121[IMPLEMENTATION] ПрограммныйМодуль.Перекрестные ссылкиАльтернатива-83 82 81БезусловныйЦикл-90 71171БлокБуква119 107 -97 941 1Вариант-37 35 34ВосьмеричнаяЦиФра-12 11 4 3ВызовПроцедуры-75 69Выражение88 88 86 85 81 79 78 7481 67 67 64 -51 50 50 18Действительное-6 2ЕдиницаКомпиляции-120ЗаголовокПроцедуры117 -95 93Идентификатор119118 115 113 111 110 107 10695 94 87 48 34 26 25 2519 17 15 15 -1Импорт119 112 -110 107КвалИдент105 103 65 48 46 34 22 -15КонстВыражение108 89 41 41 27 22 -18 17Литера14 14МеткиВарианта-41 40 39Множество-65 62Множитель64 -62 59 58МодульОпределений120 -110Обозначение91 76 74 63 --48Оператор77 77 -69ОператорВыбора-81 70ОператорПрисоединения-91 72ОперацияТипаСложения-57 56ОперацияТипаУмножения-60 59Описание-98 97ОписаниеКонстанты114 98 -16ОписаниеМодуля-106 101ОписаниеПеременной116 100 -47ОписаниеПроцедуры101 -93172ОписаниеТипа99 -19Определение-114 112Отношение53 52Перечисление-24 22Порядок-8ПослОператоров97 92 90 89 86 85 84 82780 79 78 -77ПослСписковКомпонент38 36 -31 30Приоритет119 -108 106Присваивание-74 69ПрограммныйМодуль121 -118ПростоеВыражение-55 52 51ПростойТип42 27 27 -22 20Слагаемое-58 56 55СписВыражений68 -50 49СписИдент110 109 104 47 33-25 24СписокКомпонент-33 32 31СписокМетокВарианта83 -39 37СписокФормТипов-45 44Тип115 47 43 33 29 -20 19ТипДиапазон-26 23ТипЗапись-30 20ТипМассив-28 20ТипМножество-42 21ТипПроцедура-44 21ТипУказатель-43 21УсловныйОператор-78 70ФактическиеПараметры76 -68 63ФПСекция-104 103 103ФормальныеПараметры-102 96ФормТип-105 104 46 45Целое-3 2173Цепочка62 -14Цикл До-86 71ЦиклПока-85 71ЦиклСШагом-87 72Цифра-11 10 8 8 7 6 6 53 3 1Число62 -2Шестнадцатеричнаяцифра-9 5Экспорт-109 107Элемент-67 66 6614 14#5314 14(103 68 64 46 24)103 68 64 46 24*60+57 55 8‘66 50 46 39 27 25-57 55 8.119 113 48 15 7..67 41 27/60:104 103 83 47 46 37 34 33:=87 74;119 117 116 115 114 112 110 109107 103 101 101 100 99 98 9377 32<53<=53115 19 17>54>=54174AND61ARRAY105 27BEGIN97BY88CASE81 39CONST114 98DEFINITION111DIV60DO92 89 85ELSE82 80 36ELSIF79END112 97 92 90 89 85 82 8036 30EXIT73EXPORT109FOR87FROM110IF78IMPLEMENTATION121IMPORT110IN54LOOP90MOD61MODULE118 111 106NOT64OF105 81 42 34 28OR57POINTER43PROCEDURE44 95QUALIFIED109RECORD30REPEAT86175RETURN73SET42THEN79 78TO88 43TYPE115 99UNTIL86VAR116 104 100 46 45WITH91WHILE85[108 49 27{66|82 35]108 49 27}66^49ПРИЛОЖЕНИЕ 2СТАНДАРТНЫЕ ВСПОМОГАТЕЛЬНЫЕ МОДУЛИПриводимые далее модули оказались полезными в широком диапазоне применений.

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

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

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

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