СТЕКОВЫЙ ПРИНЦИП ВЫПОЛНЕНИЯ ПРОЦЕДУР

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

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

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

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

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

1. Прерывается работа головного процессора.

2. Запускается на нем процедура анализа активных процессов. Данная процедура находит среди всех активных стеков стек

выполняемого процесса с минимальным приоритетом. При этом возможны два случая:

• процесс из стека отказавшего процессора оказывается в числе процессов с минимальным приоритетом, тогда этот про­цесс переводится в очередь процессов;

• минимальным приоритетом обладает активный процесс, не выполнявшийся на стеке отказавшего процессора; тогда изменяется содержимое базового регистра, выполнявшего этот процесс процессора, для подключения его к стеку отказавшего процессора; стек прерванного процесса становится пассивным и переводится в очередь.

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

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

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

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

• выполнение одним из процессоров функции головного или управляющего. Его работа по обслуживанию очереди периодически прерывается для выполнения функций управле­ния ВС;

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

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