Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги из ГПНТБ / Королев, Л. Н. Структуры ЭВМ и их математическое обеспечение учебное пособие

.pdf
Скачиваний:
25
Добавлен:
21.10.2023
Размер:
10.26 Mб
Скачать

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

в верхушку стека. Таким образом,

в магазине оказывается

ссылка, состоящая из указания

номера базы и отно­

сительного адреса элемента или

ссылки на описатели

(дескрипторы) переменных и массивов. В дескрипто­

рах

указывается абсолютный адрес по памяти иско­

мой

величины или база (адрес нулевого элемента)

массива, к которому предполагается обращение. Аппарат дескрипторов является очень интересной особенностью машин фирмы Барроуз, и далее мы подробнее рассмот­ рим их назначение и функции. Косвенная ссылка может быть обращена к слову, которое, в свою очередь, само есть косвенная ссылка. Таким путем в В-6500/7500 до­ стигается многоуровневая косвенная адрёсация, причем длина цепочки косвенных ссылок ничем не ограничена. Следует подчеркнуть еще раз, что команда вызова имени завершает свою работу размещением косвенной ссылки в стеке, в отличие от оператора вызова значения, для выполнения которого может потребоваться аппаратный анализ цепочки косвенных ссылок, многократные обращения в память, в результате чего в верхушке стека дол­ жен оказаться операнд.

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

170

Д е с к р и п т о р ы и у п р а в л я ю щ и е с л о в а . Описатель данных (Data Descriptor) служит для описания массивов данных и занимает одно машинное слово (52 разряда). Слово-описатель содержит 20-разрядный адрес начального элемента массива по памяти или, что то же самое, базу массива. В том случае, когда соответствую­ щего массива данных нет в памяти, в поле базы указы­ вается адрес массива на внешних носителях. Отсутствие или наличие описываемого массива в памяти метится определенным (47-м) разрядом, который называется раз­ рядом присутствия. Если в процессе выполнения про­ граммы произошло обращение к дескриптору, разряд присутствия которого находится в нуле, производится прерывание, и операционная система подкачивает необ­ ходимый массив на свободное место оперативной памя­ ти, считывая его с дисков, сообразуясь с указателями, содержащимися в поле базы. Тем самым достигается ди­ намизм обращения к данным: в оперативной памяти мас­ сивы оказываются в том случае, если к ним произошло обращение. Заранее резервировать память для масси­ вов не обязательно. Следующее 20-разрядное поле опи-

,сателя данных служит двояким целям: либо в нем указы­ вается значение индекса, которое должно быть добавлено

к базе для получения адреса нужного элемента, либо в этом поле содержится длина массива, и оно исполь­ зуется для контроля правильности обращений к массиву (для контроля границ). Специальный разряд (45-й) де­ скриптора указывает на то, что содержится в этом поле —■ длина или индекс. Значение «О» в этом разряде указы­ вает на то, что перед обращением к элементу массива должна быть произведена индексация; значение «1» — что индексация уже выполнена и что данное поле содер­ жит значение индекса, по которому будет выбран нуж­ ный элемент. Кроме того, в дескрипторе данных содер­ жится информация о том, можно ли к элементам данно­ го массива обращаться по записи и считыванию либо только по считыванию. Указывается, содержит ли мас­ сив элементы одинарной или двойной точности.

О п и с а т е л ь с т р о к . Машины В-6500/7500 мо­ гут обрабатывать последовательности, состоящие из 4-, 6- и 8-разрядных кодов, которые служат для представ­ ления алфавитно-цифровой информации. Описатель строк содержит те же поля и управляющие разряды, что и

171

описатель данных, и разница состоит лишь в правилах образования значения индекса, который формируется в поле индекса описателя. Если обращение производится к 4-разрядным элементам, происходит деление номера такого элемента на 12, и в дескриптор помещается номер слова и номер элемента в слове. При работе с 6-разряд- ными элементами производится деление на 8, и при рабо­ те с 8-разрядными элементами — деление на 6. Деление выполняется аппаратурой, которая узнает о том, что надо делать, по значению разрядов описателя, указы­ вающих тип элемента строки.

О п и с а т е л ь п р о г р а м м н о г о с е г м е н т а содержит базу программы (базу массива силлабул про­ граммы) либо адрес программного сегмента на дисках, а также длину программного сегмента в словах. Так же как и описатели данных, описатель программного сег­ мента содержит разряд, указывающий наличие или от­ сутствие данного сегмента в оперативной памяти. Длина в словах, указанная в поле длины, служит для исключе­ ния случайных попыток обратиться за границы програм­ много сегмента. С помощью описателя программного сег­ мента производятся контролируемые обращения к про­ цедурам. Разряд «присутствия» позволяет операционной системе динамически вводить в оперативную память нужные в процессе счета процедуры и подпрограммы.

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

1.Запоминается состояние стека, сложившееся к мо­ менту обращения. Это состояние запоминается в самом стеке.

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

CPW — Control Program Word (управляющее слово программы).

3.В нужной последовательности в стек заносятся параметры, которые должны быть переданы процедуре.

4.Выполняется оператор перехода к процедуре, ко­ торый осуществляет передачу управления в новый про­

172

граммный сегмент, опираясь на информацию, содержа­ щуюся в управляющем слове программы.

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

Информация, отмечающая состояние стека, разме­ щается в дескрипторе, который называется управляющим словом состояния стека (Mark Stack Control Word — MSCW).

Десятиразрядное поле этого слова содержит ссылку на используемый стек. В машинах В-6500/В-7500 можно ис­ пользовать для организации работы программ несколько стеков. Это позволяет с помощью одной процедуры (од­ ного программного сегмента) обрабатывать несколько независимых областей данных. Это также открывает возможность каждой процедуре иметь свой собственный стек для работы и не пользоваться общим стеком. Такая многостековая структура оказывается весьма полезной для организации параллельных процессов и мульти­ программирования.

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

MSCW.

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

173

окончательно MSCW формируется в динамике выпол­

нения

программы.

И с п о л ь з о в а н и е с т е к а д л я о б р а щ е ­

н и я

к п р о ц е д у р е . Реальным выполнением про­

граммы управляют два регистра центрального процессо­ ра. Один регистр выполняет функции счетчика команд традиционных машин, т. е. управляет выбором силлабул из сегмента программы. Второй регистр управляет ра­ ботой стека, т. е. определяет адрес первого свободного слова в стеке, «продвигает» стек вверх и вниз. Головка (вершина) стека выполнена на быстрых словных регист­ рах, которые называются А, В, X, Y. Эти регистры свя­ заны между собой и связаны с главной памятью. Если информация, помещаемая в стек, по объему превосходит объем «быстрой» верхушки стека, аппаратно произво­ дится «проталкивание» стека в главную память. Специаль­ ный регистр S указывает адрес последнего слова, помещен­ ного в стек, точнее, адрес продолжения стека в главной памяти. Кроме того, в аппаратуре центрального про­ цессора специальные регистры хранят базу программно­ го сегмента выполняемой в данный момент процедуры и базу (или начало) стека, активизированного в данный момент.

Для того чтобы обратиться к процедуре и затем воз­ вратиться из нее для продолжения счета по внешней программе, следует запомнить состояние перечисленных выше регистров, сформировать новое значение этих ре­ гистров, определяемое месторасположением сегмента про­ граммы, к которой произведено обращение, и расположе­ нием стека, связанного с ней. В том простом случае, ког­ да вызываемая процедура уже находится в памяти и к ней уже производилось обращение, в главной памяти также находятся сформированные дескрипторы, описы­ вающие соответствующий программный сегмент. Ин­ формации, находящейся в этих дескрипторах, достаточно для формирования регистров, управляющих выполне­ нием команд. Если внешняя и вызываемая процедуры пользуются одним стеком, то для формирования значения регистра, управляющего движением стека, точнее, для формирования базы (начала) стека для вызываемой про­ цедуры используется значение счетчика S на тот момент, когда в стек продвинута вся необходимая для возврата информация: значение «старой» базы стека, значение счет­

174

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

Как видно из рисунка, стековый механизм обеспе­ чивает простой метод выполнения рекурсивных обра­ щений.

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

175

предусмотренные в аппаратуре машины, содержат ба­ зу, начальный адрес массива регистров-дисплеев.

В В-6500/7500 предусмотрены еще два типа описате­ лей: управляющее слово программы (Program Control Word — PCW) и управляющее слово возврата (Returne Control Word — RCW). Эти дескрипторы несут на себе следующую смысловую нагрузку. В них выделено поле, в котором отражено состояние центрального процессо­ ра: указывается, было ли переполнение, в каком состоя­ нии находится триггер, определяющий условие перехо­ да, тип произведенной операции, содержатся указания на режим работы центрального процессора (нормальный или супервизорный).

Дескрипторы содержат поле, указывающее адрес силлабулы, с которой начинается выполнение програм­ мы; указание на базовый регистр программного сегмен­ та; поле номера используемого стека. Важное значение имеет поле, указывающее уровень вложенности проце­ дуры, к которой производится обращение, в случае PCW, или уровень процедуры, на которую следует воз­ вратиться, в случае дескриптора возврата RCW. В де­ скрипторах этого типа содержится ряд других полей, необходимых для возврата и возобновления счета и управления стеком, учитывающих динамику работы при рекурсивных обращениях. Развитый стековый меха­ низм, аппарат дескрипторов, предусмотренный в маши­ нах В-6500/7500, направлен прежде всего на то, чтобы упростить реализацию трансляторов с языков высокого уровня, допускающих рекурсивные обращения и блоч­ ную структуру. Трансляторы, созданные для машин Барроуз, оказываются достаточно простыми, они, как правило, однопроходные, и скорости трансляции дости­ гают очень высоких значений. Например, транслятор с АЛГОЛа транслирует со скоростью 10 000 карт в ми­ нуту. На каждой карте пробивается обычно один опе­ ратор. Скорость трансляции с КОБОЛа достигает 5000 карт в минуту.

Машины В-6500/7500 в большой степени отражают требования АЛГОЛа, и, по-видимому, в настоящее вре­ мя пальма первенства по скорости трансляции принад­ лежит машинам подобной структуры. Теперь вернемся к продолжению описания основных операторов системы команд В-6500/7500.

176

А

Начало по А

Состояниеотека намамвнтоВращенижначало поВ}

Состояниестенанамоментобра­ щениякСтачало поС)

Стен

t

ill

i

 

Ьтандартная

информация для Возврата

Параметры, передаваемые отАкВ

Результаты

промежуточных

Вычислений

Стандартная

информация для дозВpuma

Параметры, передаваемые отВнС

Результаты

промежуточных

Вычислений

Состояние стека послеоьталненая оозВратаизВВА

Состояниеетека кмоментуВозвра­ та из ВОА

Состояниестена послеВыполненияJ ВозвратаизСВВ1

- < — СостояниеL стена нj тментиВозвра­ таиз1 с е в

Рис. 14.

О с н о в н ы е о п е р а т о р ы

О п е р а т о р о п р е д е л е н и я с о с т о я н и я с т е к а (Mark Stack Operator). Этот оператор помещает в стек управляющее слово состояния стека (MSCW). Он используется обычно как первый оператор в последо­

вательности, организующей обращение к

процедуре —

в вызывающей последовательности. Его

назначение —

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

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

О п е р а т о р в х о д а в п р о ц е д у р у (Enter Operator). Этот оператор выполняется последним в по­ следовательности операторов, организующих обращение к процедуре. Основное его назначение — ввести в дей­ ствие новое управляющее слово. Старое управляющее слово при этом автоматически запоминается в стеке.

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

178

няющие информацию в массивах данных, редактирующие

процедуры, короче говоря, все

процедуры-нефункции.

О п е р а т о р в о з в р а т а

(Return Operator) так­

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

О п е р а т о р ы п е р е х о д о в (Branch Operator). Условные и безусловные переходы внутри программного сегмента, как правило, производятся относительно его базы. Это является средством достижения перемещаемо­ сти программных сегментов. При перемещении програм­ мы с одного места памяти на другое нет необходимости изменять адреса переходов. Достаточно соответствующим образом настроить базу, точнее, соответственно месту сформировать описатель программного сегмента. В сис­ теме команд предусмотрены также переходы по абсолют­ ному адресу. Такого рода переходы используются в ре­ зидентной части операционной системы. Условные переходы производятся в зависимости от содержания младшего разряда второго слова в стеке и значений неко­ торых управляющих регистров центрального процессора. Кроме того, в системе команд этих машин предусмотрены команды, позволяющие реализовать такие сложные кон­ струкции языка АЛГОЛ, как переход по внешней метке, передачу в качестве параметра имени процедуры. Одной из наиболее сложных ситуаций является ситуация, когда в ходе выполнения процедуры требуется выполнить дру­ гую процедуру, переданную как параметр, определенную на несколько уровней вложенности выше. Это означает, что эту процедуру следует выполнять не в том стековом «окружении», в котором она была определена, а для этого нужно вернуться по стеку на несколько уровней выше. С другой стороны, мы после выполнения этой процедуры должны возвратиться и продолжать работу по стеку, в котором находились до обращения к такой процедуре. Для реализации таких сложных конструкций в системе команд существует возможность вернуться на указанное число уровней, возвратиться в старое «окружение» или обратиться к процедуре, не теряя значений, накоплен­ ных в стеке.

179

Соседние файлы в папке книги из ГПНТБ