До сих пор мы занимались рассмотрением вопросов, связанных с использованием возможностей операционной системы для выполнения операций ввода-вывода. Теперь в целях 'получения более полной информации о структуре вычислительных Систем 360 и 370 мы перейдем к рассмотрению устройств, предназначенных для непосредственного выполнения этих операций.
КАНАЛЫ ВВОДА-ВЫВОДА
Канал представляет собой своеобразную вычислительную машину внутри вычислительной машины. Функциями канала являются управление работой периферийных устройств и перемещением информации между этими устройствами и памятью. На рис. 17.11 схематически изображено место канала в вычислительной системе и его связь с центральным процессором, периферийными устройствами и памятью. В приведенной конфигурации канал представляет путь, проходимый информацией в процессе ее движения между памятью, двумя устройствами печати, устройством чтения перфокарт и устройством перфорации карт.
Рис. 17.11. Канал является промежуточным звеном между периферийными устройствами и памятью и управляет потоком информации между ними.
Канал представляет собой «мини-ЭВМ», имеющую свой машинный язык. Команды этого языка называются Управляющими словами канала (Channel Command Word — CCW). Программа канала — это последовательность CCW, хранящихся в основной памяти ЭВМ. Выполнение отдельных команд этой программы каналом может совпадать по времени с выполнением команд обрабатывающей программы CPU т. е. CPU и канал работают независимо.
Вероятно, наиболее просто понять назначение и порядок работы канала можно, рассмотрев Управляющее слово канала. На рис. 17.12 изображена общая структура CCW. CCW представляет собой двойное слово, в первом байте которого записывается код соответствующей операции. В качестве операции может выступать одна из следующих:
Читать: ввод информации с периферийного устройства в память.
Писать: вывод информации из памяти на периферийное устройство.
Читать в обратном направлении: эта операция относится к работе с магнитными лентами, магнитные ленты могут читаться в обратном направлении.
Управление: здесь подразумевается целый набор операций, не относящихся, однако, к непосредственному перемещению информации: перемотка ленты, установка считывающей головки магнитного диска, переход к началу новой страницы в устройстве печати.
Уточнить состояние устройства: ввод информации о состоянии устройства.
Переход: передача управления внутри программы канала.
Не все 8-битовые комбинации нужны для представления кодов операций, перечисленных выше. Незадействованные старшие биты могут быть использованы в качестве флажков для указания режима выполнения операции.
Рис. 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.
Рис. 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 этой программы операционной системе в качестве параметра макрокоманды ЕХСР. ЕХСР активизирует одну из программ супервизора, которая в свою очередь выполняет необходимые для управления процессом ввода-вывода привилегированные команды.