4. Функциональное описание процессора-эмулятора

4.1. Формирование исполнительных адресов

У каждой программы, исполняющейся в машине, имеется 15 индекс-регистров или модификаторов М, предназначенных для модификации адреса, указанного в команде. Разрядность индексных регистров - 32. Модификация выполняется сложением содержимого указанного в команде индекс-регистра с адресной частью команды. В режиме эмуляции БЭСМ-6 (РЭ) из адресной части команды используются младшие 15 разрядов, в новом режиме - 20 разрядов, 20-ый разряд адресной части команды перед модификацией размножается до 32 разряда.

Имеются специальные команды UTC и WTC, позволяющие осуществлять модификацию адреса следующей за ними команды. В этих случаях для модификации используются соответственно исполнительный адрес или код 1-32 разрядов слова по исполнительному адресу команд UTC и WTC, который заносится в специальный регистр С с номером 16. Одновременно устанавливается признак изменения адреса ПИА в регистре режимов РР, используемый в следующей команде.

Таким образом, исполнительный адрес большинства команд (т.н. Адрес типа U) есть:

  U = N + М (ПИА=0)   или   U = N + М + С (ПИА=1)

Адрес типа V есть:

  V = N (ПИА=0)   или   V = N + С (ПИА=1)

Где N - адресная часть команды, С - значение 16 индекс-регистра.

Значение 16 регистра добавляется к исполнительному адресу только при ПИА, установленном в “1”. Все команды, кроме UTC и WTC, гасят этот признак. С помощью команд UTC и WTC может осуществляться модификация любой кратности.

МАГАЗИННОЕ ОБРАЩЕНИЕ. В машине обеспечена возможность адресации к любому участку оперативной памяти по принципу “МАГАЗИНА”. Индексный регистр 15 является счетчиком магазина и содержит адрес первого свободного слова этой области памяти. При записи содержимого сумматора в память “магазинным способом” оно заносится в первое свободное слово магазина, и счетчик магазина увеличивается на 1. При магазинной выборке из памяти счетчик магазина уменьшается на 1, и содержимое слова с получившимся адресом выбирается на сумматор, а соответствующее слово становится доступным для очередной записи в магазин. Обращение к памяти “магазинным способом” возможно во всех командах, требующих записи в память или чтения из памяти ЦЕЛОГО СЛОВА, если в команде в разрядах номера индекс-регистра указан 15-ый регистр и исполнительный адрес команды (адрес типа V) содержит нулевой код. Иначе обращение к ОЗУ происходит по исполнительному адресу (типа U) без изменения счетчика магазина.

Кроме того, существуют специальные МАГАЗИННЫЕ КОМАНДЫ, при выполнении которых собственно операции предшествует запись в “магазинную память” содержимого сумматора (XTS, ITS), или операция сопровождается последующим чтением из “магазинной памяти” (SТХ, STI, UZAS, UIAS). Содержимое разрядов номера индекс-регистра и адресной части в такой команде определяют адрес самой операции и не влияют на обращение к “магазину”.


4.2. Структура памяти

Память машины состоит из 64-960к 72-разрядных слов (часть 20-разрядного адреса используется для внешних устройств). Нумерация разрядов в слове - справа налево.

 72..65 64      ............         1
|------|------------------------------|
|  тег |     информационная часть     |
|------|------------------------------|

Информационная часть слова содержит либо одно 64-разрядное число, либо два 32-разрядных целых числа, либо 4 16-разрядных фрагмента, либо 8 байтов, либо 64 бита, либо две команды. Разрядность команды: 32 - в новом режиме, 24 - в режиме эмуляции БЭСМ-6.


4.3. Представление чисел

4.3.1. Представление числа с плавающей запятой

 64 63  ...  54 53 52    ........    1
|--|-----------|--|-------------------|
|  |  порядок  |  |     мантисса      |
|--|-----------|--|-------------------|
 :              :
 :              :
знак порядка   знак мантиссы

Положительная мантисса представляется в прямом коде с “0” в разряде знака. Отрицательная мантисса представляется в дополнительном коде с “1” в разряде знака.

Положительный порядок представляется в прямом коде с “1” в разряде знака. Отрицательный порядок - в дополнительном коде с “0” в разряде знака. Иными словами, порядок Е представляется в 11 старших разрядах слова кодом 4000в + Е.

4.3.2. Представление чисел БЭСМ-6

48-разрядное число старой БЭСМ-6 получается из общего представления усечением старших 4 разрядов порядка и младших 12 разрядов мантиссы:

 64 63..60 59 . 54 53 52    ....    13 12 ... 1
|--|------|-------|--|----------------|--------|
|пo|xxxxxx| рядок |  |    мантисса    |xxxxxxxx|
|--|------|-------|--|----------------|--------|

Такое представление дает возможнсть:

  • А) Производить арифметические операции одинаково как в новом режиме, так и в режиме эмуляции БЭСМ-6.
  • Б) Расширять диапазон порядков и увеличивать точность вычислений в режиме эмуляции.

“Целые с порядком” числа БЭСМ-6 имеют 11-разрядный порядок 4120в и нулевой код в 1-12 разрядах мантиссы.

Переполнение при операциях над числами с плавающей запятой может быть в том случае, если порядок результата операции после нормализации получается больше 11 разрядов. Переполнение может быть при операциях сложения или вычитания больших чисел, при делении на маленькие числа и “0” и при умножении, если результат операции 64-разрядный. При переполнении устанавливается в “1” признак переполнения OVR, доступный для опроса из программы, и происходит внутреннее прерывание, которое может быть блокировано признаком БПП в регистре режимов РР ЦП.

4.3.3. Целые 64 и 32-разрядные числа

   32   31 30 ....  1          64   63 62 ...... 2 1
 |----|--------------|       |----|-----------------|
 |знак|  ч и с л о   |       |знак|    ч и с л о    |
 |----|--------------|       |----|-----------------|

Положительные числа представляются в прямом коде с “0” знака, отрицательные - в дополнительном коде с “1” знака. Для выполнения арифметики с такими числами предполагаются отдельные наборы операций, работающих только в новом режиме. В случае переполнения устанавливается в “1” признак OVR, доступный для опроса из программы. А при переносе из знакового разряда в логических командах - признак переноса С. Прерывания по переполнению не происходит.

32-разрядные числа размещаются по 2 в слове. Они могут прямо адресоваться специальными командами (в новом режиме), исполнительные адреса в которых 21-разрядные (за счет индекс-регистров). Аналогично, в новом режиме существуют команды для работы с 16-разрядными фрагментами, байтами и битами. Разрядность исполнительного адреса у этих команд равна соответственно 22, 23 или 26.


4.4. Формат команд

4.4.1. Команды нового режима

Команды в обоих режимах отличаются от чисел значением одного из битов тега. Еще один бит в теге различает команду, работающую в новом режиме, от команды эмулятора БЭСМ-6.

В новом режиме длина каждой команды - 32 бита. В одном слове размещается 2 команды. Фомат команд имеет 2 структыры:

Команды основного формата:

 32   ...   29 28 ... 21 20       ...       1
|-------------|---------|--------------------|
| модификатор |  к о п  |        адрес       |
|-------------|---------|--------------------|

Команды дополнительного формата:

 32   ...   29 28 ... 21 20 ... 13 12 ...   1
|-------------|---------|---------|----------|
| модификатор |   3f    |  к о п  |  адрес   |
|-------------|---------|---------|----------|

20-й разряд адреса в команде основного формата является знаковым. Положительный адрес представляется в прямом коде с “0” знака, отрицательный - в дополнительном коде с “1” знака. Предполагается, что программы пользователей располагаются в области положительных адресов, а программы операционной системы - в области отрицательных адресов.

Разрядность всех индексных регистров (модификаторов) равна 32. При установке адреса на индекс-регистр знак адреса (20-й разряд) размножается в 21-32 разряды индекс-регистра. Предполагается иметь полный набор операций целочисленной арифметики над содержимым индекс-регистров. Команды в новом режиме работают с полными 64-разрядными словами, либо с 32-разрядными полусловами, либо с 16-разрядными фрагментами, либо с 8-разрядными байтами, либо с отдельными битами слова.

Разные замечания и предложения:

  • А) Следует аккуратно программировать микропрограммы сложных команд (например, магазинных), чтобы не допустить необратимых изменений регистров в случае внутреннего прерывания.
  • Б) В новом режиме не стоит гасить РМР без особой необходимости, как это делалось в БЭСМ-6.
  • В) 14 регистр должен спасаться вместе со всеми, и только потом туда следует записать исп.адрес экстракода. Признак останова по внутреннему прерыванию при входе в экстракод не нужен. Возврат из экстракода может производиться и на правую команду слова.
  • Г) Особое внимание следует обратить на механизм передачи параметров подпрограмме при переходе к режиму эмуляции и обратно, т.к. Адресная и индексная информация находятся в разных разрядах слова. Неплохим вариантом может быть организация прерывания при несовпадении 66 бита тега с признаком РЭ в РР. Должно быть два таких прерывания - одно для сумматора, другое для операнда. В программе реакции на прерывание можно произвести необходимые преобразования операнда или сумматора и даже записать обратно (с новым тегом!). Здесь проблемой может стать программное распознавание адресной и числовой информации.

4.4.2. Команды эмулятора БЭСМ-6

Длина каждой команды - 24 бита. Структура команды - такая же, как у БЭСМ-6. Размещаются 2 команды в одном 64-разрядном слове в тех же позициях, что и числа:

 64 63  60 59   ...   37 36    ...     13 12    1
|--|------|-------------|----------------|-------|
|лe|xxxxxx| вая команда | правая команда |xxxxxxx|
|--|------|-------------|----------------|-------|

Это решение продиктовано тем, что многие программы БЭСМ-6 занимаются самомодификацией. Более того, иногда запись команд производится обычной командой записи с предварительной установкой режима записи команд.

4.4.2.1. Арифметические команды эмулятора
  • Выполняются над полноразрядными числами. При этом возможен выход порядка результата за пределы диапазона чисел БЭСМ-6. Признаком этого служит несовпадение кода хотя бы в одном из 63-60 разрядов с инвертированным кодом знака порядка. Поэтому аппаратура должна отслеживать факты употребления таких чисел в качестве операндов логических команд и команд сдвигов, чтобы не допустить возможных потерь “сильно значащих” разрядов порядка для последующих арифметических операций. Это слежение возлагается на алгоритмы логических и сдвиговых команд.
  • Следует оставить возможность прерывания по переполнению при выходе порядка результата за диапазон чисел БЭСМ-6. Стандартно оно должно блокироваться признаком ББЧ в РР. Следует оставить для пользователя возможность снятия блокировки ( но не командой ,NTR, !!! )
  • При работе с блокировкой нормализации следует гасить младшие 12 разрядов мантиссы результата арифметических команд сложения и вычитания. Кроме того, может потребоваться “частичная нормализация” целого, имеющего порядок 4146в, т.е. Числа, сформированного в новом режиме, и поданного на вход подпрограмме, работающей в режиме эмулятора.
  • Особое внимание следует уделить работе с регистром младших разрядов. После исполнения арифметических операций 1-12 разряды сумматора копируются в старшие разряды мантиссы РМР.
4.4.2.2. Команды пересылок

Всегда работают с полными словами. Что касается индекс-регистров, то в режиме эмулятора содержимое 16:32 разрядов всех индекс-регистров не должно изменяться никакими командами.

4.4.2.3. Условные переходы в режиме эмулятора

“Дыры” в 64-разрядном слове должны быть “прозрачны” для команд условных переходов по содержимому слова. Иными словами, значения 1-12 и 60-63 разрядов слова не оказывают никакого влияния на формирование признаков, по которым осуществляются условные переходы в режиме эмулятора. Точно так же не влияют на выполнение команд условных переходов по индекс-регистрам значения 16:32 разрядов регистров.

4.4.2.4. Логические и сдвиговые команды

Правила их выполнения в режиме эмулятора.

  • Если 64 разряд операнда или сумматора содержит “0”, и хотя бы один из 63-60 разрядов содержит “0”, то вместо значения операнда (сумматора) используется “0” во всех 64 разрядах. (очень маленькие числа заменяются на машинный нуль).
  • Если 64 разряд операнда (сумматора) содержит “1”, и хотя бы один из 63-60 разрядов содержит “1”, то происходит внутреннее прерывание “незаконный операнд”.
  • Выполняется требуемая операция, “не чувствующая” дыр в 64-разрядном слове. Так, при циклическом сложении перенос из 59 разряда добавляется к 64-му (а не к 60-му), а перенос из 64 разряда добавляется к 13-му (а не к 1-му).
  • У результата операции (сумматора) 60-63 разряды заполняются инвертированным кодом 64 разряда. Тем самым формируется “правильное” для последующих операций число. Способ формирования 1-12 разрядов результата зависит от конкретной операции. Проще всего - обнулять их.
  • Изначальная “правильность” чисел для режима эмулятора обеспечивается загрузчиком на основе информации о типе модуля загрузки (новый или старый).

4.5. Теги

Каждое машинное слово снабжено тегом, занимающим 65-72 разряды слова. Назначение отдельных битов тега:

  • 65 (1) - различает команды и числа. “0” - число, “1” - команда. При попытке выборки числа в качестве команды происходит внутреннее прерывание “контроль команды”. Команды, так же как и числа, могут быть использованы в качестве операндов. При записи в память 65 разряд тега устанавливается равным значению признака записи команд в регистре РРР (расширение регистра режимов), копия которого находится в теге результата (аналог признака командной свертки в БЭСМ-6). Обычно в режиме математика признак записи команд равен 0.
  • 66 (2) - различает 2 группы команд: 0 - команда нового режима, 1 - команда эмулятора. Для чисел его можно использовать аналогичным образом, формируя этот бит при записи числа в соответствии с битом режима, в котором выполнялась команда записи.
  • 67 (3) - разрешен (0) или запрещен (1) доступ к слову по чтению (за операндом).
  • 68 (4) - разрешен (0) или запрещен (1) доступ к слову по записи (операнда). Комбинация: “чтение запрещено”, а “запись разрешена” может создаваться загрузчиком для ловли обращений к неинициализированным переменным.
  • 69 (5) - разрешена (0) или запрещена (1) выборка команды (т.н. Останов по номеру команды).
  • 70 (6) - разрешена (0) или запрещена (1) передача управления на эту команду.
  • 71 (7) - резерв.
  • 72 (8) - признак программной (1) или аппаратной (0) интерпретации тега. При установке 72 разряда в “1” присходит внутреннее прерывание “программная интерпретация тега команды” или “программная интерпретация тега операнда”.

При чтении из памяти теговская часть слова проверяется на предмет возможной защиты и соответствия значению РЭ. Прерывания, могущие возникнуть при этом, блокируются признаками БПТЧ и БЧОП. При записи в память тег пишется из регистра тега результата, который может быть сформирован программно. При записи также возможно прерывание по тегу. Оно блокируется признаком БПТЗ. Тег результата запоминается в регистре РРР (расширение регистра режимов).


4.6. Приписка и защита памяти

При обращении в память за числами и командами 11:20 разряды исполнительного адреса слова определяют номер регистра приписки (РП): 0,1,...,1023 и при отсутствии блокировки приписки (БП = 0 в РР) заменяются в адресе на содержимое поля номера физической страницы из этого РП. Очевидно, что часть виртуальной памяти должна использоваться для целей операционной системы. Программам пользователей эта часть памяти должна быть ограниченно доступна. Поэтому предлагается в схему приписки ввести проверку виртуального номера страницы:

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

Формат регистра приписки :

  • 1:8 - поле номера процесса (ПНП), использующего данный регистр приписки. При обращениях в память содержимое ПНП каждый раз сравнивается с РНП - регистром номера процесса. При несовпадении возникает прерывание “чужой РП”, за исключением случая, когда в ПНП - число 255. Страница с этим номером доступна всем процессам. РНП переустанавливается при смене процесса на процессоре.
  • 9 - бит защиты страницы по записи. “0” влечет прерывание при записи в любое слово из этой страницы.
  • 10 - бит защиты страницы по обращению (чтение или запись). “0” влечет прерывание при обращении к любому слову этой страницы.
  • 11:20 - поле номера физической страницы, заменяющее старшие разряды в исполнительном адресе. Схема приписки и защиты не работает при установленных в “1” признаках БП, БЗО, БЗЗ, а также для нулевого исполнительного адреса. Нулевой исполнительный адрес всегда содержит нулевой код. В режиме диспетчера обращение к памяти также происходит через схему приписки и защиты. При выборке команд из памяти биты защиты не проверяются. Производится только сравнение ПНП с РНП и, в отсутствие РОА, проверка на отрицательный номер страницы. Внимание! в дальнейшем предлагается увеличить разрядность регистров приписки до 28:
  • 21:24 - номер физического сегмента памяти.
  • 25:28 - номер виртуального (математического) сегмента.

При обращении к памяти 21:24 разряды исполнительного адреса (математического) сравниваются с номером виртуального сегмента соответствующей страницы. При несовпадении - прерывание (можно и то же, которое происходит при несовпадении номера процесса). При совпадении 21:24 разряды математического адреса заменяются на номер физического сегмента памяти из 21:24 разрядов РП. Таким образом достигается расширение виртуального адреса до 128 мбайт.

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

На каждую физическую страницу памяти отводится 3 бита, доступных из программы:

  • БОБР - бит, который должен устанавливаться в “1” при каждом обращении к соответствующей физической странице.
  • БИЗМ - бит, который должен устанавливаться в “1” при каждой записи в физическую страницу.
  • БМСП - бит, включающий схему модификации списка приоритетов физических страниц.

Кроме того, для хранения двунаправленных списков приоритетов страниц используется ОЗУ приоритетов страниц (ОЗУПС0 и ОЗУПС1) общей емкостью 2к 10-разрядных слов. Структура списка следующая: для страницы с номером Р по адресу, равному номеру страницы, в ОЗУПС0 содержится номер страницы, предшествующей Р по приоритету, а в ОЗУПС1 - номер страницы, следующей за Р по приоритету.

Для страниц, находящихся в начале физической памяти и соответствующих резидентной части системы, пересчитывать приоритеты нет необходимости, поэтому эта часть ОЗУ приоритетов страниц используется в качестве рабочей области. В слове 0 ОЗУПС0 содержится номер страницы с минимальным приоритетом, в ОЗУПС1 - с максимальным (в этом месте список “закольцован”). В слове 1 ОЗУПС0 находится номер страницы NC, для которой произведен пересчет списка приоритетов в последний раз.

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

При обращении к странице, бит модификации которой равен 1, происходит прерывание “запрос модификации приоритетов страниц”. При этом страница, по которой произошло прерывание, извлекается из “старого” списка приоритетов и заносится в “новый” после страницы с номером NC. Бит ОЗУ БМСП, соответствующий странице Р, сбрасывается, а значение Р записывается на место NC.

Запрос на новую корректировку списков приоритетов страниц производится операционной системой по команде WMOD. При этом ОЗУ БМСП, начиная с заданного адреса, заполняется “1”, а в 1-ое слово ОЗУПС0 заносится “0”.


4.7. Регистры

Всего в ЦП имеется 1024 32-разрядных, 16 64-разрядных и ряд специальных регистров.

32-разрядные регистры делятся на группы по 32 регистра. Для выбора группы достаточно записать в регистр номера группы (РНГ) код (5 разрядов), определяющий группу регистров.

Каждому процессу, занимающему центральный процессор, отводится одна или несколько групп 32-разрядных регистров, часть из которых используется в качестве области упрятывания регистров общего назначения, находящихся вне группы. Для смены процессов или организации вызова экстракода в область упрятывания регистров текущего процесса достаточно скопировать содержимое регистров общего назначения, записать другой номер в РНГ и восстановить содержимое регистров общего назначения нового процесса.

Здесь мы перечисляем все те регистры, к которым необходимо иметь доступ из программы, и их разрядность. Отметим, что доступ должен быть симметричен, т.е. Если регистр доступен по чтению, то доступен и по записи. (замечание: для некоторых специальных регистров это не так!)

Нумерация регистров, приведенная в левом столбце, восьмеричная, эти номера будут адресами в командах обращения к регистрам. В скобках приведены шестнадцатеричные эквиваленты адреса.

32-разрядные регистры:
  • 000 0000 : 000 1777 (00000 : 003ff) - 32-разрядные регистры - модификаторы (ОЗУ модификаторов). Полные адреса их используются в привилегированных командах чтения и записи. В полном адресе разряды 6:10 указывают номер группы регистров, а разряды 1:5 - номер регистра внутри группы.
32-разрядные регистры группы:
  • 00 - нулевой регистр всегда содержит нулевой код.
  • 01:17 (00-0f) - индексные регистры 1:15 (модификаторы). Используются для модификации адреса команды. 15 регистр, так же, как и в БЭСМ-6, является указателем адреса магазина (SP).
  • 20 (10) - регистр С. Загрузка его в режиме математика происходит с помощью команд UТС, WТС и UTCS. В режиме диспетчера доступен программе также командами RMOD и WMOD.
  • 21 (11) - регистр режимов (РР, RRR):

 1  : блокировка нормализации (БНОР)
 2  : блокировка округления (БОКР)
 3* : логическая группа для условных переходов (ГЛ)
 4* : группа умножения (ГУ)
 5* : группа сложения (ГС)
 6  : блокировка прерывания при переполнении (БПП)
 7**: признак переполнения (ПП или OVR)
 8**: признак переноса (ППС или С)
 9**: признак знака (ПЗ или N)
10**: признак нуля (ПН или Z)
11  : блокировка выхода числа за диапазон БЭСМ-6 (ББЧ)
12  : блокир.проверки переполн. Поля упрятывания (БППУ)
13  : режим диспетчера (РД)
14  : блокировка реакции на чужой операнд (БЧОП)
15  : блокир.проверки тега при чтении операнда (БПТЧ)
16  : блокировка реакции на чужой сумматор (БЧС)
17  : блокировка программной интерпретации тега (БПИНТ)
18  : блокировка внешних прерываний (БВП)
19  : блокировка проверки тега при записи (БПТЗ)
20  :
21  : режим пошагового выполнения команд (РШ)
22  : признак останова по прерыванию (ПОП)
23  : блокировка защиты страниц по записи (БЗЗ)
24  : блокировка защиты страниц по обращению (БЗО)
25  : режим отрицательных адресов (РОА)
26  : блокировка проверки номера процесса (БПНП)
27  : блокировка приписки (БП)
28* : признак изменения адреса 16 регистром (ПИА)
29* : признак правой команды (ППК)
30* : признак команды передачи управления (ППУ)
31  :
32  :

Все разряды РР активного процесса переписываются в исполнительную часть. Разряды РР, помеченные (*) и изменяющиеся в каждой команде (ГЛ, ГУ, ГС, ПИА, ППК, ППУ) переписываются в триггеры признаков; прочитать их состояние в ПП можно командой чтения регистра с адресом 0181B (см. П.6.7.). Разряды РР, изменяющиеся в арифметических командах с сумматором, помеченные (**) (OVR, С, N, Z), переписываются в регистр признаков результата М; обращение к ним из ПП - командами с адресом 0181f. Остальные разряды исполнительной части соответствуют разрядам РР.

При изменении разрядов РР активного процесса командами из ПП надо записать в РР в ОЗУ модификаторов (адрес РР 11 + номер группы в 6-10 разрядах), то же записать в исполнительную часть РР (адрес 0181в) и, если надо, в регистр М (0181f).

Изменение разрядов РР своего процесса командами SETR и CLRR происходит одновременно в РР в ОЗУ модификаторов и в исполнительной части. Команды RMOD и WMOD, обращающиеся к РР по полному адресу, включающему номер группы, изменяют только РР в ОЗУ модификаторов, не меняя его исполнительной части, если даже это активный процесс!

  • 22 (12) - расширение регистра режимов (РРР, RRR):

1 : признак команд (ПК)
2 : режим эмуляции БЭСМ-6 (РЭ)
3 : запрет чтения операнда из памяти (ЗЧП)
4 : запрет записи операнда в память (ЗЗП)
5 : запрет выборки команды из памяти (ЗВП)
6 : запрет передачи управления на команду (ЗПУ)
7 : теговский резерв
8 : программная интерпретация тега (ПИНТ)
9-16: в 9-13 разрядах номер предыдущей группы регистров (ПГР), 14-ый разряд равен 1;
      или 9-16 разряды равны 0, если содержимое предыдущей группы упрятано в память.
17-24: в 17-21 разрядах - номер резервной группы регистров для экстракодов (РГР),
       22-ой разряд равен 1; или 17-24 разряды равны 0, если резервная группа
       регистров отсутствует и старое содержимое регистров упрятывается в память.
25-32: резерв. Можно использовать в качестве регистра тега для ЭЛЬБРУС-Б.

  • 23 (13) - указатель стека для записи адресов возврата из подпрограмм (РАВ, SPRADR);
  • 24 (14) - таймер счетного времени процесса (32 разряда, из которых младшие 16 разрядов у активного процесса - в аппаратном таймере);
  • 25:26 (15:16) - часы счетного времени процесса (у активного процесса здесь только время на момент активизации процесса, остальное - в аппаратном счетчике);
Регистры 27:34 (17-1с) - область упрятывания регистров:
  • 27:30 (17:18) - сумматора;
  • 31:32 (19:1а) - РМР;
  • 33 (1в) - счетчика адресов слов (СЧАС);
  • 34 (1с) - регистра “откуда пришли” (РОП);
  • 35 (1d) - регистр адреса поля упрятывания (РАПУ, SVFA). Содержит МАТЕМАТИЧЕСКИЙ адрес начала участка памяти, куда производится аппаратное упрятывание регистров при экстракодах. Устанавливается операционной системой. При каждом упрятывании в микропрограмме увеличивается на 16, а по команде возврата из экстракода - уменьшается на 16.
  • 36 (1е) - номер процесса. У активного процесса равен содержимому РНП.
  • 37 (1f) - резерв.
64-разрядные регистры:
  • 001 4000 (01800) - сумматор (А).
  • 001 4001 (01801) - регистр младших разрядов (РМР, У).
  • 001 4002 (01802) - главный регистр прерываний (ГРП, INTR).
  • 001 4003 (01803) - счетчик адресов слов (СЧАС, РС). Содержит адрес текущей выполняемой команды. При внешних прерываниях текущая команда всегда довыполняется до конца. (используется 32 разряда).
  • 001 4004 (01804) - регистр “откуда пришли” (РОП, РССОРУ). Содержит адрес команды последней передачи управления. СЧАС должен копироваться в РОП в командах передачи управления. (используется 32 разряда).
  • 001 4005 (01805) - регистр исполнительного адреса в команде (ИАОП, DADR). (используется 32 разряда).
  • 001 4006 : 001 4017 (01806 : 0180f) - константы и рабочие регистры микропрограмм.
Прочие хранители информации, которые в программах удобно считать регистрами:
  • 000 2000 : 000 3777 (00400 : 007ff) - регистры приписки / защиты (РП) (1024 “20-разрядных регистра”).
  • 000 4000 : 000 5777 (00800 : 00bff) - обьединение признаков БОБР, БИЗМ, регистрирующих обращение и запись по физическим страницам (1024 “2-разрядных регистра”).
  • 000 6000 : 001 1777 (00с00 : 00fff0 - признаки БМСП, управляющие схемой модификации списка приоритетов страниц (1024 “1-разрядных регистра”).
  • 001 0000 : 001 3777 (01000 : 017ff) - память учета приоритетов страниц ОЗУПС0 и ОЗУПС1 (2048 “10-разрядных регистра”).
  • 001 4000 : 001 7777 (01800 : 01fff) - специальные регистры:
  • 001 4024 (01814) - регистр тега команды. Содержит тег текущего командного слова.
  • 001 4025 (01815) - регистр тега операнда. Содержит тег последнего прочитанного из памяти операнда.
  • 001 4026 (01816) - регистр тега результата. Копия тега сумматора, находящегося в РРР. Содержит “дежурный” тег, с которым происходит запись результата в память. В большинстве случаев значение всех разрядов тега результата равно “0”, что означает аппаратную интерпретацию тега: число в новом режиме, к которому разрешен доступ по чтению и по записи. Тег результата можно менять командой WMOD.
  • 001 4031 (01819) - регистр номера процесса. Устанавливается в соответствии с номером процесса, захватившего процессор. Используется аппаратурой для определения принадлежности регистров приписки текущему процессу.
  • И т.д.

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


4.8. Система прерываний и экстракодов

Внутренние прерывания исполняются безусловно и имеют более высокий приоритет по сравнению с внешними. Внешние прерывания исполняются при отсутствии признака БВП. Всего может быть 64 различных типа внешних прерываний. Порядок отработки их определяется номером позиции в ГРП. При отсутствии БВП запросы на обработку прерываний от внешних устройств поступают по шине IRQ в ЦП в блок реакции на прерывание в виде логической суммы запросов от всех устройств. По этому сигналу после выполнения текущей команды инициируется работа микропрограммы входа в прерывание, которая производит чтение запросов на прерывание в ГРП и их гашение. При многопроцессорной системе на внешние прерывания реагирует тот процессор, который первый “откликнулся” (у которого нет БВП). Для более равномерного распределения работ между процессорами можно завести в общей памяти “шкалу работ” на тот случай, если “откликнувшийся” процессор занят. Решено отказаться от главного регистра маски в процессоре. Предполагается иметь только регистры масок в контроллерах и устройствах. При обработке внешних прерываний система сама определяет количество запросов от внешних устройств, анализируя состояние ГРП, и сама же сбрасывает разряды ГРП после обработки соответствующих прерываний.

Каждому процессу отводится одна или несколько групп регистров. Самый “нижний уровень” используется собственно программой, другие используются экстракодами. В каждой группе в РРР в 17-21 разрядах записывается номер резервной группы регистров, а 22-ой разряд устанавливается в 1; либо, если резервная группа регистров отсутствует, 17-24 разряды равны 0. В случае вызова экстракода, если 17-24 разряды не равны 0, после записи регистров ЦП в область упрятывания текущей группы регистров 17-21 разряды переписываются в РНГ, и происходит переход на резервную группу. В РРР этой группы в 9-16 разряды записывается номер предыдущего набора регистров. Если же в поле номера резервной группы регистров в 17-24 разрядах 0, происходит упрятывание регистров ЦП в память, 9-16 разряды РРР устанавливаются в 0, и работа происходит на том же наборе.

Прерывание в этом смысле является таким же процессом, только номер “самой нижней” группы регистров у него фиксирован (нулевой). Номер процесса обработки прерывания записан в области упрятывания регистра номера процесса в группе регистров, отведенных для обработки прерывания, а также в ПНП в РП той страницы, куда будет происходить передача управления по прерыванию. При вызове экстракодов работа происходит от имени процесса, вызвавшего экстракод. Поэтому при экстракодах содержимое РНП не меняется, а перед передачей управления экстракоду устанавливается блокировка проверки номера процесса.

4.8.1. Порядок действий при прерываниях

  • 1. В случае т.н. Псевдопрерываний обработка их происходит на микропрограммном уровне без смены группы регистров и без передачи управления операционной системе. После обработки псевдопрерывания производится сброс прерываний и возврат на микропрограмму по прерванному адресу.
  • 2. При внешних прерываниях в режиме блочной передачи выдается сигнал подтверждения прерывания, производится чтение запросов на прерывание в ГРП, их гашение и передача управления операционной системе.
  • 3. Если установлен признак ПОП=1 (в частности, ПОП=1 всегда на 0-й группе регистров), посылается прерывание ПП, а ЦП переводится в режим “останов”.
  • 4. Если ПОП не установлен, старое содержимое регистров упрятывается и подготавливается новый набор регистров:
    • переписывается содержимое сумматора, РМР, СЧАС, РОП, часов и таймера счетного времени прерванного процесса в область упрятывания регистров в ОЗУ модификаторов;
    • в РНГ записывается номер группы регистров обработки прерываний (0);
    • в РРР новой группы в поле номера группы предыдущего набора записывается номер группы прерванного процесса;
    • в ПНП в РП должен быть установленный системой “номер процесса обработки прерываний”, куда будет происходить передача управления по прерыванию.
  • 5. В РР группы обработки прерываний устанавливаются: ГЛ, БПНП, БВП, РД, РОА, БПТЧ, БЧОП, ПОП, ППУ. Остальные разряды гасятся. Тег результата устанавливается в “0”. В случае многопроцессорной системы одновременно с установкой БВП производится захват “глобального” семафора (мат. Адрес семафора - fff8 0840 н), разрешающего доступ к общим ресурсам системы. В случае занятости семафора микропрограмма ждет его освобождения, и только тогда происходит передача управления операционной системе.
  • 6. Восстанавливаются РНП, часы счетного времени процесса обработки прерываний. Таймер СВ останавливается. Значения регистров SР и SPRADR не определены. Сумматор и РМР не меняются; через них возможна передача параметров в программно-имитированных прерываниях.
  • 7. В индекс-регистры процесса обработки прерываний переписываются матаматический и физический адреса команды и/или операнда, вызвавшего прерывание, а также значения РР, РРР, РНП и других регистров прерванного процесса:

14 - ИАОП (в РЭ - только младшие 15 разрядов)
13 - СЧАС (в РЭ - только 15 разрядов)
12 - физический адрес (rG0 на момент прерывания)
11 - РНП
10 - РР
 9 - РРР
 8 - РНГ в 6-10 разрядах
 7 - код операции арбитра.
 6 - тег команды
 5 - тег операда
 4 - правая половина командного слова
 3 - левая.

  • 8. Производится безусловная передача управления операционной системе по МАТЕМАТИЧЕСКОМУ адресу, определяемому вектором прерываний. Адрес передачи управления: fff8 0800 + номер прерывания - 1.
  • 9. Возврат из прерывания производится по специальной команде, подаваемой из диспетчерского режима. При этом происходит упрятывание часов счетного времени процесса обработки прерываний и восстановление содержимого регистров активируемого процесса: в РНГ записывается его значение из РРР обработки прерываний, восстанавливается содержимое сумматора, РМР, СЧАС, РОП, РНП, а также регистр и таймер счетного времени процесса. Значения РР и РРР переписываются в исполнительную часть (в частности, тег, признаки ППК, ПИА и т.д.).

4.8.2. Порядок действий при экстракодах

  • 1. Если номер резервной группы регистров не 0, происходит перепись СЧАС и РОП в область упрятывания регистров в ОЗУ модификаторов, в регистр номера группы РНГ записывается номер резервной группы, а в резервной группе в поле номера группы предыдущего набора регистров записывается номер сменяемой группы, старое содержимое РАПУ увеличивается на 16 для организации области упрятывания в памяти и переписывается в РАПУ новой группы. РНП не меняется.
  • 2. Если в поле номера резервной группы 0, производится упрятывание регистров в память по математическому адресу, указанному в регистре РАПУ, с установкой запрета записи по тегу (4 разряд тега при записи регистров = 1). В РРР в поле номера группы предыдущего набора регистров записывается 0. Содержимое РАПУ увеличиваеися на 16.
  • 3. В РР экстракода устанавливаются: ГЛ, РД, РОА, БЧОП, ППУ. Признаки БППУ, БВП и ПОП копируются из предыдущей группы. Остальные разряды гасятся. Тег результата устанавливается в “0”.
  • 4. В индекс-регистры экстракода передаются:

15 - адрес начала рабочего поля экстракода в области упрятывания (новое значение РАПУ, уменьшенное на 6)
14 - исполнительный адрес экстракода (МАТЕМАТИЧЕСКИЙ, 32 разряда - в нр, 15 разрядов - в рэ)
13 - СЧАС ( в рэ - только 15 мл.разрядов)
12 - физический адрес
11 - РНП
10 - РР
 9 - РРР
 8 - РНГ в 6-10 разрядах
 7 - код операции экстракода
 6 - тег команды
 5 - тег операнда
 4 - правая половина командного слова
 3 - левая.
Сумматор и РМР при экстракодах не упрятываются и не восстанавливаются. Их можно использовать для передачи параметров.

  • 5. Адреса входа в экстракод:
    • fff8 0850 - новые экстракоды МКБ-8601;
    • fff8 0851 - старые экстракоды БЭСМ-6;
    • fff8 0852 - экстракоды ЭЛЬБРУС-Б, команды ЭЛЬБРУС-Б, которые редко используются или сложно реализовать;
    • fff8 0853 - запрещенние команды, в том числе привилегированные не в РД, а также резервные коды операций.
  • 6. После установки программного счетчика согласно коду экстракода для передачи управления операционной системе в отсутствие БППУ проверяются 1-10 разряды нового значения РАПУ. Если там не “0”, происходит передача управления экстракоду, в противном случае происходит прерывание “переполнение поля упрятывания”.
  • 7. Возврат из экстракода производится по специальной команде, подаваемой из диспетчерского режима. При этом, если номер предыдущего набора регистров 0, происходит восстановление содержимого регистров в той же группе из памяти. Содержимое РАПУ уменьшается на 16. Если в поле номера предыдущего набора не 0, то в РНГ записывается его содержимое, восстанавливается содержимое СЧАС и РОП.
  • 8. Прежнее содержимое РАПУ восстанавливается вместе с восстановлением прежнего номера группы. БППУ, ПОП и БВП копируются “обратно”. Изменяется соответствующим образом ППК и увеличивается СЧАС, если команда экстракода правая.
  • 9. После полного восстановления регистров при наличии РШ должно быть шаговое прерывание (команда возврата из экстракода заканчивается признаком ПМИ, разрешающим это прерывание).
Порядок упрятывания регистров в память:
  • 0:6 - модификаторы 1-14 (по 2 в слово)
  • 7 - счетчик магазина, указатель стека адресов возврата
  • 8 - СЧАС, РОП
  • 9 - РР, РРР
  • 10:15 - рабочее поле экстракода

4.8.3. Перечислим все возможные перерывания и причины их возникновения

  • 1 - отсутствующий блок памяти. Вырабатывается схемой управления ОЗУ при обращении к отсутствующему блоку памяти (сигнал AMBI общей шины). Внутреннее прерывание. Передается управление операционной системе.
  • 2 - многократная ошибка. Вырабатывается схемой управления памятью при сбоях ОЗУ (сигнал DERI общей шины). Специальное прерывание. Передается сообщение пультовому процессору; останов. Делается сброс кэша.
  • 3 - “time-out” при обращении к ОЗУ. Вырабатывается при длительном отсутствии ответа при обращении к ОЗУ (100 микросекунд). Передается сообщение пультовому процессору; останов. Делается сброс кэша.
  • 4 - “time-out” при обращении к шине. Вырабатывается арбитром ЦП при длительном отсутствии ответа при обращении к шине (100 микросекунд). Передается сообщение пультовому процессору; останов. Делается сброс кэша.
  • 5 - программное прерывание. Возникает по запросу операционной системы, задающей команду WMOD с адресом 01с13 (программное прерывание), или при установке в “0” всех 32 разрядов таймера счетного времени. Различаются разрядом в ГРП: таймер счетного времени равен 0 - 40 разряд ГРП =1; установка программно-имитированного прерывания командой WMOD или по запросу ПП - 41 разряд ГРП =1. Разрешается при наличии ПМИ (Признака последней МикроИнструкции команды) и отсутствии БВП. Внешнее прерывание.
  • 6 - резерв.
  • 7 - отсутствующий адрес памяти в новом режиме. Возникает при попытке обращения к математической памяти (или физической при блокировке приписки), если 21-32 разряды адреса не совпадают с 20-ым разрядом. Прерывание блокирует запуск арбитра. Внутреннее прерывание.
  • 8 - отрицательный номер страницы у команды. Возникает при отсутствии БП и РОА, если на вход схемы приписки поступил отрицательный математический адрес командного слова (”1” в 20 разряде). Внутреннее прерывание.
  • 9 - отрицательный номер страницы у операнда. Возникает при отсутствии БП и РОА, если на вход схемы приписки поступил отрицательный математический адрес операнда (”1” в 20 разряде). Внутреннее прерывание.
  • 10 - программная интерпретация тега команды. Происходит во время выборки командного слова из ОЗУ при отсутствии БПИНТ, если 72 разряд тега команды установлен в “1”. Внутреннее прерывание.
  • 11 - программная интерпретация тега операнда. Происходит при отсутствии БПИНТ во время выборки операнда из ОЗУ, если 72 разряд тега операнда установлен в “1”. Внутреннее прерывание.
  • 12 - защита адреса при чтении. Возникает при “0” БПТЧ, если при чтении из памяти слово по исполнительному адресу содержит “1” в 67 разряде тега. Внутреннее прерывание.
  • 13 - контроль команды. Возникает при выборке в качестве команды слова, содержащего “0” в 65 разряде тега. Внутреннее прерывание.
  • 14 - математический адрес равен 0. Происходит при записи нулевого математического адреса в регистр исполнительного адреса ЦП. Псевдопрерывание. Обработка его происходит на микропрограммном уровне. После обработки - возврат в прерванную команду.
  • 15 - чужой регистр приписки при чтении/записи операнда. Возникает при несовпадении поля номера процесса в регистре приписки с содержимым РНП при чтении/записи операнда, если не установлены БП и БПНП, за исключением случая, когда в ПНП число 255 (страница доступна всем процессам). Внутреннее прерывание.
  • 16 - чужой регистр приписки при выборке команд. Возникает при несовпадении поля номера процесса в регистре приписки с содержимым РНП при выборке из памяти командного слова, если не установлены БП и БПНП, за исключением случая, когда в ПНП число 255. Внутреннее прерывание.
  • 17 - защита страницы при обращении. Возникает при отсутствии БП и БЗО, если операнд команды чтения/записи находится в защищенной странице, т.е. Соответствующий РП содержит “0” в 10 разряде. Внутреннее прерывание. При выборке командного слова этого прерывания не происходит.
  • 18 - защита страницы при записи. Возникает при отсутствии БП и БЗЗ, если операнд команды записи в память находится в защищенной странице, т.е. Соответствующий регистр приписки содержит “0” в 9 разряде. Внутреннее прерывание.
  • 19 - защита выборки команды. Возникает при выборке в качестве команды слова, содержащего “1” в 69 разряде тега. Внутреннее прерывание.
  • 20 - защита передачи управления. Возникает при попытке передачи управления на левую команду слова, содержащего “1” в 70 разряде тега. Команды с таким тегом доступны по выборке “сверху”, т.е. По СЧАС, а также при возврате из прерывания и экстракода. (возврат из прерывания и экстракода передачей управления не считается). Внутреннее прерывание.
  • 21 - защита адреса при записи. Возникает при “0” БПТЗ, если при записи в память слово по исполнительному адресу содержит “1” в 68 разряде тега (сигнал PWRI общей шины). В микропрограмме реакции на прерывание сразу же делается сброс кэша, т.к. Запись в кэш происходит независимо от этого прерывания. Внутреннее прерывание.
  • 22 - чужой сумматор. Возникает при несовпадении 66 бита тега текущего командного слова с признаком РЭ в РРР, если БЧС установлен в “0”; происходит в момент смены режимов. Внутреннее прерывание.
  • 23 - чужой операнд. Возникает при несовпадении 66 бита тега операнда с признаком РЭ в РР. Прерывание возможно при совместном использовании “новых” и “старых” программ; блокируется признаком БЧОП. Внутреннее прерывание.
  • 24 - запрос модификации приоритетов страниц. Возникает при обращении к физической странице, признак БМСП которой устновлен в “1”. Запуск арбитра не блокируется. Псевдопрерывание.
  • 25 - останов при совпадении адресов по запросу ПП. Возникает при обращении к математическому адресу ОЗУ (или физическому с блокировкой приписки) с КОП арбитра, по адресу которых в ОЗУ останова 0 или 1 пультовым процессором занесен бит останова (0). Прерыванме возможно при отсутствии блокировки останова по адресу в статусном регистре ЦП (см.п.6.6). Устанавливается HALT ЦП. Передается сообщение ПП; останов.
  • 26 - “time-out” при блокировке внешних прерываний. Возникает, если слишком долго происходит работа с блокировкой внешних прерываний. Прерывание инициируется при срабатывании микросекундного таймера, который начинает “работать” при установке блокировки внешних прерываний. Прерывание разрешается при наличии сигнала ПМИ. Если прерывание произошло на 0-й группе регистров, где ПОП установлен в “1”, происходит останов и передается сообщение пультовому процессору (прерывание с номером 32); иначе - внутреннее прерывание с передачей управления операционной системе.
  • 27 - внешние прерывания. Логическая сумма запросов на прерывание от контроллеров внешних устройств (сигнал IRQ общей шины). Разрешается при наличии признака ПМИ и отсутствии БВП.
  • 28 - halt. Возникает:
    • при устанвке останова из ПП (HALT ПП в статусном регистре ЦП =1);
    • при возникновении любого прерывания и признаке ПОП, установленном в “1” (прерывание в прерывании);
    • по команде “останов”. Разрешается при наличии ПМИ. Передается сообщение пультовому процессору; останов.
  • 29 - шаговое прерывание. Возникает при наличии РШ в РРР после выполнения каждой команды, даже если в ходе выполнения ее зарегистрировано внешнее прерывание. Разрешается при наличии сигнала ПМИ. Внутреннее прерывание. Производится передача управления операционной системе.
  • 30 - обращение блока связи ПП на чтение/запись регистров. Возникает по запросу ПП. Прерывание можно устанавливать во время останова (т.е. Между командами), т.к. Оно не стробируестя признаком ПМИ и может испортить рабочие регистры. Псевдопрерывание.
  • 31 - аппаратная часть часов счетного времени равна 0. Прерывание происходит, если значение младших 16 разрядов часов счетного времени устанавливается в “0”. При этом микропрограмма вычитает “1” из старших разрядов часов счетного времени. Псевдопрерывание. Разрешается после исполнения текущей команды по сигналу ПМИ.
  • 32 - аппаратная часть таймера счетного времени равна 0. Прерывание происходит, если значение микросекундного таймера счетного времени (младшие 16 разрядов) во время счета устанавливается в “0”. При этом микропрограмма вычитает “1” из старших 16 разрядов таймера, и если они равны “0”, записывает “1” в 40 разряде ГРП и устанавливает программное прерывание. Псевдопрерывание. Разрешается после исполнения текущей команды по сигналу ПМИ.
Микропрограммные прерывания
  • 33 - переполнение. Возникает при работе с плавающей запятой, если порядок результата арифметической операции превышает 2047. При переполнении устанавливается признак переполнения OVR. Прерывание может быть блокировано “1” 6 бита РР (БПП). Внутреннее прерывание.
  • 34 - переполнение порядка БЭСМ-6. Возможно при наличии ББЧ в режиме эмулятора. Внутреннее прерывание.
  • 35 - деление на “0”. Возникает при попытке деления на “0”. Деление на ненормализованное число разрешается (по аналогии с умножением), чего не было в БЭСМ-6. Внутреннее прерывание.
  • 36 - “переполнение поля упрятывания”. Возникает в отсутствие БППУ при экстракодах после упрятывания регистров в память, если поле упрятывания выходит за пределы страницы. Внутреннее прерывание.
  • 37 - незаконный операнд. Возникает при выполнении логических и сдвиговых команд в режиме эмулятора, если имеется хотя бы одна “1” в 60-63 разрядах при “1” 64 разряда сумматора или операнда команды. Если незаконным операндом является сумматор, в ИАОП заносится “0”, иначе - математический адрес операнда. Внутреннее прерывание.
  • 38 - выборка командного слова по 0-ому мат.адресу. Происходит при выборке командного слова по 0-ому математическому адресу. Внутреннее прерывание.
Внешние прерывания. Разряды ГРП
  • 1 - прерывание от другого процессора.
  • 2 - прерывание от пультового процессора. Маскируется.
  • 3 - - " -
  • 4 - - " -
  • 5 - прерывание от таймера астрономического времени. Возникает прии совпадении значений таймера и часов астрономического времени. Прерывание маскируется.
  • 40 - прерывание от таймера счетного времени. Прерывание происходит, если все 32 разряда таймера счетного времени установлены в “0”. См. прерывание 26.
  • 41 - программное прерывание. См. прерывание 31.
 
proj/besm/doc-mkb/micro-besm4.txt · Последние изменения: 2008/03/19 16:07
 
Copyright (C) 1996-2013 Serge Vakulenko
serge@vak.ru