1 Readdata 10 Bytes
2 TIC to 10 3 Unused 4 Search on 9 + 2
5 Etc.
6 ISAK vord
7 I I 8 Unused I I I 9 Data Area for Readdata 10 Seek Head on 9
11 TIC to 4 The interruption return address in the IOBLOK is set to D!KUNTIS. D!KUNTIS restores the CCWs to their original format fro. the seven
doublevord extensions, moves the 10 bytes of data fro. 8+7 into virtual
storage (at C+7), and releases the block. Nor.al I/O handling is resu.ed by DMKVIO and DMKUNT. I/O COMPONENT STATES The I/O components represented by the control blocks described in "Real I/O Control Blocks" are in one of four states and the state is indicated by the flag bits in the block status byte. If the component is not
disabled, it is either busy, scheduled, or available.
If the disabled bit is on, the component has been taken offline by the operator or the system and is at least te.porarily unavailable. A request to use a disabled component causes the IOBLOK to be stacked with an indication of condition code 3 on the 510 and the real 510 is not performed. An I/O unit is busy if it is transferring data (in the case of a
channel or control unit), or if it is in physical aotion (in the case of
a device). If an I/O unit is busy, the IOBLOK for the request is queued
fro. the control block representing that I/O unit. An I/O unit is scheduled if it is not busy but viII become busy after
a higher-level component in the subchannel path becomes available and an
operation is started. For example, if a request is .ade to read fro. a
tape drive and the drive and control unit are available, but the channel
is busy, the IOBLOI for that request is queued fro. the RCHBLOK for the
busy channel and the RCUBLOK and RDEVBLOK of the drive and control unit
are .arked as scheduled. Future requests to that drive are queued fro.
the BDEVBLOK for the scheduled dp.vice. When the channel co.pletes the
operation, the next pending operation is dequeued and started; the
scheduled control unit and device are then .arked as busy.
The IOBLOKs for various I/O requests indicate the status of that
request by a co.bination of the status bits in the IOBLOK and the queue CP Introduction 1-89
in which the block resides. In general, an IOBLOK is queued from the
control block of the highest level I/O unit (taken from device up to
channel) in the subchannel path tkat is not available. Once the I/O operation is started, the IOBLOK is chained from the active IOBLOK pointer (RDEVAIOB) in the real device control block. Flags in the IOBLOK status fields may also indicate that a unit check has occurred,
that a sense is in progress, or that a fatal I/O error (unrecoverable)
has been recognized by error recovery procedures. After I/O control
releases control of the IOBLOK, it is stacked on the queue of IOBLOKS and CPEXBLOKs anchored at DMKDSPRQ in the dispatcher and control is
passed to the second-level interruption handler whose address is stored
in I/O INTERRUPTIONS I/O interruptions are either synchronous or asynchronous. Asynchronous
interruptions indicate the change in status of an I/O unit from the
not-ready to ready state or busy to not-busy state. In eitneL if the affected component has any pending requests queued fro. its control
block, they are restarted, and whether or not the given interrupt is
processed any further depends upon the status of the interrupting
component. Channel-available and control-unit-end interruptions restart
the interrupting component. An asynchronous device end is passed to the
user if the device is dedicated; otherwise, the device is restarted.
An interruption is considered to be synchronous
device has a nonzero pointer to an active IOBLOK. following processing occurs:
if the interrupting
In this case, the • If a unit check has occurred, a sense is scheduled, and when the
sense is completed, the appropriate ERP is called. • If an ERP is currently in control of the task (indicated by a flag in
the IOBLOK), return the IOBLOK to the appropriate ERP. • If the operation is incomplete (for example, channel end is received
without device end), the IOBLOK is copied and the copy is stacked but
the original IOBLOK remains attached to RDEVAIOB to receive the final
interrupt; then, the control unit and the channel is restarted. • If the operation is complete (that is, the device is available), the IOBLOK is detached fro. the device and stacked, and the device,
control unit and channel are restarted.
The restart operation usually dequeues the next IOBLOK that is queued
to the restarted component and queues it to the next higher component in
the subchannel path. When the channel level is reached, a SIO is issued
and exit is taken to the dispatcher after handling any nonzero condition
codes as previously described. VIRTUAL I/O INTERRUPTIONS When an I/O interruption is received, the IOBLOK is stacked for
dispatching and control is passed to the address specified in the IOBIRA (interrupt return address) field. For operations requested by DftKVIOEl, the return address is DMKVIOIN (virtual interrupt return address). When DMKVIOIN receives control fro. the dispatcher, it loads the virtual
address of the unit with which the interruption is associated from the IOBLOK and calls D!KSCNVU to locate the virtual device control blocks. 1-90 IBM VM/370 System Logic and Problem Deteraination--VQluae 1
Previous Page Next Page