Организация подсистемы ввода вывода
Канальные программы и способы их выполнения
Каждая канальная программа реализует определенную операцию ввода-вывода и состоит из последовательности управляющих слов канала CCW, являющихся командами для процессорного ядра каналов. В z/Architecture используются два формата CCW, приведенные на таблице 2.30. Оба формата являются общими для всех типов периферийных устройств [2.1].
Код операции | Адрес данных | Формат 0 | ||
0 |
8 31 |
|||
Флаги | 0 | 00000000 | Счетчик данных | |
32 | 40 |
48 63 |
Каждое CCW содержит восьмиразрядный код операции, который определяет приказ, передаваемый в устройство для выполнения в нем одной из возможных операций, и действия, выполняемые в канале. Перечень возможных значений кодов операций CCW и соответствующих им действий приведен в таблице 2.31. Биты m используются для кодирования модификаций приказов, исполняемых в периферийных устройствах различных типов.
m - биты модификации кодов в зависимости от типов устройств
Для задания области памяти, с которой канал производит обмен, в CCW указывается начальный адрес этой области (адрес данных) и количество байт, участвующих в обмене (счетчик данных). Форматы 0 и 1 отличаются разрядностью адреса, равной, соответственно, 24 и 31 разрядам. Возможно использование косвенной адресации при установке в CCW флага IDA (Indirect Access). В этом случае адрес данных указывает на список косвенных адресов (Indirect Data Address Word - IDAW), каждый из которых адресует страницу памяти емкостью 2КB или 4КB. Разрядность IDAW определяется одним из двух его форматов (1 или 2) и равна, соответственно, 31 или 64 бита. Количество IDAW в списке косвенных адресов определяется полем счетчика данных.
Поле флагов CCW дополняет код операции и используется в канале для управления выборкой CCW и выполнения специальных функций. Помимо флага IDA используются следующие флаги. Флаг цепочки данных (Chain-Data) предназначен для указания каналу, что следующее CCW имеет тот же код операции и продолжает ее выполнение с другой областью памяти. Флаг цепочки команд (Chain-Command) указывает каналу на наличие нового кода операции в следующем CCW. Флаг пропуска (Skip) определяет блокировку записи в память данных, принимаемых от периферийного устройства, что позволяет каналу осуществлять выборочное чтение информации из зон физических носителей устройств. Флаг блокировки неправильной длины (Suppress-Length-Indication) позволяет каналу исключить прерывание основной программы при обнаружении несовпадения размеров блока данных, указанного в CCW, и блока данных, формируемого в устройстве. Флаг программно управляемого прерывания (Program-Controlled-Interruption) вызывает запрос на прерывание основной программы и позволяет информировать ее о ходе выполнения канальной программы в контрольных точках. Флаг останова (Suspend) позволяет приостановить выполнение канальной программы до команды на продолжение работы подканала.
CCW с кодом операции "переход в канале" предназначено только для канала и не вызывает операций с периферийным устройством. Основное назначение такого CCW - организация безусловных переходов и ветвлений в канальной программе. При его исполнении адрес из поля "адрес данных" используется в качестве адреса следующего CCW. В сочетании с возможностью условного пропуска очередного CCW в зависимости от признака, полученного от периферийного устройства при исполнении текущего CCW, команда "переход в канале" позволяет организовать условные ветвления.
Завершение выполнения канальной программы осуществляется в два этапа. Первый этап завершается освобождением подканала после завершения передачи данных при исполнении последнего в канальной программе CCW, признаком которого служит отсутствие флагов цепочек данных и команд. Второй этап связан с завершением выполнения последней операции в периферийном устройстве. В конце каждого из этих этапов формируется запрос на прерывание основной программы.
В зависимости от типа каналов в z/Architecture возможны три способа выполнения канальных программ:
- байт-мультиплексный (byte-multiplex mode);
- блок-мультиплексный (burst mode);
- фрейм-мультиплексный (frame-multiplex mode).
В байт-мультиплексном режиме периферийное устройство остается логически подключенным к каналу в течение небольшого промежутка времени - сеанса, достаточного для передачи одного или нескольких байт информации. После этого канал отключается от устройства с сохранением текущего состояния выполняемой канальной программы в соответствующем подканале. Продолжение исполнения канальной программы может осуществляться по запросу периферийного устройства по мере его готовности. Одновременно в канале могут быть активны несколько канальных программ, сеансы для которых чередуются в соответствии с запросами от устройств.
В блок-мультиплексном режиме периферийное устройство подключается к каналу на время передачи блока информации или последовательности блоков, а также необходимой для их передачи управляющей информации и состояний. Обычно такой передаче соответствует сеанс, в течение которого в монопольном режиме выполняется цепочка CCW, завершающаяся освобождением канала. При этом в периферийном устройстве исполнение операции ввода-вывода, соответствующей цепочке CCW, может продолжаться до ее полного завершения, а в канале возможен запуск аналогичного сеанса обмена для другого устройства.
Фрейм-мультиплексный режим реализует вариант организации обмена между каналами и периферийными устройствами с использованием элементов сетевых технологий. Обмен реализуется с использованием фреймов (или кадров) информации, соответствующих канальному уровню модели открытых систем OSI, и протоколов типа "точка-точка" (PPP). Каждый фрейм информации имеет многоуровневую структуру и содержит следующие стандартные поля (рис. 2.16):
- заголовок, включающий начало фрейма (SOF), адрес источника (S_ID), адрес приемника (D_ID) и другую управляющую информацию;
- поле передаваемых в фрейме данных;
- концевик, включающий контрольный код (CRC) и конец фрейма (EOF).
В поле данных фрейма инкапсулируется сообщение следующего, более высокого, уровня протоколов и т.д. Таким образом, передаваемый фрейм содержит поле данных самого высокого уровня и заголовки и концевики сообщений всех уровней, что позволяет принимающему узлу организовать правильную обработку фрейма на каждом из уровней.
Канал, функционирующий во фрейм-мультиплексном режиме, остается логически подключенным к периферийному устройству на все время исполнения канальной программы. Одновременно к каналу могут быть подключены несколько периферийных устройств, работающих параллельно. Фреймы от этих устройств передаются в канальном пути поочередно по мере их формирования.