Снос зданий:
ecosnos.ru
Главная  Микроустройства: номенклатура изделий электронной промышленности 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 [ 77 ] 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95

Утверждения RETURN и^ЕХ1Т. Утверждение EXIT служит для прерывания циклической последовательности операторов. Утверждение RETURN (RETURN Е, Е - специфицирует вычисленное значение) размещается в теле процедуры (функции) и возвращает управление вызывающей программе.

Операционная среда. Исполняющая система Модула-2 состоит из компилятора, редактора, отладчика, управляющей программы, включающей загрузчик [15].

Управляющая программа является резидентной. Она получает имя файла, который должен быть загружен, загружает его и передает ему управление. После выполнения файла управление возвращается управляющей программе (ее имя MODULA в системе на базе PDP-11).

Компилятор также загружается посредством Управляющей программы (его имя СОМР). Он запрашивает имя файла, который должен компилироваться. Рекомендуемые расширения для имен файлов, содержащих программу: MOD - для исполняющих модулей; DEF - для определяющих модулей, например, RR.MOD, SIMPLE.DEF и т. д. Компилятор генерирует на выходе листинг (имя файла имеет расширение LST) и объектный код (расширение LNK в случае, когда обработан-исполняющий модуль, и расширение SYM, когда обрабатывался определяющий модуль).

Редактор (его имя LINK) объединяет все объектные модули, присваивает им общее имя и расширение LOD. Выходом редактора является образ машинного кода, который содержит машинные команды и указания для загрузчика о размещении сегментов программы.

Управляющая система предоставляет большое число утилит, предназначенных для часто используемых операций: создания, чтения, записи, закрытия файлов, преобразования данных, управления периферийными устройствами и т. д.

Утилиты не являются частью определения языка и на каждой вычислительной установке имеют свои специфические особенности. Их состав определяется операционной системой, аппаратурой и классом решаемых задач... Некоторые утилиты содержат .процедуры для управления вводом-выводом (утилиты InOut, Streams, Files), другие - позволяют из программ пользователя выполнять загрузку задач, диспетчеризацию процессов, выделение и освобождение памяти по запросам из программ.

Загрузчик Loader поставляет процедуру Call, которая предназначена для загрузки модулей, вырабатываемых редактором. Переменная FirstFree, поставляемая модулем, определяет адрес верхушки стека после загрузки программы. Спецификация заголовка процедуры следующая:

PROCEDURE Call (fn: FileName; VAR LoadRes: LoadResultType, VAR ExecutionRes: Error Type);

где fn - имя файла, который должен быть загружен, LoodRes- результат загрузки, ExecutionRes - результат выполнения, First-Free - адрес свободной области после загрузки.

Стандартный модуль Storage поставляет процедуры ALLOCATE, DEALLOCATE и SetMode для управления памятью. Программист имеет возможность импортировать эти процедуры из других модулей, которые он может составить по своему усмотрению.



Спецификации заголовков стандартных процедур следующие:

procedure ALLOCATE (VAR р : ADDRESS; SIZE : CARDINAL); procedure deallocate;(VARp : ADDRESS; size : CARDINAL); procedure Set Mode (m : CARDINAL);

Первые две процедуры выделяют и освобождают память, соответственно (р - начальный адрес, SIZE - размер области). Третья процедура устанавливает реакцию на выполнение ALLOCATE. Если т= 1, то ALLOCATE выполняется аварийно; если m = 2, то ALLOCATE выполняется как пустой оператор, так как памяти недостаточно.

Модуль ProcessSheduler, поставляющий процедуры для диспетчеризации процессов, базируется на концепциях сопрограмм и использует механизм создания процессов (NEWPROCESS) и их запуска (TRANSFER). Так же как и остальные модули, модуль ProcessSheduler может быть заменен пользовательским модулем, отвечающим более полно нуждам конкретной разработки.

Средства, зависящие от аппаратуры. Модула-2 содержит средства, необходимые для организации так называемых операций нижнего уровня, которые оперируют объектами, определяемыми конкретной аппаратурой или реализацией. Такие операции рекомендуется оформлять в модулях нижнего уровня и для доступа к конкретным типам и процедурам указывать имя модуля SYSTEM для списка IMPORT.

Модуль SYSTEM передает типы; WORD, ADDR ESS, PROCESS, процедуры: NEWPROCESS, TRANSFER, lOTRANSFER и другие, определяемые иепользуемой операционной системой.

Тип WORD совместим с любым типом, определенным в языке, который использует для размещения некоторого данного одно слово памяти; это - типы CARDINAL, INTEGER, BITSET и все указатели. Для данных типа WORD может быть применима только операция присваивания.

Тип ADDRESS определяется как ADDRESS-POINTER ТО WORD.

Пример использования типа ADDRESS: MODULE Storage;

FROM SYSTEM IMPORT ADDRESS;

EXPORT Allocate;

VAR lastused : ADDRESS;

PROCEDURE Allocate (VAR a : ADDRESS; n : CARDINAL); BEGINa : = lastused; INC (lastused, n) END Allocate; BEGIN lastused : = 0 END storage

Процедура Allocate позволяет выделить память под размещение некоторого объекта. Она возвращает начальный адрес размещения и запоминает следующий свободный адрес памяти.

Для мультипрограммирования Модула-2 представляет некоторые базисные средства, которые позволяют специфицировать квазипараллельные процессы, При этом термин процесс определяет понятие сопрограммы.



Новый процесс создается вызовом следующей процедуры: PROCEDURE NEWPROCESS (Р : PROC; А : ADDRESS;

п: CARDINAL; VAR PI : PROCESS),

где P - имя процедуры, которая будет реализовать процесс; А - базовый адрес для размещения рабочей области процесса; п - размер этой области; Р1 - имя процесса, для которого Р является программой, а А - его адресом рабочей области.

Передача управления между процессами осуществляется вызовом процедуры: PROCEDURE TRANSFER (VAR PI, P2 : PROCESS). Эффект вызова заключается в том, что текущий процесс приостанавливается, с ним связывается идентификатор Р1, и управление получает пропесс Р2.

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

PROCEDURE IOTRANSFER (VAR PI, Р2 : PROCESS;

va : CARDINAL)

По аналогии с процедурой TRANSFER вызов IOTRANSFER приостанавливает процесс, обратившийся к устройству va, и связывает его с идентификатором Р1, затем запускает приостановленный ранее процесс Р2. После завершения работы устройства запускается процесс, связанный с Р1, а прерванный процесс связывается с идентификатором Р2.

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

Язык Паскаль

Язык программирования Паскаль разработан на основе языков АЛГОЛ-60 и АЛГОЛ-W [14, 27], При создании языка были решены две основные задачи. Во-первых, разработан язык, ориентированный на обучение программированию как систематической дисциплине, основанной на ряде фундаментальных понятий, отраженных в языке. Во-вторых, осуществлена реализация языка надежного и эффективного при его использовании в существующих вычислительных средах, в том числе и на микроЭВМ [55]. Паскаль нашел применение также и как язык программирования системного математического обеспечения ЭВМ.

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



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 [ 77 ] 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95