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
control com.ands) which are queued last-in-first-out (LIFO) from the
control block Whether or not the operation has been successfully started, the
caller requesting the I/O operation receives control froa DftKIOS. If a
free path to the device is found, the unit address is constructed and an SIO is issued. If the resulting condition code is zero, control is
returned to the caller; otherwise, the code is stored in the
requester's IOBLOK 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 path I/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, the I/O request is started i •• ediately on the first available path to the
device.
If the device is busy or scheduled, the IOBLOK is queued off the RDEYBLOK. No alternate path processing is perforaed at the device level.
If the device is not busy, not scheduled, nor offline, an IOBLOK for
this I/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, an IOBLOK is queued to the real block and the search
continues for an available path. If more 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. The priaary IOBLOK is queued off the first busy path
encountered. The aini IOBLOK is 16 bytes in length and consists of the
first two doublewords of the IOBLOK, which is the same as the current IOBLOK structure. The IOBLOK and associated mini IOBLOKs are chained in
a single-threaded queue by means of the IOBLINK field. The active IOBLOK pointer is not stored in the IOBLINK field until just prior to
the SIO. Zeros are stored in IOBLINK at entry to DftKIOSQR to indicate
no m1n1 IOBLOKs have been queued as yet. See Figure 11 for an exaaple
of mini IOBLOK queuing.
The last two words of the aini IOBLOK (IOBFPNT and IOBBPNT) are used
as the double-threaded queue pointers for the RCUBLOK/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-92 IBM VM/310 System Logic and Determination--Voluae 1
IOBLOK .-> rr--------.. I I IOBLINK 1 1----1 1 1 1 I 1 I Mini IOBLOK Mini IOBLOK 1 1 1 I 1 I 1 1 1 L->I I -1--->1 1 -1--. , , 1----+--1 1--+--1 I I 1 I I 1 I 1 --I l J I 1 V IOBFPNT I V IOBBPNT I I I I I I Figure 17. Mini IOBLOK Queuing RCUBLOK1 RCUBLOK2 I 1 I 1 I I I I 1---1 1---1 RCUFIOB 1 IRCULIOB r--I 1->IOBLOK3 .---1 1-->IOBLOK2 I 1 1 I I 1 I 1 I I I 1 1 1 I I' , I' , 1 1 I 1 1 MINI IOBLOK1 1 IOBLOK --->. I 1 ---.> I 1 1 1 1--------> 1 1->IOBLOK1 1-"'-1 III IOBFPNT 1 1 1 IOBBPNT l----fo-I r--I '1 1-->RCOBLOK1 I 1 1->RCUBLOK2 I I! " IOBLOK2 1 I i 1 IOBLOK3 I I 1 1 1 1 1-+-1 1 1 1 1 1 RCUBLOK2 1-"-1 RCUBLOK1<--1 I 1->IOBLOK1 <-I 1--. 1 1 1-+-1 I 1 1 1 1 1 " " 1 1 1 V MINI IOBLOK Figure 18. Control Block Structure for Alternate Path Request
CP Introduction 1-93
Previous Page Next Page