<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=Unit_Control_Block</id>
	<title>Unit Control Block - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=Unit_Control_Block"/>
	<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Unit_Control_Block&amp;action=history"/>
	<updated>2026-05-05T23:30:41Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>http://debianws.lexgopc.com/wiki143/index.php?title=Unit_Control_Block&amp;diff=5565331&amp;oldid=prev</id>
		<title>imported&gt;Voidxor: Rm old uncited.</title>
		<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Unit_Control_Block&amp;diff=5565331&amp;oldid=prev"/>
		<updated>2023-12-09T00:38:50Z</updated>

		<summary type="html">&lt;p&gt;Rm old uncited.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Short description|Component of IBM mainframe operating systems}}&lt;br /&gt;
{{Use American English|date=December 2023}}&lt;br /&gt;
{{Use mdy dates|date=December 2023}}&lt;br /&gt;
{{More citations needed|date=January 2017}}&lt;br /&gt;
&lt;br /&gt;
In [[IBM mainframe]] [[operating system]]s [[OS/360 and successors|OS/360 and its successors]], a &amp;#039;&amp;#039;&amp;#039;Unit Control Block&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;UCB&amp;#039;&amp;#039;&amp;#039;) is a [[Object composition|memory structure]], or a &amp;#039;&amp;#039;control block&amp;#039;&amp;#039;, that describes any single [[input/output]] [[peripheral device]] (&amp;#039;&amp;#039;unit&amp;#039;&amp;#039;), or an &amp;#039;&amp;#039;exposure&amp;#039;&amp;#039; (alias), to the operating system. Certain data within the UCB also instructs the &amp;#039;&amp;#039;&amp;#039;Input/Output Supervisor&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;IOS&amp;#039;&amp;#039;&amp;#039;) to use certain closed subroutines in addition to normal IOS processing for additional physical device control.&lt;br /&gt;
&lt;br /&gt;
Some other operating systems have similar structures.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
During [[initial program load]] (IPL) of current{{Efn|In some older systems, the UCBs were part of the Nucleus and were assembled during the SYSGEN process.}} [[MVS]] systems, the Nucleus Initialization Program (NIP) reads necessary information from the I/O Definition File (IODF) and uses it to build the UCBs. The UCBs are stored in system-owned memory, in the &amp;#039;&amp;#039;&amp;#039;Extended System Queue Area&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;ESQA&amp;#039;&amp;#039;&amp;#039;). After IPL completes, UCBs are owned by Input/Output Support. Some of the data stored in the UCB are: device type (e.g. disk, tape, printer, terminal), address of the device (such as &amp;#039;&amp;#039;1002&amp;#039;&amp;#039;), subchannel identifier and device number, channel path ID (CHPID) which defines the path to the device, for some devices the [[volume serial number]] (VOLSER), and a large amount of other information, including OS Job Management data.&lt;br /&gt;
&lt;br /&gt;
While the contents of the UCB has changed as MVS evolved, the concept has not. It is a representation to the operating system of an external device. Inside every UCB are the UCBIOQ pointer to the current&amp;lt;ref name=&amp;quot;ucb-mapping&amp;quot;&amp;gt;{{cite book&lt;br /&gt;
 | title       = z/OS 2.5 MVS Data Areas MVS Data Areas Volume 4 (RRP - XTL)&lt;br /&gt;
 | id          = GA32-0938-500&lt;br /&gt;
 | date        = September 30, 2021&lt;br /&gt;
| url         = https://www.ibm.com/servers/resourcelink/svc00100.nsf/pages/zOSV2R5ga320938/$file/iead400_v2r5.pdf&lt;br /&gt;
 | section     = UCB Mapping&lt;br /&gt;
 | section-url = https://www.ibm.com/servers/resourcelink/svc00100.nsf/pages/zOSV2R5ga320938/$file/iead400_v2r5.pdf#page=1039&lt;br /&gt;
 | page        = [https://www.ibm.com/servers/resourcelink/svc00100.nsf/pages/zOSV2R5ga320938/$file/iead400_v2r5.pdf#page=1040 994]&lt;br /&gt;
 | publisher   = IBM&lt;br /&gt;
 | access-date = May 9, 2022&lt;br /&gt;
}}&amp;lt;/ref&amp;gt; IOS Queue Element&amp;lt;ref&amp;gt;{{cite book&lt;br /&gt;
 | title       = z/OS 2.5 MVS Data Areas Volume 2 (IAX - ISG)&lt;br /&gt;
 | id          = GA32-0936-50&lt;br /&gt;
 | date        = September 30, 2021&lt;br /&gt;
| section     = IOQ Information&lt;br /&gt;
 | section-url = https://www.ibm.com/servers/resourcelink/svc00100.nsf/pages/zOSV2R5ga320936/$file/iead200_v2r5.pdf#page=1097&lt;br /&gt;
 | pages        = 1033–1039&lt;br /&gt;
 | url         = https://www.ibm.com/servers/resourcelink/svc00100.nsf/pages/zOSV2R5ga320936/$file/iead200_v2r5.pdf&lt;br /&gt;
 | publisher   = IBM&lt;br /&gt;
 | access-date = May 8, 2022&lt;br /&gt;
}}&amp;lt;/ref&amp;gt; (IOQ), UCBIOQF and UCBIOQL pointers&amp;lt;ref&amp;gt;{{cite book&lt;br /&gt;
 | title       = z/OS 2.5 MVS Data Areas Volume 2 (IAX - ISG)&lt;br /&gt;
 | id          = GA32-0936-50&lt;br /&gt;
 | date        = September 30, 2021&lt;br /&gt;
| url         = https://www.ibm.com/servers/resourcelink/svc00100.nsf/pages/zOSV2R5ga320936/$file/iead200_v2r5.pdf&lt;br /&gt;
 | section     = IOSDUPFX mapping&lt;br /&gt;
 | section-url = https://www.ibm.com/servers/resourcelink/svc00100.nsf/pages/zOSV2R5ga320936/$file/iead200_v2r5.pdf#page=1244&lt;br /&gt;
 | page        = [https://www.ibm.com/servers/resourcelink/svc00100.nsf/pages/zOSV2R5ga320936/$file/iead200_v2r5.pdf#page=1245 1181]&lt;br /&gt;
 | publisher   = IBM&lt;br /&gt;
 | access-date = May 9, 2022&lt;br /&gt;
}}&amp;lt;/ref&amp;gt; to a queue of IOQs{{efn|In OS/360, [[OS/VS1]] and [[OS/VS2 (SVS)|SVS]], there was a field pointing to a queue of Request Queue Elements (RQEs).}} (IOQs) and a subchannel number for the subchannel-identification word used in the start subchannel (SSCH) instruction to start a channel program (chain of channel command words (CCWs)).&amp;lt;ref&amp;gt;{{cite book |title=z/Architecture Principles of Operation |edition=Fourteenth |id=SA22-7832-13 |page=14{{hyp}}15 |url=https://publibfp.dhe.ibm.com/epubs/pdf/a227832d.pdf |publisher=IBM |date=May 2022 |access-date=January 24, 2023 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UCB evolved to be an anchor to hold information and states about the device. The UCB currently has five areas used for an external interface: Device Class Extension, UCB Common Extension, UCB Prefix Stub, UCB Common Segment and the UCB Device Dependent Segment.&amp;lt;ref name=&amp;quot;ucb-mapping&amp;quot; /&amp;gt; Other areas are internal use only. This information can be read and used to determine information about the device.&lt;br /&gt;
&lt;br /&gt;
In the earliest implementations of [[OS/360]], the UCBs (foundations and extensions) were assembled during SYSGEN, and were located within the first 64&amp;amp;nbsp;KB of the system area, as the I/O device lookup table consisted of 16-bit addresses. Subsequent enhancements allowed the extensions to be above the 64-kilobyte (65,536 bytes) line, thereby saving space for additional UCB foundations below the 64-kilobyte line and also thereby preserving the architecture of the UCB lookup table (converting a CUu to a UCB foundation address). Eventually an installation could choose to place UCBs above the 16 MiB line, although in a process called &amp;#039;&amp;#039;shadowing&amp;#039;&amp;#039; the UCB the OS creates a temporary local copy of the UCB when allocating a file without the &amp;#039;&amp;#039;XTIOT&amp;#039;&amp;#039; option.&lt;br /&gt;
&lt;br /&gt;
== Handling parallel I/O operations ==&lt;br /&gt;
UCBs were introduced in the 1960s with OS/360. Then a device addressed by UCB was typically a moving head [[hard disk drive]] or a [[tape drive]], with no internal [[Disk buffer|cache]]. Without it, the device was usually grossly outperformed by the mainframe&amp;#039;s [[Channel I/O|channel processor]]. Hence, there was no reason to execute multiple input/output operations to it at the same time, as these would be impossible for a device to physically handle. In 1968, [[IBM]] introduced the 2305-1 and 2305-2 fixed-head disks, which had rotational position sensing (RPS) and eight &amp;#039;&amp;#039;exposures&amp;#039;&amp;#039; (alias addresses) per disk; the OS/360 support provided a UCB per exposure in order to permit multiple concurrent channel programs.&amp;lt;ref&amp;gt;{{cite book |title=OS System Generation – Release 21.8 |id=GC28-6554-13 |date=August 1974 |edition=Fourteenth |section=IODEVICE |section-url=http://bitsavers.org/pdf/ibm/360/os/R21.8_Aug74/GC28-6554-13_OS_System_Generation_Release_21.8_Aug74.pdf#page=359 |page=339 |url=http://bitsavers.org/pdf/ibm/360/os/R21.8_Aug74/GC28-6554-13_OS_System_Generation_Release_21.8_Aug74.pdf |publisher=IBM |access-date=January 24, 2023 }}&amp;lt;/ref&amp;gt; Similarly, later systems derived from OS/360 required an additional UCB for each allocated virtual volume in a [[IBM 3850|IBM 3850 Mass Storage System]] (MSS),&amp;lt;ref&amp;gt;{{cite book |title=Introduction to the IBM 3850 Mass Storage System (MSS) |id= GA32-0028-2 |date=July 1975 |edition=Third |section=Virtual Drive Concept |section-url=http://bitsavers.org/pdf/ibm/3850/GA32-0028-7_Introduction_to_the_IBM_3850_Mass_Storage_System_Jul75.pdf#page=23 |page=22 |url=http://bitsavers.org/pdf/ibm/3850/GA32-0028-7_Introduction_to_the_IBM_3850_Mass_Storage_System_Jul75.pdf |publisher=IBM |access-date=January 24, 2023 }}&amp;lt;/ref&amp;gt; and for each exposure on a 3880-11 and its successors.&amp;lt;ref&amp;gt;{{cite web |title=IBM 3880 Storage Control Model 21 |id=184-119 |date=September 18, 1984 |url=https://www.ibm.com/common/ssi/ShowDoc.wss?docURL=/common/ssi/rep_ca/9/897/ENUS184-119/index.html |publisher=IBM |access-date=January 24, 2023 }}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite book |title= IBM 3880 Storage Control Model 21 - Installation and Administration Guide |id=GA32-0084-0 |date=October 1984 |edition=First |url=http://vtda.org/docs/computing/IBM/Mainframe/Hardware/DataStor/GA32-0084-0_IBM3380SCM21InstallationAdministration.pdf#page=14 |publisher=IBM |page=3 |access-date=January 24, 2023 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Parallel Access Volumes (PAVs) ===&lt;br /&gt;
&amp;lt;!-- &amp;quot;Parallel Access Volumes&amp;quot; redirects here. --&amp;gt;&lt;br /&gt;
Since only one set of channel commands or I/O could be run at one time. This was fine in the 1960s when CPUs were slow and I/O could only be processed as fast as CPUs could process it. As systems matured and CPU speed greatly surpassed I/O input capacity, access to the device that was serialized at the UCB level became a serious bottleneck.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Parallel Access Volume&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;PAV&amp;#039;&amp;#039;&amp;#039;) allow UCBs to clone themselves to allow multiple I/O to run simultaneously. With appropriate support by the DASD hardware, PAV provides support for more than one I/O to a single device at a time. To maintain [[backward compatibility]], operations are still serialized below the UCB level. But PAV allows the definition of additional UCBs to the same logical device, each using an additional &amp;#039;&amp;#039;alias&amp;#039;&amp;#039; address. For example, a DASD device at &amp;#039;&amp;#039;base&amp;#039;&amp;#039; address 1000, could have alias addresses of 1001, 1002 and 1003. Each of these alias addresses would have their own UCB. Since there are now four UCBs to a single device, four concurrent I/Os are possible. Writes to the same extent, an area of the disk assigned to one contiguous area of a file, are still serialized, but other reads and writes occur simultaneously. The first version of PAV the disk controller assigns a PAV to a UCB. In the second version of PAV processing, [[Workload Manager]] (WLM) reassigns a PAV to new UCBs from time to time. In the third version of PAV processing, with the [[IBM DS8000 series]], each I/O uses any available PAV with the UCB it needs.&lt;br /&gt;
&lt;br /&gt;
The net effect of PAVs is to decrease the IOSQ time component of disk response time, often to zero. {{As of|2007|post=,}} the only restrictions to PAV are the number of alias addresses, 255 per base address, and overall number of devices per logical control unit, 256 counting base plus aliases.&lt;br /&gt;
&lt;br /&gt;
==== HyperPAVs ====&lt;br /&gt;
WLM&amp;#039;s actions in moving aliases from one disk device to another take a few seconds for the effects to be seen. For many situations this is not fast enough. HyperPAVs are significantly more responsive because they acquire a UCB from a pool for the duration of a single I/O operation, before returning it to the pool. Thus, a smaller number of UCBs are required to service the same workload, compared to Dynamic PAVs. There is no delay waiting for WLM to react.&amp;lt;ref&amp;gt;{{cite book |first1=Paul |last1=Rogers |first2=Alvaro |last2=Salla |first3=Livio |last3=Sousa |date=September 2008 |title=ABCs of z/OS System Programming |volume=10 |id=SG24-6990-03 |edition=Fourth |section=7.22 HyperPAV feature for DS8000 series |section-url=https://s3p.manualzz.com/store/data/029464005.pdf?key=16282d34a07d49405e04fd1acc6a24b6&amp;amp;r=1&amp;amp;fn=29464005.pdf&amp;amp;t=1651800442156&amp;amp;p=86400#page=512 |page=494 |url=https://s3p.manualzz.com/store/data/029464005.pdf?key=16282d34a07d49405e04fd1acc6a24b6&amp;amp;r=1&amp;amp;fn=29464005.pdf&amp;amp;t=1651800442156&amp;amp;p=86400 |work=Redbooks |publisher=IBM |access-date=May 5, 2022 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== In other operating systems ==&lt;br /&gt;
Digital&amp;#039;s [[OpenVMS|VMS]] operating system uses an identically named structure, the UCB, for similar purposes. A UCB is created for each I/O device. The data in the UCB includes the device&amp;#039;s unit number (a part of the device name) and a listhead to which pending I/O requests may be queued. The UCB may have a device-driver defined extension in which the driver can keep driver-defined data that is instantiated for each device.&amp;lt;ref&amp;gt;{{cite book |last1=Goldenberg |first1=Ruth |last2=Saravanan |first2=Sara |date=1994 |title=OpenVMS AXP Internals and Data Structures |publisher=Digital Press |page=753 |isbn=978-1555581206 |quote=The executive creates a unit control block (UCB) for each I/O device attached to the system. }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* {{Annotated link|z/OS}}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
{{Notelist}}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
{{Mainframe I/O access methods}}&lt;br /&gt;
&lt;br /&gt;
[[Category:IBM mainframe operating systems]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Voidxor</name></author>
	</entry>
</feed>