книги из ГПНТБ / Королев, Л. Н. Структуры ЭВМ и их математическое обеспечение учебное пособие
.pdfвываются разряды тега, обозначающие, что это слово есть косвенная ссылка. Полученное слово помещается
в верхушку стека. Таким образом, |
в магазине оказывается |
ссылка, состоящая из указания |
номера базы и отно |
сительного адреса элемента или |
ссылки на описатели |
(дескрипторы) переменных и массивов. В дескрипто
рах |
указывается абсолютный адрес по памяти иско |
мой |
величины или база (адрес нулевого элемента) |
массива, к которому предполагается обращение. Аппарат дескрипторов является очень интересной особенностью машин фирмы Барроуз, и далее мы подробнее рассмот рим их назначение и функции. Косвенная ссылка может быть обращена к слову, которое, в свою очередь, само есть косвенная ссылка. Таким путем в В-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