Периферийные устройства

До сих пор мы занимались рассмотрением вопросов, связанных с использованием возможностей операционной системы для выполнения операций ввода-вывода. Теперь в целях 'получения более полной информации о структуре вычислительных Систем 360 и 370 мы перейдем к рассмотрению устройств, предназначенных для непосредственного выполнения этих операций.

КАНАЛЫ ВВОДА-ВЫВОДА

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

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

Рис. 17.11. Канал является промежуточным звеном между периферийными устройствами и памятью и управляет потоком информации между ними.

Канал представляет собой «мини-ЭВМ», имеющую свой машинный язык. Команды этого языка называются Управляющими словами канала (Channel Command Word — CCW). Программа канала — это последовательность CCW, хранящихся в основной памяти ЭВМ. Выполнение отдельных команд этой программы каналом может совпадать по времени с выполнением команд обрабатывающей программы CPU т. е. CPU и канал работают независимо.

Вероятно, наиболее просто понять назначение и порядок работы канала можно, рассмотрев Управляющее слово канала. На рис. 17.12 изображена общая структура CCW. CCW представляет собой двойное слово, в первом байте которого записывается код соответствующей операции. В качестве операции может выступать одна из следующих:

Читать: ввод информации с периферийного устройства в память.

Писать: вывод информации из памяти на периферийное устройство.

Читать в обратном направлении: эта операция относится к работе с магнитными лентами, магнитные ленты могут читаться в обратном направлении.

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

Уточнить состояние устройства: ввод информации о состоянии устройства.

Переход: передача управления внутри программы канала.

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

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

Рис. 17.12. Структура Управляющего слова канала (в Системе 370 бит 37 используется как флажок).

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

Поле адреса состоит из 24 битов, в нем указывается адрес начала буфера ввода-вывода. Этот адрес используется каналом для определения либо адреса начала информации, которая должна быть выведена на периферийное устройство, либо адреса, по которому в памяти должны быть размещены введенные данные.

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

Флажки (биты 32—36 в Системе 360 и биты 32—37 в Системе 370) устанавливают связь между данной командой канала и другими командами, а также CPU. Используются следующие флажки:

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

Когда бит CD равен 1, то по окончании выполнения операции, заданной данным CCW, ее выполнение должно возобновиться, но уже с использованием содержимого поля адреса и значения счетчика следующей команды.

Бит 33: флажок цепочки команд (СС). Если 33-й бит CCW равенО, то после выполнения одной команды канал останавливается в ожидании дальнейших указаний. Результат выполнения фиксируется в Слове состояния канала (Channel Status Word — CSW), которое помещается в определенное место памяти. Если же бит 33 равен 1, то после окончания выполнения одной команды программы канала происходит переход к следующей. Таким образом, если мы имеем целую последовательность CCW, которые необходимо выполнить, т.е. целую программу канала, то флажки цепочки команд всех CCW, кроме последнего, должны быть установлены в состояние 1. Если программа канала не содержит ошибок, то ее выполнение продолжается до тех пор, пока не будет встречено CCW с 0 в 33-м разряде.

Бит 34: флажок подавления индикации неправильной длины(SLI). Если длина перемещаемой информации не совпадает с содержимым поля счетчика CCW, то фиксируется ошибка в определении длины. Обычно это действительно свидетельствует о допущенной ошибке; выполнение программы канала в этом случае прерывается и выдается информация о состоянии канала на текущий момент в виде Слова состояния канала. Если же 34-й бит CCW равен 1, то описанная ситуация не воспринимается как аварийная, т. е. даже при ее появлении работа канала продолжается в обычном порядке.

Бит 35: флажок блокировки записи (SKIP). Этот флажок вызывает блокировку передачи данных в память. Команда как бы выполняется, но перемещения информации при этом не производится. Фактически 1 в 35-м разряде вызывает пропуск очередного блока при выполнении операций чтения, чтения в обратном направлении и уточнении состояния устройства.

Бит 36: флажок программного управляемого прерывания (PCI). Если флажок PCI установлен в положение 1, то при попытке выполнения данного CCW формируются условия прерывания.

Бит 37: флажок косвенной адресации (IDA). Используется только в Системе 370, в Системе 360 этот бит должен быть равен 0. Если данный флажок установлен в состояние 1, то содержимое поля адреса CCW рассматривается как адрес некоторой ячейки памяти, в свою очередь содержащей число, которое должно быть рассмотрено как адрес начала буфера ввода-вывода.

Программы канала

Программирование ввода-вывода состоит в составлении программ каналов и управлении их выполнением. Рассмотрим задачу поиска записи, принадлежащей некоторому набору данных, расположенному на диске, и имеющей заданный ключ. Программа канала, под управлением которой будет произведен поиск, должна содержать следующие CCW:

CCW1: Команда управления, по которой головки чтенуя-записи диска устанавливаются в положение, необходимое для считывания первого блока набора.

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

CCW3: Передача управления на CCW2.

CCW4: Команда чтения, обеспечивающая ввод блока, содержащего запись с заданным ключом.

CCW5: CCW, бит PCI которого равен 1. При попытке выполнения этого CCW происходит прерывание, фиксирующее окончание работы канала.

Описанный пример показывает, насколько сложны могут быть программы канала, содержащие циклы и условные передачи управления. Если программа канала уже находится в памяти, то для активизации канала необходимо выполнить команду SIO(StartInputOut¬put— Начать ввод-вывод).

SIO D1(B1)

StartIO

Начать выполнение программы канала, используя устройство, определяемое последними 16-ю битами D1 +(В1)

SIO представляет собой команду модифицированного формата SI. Второй байт соответствующей машинной команды содержит 0. С помощью единственного операнда, D1+(B1), определяются номер канала и адрес соответствующего периферийного устройства, с которым должен взаимодействовать канал при выполнении канальной программы.

Канал определяет расположение его программы в памяти с помощью Адресного слова канала (CAW), всегда находящегося в некоторой фиксированной ячейке памяти. В первых 4 разрядах CAW записан ключ защиты, с помощью которого проверяется законность обращения к различным областям памяти, т.. е. законность записи новой информации в определенное место памяти или вывода ее оттуда. В последних 24 разрядах CAW содержится адрес первого CCW программы канала.

В ответ на поступление SIO канал пытается выполнить CCW, находящееся в памяти по адресу, определяемому с помощью CAW.

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

Рис. 17.13. Формат Слова состояния канала.

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

Таблица 17.7 Признаки результата, устанавливаемые командой SIO

Признак

результата

Значение

0

Команда выполняется нормально. Канал приступил к выполнению канальной программы.

1

Обнаружена ошибка; канал записал в память Слово состояния канала, содержащее информацию о характере ошибки

2

Канал занят обслуживанием другого устройства

3

Канал не работает

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

Появление 1 в качестве признака результата означает, что при попытке выполнения первого CCW была зафиксирована ошибка. В Системах 360 и 370 фиксированная ячейка отведена для хранения так называемого Слова состояния канала (Channel Status Word — CSW). CSW представляет собой двойное слово, его структура приведена на рис. 17.13. Поле ключа содержит значение ключа защиты памяти, присвоенного пользователю, запросившему выполнение операций ввода- вывода. В поле адреса команды содержится адрес того CCW, попытка выполнения которого привела к ошибке. Разряды 32—47 называются разрядами состояния, их содержимое позволяет определить источник ошибки. В разрядах 48—63 записывается содержимое поля счетчика CCW, выполнение которого было прервано.

Если канал в настоящий момент занят, то несколько позже повторяется попытка выполнения SIO в предположении, что канал к этому времени освободился.

В вычислительных машинах Системы 360 существует всего четыре команды ввода-вывода, одной из которых является SIO. Остальными командами являются следующие: ТЮ (Test I/O — Проверить ввод-вывод), НЮ (Halt I/O — Остановить ввод-вывод), TCH (Test Channel — Проверить канал).

ТIOD1 (В 1)

TestI/O

Проверить канал и устройство, определяемые с помощью D1+(В1)

НIOD1 (В 1)

HaltI/O

Остановить выполнение операций ввода-вывода каналом и устройством D1+(B1)

TCH D1 (В 1)

TestCHannel

Проверить канал D1+(B1)

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

ЭВМ Системы 370 предлагают более широкий набор команд ввода- вывода. Помимо уже рассмотренных четырех команд в него входят такие команды, как HDV (Halt DfeVice — Остановить устройство), CLRIO (CLeaR I/O — Освободить ввод-вывод), STIDC (STore Channel ID— Записать идентификатор канала), SIOF (Start I/O Fast release — Начать ввод-вывод с быстрым отключением). Подробное описание этих команд приведено в книге «Принципы работы Системы 1ВМ/370».

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

Мы знаем, что одним из способов выполнения желаемых операций ввода-вывода является использование методов доступа, предоставляемых операционной системой. Методы доступа производят обращения к программам супервизора, которые берут на себя непосредственное управление выполнением канальных программ. Если мы хотим сами задать программу канала, то для этого можно использовать специальную макрокоманду EXCP (EXecute Channel Program — Выполнить программу канала). Порядок работы при этом должен быть следующий: сначала нужно составить программу канала, затем передать адрес первого CCW этой программы операционной системе в качестве параметра макрокоманды ЕХСР. ЕХСР активизирует одну из программ супервизора, которая в свою очередь выполняет необходимые для управления процессом ввода-вывода привилегированные команды.