Процессор ЭВМ ЕС-1020. Аппаратный контроль работы
Необходимым качеством любой вычислительной машины является достоверность результатов её работы. Если отбросить умышленное искажение или уничтожение результатов посредством вирусов и другого вредоносного ПО (для середины 1960-х годов этот вопрос ещё не был актуален), главной причиной возможных проблем являются случайные сбои аппаратуры, ведь их последствия, в отличие от настоящих отказов, могут длительное время оставаться незамеченными. Например, если у процессора вышло из строя АЛУ, то последствия будут очевидны практически мгновенно: скорей всего, машина сразу же зависнет, чего человек не сможет не заметить. Однако если то же самое АЛУ даст неверный результат всего один раз за день непрерывной работы, такую ошибку, вполне возможно, вовремя не заметят, ведь она может повлиять, скажем, лишь на результат расчёта некоторой прикладной программы, не вызвав при этом явно ненормального поведения. Очевидно, что повысить достоверность результатов можно лишь с помощью тех или иных схем контроля, непрерывно проверяющих правильность функционирования основной аппаратуры.
В Системе 360, а соответственно, и в ЕС ЭВМ с самого начала предусматривалось широкое использование аппаратного контроля, причём некоторые аспекты реакции на возникновение ошибок были стандартизированы на уровне архитектуры — хотя самоочевидно, что в этой области стандартизировать можно немногое, ведь обработка ошибок тесно связана с особенностями реализации, которые могут кардинально различаться у разных моделей одной архитектуры.
На архитектурном уровне определены следующие принципы обработки аппаратных ошибок:
аппаратные ошибки не могут возникать из-за программных ошибок (исключение — использование команды ДИАГНОСТИКА, точные функции которой всецело зависят от конкретной модели, а неправильное её использование может приводить к непредсказуемым последствиям — однако эта команда является привилегированной, а соответственно, доступна только системному коду);
при обнаружении ошибки, не приводящей к немедленному останову, процессор пытается сохранить в определённых ячейках основной памяти всю возможную информацию на момент сбоя. Часть из этой информации общая для любых моделей (содержимое общих регистров, регистров с плавающей запятой и PSW), а часть зависит от реализации (состояние различных внутренних аппаратных регистров и т. п.);
в зависимости от тяжести сбоя, состояния бита маски прерываний от схем контроля в PSW и положения определённых переключателей на пульте управления процессор может либо (1) перейти в так называемый тяжёлый останов (hard stop; от обычного останова отличается тем, что из него невозможно выйти без предварительного сброса индикаторов ошибок; кроме того, в большинстве реализаций в тяжёлом останове отключается синхронизация, в то время как при обычном останове процессор, с технической точки зрения, продолжает работать, «крутясь» в своём внутреннем цикле, но не выполняя команды и не реагируя на запросы прерываний), либо (2) запомнить информацию о сбое в своей внутренней памяти и продолжить работу обычную работу (сохранённая информация может быть впоследствии записана в основную память), либо (3) выполнить прерывание от схем контроля, при котором записывается вся информация, отражающая состояние процессора на момент сбоя либо, возможно, сохранённая ранее. Обработчик прерывания от схем контроля, входящий в состав ядра операционной системы, выполняет дальнейшую обработку сбоя. В частности, он пытается сохранить информацию об ошибке в файле журнала, а затем либо аварийно завершает работу пострадавшей программы пользователя (или останавливает ОС, если дальнейшая работа невозможна), либо перезапускает её с контрольной точки.
Архитектура не накладывает каких-либо ограничений на степень охвата машины аппаратным контролем; в частности, ЭВМ может быть вообще лишена каких-либо средств контроля, хотя на практике такое если и встречалось, то крайне редко. ЕС-1020, как младшая и наиболее дешёвая модель, использует лишь простейшие способы контроля, не охватывающие всю её аппаратуру. Основным методом является контроль по чётности; кроме того, в некоторых случаях используется дублирование аппаратуры.
Формирование контрольных битов и обнаружение ошибок чётности и двухпроводных ошибок
Сама по себе идея контроля по чётности хорошо известна. При передаче или хранении контролируемого значения передаётся или хранится дополнительный контрольный разряд, который, в зависимости от реализации, дополняет количество единичных битов контролируемого значения либо до нечётного, либо до чётного. Для контроля правильности информации производится подсчёт числа единичных разрядов в контролируемом значении и полученный результат сравнивается с контрольным битом; несоответствие ожидаемого и вычисленного значений свидетельствует об ошибке.
Подсчёт числа единичных битов производится так называемыми схемами свёртки (суммирования по модулю 2), с точки зрения двоичной логики построенными на элементах «исключающее ИЛИ». Если на вход такого элемента подать два бита информации, на его выходе будет логическая единица, если ровно один из двух исходных битов является единичным, и нуль в противном случае. Объединив несколько элементов, получаем многоразрядную схему контроля. Ниже в качестве иллюстрации показано внутреннее устройство классической микросхемы SN74180 (скопирована в СССР под обозначением К155ИП2), обеспечивающей формирование контрольных разрядов для 8-разрядного исходного значения и имеющей возможность наращивания разрядности.
Байтовая схема контроля чётности SN74180, скан документа фирмы TI, 1972 год
На момент создания ЕС-1020, однако, готовых микросхем контроля чётности или хотя бы логических элементов «исключающее ИЛИ» (К155ЛП5, она же SN7486) наша промышленность ещё не выпускала, поэтому схемы контроля пришлось собирать из того, что было доступно, но не так прямолинейно, как можно было бы ожидать.
Для передачи информации между различными регистрами и блоками процессора ЕС-1020 используются так называемые парафазные сигналы. Этот в значительной мере забытый ныне термин означает передачу каждого бита информации сразу по двум проводникам: по одному передаётся его прямое значение, а по другому — инверсное. На первый взгляд, парафазный сигнал напоминает широко распространённые в наши дни дифференциальные сигналы, но сходство здесь чисто внешнее: если в дифференциальном сигнале его логическое значение определяется разностью напряжений между прямой и инверсной линиями, а сами по себе абсолютные значения напряжений на этих линиях безразличны (в разумных пределах, конечно), то в случае с парафазным сигналом каждая линия технически является самым обычным логическим сигналом с самым обычным логическим уровнем, просто значение на одной линии всегда является инверсным по отношению к другой.
Схемы свёртки, используемые в процессоре ЕС-1020, опираются на использование парафазных сигналов и не только формируют или проверяют контрольные разряды, но и обнаруживают так называемые двухпроводные ошибки, т. е. наличие одинакового логического уровня на парафазных линиях. Наиболее широко используется стандартная схема свёртки на восемь разрядов, функциональная схема которой показана на рисунке.
Стандартная схема свёртки, скан из [1]
Большую часть схемы (область «а») составляет собственно схема свёртки, основой которой является элемент, обозначенный М2, — на самом деле, это самый обычный элемент 2,2И-2ИЛИ-НЕ, который в количестве двух штук «обитает» внутри микросхемы К155ЛР1. Каждая пара битов исходной информации, для которой необходимо сформировать контрольный разряд (сигналы И (0–7) для прямых значений разрядов и –И (0–7) для инверсных), поступает на два элемента М2: на один из них попарно подаются либо два прямых, либо два инверсных значения, а на второй — один прямой, а другой инверсный или наоборот. Выходы элементов М2 первого уровня поступают на входы элементов второго уровня, а выходы последних — на входы элементов третьего уровня, с выходов которых снимается сформированный контрольный разряд в прямом и инверсном виде — сигналы И (К) и –И (К). Легко подсчитать, что в состав схемы свёртки входит 14 элементов, то есть семь микросхем К155ЛР1.
Две другие области схемы, «б» и «в», обеспечивают контроль информации. Сформированный в области «а» контрольный разряд сравнивается (область «б») с контрольным разрядом, полученным от источника информации; при несовпадении формируется сигнал ошибки «сбой по нечету». Область «в» контролирует наличие двухпроводного сбоя.
Контроль регистров
Общие и «полноценные» адресные регистры процессора, описанные в одной из предыдущих статей, — РФ, РЕ, РР, РИ, РТ, РУ, РЛ и РД — включают в свой состав восемь информационных разрядов и контрольный бит К. Информация в них заносится только с выхода БА, при этом она записывается сразу во все биты регистра, включая контрольный, где и хранится в ожидании дальнейшего использования.
При считывании любого из перечисленных регистров его содержимое, включая сохранённый контрольный бит, передаётся в регистр-приёмник, в роли которого может выступать один из входных регистров арифметико-логического блока РА и РВ либо один из двух младших байтов регистра адреса памяти РМН. На выходе каждого из этих трёх регистров расположены схемы свёртки, осуществляющие контроль правильности информации. В результате, используя лишь четыре байтовых схемы свёртки (по одной для РА и РВ и две для двух младших байтов РМН), обеспечивается контроль и этих регистров, и их регистров-источников, и путей передачи информации от БА в регистры блока регистров и из них обратно в БА и в РМН.
Недостатком такого подхода является некоторая несвоевременность обнаружения сбоя: скажем, если регистр РФ неисправен, это обнаружится только при попытке использования сохранённой в нём информации, а не в момент занесения в него нового значения. Это несколько усложняет поиск возникшей неисправности, однако не сказывается на реальной надёжности обнаружения ошибок: с точки зрения пользователя, нет разницы, при выполнении какой именно микрокоманды ошибка была обнаружена, главное — обнаружить её и прекратить выполнение пострадавшей от сбоя программы, оповестив об этом пользователя (или, на худой конец, остановить процессор с индикацией возникновения машинной ошибки). Для максимально удешевлённой машины, без сомнения, это является правильным решением.
Хуже обстоит дело с тремя «неполноценными» адресными регистрами — РМ, РП и РГ. Они не имеют контрольного разряда, поэтому при их считывании он формируется сокращённой схемой свёртки (на два бита для передачи в старший, неполный байт РМН и на три бита для передачи на вход БА). Соответственно, занесение в них некорректной информации с выхода БА или неисправность самих этих регистров аппаратурой не обнаруживается и проявляется лишь косвенно — скажем, ОС может «упасть» из-за порчи содержимого памяти по адресу, искажённому вышедшим из строя регистром. Хотя на отсутствии контрольного бита достигнута некоторая экономия аппаратуры, представляется, что в данном случае это не было оправдано: надёжность обнаружения ошибок снизилась, а экономия очень невелика — особенно с учётом того, что специально для этих регистров можно было бы предусмотреть отдельную схему свёртки на три бита на выходе БА, а не реализовывать такую схему индивидуально для каждого регистра.
Контроль адресных и общих регистров, скан из [1]
Служебные регистры — РБС, РБР, РБК и РБД, а также регистр ошибок РО, о котором речь пойдёт ниже, — не имеют никаких средств собственного контроля, и лишь для проверки правильности их передачи на вход БА они снабжаются формируемыми «на лету» контрольными разрядами, как это сделано для РМ, РП и РГ (с поправкой на разрядность регистров). Несмотря на схожесть ситуации, в данном случае экономия является, скорее, оправданной: контролировать эти регистры можно лишь дублированием аппаратуры (многие их биты изменяются аппаратно независимо от других битов, что делает невозможным банальное сохранение контрольного разряда), а это весьма дорого — как минимум, нужен двойной комплект триггеров плюс схемы их сравнения. В то же время, выход этих регистров из строя почти никогда не может привести к порче результатов выполнения команд и при этом остаться незамеченным. Скажем, если «сдохнет» триггер запроса прерывания от какого-либо из каналов ввода-вывода, это проявится либо в непрерывном потоке ложных прерываний, либо, наоборот, к потере реальных запросов и, как итог, к зависанию операций ввода-вывода. В обоих случаях неверных результатов как таковых не будет, зато система перестанет функционировать нормальным образом, что быстро будет обнаружено оператором.
Контроль служебных регистров, скан из [1]
Контроль арифметико-логического блока
Как уже говорилось, принимаемая во входные регистры РА и РВ информация контролируется на нечётность и на двухпроводную ошибку с помощью стандартных схем свёртки, обеспечивая попутно контроль регистров-источников информации и путей передачи. По результатам проверки формируются сигналы сбоев СБРАН, СБРВН (сбой по нечету РА и РВ), СБРАД и СБРВД (двухпроводной сбой РА и РВ).
Правильность выработки сигналов управления узлом управляющих сигналов контролируется, как было сказано в предыдущей статье, с помощью специально вырабатываемого сигнала И, уравнивающего чётность количества активных управляющих сигналов с чётностью кода выполняемой прямой или косвенной функции. Код функции и сформированные управляющие сигналы поступают на схему контроля, формирующую сигналы сбоев СБУАН (сбой по нечету) и СБУАД (двухпроводной сбой). При подаче кода функции 0001, который может быть задан только как косвенная функция, специально формируется неверное значение сигнала И, что позволяет проверить работу самой схемы контроля.
Контроль узла управляющих сигналов, скан из [1]
Для контроля обрабатывающих блоков БА они продублированы, причём основной комплект оборудования выполняет операцию и формирует результат в прямом виде, а дублирующий — в инверсном. Соответственно, совпадение хотя бы одного бита результата для прямого и инверсного трактов обработки свидетельствует о неисправности. Контроль осуществляется обычной схемой свёртки, которая, помимо проверки правильности результата (по сути, двухпроводного сбоя), формирует значение контрольного разряда С (К), выдаваемого на выход БА вместе с результатом. Для проверки работоспособности самой схемы контроля предусмотрена микрооперация НКР поля УСТАНОВ: если она задана, при подаче на вход схемы свёртки производится инвертирование младшего разряда результата, что должно вызвать появление сигнала сбоя СБСД.
Контроль результата БА, скан из [1]
Работа байта состояния БА (ББА) никак не контролируется. Как и в случае со служебными регистрами, его контроль возможен только методом дублирования, что слишком дорого. Правда, в отличие от служебных регистров, сбой ББА обычно приводит к получению неверного результата операции, поэтому оправданность отсутствия его контроля — вопрос спорный.
Контроль блока микропрограммного управления
В блоке микропрограммного управления контролируется чётность регистра адреса постоянной памяти РАПП и регистра микрокоманды РМК.
Контроль блока микропрограммного управления, скан из [1]
После приёма микрокоманды, считанной из постоянной памяти, в РМК схемой ЛСВ2 производится свёртка его разрядов 0:62 и сравнение результата со значением разряда 63; при обнаружении несоответствия формируется сигнал СБРМК. Заметим, что этот контроль распространяется не только на сам РМК, но и на содержимое постоянной памяти, т. е. обнаружение ошибки говорит о проблемах либо в РМК, либо в ПП, либо в тракте передачи информации из ПП в РМК, либо, наконец, в самой схеме контроля. Подробности устройства ЛСВ2 отсутствуют, но, по всей вероятности, это девять рассмотренных выше схем свёртки: восемь из них свёртывают значения каждого из восьми байтов микрокоманды, а девятая объединяет их результаты.
РАПП контролируется несколько необычным образом. Его 13 разрядов свёртываются схемой ЛСВ1 и сравниваются с битом РМК[62] микрокоманды: последний дополняет до нечётного количество единичных разрядов в адресе микрокоманды, за счёт чего и достигается проверка.
На схеме показан также триггер, сохраняющий признак ошибки РАПП, однако для признака ошибки РМК подобный триггер отсутствует. Здесь дело в том, что сигналы ошибок поступают далее в регистр ошибок, однако сигнал ошибки РАПП не «доживает» до момента его приёма в РО, поскольку по тактовому импульсу ТИ2 или ХИ2 в РАПП уже заносится следующий адрес. Данный триггер является «промежуточным звеном» на пути признака сбоя РАПП в РО; в роли сигнала занесения в него выступает, судя по временной диаграмме, объединение задержанных тактовых импульсов ТИ4З и ХИ4З. Содержимое РМК изменяется лишь в самом конце такта, поэтому сигнал его сбоя остаётся стабильным до приёма в РО и не нуждается во временном сохранении.
Временная диаграмма контроля блока микропрограммного управления, скан из [1]
Дешифраторы полей микрокоманд никак не контролируются.
Контроль памяти и блока защиты
Контроль регистра адреса памяти РМН выполняется двумя стандартными однобайтовыми схемами контроля и дополнительной схемой на два разряда, контролирующей старшие два бита адреса. При обнаружении ошибки выдаётся сигнал СБРМН.
Контроль двух младших байтов адреса фактически проверяет работоспособность и соответствующих порций РМН, и линий передачи информации в них, и адресных регистров, из которых в последний раз информация передавалась в РМН — аналогично тому, как это происходит при передаче содержимого регистров на вход БА. Контроль неполного старшего байта адреса не столь всеобъемлющ, поскольку «неполноценные» адресные регистры (РМ, РП, РГ) не имеют контрольного разряда, и для передачи в РМН он формируется «на лету» — опять-таки, аналогично тому, как содержимое этих регистров передаётся в БА (с той лишь разницей, что контрольный разряд вырабатывается лишь для двух битов, а старший, «уплотнённый» разряд никак не контролируется — при обращении к памяти он используется лишь для обнаружения выхода за пределы ОП, а не для адресации как таковой, поэтому на его контроле решили сэкономить). Соответственно, правильность работы собственно РМН и линий передачи контролируется, а вот правильность занесения и хранения информации в РМ, РП и РГ — нет.
Регистр данных памяти РНЗ контролируется двумя стандартными байтовыми схемами, однако сформированный ими сигнал ошибки может быть заблокирован специальной схемой, приведённой на рисунке.
Схема выработки сигнала сбоя регистра РНЗ, скан из [1]
Со схемы контроля регистра РН поступают сигналы сбоев СБРНН и СБРНД (для сбоя по нечету и двухпроводного сбоя), со схемы контроля регистра РЗ — аналогичные сигналы СБРЗН и СБРЗД. Из них схемой ИЛИ формируется общий сигнал сбоя СБРНЗ, однако, как видим, прохождение исходных сигналов блокируется с помощью элементов И. Верхняя пара элементов управляется показанным на рисунке триггером РАЗР СБОЯ РН, у нижней пары имеется такой же триггер, который на рисунке опущен (показан лишь приходящий с него сигнал РАЗР СБОЯ РЗ). Эти триггеры сбрасываются сигналом гашения, т. е. аппаратным сбросом процессора, а также по ХИ2 при установленном триггере контроля машины ТКТРМ, что имеет место в случае обнаружения сбоя (об этом будет подробнее сказано позже). Цель этого сброса — заблокировать возможность выдачи сигнала ошибки РНЗ сразу после сброса процессора или если аппаратный сбой уже был обнаружен. В первом случае это необходимо из-за того, что после включения питания и связанного с ним сброса регистр находится в неопределённом состоянии и может вызывать ложную индикацию ошибки, во втором — чтобы не допустить повторной регистрации уже обнаруженного сбоя.
Триггеры блокировки сбоя устанавливаются по ТИ4 в такте, в котором производится занесение информации в РНЗ или любую из его половин либо с выхода БА (сигнал РН:=С или РЗ:=С), либо из оперативной памяти (сигналы ПОДКЛ ПО ЧТ и ПОДКЛ ПО СТ): в этих случаях в РНЗ принимается новая информация, и её нужно проконтролировать.
Поскольку с памятью работает не только процессор, но и селекторные каналы, при обнаружении сбоя во время работы канала сигнал будет выдан в него, а не в регистр ошибок процессора (точнее говоря, сам сигнал сбоя поступает и туда, и туда, но при работе процессора активны синхросигналы серии ТИ или ХИ, а при работе селекторного канала — СИ, поэтому индикатор ошибки будет занесён в триггер того устройства, активность которого привела к ошибке).
В блоке защиты контролируются только старшие пять разрядов его информационного регистра РБЗ, что обеспечивает также контроль правильности работы памяти ключей.
Контроль блока защиты, скан из [1]
При считывании из памяти ключей значения ключа в РБЗ[0:4] одновременно считывается и его контрольный бит, попадающий в разряд РБЗ[К]. С помощью схемы свёртки ЛСВ1 выполняется контроль соответствия ключа и его контрольного бита и при обнаружении ошибки выдаётся сигнал СБРБЗ. Этот контроль выполняется только в такте, в котором производится либо явное считывание памяти ключей, либо считывание/стирание ячейки ОП: последнее должно проверяться механизмом защиты, для чего требуется прочитать ключ.
Для передачи информации из РБЗ в БА требуется сформировать для него правильный контрольный разряд. Как было описано в статье, посвящённой памяти, РБЗ — самый «извращённый» регистр процессора, поэтому формирование его контрольного бита не столь прямолинейно: из-за наличия двух четвёртых разрядов требуется мультиплексор для выдачи одного из них в БА и на схему свёртки ЛСВ2, формирующую контрольный бит. Очевидно, что формирование контрольного бита «на лету» не позволяет обеспечить стопроцентный контроль работоспособности РБЗ: правильность хранения информации в битах 4':7 вообще никак не контролируется, а работоспособность битов 0:4 проверяется лишь при явном или неявном считывании ключа памяти, но не при передаче в БА.
За пределами приведённой схемы осталось формирование контрольного бита в самом РБЗ, когда в него записывается информация с выхода БА, чтобы потом выполнить запись ключа в память ключей. Содержимое бита РБЗ[К] в этом случае формируется из битов РБЗ[0:4], принятых с выхода БА, а контрольный разряд, формируемый в БА, игнорируется: он определён для всего байта, а в память ключей будет записана лишь его часть, а соответственно, и контрольный бит будет другим.
Регистр ошибок
Регистр ошибок РО предназначен для фиксации сигналов сбоев различных узлов процессора. Его упрощённая схема приведена на рисунке. Как это нередко бывает, она содержит ряд небольших ошибок. Кроме того, на ней не показаны цепи для занесения информации в РО с выхода БА (это используется, как минимум, для обнуления содержимого РО в процессе обработки сбоя, о чём говорилось выше; возможно, занесение информации в него выполняется и в микропрограммах проверки работоспособности процессора, чтобы проконтролировать сам РО) и для передачи его содержимого на вход БА.
Регистр ошибок, скан из [1]
Если не считать упомянутой возможности загрузки содержимого РО с выхода БА, все триггеры этого регистра сбрасываются специальным сигналом ГАШ. СБОЯ, подаваемым при нажатии одноимённой кнопки пульта управления. Устанавливаются эти триггеры индивидуально при возникновении соответствующих ошибок.
Первые пять триггеров могут быть установлены только при выполнении микрокоманды во время действия тактового сигнала ТИ3.
Бит РО[0] (ТСБРБЗ) устанавливается при наличии сигналов СБРБЗ и ТБЗ. Первый из этих сигналов является, как было сказано выше, признаком сбоя регистра блока защиты РБЗ, выдаваемом при чтении ключа защиты памяти, если чётность разрядов РБЗ[0:4] не соответствует значению контрольного бита РБЗ[К]. Что касается второго из этих сигналов, ТБЗ, то он является признаком наличия блока защиты: конструкторы ЕС-1020 предусмотрели упрощённый вариант машины, не имеющий такового. Выпускались ли в СССР такие машины серийно, я не знаю; у IBM такие машины были, но быстро сошли со сцены: защита памяти быстро стала рассматриваться как необходимое качество любой ЭВМ, кроме самых простых и дешёвых.
Биты РО[1:2] (ТСБРА и ТСБРВ) устанавливаются при обнаружении ошибки во входных регистрах БА РА и РВ соответственно, а они, как уже говорилось, используются для контроля содержимого почти всех остальных регистров процессора. Для обоих этих разрядов предусмотрены сигналы, блокирующие их установку; на схеме они ошибочно показаны в прямом, а не инверсном виде. Сигнал блокировки сбоя РА устанавливается, если информация в РА в данном такте не принимается, т. е. если он хранит своё старое содержимое, что имеет место при нулевом значении поля А микрокоманды. Сигнал блокировки сбоя РВ устанавливается в трёх случаях: (1) если поле В содержит нуль, т. е. в данном такте приём новой информации не выполняется; (2) при установленном триггере ТГС, о котором будет сказано позже; и (3) если в РВ принимается байт состояния БА (ББА) — последний не имеет контрольного разряда. В последнем случае разработчики машины предпочли не формировать контрольный разряд искусственно схемой свёртки, а просто отключать в этот момент контроль, чем ББА отличается от ряда других регистров, например, РБС; вероятно, такое решение объясняется тем, что ББА, в отличие от других регистров, является частью БА и физически расположен неподалёку от РВ — надо полагать, на той же панели; соответственно, сигналам от ББА до РВ приходится проходить значительно меньшее расстояние, что уменьшает вероятность их искажения помехами или физической порчи проводников.
Бит РО[3] (ТСБРМН) устанавливается при обнаружении ошибки в регистре адреса памяти РМН. Установка выполняется, если микрокоманда задаёт обращение к памяти (поле РЕЖИМ содержит любой код, кроме 00). Заметим, что при обращении к памяти со стороны селекторных каналов содержимое РМН тоже контролируется, но сигнал сбоя фиксируется не в РО, а в соответствующем триггере канала; такой сбой будет рассматриваться как ошибка канала, а не процессора.
Бит РО[4] (ТСБРНЗ) устанавливается при обнаружении ошибки в регистре данных памяти РНЗ, если его установка не блокируется установленным триггером ТГС или сигналом поступления данных от канала. Оба блокирующих сигнала ошибочно показаны прямыми — в действительности они должны быть инверсными.
Установка РО[4], хотя кажется практически такой же простой, как и предыдущих разрядов, требует некоторого пояснения. Приём информации в РМН производится по разным тактовым импульсам в зависимости от того, какой узел служит источником данных. Так, при записи в него результата операции БА занесение выполняется по ТИ4, однако РО[4] устанавливается по ТИ3 —, а это означает, что ошибка, возникшая при приёме информации в этот регистр из БА, будет обнаружена не в такте записи в РНЗ, а в следующем за ним.
При выполнении считывания информации с устройства, подключённого к мультиплексному каналу, передача данных выполняется микропрограммными средствами, однако каждый байт передаётся не через БА, как это имеет место при выполнении любых операций собственно процессора, а напрямую из буферного регистра мультиплексного канала в РНЗ, причём в этом случае приём информации выполняется по ТИ3 — т. е. одновременно с фиксацией сбоя в РО[4]. Очевидно, что схема контроля не гарантирует формирование правильного результата в таких условиях, поэтому приём признака сбоя в том же такте должен блокироваться, что и делает сигнал ДАН ИЗ КАН (сбой будет зафиксирован в следующем такте).
При обмене данными с селекторным каналом приём в РНЗ выполняется по тактовому импульсу СИ2З, при этом исходное содержимое РНЗ временно сохраняется в регистре-дублёре РН1З1, а возможная ошибка РМН фиксируется в соответствующем триггере канала. К моменту возобновления синхросерии ТИ содержимое РН1З1 возвращается в РНЗ; если это было сделано с ошибкой (например, из-за неисправности РН1З1), она будет зафиксирована по ТИ3.
Таким образом, установка РО[4] даёт знать о сбое или неисправности тракта обмена данными с памятью, но обнаружение реальной причины сбоя может быть весьма затруднено, поскольку точный момент его возникновения остаётся неизвестен.
Остальные три бита РО изменяют своё состояние по тактовому импульсу ТИ2 или ХИ2.
Бит РО[5] (ТСБРМК) устанавливается при обнаружении ошибки чётности регистра микрокоманды РМК, а бит РО[6] (ТСБРАПП) — при обнаружении ошибки в содержимом регистра адреса постоянной памяти РАПП. Приём сигналов сбоев выполняется либо по ТИ2, либо по ХИ2, поскольку адрес микрокоманды и сама микрокоманда изменяются как в тактах ТИ, так и в тактах ХИ. Установка этих триггеров блокируется сигналом гашения системы (ошибочно показан как прямой, а не инверсный): завершением гашения является занесение в РАПП адреса 0001, с которого начинается микропрограмма гашения, и выборка в РМК из постоянной памяти первой микрокоманды. Пока эти процессы, выполняемые по тактовым сигналам серии ХИ, не завершены, в этих регистрах может находиться «мусор», а соответственно, схемы контроля могут вырабатывать ложные сигналы ошибок; их приём и блокируется этим сигналом.
Бит РО[7] (ТСББА) устанавливается при обнаружении сбоя в работе БА (нарушение чётности набора управляющих сигналов либо совпадение битов прямого и инверсного результатов). Информация о сбое принимается в следующем за операцией такте — именно поэтому требуется фиксировать её не только по импульсу серии ТИ, но и по импульсу серии ХИ, поскольку ещё до обнаружения сбоя обычное выполнение микропрограммы может быть прервано, например, для обслуживания одного из каналов, что повлечёт выполнение такта ХИ сразу за «сбойным» тактом ТИ. Неясно лишь, почему сбой БА не фиксируется в самом конце такта, по ТИ4: именно по этому импульсу в регистры процессора записывается результат работы БА, и сигналы ошибок в работе последнего к этому времени уже гарантированно сформированы. В качестве гипотезы предположу, что проектирование различных узлов машины велось одновременно, и на момент начала работ разработчики не были уверены в том, что БА и его схемы контроля будут достаточно быстры, и предпочли перестраховаться.
Выходы всех триггеров РО подаются на схему формирования сигнала СБОЙ МАШ, устанавливаемого, когда установлен хотя бы один из этих триггеров. Некоторое недоумение может вызвать, почему на схеме показана подача инверсных значений триггеров и повторное инвертирование их на входе элемента ИЛИ вместо подачи прямых выходов без дополнительной инверсии. Думается, это стало следствием неполноценной переделки принципиальной схемы в функциональную. Дело в том, что в реальном «железе» сборку восьми сигналов с выходов триггеров в один общий сигнал ошибки выполняет не восьмивходовый элемент ИЛИ — таких в природе не существует, и собирать его из доступных на тот момент элементов малоэффективно, —, а элемент 8И-НЕ, представленный микросхемой К155ЛА2. Как известно, элемент И-НЕ — это то же самое, что элемент НЕ-ИЛИ, поэтому, чтобы собрать сигналы триггеров РО по «или», необходимо на входы элемента И-НЕ подать инверсные, а не прямые выходы триггеров — и тогда на выходе И-НЕ будет получен прямой сигнал СБОЙ МАШ.
Обработка ошибок
Общая последовательность действий при обнаружении любой машинной ошибки заключается в следующем.
Устанавливается триггер регистра ошибок РО, соответствующий обнаруженному сбою.
Факт установки любого из триггеров РО вызывает установку триггера контроля машины ТКТРМ, а за ним и триггера первого сбоя ТПСБ, являющихся разрядами 6 и 7 регистра РБД, описанного в одной из предыдущих статей. Установка ТКТРМ приводит к приостановке формирования тактовых импульсов серии ТИ и запуску серии ХИ. Во время выполнения такта ХИ происходит загрузка в РАПП адреса начала микропрограммы обработки ошибок (фиксированный адрес 8), после чего из постоянной памяти в РМК считывает