Московский государственный университет путей сообщения
Опубликован: 22.12.2006 | Доступ: свободный | Студентов: 2258 / 474 | Оценка: 4.07 / 4.02 | Длительность: 16:07:00
ISBN: 978-5-9556-0071-0
Специальности: Разработчик аппаратуры
Лекция 5:

Аппаратная поддержка языка пользователя — основная концепция мультипроцессорных систем

< Лекция 4 || Лекция 5: 123 || Лекция 6 >

Стековый механизм выполнения процедур

Современная концепция программирования на ЯВУ с широким использованием процедур наиболее полно была реализована в МВК семейства "Эльбрус". (Хотя процедурный механизм реализуется уже повсеместно, даже на уровне микропроцессоров.)

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

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

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

Описания процедур (сегменты процедур) хранятся отдельно (рис. 5.1). Существует словарь сегментов данной программы, сформированный при трансляции. В нем хранятся дескрипторы сегментов, в которых указано место в памяти, объем и др. Один из базовых регистров В0 каждого процессора во время выполнения программы указывает на ее словарь сегментов. Номер выполняемой команды находится в регистре номера команды (RNK) и (в отличие от адреса ячейки в традиционных ЭВМ) состоит из номера сегмента и смещения — адреса внутри сегмента.

Организация программных сегментов

Рис. 5.1. Организация программных сегментов

В СОЗУ каждого процессора организован стек для данных выполняемых процедур (рис. 5.2) в составе выполняемого процесса — стек процесса.

Выполнение программы на стеке

Рис. 5.2. Выполнение программы на стеке

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

МкС образуют статическую цепочку, УСВ — динамическую цепочку.

Примечание. Процедуры могут быть описаны внутри других процедур; информация об этом содержится в МкС. В этом случае МкС образуют статическую цепочку. Запускаться же процедуры могут произвольно из разных процедур; эта информация содержится в УСВ. Тогда УСВ образуют динамическую цепочку.

Уровень вложенности i ( лексикографический уровень ) отображен в базовом регистре Bi, содержащем начало активации этой процедуры.

Адресация данных в активации процедуры при ее выполнении производится с помощью адресных пар (i, j), т.е. адрес СОЗУ {Ai j = (Bi)+j.

Примечание. Процедура программируется в памяти "от нуля", включая распределение ее данных. Тогда с помощью базирования она может свободно перемещаться по памяти, включая расположение в выделенной области СОЗУ на стеке.

Уровень вложенности i ( лексикографический уровень ) отображен в базовом регистре Bi — с одним и тем же адресом регистра в СОЗУ каждого процессора; он содержит начало активации этой процедуры.

Область выражений — это область активации процедуры, где запоминается состояние стека АЛУ, на котором выполняется собственно счет, в случае прерываний и процедурных переходов. Стек АЛУ и регистры ЦП, необходимые для восстановления счета процедуры, образуют аппаратную вершину стека.

Рассмотрим на примере (рис. 5.3) иерархическую структуру фрагмента программы, где в процедуре A (первый лексикографический уровень, ЛУ1) последовательно используются процедуры B и D (ЛУ2), а в каждой из них последовательно запускается процедура С (ЛУ3).

Преобразование стека

Рис. 5.3. Преобразование стека

Рассмотренная организация выполнения процедур приводит к их свойству повторной входимости. Одна и та же процедура может выполняться одновременно на стеках разных процессоров или одного процессора, запускаться рекурсивно и т.д.

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

< Лекция 4 || Лекция 5: 123 || Лекция 6 >
Андрей Поляков
Андрей Поляков
Россия, Воткинск
Сергей Гутько
Сергей Гутько
Россия, ВИУ, 2003