Requests are usually queued first-in-first-out (FIFO), except those
requests:• To .ovable-head DASDs that are queued in order of seek address • That release the affected component after initiation (SEEKS and other
controlcom.ands) which are queued last-in-first-out (LIFO) from the
control blockWhether or not the operation has been successfully started, the
caller requesting theI/O operation receives control froa DftKIOS. If a
free path to the device is found, the unit address is constructed and anSIO is issued. If the resulting condition code is zero, control is
returned to the caller; otherwise, the code is stored in the
requester'sIOBLOK along with any pertinent CSW status, the IOBLOK is
stacked,any components that becoae available are restarted, and control
is returned to the caller.
Alternate pathI/O scheduling is perforaed according to the following scheme: DftKIOS searches for an available path beginning with the primary path
to the device. If an available path to the device exists, theI/O request is started i •• ediately on the first available path to the
device.
If the device is busy or scheduled, theIOBLOK is queued off the RDEYBLOK. No alternate path processing is perforaed at the device level.
If the device is notbusy, not scheduled, nor offline, an IOBLOK for
thisI/O request is promoted upward to the RCUBLOK or RCBBLOK level in
search of an available path. If a busy or scheduled path is
encountered, anIOBLOK is queued to the real block and the search
continues for an available path. Ifmore than one busy path is
encountered,multiple IOBLOKs are queued for the same I/O request. This is accomplished by creating aini IO-BLOKs for each busy/scheduled path
after the first. Thepriaary IOBLOK is queued off the first busy path
encountered. Theaini IOBLOK is 16 bytes in length and consists of the
first two doublewords of theIOBLOK, which is the same as the current IOBLOK structure. The IOBLOK and associated mini IOBLOKs are chained in
a single-threaded queueby means of the IOBLINK field. The active IOBLOK pointer is not stored in the IOBLINK field until just prior to
theSIO. Zeros are stored in IOBLINK at entry to DftKIOSQR to indicate
no m1n1IOBLOKs have been queued as yet. See Figure 11 for an exaaple
ofmini IOBLOK queuing.
The last two words of theaini IOBLOK (IOBFPNT and IOBBPNT) are used
as the double-threaded queue pointers for theRCUBLOK/RCHBLOK from which
it is queued.A flag is set in the mini IOBLOK to identify it as a mini IOBLOK. Pigure 18 shows a saaple control block structure when mini IOBLOKs are queued.
1-92IBM VM/310 System Logic and Determination--Voluae 1
requests:
control
control block
caller requesting the
free path to the device is found, the unit address is constructed and an
returned to the caller; otherwise, the code is stored in the
requester's
stacked,
is returned to the caller.
Alternate path
to the device. If an available path to the device exists, the
device.
If the device is busy or scheduled, the
If the device is not
this
search of an available path. If a busy or scheduled path is
encountered, an
continues for an available path. If
encountered,
after the first. The
encountered. The
first two doublewords of the
a single-threaded queue
the
no m1n1
of
The last two words of the
as the double-threaded queue pointers for the
it is queued.
1-92