home   contents  previous      next        up

Процессы транспьютера

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

  1. высокоприоритетные процессы (уровень приоритета 0)
  2. низкоприоритетные процессы (уровень приоритета 1).

Число процессов каждого уровня приоритета не ограничено.

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

Если нет активных высокоприоритетных процессов, то низкоприоритетные процессы исполняются в режиме разделения времени. Каждые 5120 тактов входного тактового сигнала (около 1 мс) процессор пытается изменить исполняемый процесс. Процесс может непрерывно выполняться максимум 2 таких периода времени. В начале первого периода он получает в свое распоряжение процессор, а с начала второго периода процессор выполняет его команды, пока не встретит какую-нибудь из команд, на которых разрешено прерывать процессы. Это те же команды, на которых останавливается процессор, если получен сигнал Анализ. Время переключения процессов составляет около 1 мкс. Если низкоприоритетный процесс активен, а высокоприоритетный готов к исполнению, то низкоприоритетный процесс будет прерван. Прерванный процесс возобновится, как только все высокоприоритетные процессы не будут в состоянии исполняться.

С каждым процессом, исполняемым транспьютером, связан блок памяти, называемый рабочей областью процесса. Начало рабочей области процесса, исполняемого в данный момент, указывается регистром Wdesc. Каждый процесс идентифицируется адресом начала его рабочей области. В рабочей области процесса размещаются локальные переменные процедур/функций процесса и информация о состоянии процесса, которая размещается с небольшими отрицательными смещениями:
[Wptr-2]адрес следующей области из списка областей процессов, ожидающих исполнение.
[Wptr-1]адрес первой команды, которая должна быть исполнена, когда процесс возобновит выполнение.
[Wptr+0]адрес команды, на которую необходимо передать управление, когда все порожденные процессы завершатся.

Адрес начала рабочей области процесса P обозначается как Wptr(P), а i-е слово рабочей области - как P[i]. Указание процесса P в обозначениях Wptr(P) и P[i] опускается (Wptr и [i]), если ясно, какой процесс имеется в виду (например, P[Wptr(P)]=P[Wptr] ), или если сказанное справедливо для любого процесса (например, [Wptr]).

Команды, загружающие и сохраняющие локальные переменные, адресуют машинные слова относительно регистра Wdesc. Смещение, указываемое в командах, всегда кратно размеру слова. Верхушка стека всегда выравнивается на границу слова. Поэтому 0-й разряд Wdesc используется для хранения уровня приоритета процесса, а регистр Wdesc называют дескриптором исполняемого процесса.

Процесс может находиться в одном из двух состояний:
активный либо исполняется, либо ожидает исполнение;
неактивный либо готов к вводу/выводу, либо ожидает наступления указанного момента времени.

Рабочие области активных процессов, ожидающих исполнение, связаны в два списка - по одному на каждый уровень приоритета. Регистры Fptr0 и Bptr0 (Fptr1 и Bptr1) указывают соответственно на первый и последний элементы списка высоко(низко) приоритетных процессов. Слово [Wptr-2] каждой рабочей области списка содержит адрес следующей области списка.

Когда исполнение процесса A прерывается, указатель команды Iptr сохраняется в слове A[Wptr-1]. В соответствии с приоритетом процесс A помещается в конец одного из списков процессов, ожидающих исполнение. Из начала этого списка исключается головной процесс B. Содержимое слова B[Wptr-1] помещается в регистр Iptr. Процесс B возобновляет работу.

Используя команду startp, процесс A может создать новый процесс B. В слово B[Wptr-1] должен быть помещен адрес первой команды процесса B. Команда startp добавляет новую рабочую область в конец списка рабочих областей процессов, ожидающих исполнение. Если процесс A порождает параллельные процессы, то перед активизацией процессов он должен поместить число порождаемых процессов в слово A[Wptr+1], а адрес команды, на которую необходимо передать управление, когда все порождаемые процессы завершатся, - в слово A[Wptr+0].

Команда endp завершает исполнение текущего процесса B. С помощью регистра Areg ей должен быть указан Wptr(A) процесса A, инициализировавшего процесс B. Это необходимо, чтобы обеспечить корректное завершение порождаемых параллельных процессов. При завершении процесса команда endp уменьшает на единицу счетчик числа активных порожденных процессов A[Wptr+1] и сравнивает его с нулем. Если счетчик отличен от нуля, то управление передается головному процессу C списка процессов, ожидающих исполнения. Если счетчик равен нулю (все порожденные процессы завершились), то управление передается по адресу из ячейки A[Wptr+0].

Если инициализирующий процесс A должен ждать завершения порождаемых процессов B, то его код активизации процессов должна заканчиваться командой endp, а адрес следующей за ней команды необходимо поместить в A[Wptr+0]. Эта процедура превращает инициализирующий процесс в пустой порождаемый процесс. Управление на команду по адресу A[Wptr+0] будет передано, когда все порожденные процессы завершатся.


home   contents  previous      next        up