Слово состояния программы

В каждый данный момент функционирующая ЭВМ находится в каком-то одном определенном состоянии, характеризующемся содержимым регистров, ячеек памяти и некоторой другой информацией, такой, как, например, адрес, хранящийся в счетчике команд, значение признака результата, а также осуществляемые в данный момент действия по обмену с периферийными устройствами. Кроме содержимого регистров и памяти, состояние ЭВМ характеризует содержимое так называемого Слова состояния программы (PSW), которое представляет особый интерес для программистов. Как мы увидим в дальнейшем, PSW играет большую роль и на этапе выполнения программы. В гл. 12 мы будем существенно использовать значение его содержимого для целей отладки программ. Рассмотрение PSW будет проходить в три этапа. На первом мы познакомимся с той частью задаваемой им информации, которая представляет для нас непосредственный интерес в данный момент. Затем мы обсудим роль, которую PSW играет в организации системы прерываний, и, наконец, перейдем к тем связанным с использованием PSW вопросам, которые хотя и не очень существенны для нас сейчас, но значительно облегчат нам работу в дальнейшем.

Основные компоненты PSW

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

Мы начнем с рассмотрения PSW Системы 360. Система 370 имеет два режима управления, определяющие структуру и использование управляющей информации: режим основного управления (ВС) и режим расширенного управления (ЕС). Режим ЕС используется при организации работы с виртуальной памятью. Слово состояния программы Системы 370 в режиме ВС практически ничем не отличается от Слова состояния программы Системы 360. С точки зрения отладки использование в Системе 370 режима ЕС предполагает несколько иное расположение необходимой информации. Однако с точки зрения большинства других применений режимы управления не оказывают никакого влияния на работу программиста-пользователя.

До сих пор дело было представлено так, как будто признак результата и текущее значение счетчика команд находятся в двух различных регистрах специального назначения. Из рис. 11.1 видно, что PC (счетчик команд) и СС (признак результата) в действительности являются составными частями PSW. 24-битовое значение PC располагается в разрядах с 40-го по 63-й PSW. Для хранения признака результата, устанавливаемого последней выполненной арифметической командой или командой сравнения, отведены разряды 34 и 35.

На втором этапе выполнения команды содержимое PC изменяется на значение адреса команды, которую нужно выполнить следующей. Фактически к прежнему содержимому счетчика добавляется длина выполняемой команды в байтах. Если, например, некоторая команда только что выбрана для выполнения по адресу 2000 и имеет длину 6 байтов, то следующая будет выбрана по адресу 2006. Таким образом, для установки значения PC необходимо знать длину выполняемой в данный момент команды. Нам уже известно, что содержимое первых двух разрядов кода операции команды однозначно определяет ее длину. При выборке команды из памяти эта информация, правда в несколько измененном формате, заносится в разряды 32 и 33 PSW. Содержимое этих разрядов называется кодом длины команды (ILC).

Статья 395 - Картинка 1

Рис. 11.1. Формат PSW Системы 360 и режима ВС Системы 370.

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

Длина команды (в байтах)

Длина команды (в полусловах)

СодержимоеILC (двоичное)

2

1

01

4

2

10

6

3

11

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

Статья 395 - Картинка 2

Рис. 11.2. Формат PSW Системы 370 для режима ЕС.


Нам осталось рассмотреть лишь разряды 36—39 второго слова PSW. Содержимое этих битов называется маской программы, которая будет нами рассмотрена позднее, после обсуждения прерываний. На рис. 11.2 изображен формат PSW для режима ЕС Системы 370. Счетчик команд в этом случае размещается точно так же, как и в предыдущем, т. е. в разрядах 40—63. Информация о признаке результата и маска программы хранятся теперь в разрядах 18—23 PSW. ILC и некоторые другие компоненты PSW формата ВС при режиме ЕС помещаются в специальные управляющие регистры, рассмотрение которых выходит за пределы данной книги.

Прерывания

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

Рассмотрим в качестве примера выполнение операций ввода- вывода. В Системах 360 и 370 ввод-вывод осуществляется с помощью специальных устройств, называемых каналами. Каналы предназначены для выполнения автономно по отношению к процессору операций ввода-вывода, т. е. передачи данных между основной памятью и периферийными устройствами. Процессор выдает команду каналу, после чего возвращается к нормальной работе, в то время как канал выполняет передачу данных; говорят, что ввод-выводсовмещается с работой процессора. По окончании обмена канал посылает системе соответствующее сообщение. Но это требует нового прерывания выполнения программы пользователя. После посылки сообщения об окончании обмена выполняется одна из программ операционной системы и затем прерванное задание вновь активизируется.

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

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

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

На рис. 11.3 схематически изображен описанный нами процесс изменения содержимого PSW. Весь этот процесс проходит автоматически. Операционная система несет ответственность за подготовку новых PSW и использование информации старого PSW для возобновления выполнения прерванных программ. После завершения обработки прерывания старое PSW снова может быть загружено в регистр текущего PSW. Это производится с помощью команды Load PSW (ЗАГРУЗКА PSW).

Мы рассмотрели две причины прерываний: выполнение операций ввода-вывода и наличие ошибок в программе. Ниже приведена информация о некоторых других типах прерываний.

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

Обращение к супервизору. В некоторых случаях программа пользователя может обращаться к операционной системе с запросами на выполнение некоторых услуг, непосредственная реализация которых в прикладной программе не допускается. Обращение к системе происходит по команде SVC (Supervisor Call — ОБРАЩЕНИЕ К СУПЕРВИЗОРУ). В результате выполнения этой команды происходит прерывание, после чего управление передается программе, выполняющей заказанные действия.

Статья 395 - Картинка 3

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

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

Дополнительные компоненты PSW

PSW каждой программы содержит, кроме всего прочего, информацию о том, запросы прерываний каких типов действительно могут вызвать прекращение ее выполнения. Например, бит 6 PSW режима ВС (см. рис. 11.1) является маской прерываний ввода-вывода. Если этот бит равен 0, то прерывания от ввода-вывода производиться не будут; такие прерывания называют замаскированными или запрещенными. Если же бит маски равен 1, прерывания от ввода-вывода могут прервать выполнение программы. В этом случае говорят, что прерывания ввода-вывода разрешены. Мы знаем, что управление устройствами ввода-вывода, передача данных и посылка сообщений о завершении операций ввода-вывода в виде запроса на прерывание являются функцией каналов. Каждый канал имеет номер. Биты 0—5 PSW характеризуют способность сообщений от определенных каналов вызывать прерывание. Например, 1 в разряде 3 PSW говорит о том, что окончание обмена по каналу 3 вызовет прерывание (подразумевается, что при этом бит 6 тоже_ равен 1).

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

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

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

Бит 37: деление с фиксированной точкой. В случае когда частное, получающееся от деления двух чисел по команде DR или D, не умещается в отведенный для него регистр, фиксируется особый случай деления с фиксированной точкой. Прерывание происходит только в случае, если 37-й бит PSW равен 1.

Биты 38 и 39. Эти биты маскируют некоторые прерывания, возникающие при выполнении команд арифметики с плавающей точкой. Более подробно вопросы, связанные с этими прерываниями, будут рассмотрены в Гл. 19.

Программисту предоставлена возможность самому определять содержимое маски программных прерываний. Существует специально предназначенная для этого команда SPM (Set Program Mask — УСТАНОВИТЬ МАСКУ ПРОГРАММЫ). Таким образом, можно самостоятельно разрешать или маскировать прерывания.

Биты 16—31 PSW определяют источник прерывания. Эта часть PSW называется кодом прерывания. Например, в случае прерываний ввода-вывода в указанное поле PSW записываются номер канала и адрес устройства, участвовавших в обмене. После этого программе-обработчику прерываний становится доступной информация о том, какое устройство вызвало прерывание. В случае программного прерывания последние 4 бита этого поля, а именно биты 28—31, содержат информацию, характеризующую природу ошибки. Форма записи этой информации будет рассмотрена в следующей главе.

В битах 8—11 содержится ключ защиты. Такие ключи используются для ограничения реальной области памяти, с которой может работать программа. Если разряд 14 содержит 1, то ЭВМ находится в состоянии ожидания, бит 15 PSW определяет, выполняется ли программа в состоянии задача или в состоянии супервизор. Эти состояния будут рассмотрены в гл. 12. Бит 12 имеет различное значение в Системах 360 и 370. В Системе 360 1 в 12-м разряде означает, что при преобразовании двоичных чисел в десятичные коды знака устанавливаются в соответствии с кодом ASCII, а не EBCDIC. В Системе 370 12-й разряд характеризует режим управления.

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

Расскажи друзьям