Россия, Москва |
Аппаратная поддержка языка пользователя — основная концепция мультипроцессорных систем
Стековый механизм выполнения процедур
Современная концепция программирования на ЯВУ с широким использованием процедур наиболее полно была реализована в МВК семейства "Эльбрус". (Хотя процедурный механизм реализуется уже повсеместно, даже на уровне микропроцессоров.)
Для построения сложных программных комплексов и возможности распараллеливания задача представляется в виде одного или нескольких взаимодействующих процессов.
Процессы — это логически завершенные, преимущественно значительные по объему работы (программы), на которые можно и целесообразно разбить решаемую задачу (выполняемый алгоритм).
В МВК одновременно могут выполняться, т.е. находиться в активном состоянии, несколько процессов, не более числа процессоров. Процесс отображен элементарной рабочей программой, формируемой из обращений к процедурам. Возможен любой способ соподчинения (вложенности) процедур. Воспроизводится выполнение процедур на стеке.
Описания процедур (сегменты процедур) хранятся отдельно (рис. 5.1). Существует словарь сегментов данной программы, сформированный при трансляции. В нем хранятся дескрипторы сегментов, в которых указано место в памяти, объем и др. Один из базовых регистров В0 каждого процессора во время выполнения программы указывает на ее словарь сегментов. Номер выполняемой команды находится в регистре номера команды (RNK) и (в отличие от адреса ячейки в традиционных ЭВМ) состоит из номера сегмента и смещения — адреса внутри сегмента.
В СОЗУ каждого процессора организован стек для данных выполняемых процедур (рис. 5.2) в составе выполняемого процесса — стек процесса.
В вершине стека находятся данные и отражается выполняемая в данный момент процедура (эта область называется активацией процедуры ) самого высокого на данный момент уровня иерархии (вложенности). При завершении выполнения процедуры в вершине стека, отведенная ей область СОЗУ возвращается в ресурс. При запуске же вложенной процедуры формируется новая вершина стека, т.е. новая активация. Вся информация о данных прерванных процедур как бы погружается на один уровень ниже. Каждая активация начинается со связующей информации, состоящей из маркера стека МкС (в нем ссылка на МкС охватывающей процедуры, в которой описана данная процедура) и управляющего слова возврата УСВ (в нем информация для возврата в запустившую процедуру).
МкС образуют статическую цепочку, УСВ — динамическую цепочку.
Уровень вложенности i ( лексикографический уровень ) отображен в базовом регистре Bi, содержащем начало активации этой процедуры.
Адресация данных в активации процедуры при ее выполнении производится с помощью адресных пар (i, j), т.е. адрес СОЗУ {Ai j = (Bi)+j.
Уровень вложенности i ( лексикографический уровень ) отображен в базовом регистре Bi — с одним и тем же адресом регистра в СОЗУ каждого процессора; он содержит начало активации этой процедуры.
Область выражений — это область активации процедуры, где запоминается состояние стека АЛУ, на котором выполняется собственно счет, в случае прерываний и процедурных переходов. Стек АЛУ и регистры ЦП, необходимые для восстановления счета процедуры, образуют аппаратную вершину стека.
Рассмотрим на примере (рис. 5.3) иерархическую структуру фрагмента программы, где в процедуре A (первый лексикографический уровень, ЛУ1) последовательно используются процедуры B и D (ЛУ2), а в каждой из них последовательно запускается процедура С (ЛУ3).
Рассмотренная организация выполнения процедур приводит к их свойству повторной входимости. Одна и та же процедура может выполняться одновременно на стеках разных процессоров или одного процессора, запускаться рекурсивно и т.д.
Средства ОС предусматривают случаи, когда процедура или множество процедур не помещаются в отводимой памяти СОЗУ, число лексикографических уровней превышает допустимое и т.д. В связи с этим, область СОЗУ, отводимая под стек в процессоре "Эльбрус-3", называется буфером стека.