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

Связь процессора, каналов и памяти
Связь процессора, каналов и памяти

Данные из памяти поступают по 32-разрядной шине считывания одновременно в процессор и каналы. Аналогичным образом, данные для записи поступают из процессора или каналов по 32-разрядной шине записи. Адрес обращения из каналов подаётся в память не напрямую, а через процессор, поскольку он нуждается в проверке механизмом защиты памяти ключами. В состав адреса, не считая контрольных битов, входят 17 линий собственно адреса, что позволяет адресовать 128 Кслов (512 Кбайт), и четыре бита маски записываемых байтов. Вместе с линиями адреса из каналов в процессор и далее в память идут не показанные на рисунке линии управления.

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

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

БООП выполняет две основные функции: присвоение приоритета одновременно поступающим запросам и выработку последовательности управляющих сигналов.

Узел присвоения приоритета

В состав узла, блок-схема которого приведена на рисунке, входят регистр фиксации запросов РЗПР, регистр очерёдности РОЧ и схема выработки приоритета ОЧ (на приведённом ниже рисунке она подписана неверно).

Узел присвоения приоритета
Узел присвоения приоритета

РЗПР состоит из трёх битов, имеющих номера 0, 2 и 4. Бит 0 принимает запрос со стороны каналов, бит 2 — от таймера, 4 — от процессора. Запросы процессора и таймера инициируются микропрограммно с помощью микроопераций РЗПР[4]:=1 и РЗПР[2]:=1; запросы от всех имеющихся у машины каналов (одного мультиплексного и двух-трёх селекторных) объединяются в так называемом общем канале, откуда и поступает единый сигнал запроса, устанавливающий нулевой разряд РЗПР (этот сигнал носит ожидаемое обозначение РЗПР[0]:=1, но, в отличие от предыдущих двух, не является микрооперацией, поскольку формируется чисто аппаратными средствами).

Из [2] известно, что РЗПР является 6-разрядным регистром, но разряды с нечётными номерами используются только при, как тогда писали, «мультисистемной работе», т. е. в двухпроцессорной вычислительной машине. Никаких других подробностей, однако, не приводится.

Приём новых запросов в РЗПР происходит в полутакте С1. Если обслуживание предыдущего запроса заканчивается или уже закончено, в полутакте С2 содержимое РЗПР переносится в РОЧ, в противном случае запрос сохраняется в РЗПР в ожидании завершающего этапа выполнения текущего запроса. На выходе РОЧ собрана комбинационная схема присвоения приоритета, выдающая один из сигналов ОЧ=0, ОЧ=2 или ОЧ=4 в зависимости от того, какой запрос должен быть обслужен (надо полагать, имеются аналогичные сигналы и для нечётных битов, используемые в двухпроцессорной конфигурации). Приоритеты запросов жёстко фиксированные: наивысшим приоритетом обладают запросы каналов, наименьшим — обращения процессора. Разряд РЗПР, соответствующий принятому для обслуживания запросу, сбрасывается, остальные разряды РЗПР сохраняются неизменными в ожидании обслуживания зафиксированных ими запросов.

Узел обработки запросов

Узел обработки запросов вырабатывает последовательность сигналов, управляющих ходом выполнения запроса. Он включает цепочку тактовых импульсов ЦТИ, набор управляющих триггеров, регистр адресного слова памяти РАСП, регистр дешифрации РДШ, регистр ошибок памяти РОП, регистр ключа защиты РКЗ, схему сравнения ключа с памятью ключей защиты СРПКЗ, схемы анализа ошибок адресации ОА и спецификации ОС.

Последовательность формирования тактовых импульсов
Последовательность формирования тактовых импульсов

Цепочка тактовых импульсов ЦТИ предназначена для общего управления процессом обращения к памяти и состоит из шести триггеров: ТИ1*, ТИ2, ТИ2*, ТИ3, ТИ3* и ТИ4. Триггеры со звёздочкой меняют своё состояние во время действия тактового сигнала С1 и управляют работой БООП во втором полутакте того же такта, во время действия С2; триггеры без звёздочки меняют своё состояние во время действия С2 и управляют работой БООП в первом полутакте следующего такта во время действия сигнала С1.

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

Действия, выполняемые в том или ином полутакте, т. е. во время действия одного из триггеров ЦТИ, будут описаны в следующем разделе.

Управляющие триггеры отражают характер обслуживаемого запроса.

Триггер данных ТДАН сброшен, если процессор обращается к данным, и установлен, если он выбирает код команды. При обращении к данным их адрес формируется на выходе сумматора арифметико-логического блока СМ[8/31], откуда и передаётся в регистр адресного слова памяти РАСП. При обращении для выборки команды адрес поступает из регистра слова состояния программы РССП[40/63].

Триггер записи ТЗП сбрасывается при выполнении записи в память и устанавливается при выполнении чтения.

Триггер фиксированного адреса центрального процессора ТФАЦ и триггер фиксированного адреса каналов ТФАК определяют обращение к фиксированным ячейкам памяти процессора или каналов, т. е. к ячейкам, имеющим определяемое архитектурой назначение и расположенным в младших 4 Кбайтах ОП (к ним относятся, главным образом, ячейки, выделенные для хранения старых и новых PSW, используемые при прерываниях; не следует путать «архитектурно фиксированные» ячейки с фиксированными ячейками памяти с точки зрения аппаратуры управления памятью, т. е. с ячейками, обращение к которым может производиться, не только по обычному адресу, но и по специальным сигналам, что используется в процессе диагностики и записи состояния при ошибках процессора). Установка любого из этих триггеров отключает контроль особых случаев доступа к памяти, а ТФАЦ используется ещё и для выбора источника адреса памяти.

Заметим, что словосочетание «фиксированный адрес» в названиях этих триггеров не имеет отношения к фиксированным ячейкам ОП, задаваемым сигналами 1ФЯ–4ФЯ, о которых говорилось в предыдущей статье: последние формируются чисто аппаратными средствами при работе схем контроля и диагностики. В данном же случае под «фиксированными адресами» понимаются ячейки памяти, назначение которых определено архитектурой Системы 360: области старых и новых PSW, записываемых и считываемых при прерываниях, области адресного слова канала и слова состояния канала CAW и CSW и др. При обращении к этим областям по их прямому назначению, т. е. в ходе выполнения прерывания, запуска операции ввода-вывода и т. п., устанавливается ТФАЦ или ТФАК, отключая защиту этих ячеек. Если же к ним обращаются обычные команды процессора или производится передача данных в ходе операции ввода-вывода, триггеры остаются сброшенными и ячейки защищаются ключами памяти подобно любым другим областям ОП.

Триггер длины байт ТДБ предназначен для обнаружения особого случая спецификации при обращении процессора к данным размером двойное слово (восемь байтов): он установлен, если выполняется обращение к двойному слову, и сброшен в противном случае. (Особым случаем спецификации при обращении к памяти будет попытка доступа по адресу, не выровненному должным образом.)

Регистр адресного слова памяти РАСП запоминает адрес доступа к памяти и передаёт его в ОП. Его структурная схема приведена на рисунке, а разряды имеют следующее назначение.

Регистр адресного слова памяти
Регистр адресного слова памяти
  • Биты 0:4 являются старшими разрядами адреса обращения к памяти и должны всегда содержать нули, поскольку объём ОП ЕС-1030 не превосходит 512 Кбайт. Если любой из этих разрядов устанавливается, фиксируется особый случай адресации, т. е. выход за пределы доступной памяти.

  • Биты 5:6 после дешифрации определяют модуль памяти, к которому производится обращение. В зависимости от имеющегося объёма ОП в данной конкретной машине те или иные значения этих битов могут вызывать фиксацию особого случая адресации.

  • Биты 7:21 задают адрес слова внутри модуля, к которому производится обращение.

  • Биты 22:23 определяют номер байта в пределах слова.

  • Биты 24:25 определяют количество байтов, записываемых в слове, начиная с заданного предыдущей парой разрядов. Информация в них при обращении процессора принимается из РИДЗУ[54/55], т. е. из младших разрядов константы. При обращении канала эти биты принимают значения, полученные от общего канала вместе с остальной информацией.

  • Биты 26:28 являются контрольными для соответственно битов 0:7, 8:15 и 16:23, т. е. для разрядов собственно адреса.

Регистр дешифрации РДШ состоит из двух битов и запоминает разряды РАСП[5/6], то есть номер модуля памяти, к которому выполняется обращение. Нужда в этом регистре объясняется тем, что передача информации, считанной из памяти, выполняется в полутакте ТТИ5 и совмещается с полутактом ТТИ2 следующего обращения к памяти, в котором в РАСП уже принимается новый адрес.

Регистр ошибок памяти РОП состоит из трёх разрядов и фиксирует особые случаи, возникающие при обращении к ОП, а не аппаратные ошибки, как можно было бы подумать. Бит 0 устанавливается при обнаружении особого случая спецификации (при обращении по невыровненному адресу), бит 1 — при особом случае адресации (при обращении к несуществующей области памяти), бит 2 — при особом случае защиты при выборке (но не при записи, о чём будет сказано позже).

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

Схема обработки нарушений при обращении к памяти
Схема обработки нарушений при обращении к памяти

Проверка на особый случай спецификации производится только при обращениях процессора (каналы никогда не обращаются по неправильно выровненному адресу) и выполняется по следующим правилам:

  • если ТДБ установлен, то обращение выполняется к двойному слову, поэтому биты РАСП[21/23] должны быть равны нулю;

  • если ТДАН установлен, считывается команда, и поэтому РАСП[23] должен быть нулевым (команды всегда располагаются на границе полуслова);

  • если оба этих триггера сброшены, требования к выравниванию определяются микрооперацией, выполняемой процессором в полутакте ТТИ2*, о чём будет сказано в следующем разделе. В частности, при отсутствии микрооперации, управляющей шириной доступа, БООП считает, что выполняется обращение к полному слову, при котором РАСП[22/23] должны быть равны нулю.

При обнаружении особого случая спецификация производится установка РОП[0].

Особый случай адресации обнаруживается, если в любом из битов РАСП[0/4] содержится единица или если содержимое битов РАСП[5/6] не соответствует объёму памяти, физически имеющемуся на данной машине (они оба должны быть равны нулю, если памяти всего 128 Кбайт; бит 5 должен быть нулевым, если памяти имеется 256 Кбайт; при объёме памяти 512 Кбайт значение этих двух разрядов может быть произвольным). При обнаружении особого случая адресации устанавливается РОП[1].

Любопытно, что, если особый случай вызван неверным значением РАСП[5/6], физическое обращение к памяти вообще не выполняется, поскольку адресуемый модуль ОП отсутствует. Однако в случае особого случая из-за битов РАСП[0/4] физически считывание слова памяти всё равно выполняется, при этом содержимое разрядов РАСП[0/4] игнорируется. Считанное значение никак не используется и просто записывается обратно в память в процессе выполнения регенерации.

Особый случай защиты выявляется путём сопоставления ключа доступа, предоставляемого процессором или каналом, и ключа защиты, хранящегося в памяти ключей защиты. Каждому блоку ОП размером 2 Кбайта назначается свой ключ защиты. Ключ доступа процессора хранится в битах 8:11 регистра слова состояния программы РССП; ключ доступа канала на момент запуска операции ввода-вывода располагается в адресном слове канала, откуда выбирается каналом и запоминается в соответствующем внутреннем регистре, а при обращениях к памяти для чтения или записи данных передаётся одновременно с адресом в БООП и запоминается в регистре ключей защиты РКЗ.

Заметим, что с ключами в литературе очень часто имеется определённая терминологическая путаница. Чтобы избежать двусмысленностей, я всегда использую только два термина: «ключ защиты» означает ключ, хранящийся в памяти ключей защиты и защищающий соответствующий блок основной памяти, а «ключ доступа» означает ключ, предоставляемый устройством, выполняющим обращение к памяти (процессором или каналом). Применительно к процессору ЭВМ ЕС-1030 регистр ключей защиты РКЗ хранит ключ доступа.

Право доступа данного устройства к адресуемой памяти определяется сопоставлением предоставленного им ключа доступа и ключа защиты адресуемого блока:

  • если ключ доступа равен нулю или установлен триггер ФАК, доступ разрешён (логически установка ФАЦ тоже разрешает доступ без ограничений, но технически, как будет видно из дальнейшего, установка ФАЦ приводит к установке ФАК, а лишь его состояние учитывается в процессе проверки на особый случай защиты);

  • если ключ доступа совпадает с битами управления доступом ключа памяти, доступ разрешён;

  • если ключ доступа не совпадает с битами управления доступа ключа памяти, то:

    — если выполняется попытка записи, она запрещена;

    — если выполняется попытка считывания, она разрешена при нулевом значении бита защиты от выборки, входящего в состав ключа защиты памяти, и запрещена при его единичном значении.

Одновременно с приёмом адреса и ключа доступа запускается считывание ключа защиты из памяти ключей защиты; нужный ключ выбирается битами РАСП[5/12]. Считанный ключ защиты принимается в регистр информации памяти ключей защиты РИПКЗ, после чего выполняется его сопоставление с ключом в РКЗ.

Если любой из особых случаев обнаруживается при считывании информации, выход регистра информации памяти РИОП блокируется и в процессор или канал поступают нули вместо реально прочитанного значения. Особого смысла эта блокировка не имеет: использование считанных данных в любом случае подавляется. Если особый случай обнаруживается при записи информации, вместо записи память выполняет считывание, однако считанная информация никуда не передаётся, поскольку процессор или каналы запрашивали запись.

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

Порядок выполнения операций в БООП

Упрощённая блок-схема выполнения считывания слова памяти процессором приведена на следующем рисунке.

Блок-схема операции считывания из ОП
Блок-схема операции считывания из ОП

Обработка обращения начинается с установки триггера ТИ1*, что производится во время действия синхросигнала С1 в полутакте ТТИ1 (см. выше диаграмму, иллюстрирующую работу ЦТИ). Эта установка выполняется в двух случаях:

  • при наличии хотя бы одного из сигналов РЗПР[n]:=1, если активных запросов нет, т. е. все разряды регистра РОЧ равны нулю. Кроме ТИ1*, по этим сигналам будут также установлены соответствующие разряды РЗПР;

  • если установлен триггер ТИ4, т. е. если завершается выполнение ранее поступившего запроса.

Выдача сигналов РЗПР[2]:=1 и РЗПР[4]:=1 для обращений со стороны интервального таймера и процессора, как уже говорилось, осуществляется с помощью одноимённых микроопераций; выдача сигнала РЗПР[0]:=1 производится аппаратно общим каналом.

Если процессор обращается к памяти для выборки очередной команды, одновременно с микрооперацией РЗПР[4]:=1 в микрокоманде задаётся микрооперация ТДАН:=1; при обращении процессора для чтения или записи данных микрооперация ТДАН:=1 отсутствует, и этот триггер остаётся сброшенным.

Если производится обращение таймера либо если процессор обращается к фиксированной ячейке памяти, вместе с микрооперацией РЗПР[2]:=1 или РЗПР[4]:=1 указывается микрооперация ТФАЦ:=1, в противном случае она отсутствует, и триггер ТФАЦ остаётся сброшенным.

В следующем полутакте, ТТИ1*, т. е. втором полутакте первого такта обращения к памяти, установленное состояние ТИ1* по тактовому сигналу С2 вызывает следующие действия:

  • установку ТИ2;

  • установку ТЗП, что определяет операцию считывания;

  • сброс ТФАК, если он был установлен при предыдущем обращении;

  • сброс ТДБ;

  • передачу содержимого РЗПР в РОЧ.

Схема присвоения приоритета, находящаяся на выходе РОЧ, через какое-то время формирует один из сигналов очерёдности ОЧ=0, ОЧ=2 или ОЧ=4, который сообщает инициатору обращения к памяти, что его запрос начал исполняться, а также сбрасывает этот запрос в регистре РЗПР. Сигнал очерёдности сохраняется до тех пор, пока в РОЧ не будет занесено следующее значение, т. е. до полутакта ТТИ1* следующего обращения к памяти, и может использоваться для управления БООП в следующих тактах.

В полутакте ТТИ2, т. е. во время тактового сигнала С1 при установленном триггере ТИ2, выполняются следующие действия:

  • сброс триггера ТИ1*, если текущее содержимое РОЧ отлично от нуля, т. е. если начато выполнение нового запроса. Сброс ТИ1* выполняется также в случае, если РОЧ равен нулю и нет ни одного из сигналов РЗПР[n]:=1, т. е. если выполнение предыдущего запроса уже было закончено, а новых запросов ни в предыдущем, ни в этом тактах нет (как уже говорилось, ТИ1* в предыдущем такте будет установлен, если перед этим был установлен ТИ4, и данный сброс ТИ1* и сброс ТИ2 в следующем полутакте окончательно завершают уже фактически оконченный предыдущий запрос). В то же время, если РОЧ равен нулю, но присутствует хотя бы один из сигналов РЗПР[n]:=1, ТИ1* не сбрасывается, а в следующем такте произойдёт установка и так уже установленного ТИ2 — по сути, данный такт будет, на самом деле, первым тактом нового, только что поступившего обращения к памяти, а не вторым тактом обращения, имевшегося уже на предыдущем такте;

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

  • сброс триггера РЗПР, соответствующего сформированному сигналу очерёдности, если отсутствует сигнал установки этого триггера РЗПР[n]:=1 (если он присутствует, триггер РЗПР остаётся установленным, чтобы зафиксировать появление нового запроса от того же источника; такая ситуация потенциально возможна только при обращениях со стороны каналов);

  • сброс триггера ТЗП по микрооперации ТЗП:=0, если процессор или таймер желает выполнить запись в память, или по соответствующему сигналу от общего канала, если запись будет выполняться каналом. Если запрашивается чтение, сброс ТЗП не выполняется, и он остаётся установленным (он устанавливается аппаратно в полутакте ТТИ1*, как указывалось выше);

  • установка триггера ТДБ микрооперацией ТДБ:=1, если процессор выполняет обращение к двойному слову. При обращении к менее крупной величине этот триггер остаётся сброшенным с полутакта ТТИ1*;

  • установка ТФАК, если ранее был установлен ТФАЦ или если выполняется обращение канала и канал выдал сигнал установки этого триггера ([2] указывает установку ТФАК при установленном ТФАЦ только в случае, если одновременно есть сигнал ОЧ=4, т. е. если обращение идёт со стороны процессора, но не таймера, однако это представляется сомнительным, поскольку при обновлении таймера защита памяти должна быть отключена всегда; правда, нельзя исключить тот вариант, что она отключается самим сигналом ОЧ=4). Если эти условия не соблюдаются, ТФАК остаётся сброшенным с полутакта ТТИ1*;

  • приём адреса обращения в РАСП. В зависимости от состояния различных триггеров и от того, чей запрос выполняется, возможны следующие источники адреса:

    — при обращении процессора (и, вероятно, таймера, т. е. при наличии сигнала ОЧ=4 и, возможно, ОЧ=2) и установленном триггере ТФАЦ адрес в РАСП[16/23] поступает из полей Л и М микрокоманды, т. е. из битов РИДЗУ[48/55], а биты РАСП[12/15] обнуляются. Вероятно, разряды РАСП[0/11] тоже обнуляются, поскольку обращения по фиксированным адресам всегда производятся в пределах первых 4 Кбайт ОП. Насчёт РАСП[24/25] уверенности нет: судя по явно сказанному в [1] и [2], в эти биты при обращении процессора всегда передаются биты РИЗДУ[54/55], т. е. два младших разряда поля Л, но они в данном случае точно поступают в РАСП[22/23] и задают адрес байта, начиная с которого должен выполняться доступ. Вполне возможно, что эти два бита одновременно поступают в обе пары разрядов РАСП, поскольку при обращениях по фиксированным адресам процессору требуется доступ только к полному слову, при этом данные биты должны быть нулевыми;

    — при обращении процессора (ОЧ=4), сброшенном триггере ТФАЦ и установленном триггере ТДАН, т. е. при выборке команды, адрес в РАСП[0/23] принимается из РССП[40/63], а в РАСП[24/25] заносятся биты РИЗДУ[54/55], т. е. два младших разряда поля Л;

    — при обращении процессора и сброшенных триггерах ТФАЦ и ТДАН, т. е. при чтении или записи данных, адрес в РАСП[0/23] принимается с выходов сумматора СМ[8/31], а в РАСП[24/25] заносятся биты РИЗДУ[54/55];

    — при обращении каналов (ОЧ=0) адрес принимается от общего канала (скорей всего, шина адреса, идущая от общего канала к процессору, является общей и для обращений по фиксированному адресу, и для обычных доступов), оттуда же в виде так называемых потенциалов маркера МКР[0/1] поступают два бита для занесения в РАСП[24/25];

  • занесение в РКЗ значения ключа доступа от процессора (из РССП[8/11]) или от каналов (КЗ КАН[0/3]) в зависимости от того, чей запрос обслуживается. При обращении по фиксированному адресу это занесение, похоже, не выполняется, поскольку защита памяти на такие доступы не распространяется;

  • запуск памяти ключей защиты для считывания ключа, соответствующего адресу в РАСП[5/12] (по этому поводу имеются разночтения, см. ниже). По всей видимости, запуск не выполняется при обращении по фиксированному адресу;

  • занесение регистр коммутатора памяти РКП значения, подлежащего записи в память со стороны процессора или таймера, для чего применяется микрооперация РКП:=Р3, передающая в РКП содержимое регистра Р3. Если запись выполняется каналами, информация на вход регистра РИОП, вероятно, подаётся прямо из общего канала, минуя РКП;

  • микропрограммный анализ, имеющий, вероятно, мнемонику РОЧ=2˅4. Пока это условие не выполняется, т. е. в регистре РОЧ не находится код 2 или 4, процессор зацикливается на текущей микрокоманде, поскольку это означает, что его запрос (или запрос таймера, выполняемый отдельной микропрограммой процессора) ещё не принят к исполнению. В этом случае любые микрооперации, управляющие памятью (ТЗП:=0, ТДБ:=1), блоком обращения к ОП игнорируются: их выполнение разрешено лишь при обработке запроса процессора или таймера. Если же заданное условие выполняется, это значит, что начата обработка запроса таймера или процессора, и микропрограмма должна перейти к следующей микрокоманде.

Насчёт организации обращения к ПКЗ между [1] и [2] есть разночтения. В [1] прямо утверждается, что «с целью обеспечения максимального быстродействия ПКЗ не имеет регистра адреса и биты 5-12 РАСП непосредственно дешифруются и выбирают нужное слово из ПКЗ». В [2], однако, говорится, что содержимое РАСП[5/12] (а при обращении каналов — информация с шины АДР ПКЗ из общего канала) принимается в регистр адреса РАПКЗ, причём это, как и приём ключа доступа в РКЗ, производится либо в ТИ2, либо в ТИ3 в зависимости от того, выполняется ли чтение или запись. Сказать, какой из вариантов является правильным, без официальной документации на процессор невозможно, а её нет. Сделаем, однако, несколько замечаний относительно возможности того или иного решения.

Приём в одном полутакте адреса обращения в РАСП и через него в РАПКЗ технически вполне возможен: эти регистры выполнены на триггерах-защёлках и меняют своё состояние не по фронту тактового сигнала, а на протяжении всего времени действия сигнала разрешения приёма, поэтому адрес, поступающий на вход РАСП, успевает пройти через этот регистр и достигнуть РАПКЗ. Таким образом, физически РАПКЗ вполне может существовать, но логически — как бы отсутствовать, принимая информацию одновременно с РАСП и через последний.

Наличие коммутатора на входе РАПКЗ, принимающего информацию либо из РАСП, либо с шин АДР ПКЗ, представляется сомнительным и бессмысленным технически: адрес обращения в любом случае попадает в РАСП независимо от того, обращается ли к памяти процессор, таймер или канал. Впрочем, бессмысленных технических решений в процессоре хватает; наиболее «выдающиеся» из них будут разобраны в заключении.

Приём адреса, ключа доступа и запуск ПКЗ либо в одном такте, либо в другом в зависимости от записи или чтения никакого смысла не имеет и лишь усложнит схему БООП, не давая вообще никаких преимуществ. Поскольку ПКЗ должна успеть выдать ключ защиты, а схема его сопоставления с ключом доступа должна успеть определить возможное нарушение прав до того, как ОП завершит считывание информации, логично предположить, что правильная информация содержится не в [2], а в [1], и считывание ключа защиты всегда начинается в полутакте ТТИ2 независимо от вида обращения к ОП.

В полутакте ТТИ2*, то есть по тактовому сигналу С2 при установленном триггере ТИ2*, выполняются следующие действия:

  • сброс триггера ТИ2;

  • установка триггера ТИ3;

  • установка триггера ТРКП для операции записи со стороны процессора или таймера: этот триггер разрешает выдачу информации из регистра коммутатора памяти РКП в регистр РИОП для записи в ОП. При обращении каналов он, вероятно, остаётся сброшенным, а информация на вход РИОП поступает прямо от общего канала, минуя РКП;

  • возможно, выполнение микрооперации РИОП:=РКП, обеспечивающей передачу информации из РКП в РИОП для последующей записи в память со стороны процессора или таймера. [1] не упоминает эту микрооперацию, однако о ней говорится в [2], но без точной привязки к конкретному полутакту (такая привязка дана на временных диаграммах, однако они приведены не в самом [2], а в отдельном альбоме рисунков, которого нет). Эта микрооперация может быть также выполнена в следующем такте (в полутакте ТТИ3 или ТТИ3*), но не позже, поскольку к тому времени считывание слова ОП заканчивается и начинается запись, т. е. записываемая информация уже должна находиться в РИОП. В случае записи со стороны каналов в аналогичный момент времени должна быть осуществлена передача в РИОП слова из общего канала;

  • установка РОП[0], если обнаружен особый случай спецификации, что возможно лишь при обращении со стороны процессора. В случае, если установлен один из триггеров ТДБ или ТДАН, правила обнаружения этого особого случая определяются состоянием этих триггеров, как было описано в предыдущем разделе. Если они оба сброшены, то при одновременном выполнении микрооперации РОП[0]*:=0 анализируется нарушение границы полуслова (разряд РАСП[23] должен быть равен нулю), при выполнении микрооперации РОП[0]:=0 обнаружение особого случая спецификации подавляется (содержимое РАСП может быть любым, что разрешает доступ к произвольным байтам памяти), а при отсутствии этих микроопераций проверяется нарушение границы слова (в разрядах РАСП[22/23] должны быть нули);

  • установка РОП[1], если обнаружен особый случай адресации.

В полутакте ТТИ3 (тактовый сигнал С1 при установленном триггере ТИ3) выполняются следующие действия:

  • сброс триггера ТИ2*;

  • установка триггера ТИ3*;

  • сброс триггера ТФАЦ, если он был ранее установлен;

  • вероятно, приём считанного ключа защиты памяти в РИПКЗ для последующего сопоставления с ключом доступа в РКЗ;

  • запуск модуля ОП, чей номер содержится в разрядах РАСП[5/6], путём передачи ему сигнала приёма адреса длительностью примерно 200 нс. Кроме того, на модуль памяти поступает адрес слова из разрядов РАСП[7/21] и маска подлежащих записи байтов, сформированная в БООП из значений, содержащихся в РАСП[22/25]. ОП, будучи ферритовой, всегда начинает работу с операции считывания, за которой всегда выполняется запись.

В полутакте ТТИ3* (тактовый сигнал С2 при установленном триггере ТИ3*) выполняются следующие действия:

  • сброс триггера ТИ3;

  • установка триггера ТИ4;

  • сброс триггера ТДАН, если он был установлен;

  • сброс триггера ТФАЦ, если он был установлен;

  • приём в РОЦ[4/6] индикаторов особых случаев, обнаруженных БООП, если выполняется обращение процессора; при обращении каналов индикаторы особых случаев принимаются общим каналом и далее передаются тому каналу, который выполняет обращение ОП.

Приём индикаторов особых случаев процессором выполняется микрооперацией РОЦ[4/6]:=РОП. Технически РОП[1/0] к этому моменту уже установлены, если были обнаружены особые случаи адресации и спецификации (их выявление производится в предыдущем такте работы БООП, как было описано выше), и данная микрооперация просто пересылает эти индикаторы в РОЦ[5/6]. Особый случай защиты, однако, обнаруживается только к данному моменту, поскольку для его обнаружения требуется прочитать ключ защиты из ПКЗ в РИПКЗ. По этой причине появление сигнала особого случая защиты вызывает в данном полутакте установку и РОП[2], и РОЦ[4].

Кроме того, если был обнаружен какой-либо особый случай, в ОП выдаётся сигнал блокировки записи, чтобы предотвратить порчу содержимого адресуемой ячейки (см. ниже, а также в предыдущей статье).

В полутакте ТТИ4 (тактовый сигнал С1 при установленном триггере ТИ4) выполняются следующие действия:

  • сброс триггера ТИ3*;

  • установка триггера ТИ1*, чем начинается очередное обращение к ОП, если в этом же такте или ранее поступил какой-либо запрос (см. описание полутакта ТТИ1 в начале этого раздела). Однако установка ТИ1* блокируется, если из памяти поступил один из сигналов аппаратной ошибки (СБОЙ РАОП или СБОЙ РИОП) — в этом случае работа БООП, как и процессора в целом, временно блокируется и начинается обработка аппаратного сбоя, что будет описано в отдельной статье;

  • если завершающийся запрос исходил от процессора — выполнение микрооперации анализа РОЦ[4/6]≠0. В результате, если при обращении к ОП были обнаружены какие-либо особые случаи, произойдёт переход на одну микрокоманду, а если их не было — на другую.

Полутакт ТТИ4* является, на самом деле, полутактом ТТИ1*, описанным выше. Однако при обращении к ОП для записи со стороны процессора или таймера в нём выполняется микрооперация ТРКП:=0, сбрасывающая установленный в полутакте ТТИ2* триггер ТРКП.

В случае операции чтения, а также при записи, запрещённой из-за обнаружения какого-либо особого случая, в этом же такте ТИ4, т. е. на протяжении полутактов ТТИ4 и ТТИ4*, завершается считывание информации из накопителя основной памяти и занесение её в регистр РИОП. Если буквально интерпретировать иллюстрации из [1], может возникнуть впечатление, что приём в РИОП выполняется в полутакте ТТИ4, т. е. по тактовому сигналу С1, но это не так: данный регистр является частью ОП, а не процессора, и приём информации в него стробируется внутренними схемами самой памяти. Поэтому можно лишь утверждать, что приём в РИОП будет выполнен одновременно с выполнением процессором данного такта, поскольку операция была запущена в начале предыдущего такта, а время выборки из ОП составляет порядка 800 нс, несколько превосходя длительность такта процессора (670 нс).

Заметим, что при выполнении считывания в адресуемый модуль ОП выдаётся сигнал «разрешения выдачи числа», разрешающий передачу содержимого РИОП в процессор и общий канал для последующего приёма считанных данных. При возникновении какого-либо особого случая этот сигнал блокируется, и поэтому вместо считанной информации в процессор и каналы поступают нули. Эта мера является излишней, поскольку при особых случаях полученные данные никак не используются, а выполнение текущей команды процессора или канальной программы прекращается. В то же время, выработка одного из сигналов выдачи числа необходима по той причине, что машина может иметь несколько модулей ОП (от одного до четырёх), но выходы их регистров РИОП объединяются между собой, и для получения корректных данных должен быть разрешён лишь один из них.

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

Хотя работа БООП по обслуживанию запроса на этом, по сути, завершена (полутакт ТТИ4, как уже говорилось, является одновременно полутактом ТТИ1, начинающим обработку следующего запроса к ОП), процессор или каналы ещё не выполнили все свои операции, связанные с доступом к ОП.

В случае считывания из ОП, инициированного процессором, в микрокоманде, следующей за последним тактом работы БООП по обслуживанию его запроса, т. е. получившей управление в результате выполнения анализа РОЦ[4/6]≠0 в полутакте ТТИ4, либо начинается обработка программного прерывания по особому случаю доступа к ОП, либо производится приём считанного слова ОП микрооперацией Р5:=РИОП. В случае считывания, инициированного таймером, также выполняется микрооперация Р5:=РИОП, и разница с обращением процессора заключается лишь в том, что при обращении таймера особые случаи возникать не могут, а соответственно, в предыдущей микрокоманде нет необходимости выполнять анализ РОЦ[4/6]≠0.

В случае операции записи со стороны процессора в зависимости от результата анализа РОЦ[4/6]≠0 либо продолжается нормальное выполнение микропрограммы, либо происходит переход к микропрограмме обработки программного прерывания по особому случаю доступа. При записи со стороны таймера никаких действий, относящихся к памяти, больше не требуется.

В случае операций, инициированных каналом, признаки особых случаев, а при чтении — и данные поступают в общий канал и далее передаются каналу, запросившему доступ к памяти.

Защита информации в ОП при отключении питания

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

При аварийном отключении в стойке питания ЕС-1030/С002 вырабатываются упреждающие сигналы УС1–УС8, поступающие в процессор и устанавливающие триггер упреждающих сигналов ТУС. Последний блокирует сигналы приёма адреса памяти, тем самым запрещая процессору и каналам обращение в ОП.

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

Комментарии (0)