Поведение процессора при выполнении команды в зависимости от режима, в котором он находится, страница 11

6.4.2.1 Отработка циклов шины посредством программной эмуляции.

Процедура обслуживания ошибки может эмулировать ошибочный  цикл шины, используя информацию, сохраненную в стеке, причем  выполнить это незаметно для  команды,  вызвавшей  ошибку.  В  случае ошибки потока команд в стеке сохраняются отдельные  образы  для ступеней B и C конвейера команд, возможно, нуждающиеся  в  корректировке. Если установлен индикатор ошибки для одной из  ступеней, то причина сбоя состоит в том, что не было считано слово команды из-за ошибки адреса или шины. В случае короткого формата окна адрес слова, находящегося на ступени B, равен  значению программного счетчика плюс 4, а адрес слова ступени C -  значению программного счетчика плюс 2. В случае длинного формата окна адрес слова ступени B задается явно, а адрес слова ступени C

вычисляется, как адрес слова ступени B минус 2. Для  ошибки  на каждой ступени процедура обслуживания  должна  прочитать  слово команды из соответствующего адресного пространства  (определяемого состоянием бита S регистра SR, сохраненного в окне) и  записать его в образ ступени в стековом окне. После этого следует сбросить бит повтора для восстановленной ступени.  Биты  ошибки изменять не следует.

Для операций записи данных процедура обслуживания должна  перенести данные нужного размера из образа буфера  выходных  данных

DOB (data output buffer) в память по  адресу  ошибки.  Адресное пространство определяется по SSW. Для операций чтения процедура обслуживания должна перенести данные нужного размера из  памяти по адресу ошибки в образ буфера входных данных DIB (data  input

buffer). Байтовые, словные и трехбайтовые операнды  в  четырехбайтовых образах буферов выравниваются по правой границе. Кроме того, процедура обслуживания должна сбросить бит DF в SSW, чтобы информировать процессор об устранении ошибки.

Для эмуляции цикла чтение-модификация-запись процедура обслуживания исключения должна сначала  определить,  какая  из  команд

CAS, CAS2 или TAS вызвала ошибку. Это можно сделать путем  анализа слова команды, адрес которой содержится в образе программного счетчика в стековом окне. После этого необходимо модифицировать не только SSW в стеке, но и образ регистра состояния,  а также образы всех регистров данных, задействованных  в  команде

CAS или CAS2. (Предполагается, что регистры  общего  назначения сохранены в стеке командой MOVEM при входе в процедуру обслуживания и позднее будут восстановлены.) Иными словами,  процедура обслуживания должна программно эмулировать все действия  команды, а не только ошибочный цикл. Это необходимо потому, что процессор, обнаружив при чтении стекового окна командой RTE бит DF

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

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

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

6.4.2.2 Отработка циклов шины посредством команды RTE. Отработка ошибочного цикла шины, если нет необходимости в  программной его эмуляции, может быть осуществлена командой RTE, выполняемой в процедуре обслуживания исключения в  последнюю  очередь.  Это происходит по умолчанию и в предположении,  что  уже  устранена причина ошибки (такой, например, как нерезидентность страницы в системе с виртуальной памятью); в противном случае ошибка произойдет повторно. Если во время выполнения  команды  RTE  ошибка происходит при попытке повторения цикла шины, то новое  окно  в стеке супервизора будет сформировано  после  удаления  из  него предыдущего окна; обработка исключения  по  ошибке  адреса  или ошибке шины будет осуществляться, как обычно.

Операции типа чтение-модификация-запись процессора MC68020 требуют особой процедуры восстановления после ошибки шины. В отличие от всех операций чтения и записи, для которых  восстановление осуществляется строго по циклам, для операции  чтения-модификации-записи восстановление  осуществляется  покомандно.  Это означает, что если при выполнении команды RTE после ошибки  шины, произошедшей во время  операции  чтения-модификации-записи, будет обнаружено, что бит DF в слове SSW установлен в  единицу, то процессор повторит всю операцию целиком от начала  до  конца вне зависимости от того, на каком этапе произошла ошибка.  Аналогично, если бит DF окажется сброшенным, свидетельствуя о том, что операция отработана программно, процессор будет считать  ее выполненной и немедленно приступит к выполнению  следующей  команды.

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

RMC* как операцию записи, вне зависимости от состояния  сигнала

R/W*. В противном случае существует опасность частичного разрушения системных указателей командами CAS и CAS2, поскольку одна часть операции записи может оказаться выполненной, а  другая  прерванной из-за ошибки шины.

6.5 ФОРМАТЫ СТЕКОВЫХ ОКОН ИСКЛЮЧЕНИЙ MC68020

MC68020 создает стековые окна шести различных типов. Среди  них обычные  4-словные  и 6-словные окна, 4-словное временное окно, окно внутрикомандного исключения сопроцессора, длинное и короткое окно ошибки шины.

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

Таким образом, если область  стека  располагается  в  памяти  с