Автоматизация

Вид материалаДокументы

Содержание


Основы программирования задач реального
Центральный процессор
Оперативная память
Центральный процессор
Подобный материал:
1   ...   8   9   10   11   12   13   14   15   ...   25
ГЛАВА 5

ОСНОВЫ ПРОГРАММИРОВАНИЯ ЗАДАЧ РЕАЛЬНОГО

ВРЕМЕНИ


§ 5.1. ОБЩИЕ ХАРАКТЕРИСТИКИ СМ ЭВМ


Структура вычислительного комплекса

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

Кроме того, для задач автоматизации научных исследований выпускают так называемые измерительно-вычислительные комплексы (ИВК), в состав которых помимо ЭВМ со стандартными внешними устройствами входят от одного до четырех крейтов КАМАК, связанных с ЭВМ и укомплектованных проблемно-ориен­тированным набором модулей в стандарте КАМАК.

Выбор программного обеспечения комплекса определяется ха­рактером стоящих перед ним задач, а также его аппаратной кон­фигурацией. Важнейший элемент программного обеспечения УВК или ИВК — его операционная система. Операционная система (ОС) представляет собой сложный программный комплекс, обес­печивающий управление всем вычислительным процессом: запуском и завершением отдельных программ, распределением памяти и дру­гих ресурсов машины, организацией и ведением очередей в случае появления нескольких запросов к одному внешнему устройству, выводом диагностических сообщений, связью с оператором и т. д. Оператор, вводя с клавиатуры терминала определенные команды, может заставить ОС выполнить требуемые действия: загрузить в память и запустить ту или иную системную (ассемблер, компиля­тор, редактор) или пользовательскую программу, вывести на экран терминала список и состав имеющихся библиотек, сообщить о на­личии и распределении ресурсов ЭВМ и т. д. Освоение средств диалога с ОС — важный элемент эффективного использования ми­ни-ЭВМ. В настоящее время наиболее распространенными опера­ционными системами УВК и ИВК на базе СМ-4 являются дисковые операционные системы РАФОС и ОС РВ.

Операционная система РАФОС ориентирована на решение задач реального времени с использованием минимальной конфигурации ЭВМ (в частности, она может использоваться на микро-ЭВМ «Электроника-60», укомплектованной накопителями на гибких маг­нитных дисках). Эта система позволяет создавать, отлаживать и выполнять в диалоговом однопользовательском режиме вычисли­тельные задачи на языках ФОРТРАН и БЭЙСИК; управлять ра­ботой связанных с ЭВМ физических установок с помощью программ, написанных на МАКРОАССЕМБЛЕРе; осуществлять совмещение режима реального времени с выполнением фоновой вычислительной задачи.

Операционная система ОС РВ — это универсальная мульти­программная многотерминальная операционная система реального времени. Система обеспечивает одновременную работу многих (до нескольких десятков) пользователей, каждый из которых с индиви­дуального терминала в диалоговом режиме может выполнять любую доступную комплексу вычислительную работу на языках ФОРТРАН, БЭЙСИК, МАКРОАССЕМБЛЕР и др. Одновременно система мо­жет обслуживать задачи реального времени по приему данных из физических установок и управлению ими. При этом всю работу по распределению ресурсов ЭВМ (оперативной памяти, внешних устройств, времени центрального процессора и т. д.) система берет на себя, обеспечивая одновременное выполнение многих задач. Однако положительные качества этой системы могут быть реали­зованы в полной мере лишь на достаточно мощном по аппаратной конфигурации УВК, оснащенном достаточным количеством пе­риферийных устройств.





Рис. 5.1. Конфигурация ВК СМ ЭВМ


Упрощенную модификацию ОС РВ можно использовать для уп­равления микро-ЭВМ типа Электроника-60, при этом она позволяет создавать иерархические ИВК, включающие в себя несколько ЭВМ Электроника-60, каждая из которых обслуживает «свою» экспери­ментальную установку, и связанную с ними более мощную мини-ЭВМ типа СМ-4, управляющую работой всех микро-ЭВМ нижнего уровня, принимающую от них массивы экспериментальной инфор­мации и производящую ее обработку.

Вообще, единство аппаратной и программной идеологии микро-ЭВМ Электроника-60 и мини-ЭВМ СМ-4 в сильной мере способст­вует их широкому распространению. Программный комплекс, раз­работанный для ЭВМ Электроника-60, может быть перенесен прак­тически без изменений на ЭВМ СМ-4, если по мере развития из­мерительной системы было признано целесообразным оснащение ее более мощными вычислительными средствами. Использование в этом случае мини-ЭВМ другого типа, например СМ-2 или ЕС-1010, потребовало бы разработки заново всего программного обеспечения эксперимента, что представляет собой чрезвычайно трудоемкую за­дачу. Широко практикуется и обратное: программы реального вре­мени, предназначенные для измерительного комплекса на базе ЭВМ Электроника-60, составляются и отлаживаются на ЭВМ СМ-4, где этот процесс протекает значительно быстрее и эффективнее, а уже затем переносятся на ЭВМ Электроника-60.

Конфигурация вычислительного комплекса (ВК) на базе ЭВМ СМ-4 традиционна для современных мини-ЭВМ (рис. 5.1). Рас­смотрим кратко основные элементы комплекса.

Центральный процессор служит, с одной стороны, для выполне­ния необходимых операций с данными, а с другой — для управле­ния работой электронных узлов ЭВМ.

В оперативной памяти хранятся выполняемые программы и дан­ные к ним. Объем оперативной памяти ЭВМ Электроника-60 от­носительно невелик — не более 56К байт. Однако ЭВМ СМ-4 может быть укомплектована памятью общим объемом до 248К байт. Это дает возможность организовать многопользовательский, мультипро­граммный режим, при котором в оперативной памяти одновременно находятся программы нескольких пользователей и периодическое переключение процессора с программы на программу не требует времени на загрузку программы в память. Мультипрограммный режим может быть использован и в сложных системах реального времени, когда наличие в памяти всех или некоторых элементов программного комплекса может заметно ускорить процесс обра­ботки данных.

Для того чтобы оператор мог вводить в ЭВМ команды и полу­чать ответные сообщения, в состав ВК входит системный терминал, в качестве которого обычно используется алфавитно-цифровой дис­плей. Если ВК работает в однопользовательском режиме, то сис­темный терминал выполняет также функции пользовательского. Пользователи поочередно работают за ним в диалоговом режиме, отлаживая или выполняя свои программы. Если же ЭВМ обслуживает многопользовательский ВК, в состав комплекса включаются кроме операторского еще и пользовательские дисплеи. Число их в зависимости от потребностей может доходить до нескольких десятков. Обычно они подключаются к ЭВМ через мультиплексор, использование которого экономит аппаратуру сопряжения с ЭВМ, так как через один мультиплексор к ЭВМ можно подключить 8—16 терминалов.

Рассмотрим несколько подробнее структуру оперативной памяти и центрального процессора ЭВМ типа СМ-4.


Оперативная память

Как известно, оперативная память ЭВМ представляет собой электронное устройство, состоящее из большого числа двоичных запоминающих элементов, а также схем управления ими. Мини­мальный объем информации, к которому имеется доступ в памяти, составляет один байт. Чаще, однако, считывание и запись происхо­дят парами байтов — словами. Каждое машинное слово, таким образом, содержит 16 двоичных разрядов и хранится в 16-разряд­ной ячейке памяти. В дальнейшем для простоты изложения под словом будет часто пониматься также и место его хранения — ячейка памяти ЭВМ.

Все байты оперативной памяти нумеруются, начиная с нуля. В каждом машинном слове имеются четный и нечетный байты, причем четный байт считается младшим (рис. 5.2). Младший байт слова содержит разряды с 0-го по 7-й, старший байт — с 8-го по 15-й. Номера слов совпадают с номерами четных (младших) байтов. Нужные слова или байты отыскиваются в памяти по их номерам, которые выполняют функции адресов.




Рис. 5.2. Структура оперативной памяти


Программа, находящаяся в оперативной памяти, содержит команды и данные. Команда — это указание процессору выполнить ту или иную элементарную операцию: увеличить или уменьшить содержимое некоторого машинного слова, перенести число из одно­го слова памяти в другое, сдвинуть содержимое слова вправо или влево на столько-то разрядов и т. п. Команда хранится в памяти в виде условного двоичного кода, который может занимать одно, два и три машинных слова.

Данные могут представлять собой числа или последователь­ность символов (букв, цифр, различных знаков). Кодировка чисел зависит от их описания. Целые числа, с которыми чаще всего оперируют программы, написаные на АССЕМБЛЕРе, хранятся в памяти просто в виде их двоичных эквивалентов, занимая одно или два слова; вещественные числа (их используют программы, написанные на ФОРТРАНе) занимают два или четыре слова и со­держат двоичную мантиссу со знаком и двоичный порядок. Нако­нец, символы записываются в памяти с помощью специального кода ASCII, в котором каждому символу соответствует определен­ное двоичное число, занимающее всегда 1 байт.

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

Каждый разряд восьмеричного числа может принимать 8 зна­чений, от 0 до 7. Восемь различных комбинаций единиц и нулей, от 000 до 111, содержатся также в трех двоичных разрядах. Таким образом, каждая тройка двоичных разрядов эквивалентна одной восьмеричной цифре и перевод двоичного числа в восьме­ричное и наоборот не представляет труда (рис. 5.3).

Для представления содержимого 16-разрядного слова в вось­меричной системе требуется шесть восьмеричных цифр, причем стар­шая цифра может принимать лишь значения 0 или 1. Таким об­разом, диапазон целых положительных чисел, которые могут быть записаны в одном машинном слове, заключен в пределах от 0000008 до 1777778 (или от 0 до 6553510).





Рис. 5.3. Представление содержимого машинного слова в восьмеричной форме


При необходимости использовать в программе положительные и отрицательные целые числа знак числа указывают в самом старшем разряде слова (0 означает плюс и 1 —минус), а под значащую часть числа отводят оставшиеся 15 разрядов. При этом отрица­тельные числа записываются в дополнительном коде, который обра­зуется из прямого путем замены всех нулей единицами и наобо­рот (обратный код) и прибавления к полученному числу единицы:

прямой код числа 5: 000...000101

обратный код числа 5: 111...111010

дополнительный код числа 5: 111...111011

Для знакового представления диапазон чисел уменьшается. По­ложительные числа заключены в пределах от 0000008 до 0777778 (или от 0 до 3276710), а отрицательные — от 1777778 до 1000008 (или от —1 до —3276810). Таблицы ПЗ и П4 иллюстрируют из­ложенное.


Центральный процессор

Процессор является одним из основных элементов любой вы­числительной машины, в том числе мини-ЭВМ. Условно в процес­соре можно выделить четыре функциональные части: управляющее устройство, арифметико-логическое устройство, регистры общего назначения, специальные регистры.

Наиболее важной для программиста частью центрального процессора является набор регистров общего назначения (РОН). Процессоры ЭВМ типа СМ-4 содержат восемь регистров общего назначения длиной 16 двоичных разрядов каждый и имеющих условные (мнемонические) обозначения R0, R1 ,..., R7. Все эти ре­гистры программно доступны, т. е. их содержимое можно прочи­тать или изменить с помощью соответствующих команд.

Первые шесть регистров, с R0 поo R5, являются в полном смысле слова регистрами общего назначения. Их используют программисты по своему усмотрению для хранения исходных данных, промежуточных результатов вычислений, адресов ячеек (слов или байтов) оперативной памяти и т. д. Основное преимущество ис­пользования РОН заключается в убыстрении вычислений. Обраще­ние к регистру требует очень мало времени (менее 1 мкс), в то вре­мя как команды с обращением к памяти выполняются за 5—10 мкс.

Регистры R6 и R7, хотя формально и принадлежат к числу регистров общего назначения, однако выполняют специальные функции. Регистр R6 называют указателем стека; служит он для работы со специальной областью памяти — стеком (подробнее см. в § 5.5). К регистру R6 обращаются с помощью мнемонического обозначения SP (от слов stack pointer — указатель стека).

Регистр R7 называют счетчиком команд или программным счет­чиком (условное обозначение PC, от слов program counter — про­граммный счетчик). Его основное назначение — хранить адрес оче­редной выполняемой команды. Обычно команды любой программы располагаются в памяти друг за другом, в порядке их выполнения. Программный счетчик перед началом выполнения .программы указы­вает на первую команду программы. Как только код этой команды будет считан и процессор приступит к расшифровке и выполнению команды, содержимое программного счетчика автоматически увели­чивается и он указывает на следующую команду. Тем самым обеспечивается последовательное выполнение команд программы.

В специальных регистрах процессора хранится разнообразная информация о режиме работы ЭВМ, распределении памяти, состоя­нии выполняемой программы и т. д. Наиболее важный из них — 16-разрядный регистр слова состояния процессора (ССП). Особый интерес представляют младшие четыре разряда ССП, которые со­держат коды условий (рис. 5.4). Эти разряды устанавливаются после выполнения каждой машинной команды и содержат информа­цию о ее результате. В описании машинных команд указывается, как влияет результат выполнения на установку кодов условий, но для большинства команд коды условий устанавливаются сле­дующим образом:

N=1, если результат отрицателен;

Z=l, если результат равен нулю;

V=l, если произошло арифметическое переполнение, т. е. вы­ход результата операции за пределы диапазона знакового пред­ставления (см. табл. П4);

С=1, если произошел перенос из старшего разряда, что часто совпадает с попыткой записать 1 в отсутствующий 16-й разряд слова, на более точно определяется как выход результата операции за пределы беззнакового представления чисел (см. табл. П3).

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




Рис 5.4 Регистр слова состояния процессора.


В разрядах 5—7 ССП хранится уровень приоритета процессора, который может принимать восемь значений — от 0 до 7. Заполняя J эти разряды, программист может задавать программе в целом или отдельным ее участкам разные уровни приоритета. Это важно при организации работы внешних устройств в режиме прерываний: внешнее устройство может прервать выполнение текущей програм­мы, только если его приоритет выше текущего приоритета процес­сора. Назначая программе тот или иной уровень приоритета по отношению к приоритетам внешних устройств, можно организовать требуемое взаимодействие между внешними устройствами и обслу­живающими их программами.

Разряд Т ССП позволяет приостанавливать выполнение прог­раммы на заданной команде. С помощью этого разряда организуется режим динамической отладки программ, написанных на АССЕМБЛЕРе.

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


§ 5.2 ПЕРВОНАЧАЛЬНЫЕ CВЕДЕНИЯ О СОСТАВЛЕНИИ ПРОГРАММ НА ЯЗЫКЕ АССЕМБЛЕР СМ ЭВМ.


Первым этапом подготовки любой программы для ЭВМ является создание исходного модуля, т. е. текста программы, написанного на одном из включенных в систему языков программирования — АССЕМБЛЕРе, ФОРТРАНе и т. д. Исходный модуль создается на .мини-ЭВМ в интерактивном режиме при непосредственном общении , с ЭВМ через ее терминал. Текст программы набирается на клавиа­туре терминала, имеющей полный набор необходимых для написа­ния программ знаков — латинские и русские буквы, цифры, спе­циальные машинные символы, клавиши пробела, перевода строки и т. д. Текст, вводимый с клавиатуры терминала, в простых вычислительных системах записывается на перфоленту, а при наличии Восковой памяти заносится на магнитный диск под определенным именем, образуя файл с исходным текстом. Такие файлы могут существовать независимо друг от друга, а могут объединяться в библиотеки исходных модулей. Объединение программ в библиотеки предоставляет пользователю некоторые дополнительные удобства при работе с ними.

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

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

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

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

Вернемся теперь к этапу составления исходного текста про­граммы. Одним из возможных способов создания программы является написание ее непосредственно в машинных кодах.

Написание программы в кодах — дело весьма трудоемкое. Программист должен знать коды всех команд и их модификаций, помнить номера ячеек, в которых размещены данные, уметь вы­числять и записывать в виде кодов смещения при организации переходов и т. д. Программирование существенно упрощается при использовании АССЕМБЛЕРа, представляющего собой по сути дела символическое представление машинного языка *.

Мнемоническое (символическое) обозначение команд, регистров, и меток, а также другие средства облегчения программирования в АССЕМБЛЕРе делйют программу достаточно наглядной, упро­щают ее составление и отладку. В то же время программирование на АССЕМБЛЕРе — это по существу составление программы на машинном языке, хотя и с использованием символических обозна­чений. Этим и объясняется, с одной стороны, трудоемкость про­граммирования на АССЕМБЛЕРе, а с другой — его широкие воз­можности.

Как и в любом другом языке, предложения АССЕМБЛЕРа должны быть написаны по определенным правилам, совокупность которых называют форматом предложения.

В общем случае предложение АССЕМБЛЕРа состоит из четырех полей: поля метки, поля оператора, поля операндов и поля ком­ментария. Поля располагаются в перечисленном порядке и обычно отделяются друг от друга одним или несколькими пробелами. Каждое предложение АССЕМБЛЕРа при его наборе на клави­атуре терминала заканчивается нажатием клавиши Возврат карет­ки (RETURN).

Метка представляет собой любую комбинацию алфавитно-циф­ровых символов, начинающуюся с буквы. Посте метки ставится двоеточие. Длина метки не ограничивается, но АССЕМБЛЕР анализирует только первые шесть символов метки, поэтому не рекомендуется использовать метки длиннее шести символов. При­меры меток:

BEGIN:

CYCLE 1:

FIN:

В программах операционных систем встречаются метки, со­держащие знаки точки или доллара, однако в пользовательских •программах эти знаки применять не рекомендуется.

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

Оператор характеризует действие, которое надо выполнить в данном предложении. Операторы бывают трех типов: команда (инструкция), директива и макровызов.

Команда указывается в поле оператора в виде мнемонического Обозначения (CLR, INC, CMP и т. д.). В процессе трансляции исходного текста транслятор преобразует мнемонические обозна­чения команд в соответствующие машинные коды, например обозначение CLR в код 0050, INC в код 0052 и т. д. Выполнение же действий, обозначаемых этими кодами, происходит позже, на этапе выполнения оттранслированной программы.

Директива АССЕМБЛЕРа представляет собой указание транс­лятору выполнить некоторые действия: заполнить определенные строки объектного модуля заданными числами или кодами сим­волов, оформить фрагмент программы в виде секции, вывести на печать или, наоборот, подавить ту или иную информацию о тран­слируемой программе и т. д. В отличие от команд, которые при трансляции только преобразуются в соответствующий код, дирек­тивы выполняются в процессе трансляции: заполняются строки объектного модуля, печатается листинг и т. д.

Макровызовы дают возможность вставлять в текст написан­ные заранее фрагменты (макроопределения), что облегчает и ускоряет разработку сложных программ. Для вызова макроопреде­ления следует указать в поле оператора его имя.

Операнды имеют различный смысл и разные правила напи­сания в зависимости от того, к какому оператору они относятся. Так, операндами команд являются символические обозначения ячеек памяти либо регистров, участвующих в данной операции, а также константы. Предложение АССЕМБЛЕРа может содер­жать один или несколько операторов; если операторов несколько, они разделяются запятыми.