When sub pools are exhausted, saall blocks are generally obtained fro.
the first larger block at the end of available free storage. Large
blocks, on the other hand, are obtained from the high-nuabered end of
the last larger block. This procedure tends to keep the volatile small subpool blocks separated from the large blocks, soae of which stay in
storage for much longer periods of time; thus, undue fragmenting of
available storage is avoided. D8KFRE initially starts without any subpool blocks. They are
obtained fro. D8KFREE and returned to D8KFRET on a demand basis.
The various cases of calls to D8KFREE for obtaining free storage, or
to D8KFRET for returning it, for subpool sizes and large sizes, are
handled as follows: Subpool Available: If a call for a subpool is aade and a block of the
suitable size is available, the block found is detached from the chain,
the chain patched to the next subpool block of the sa.e size (if any),
and the given block returned to the caller.
Subpool Not If a block of suitable si2e is not available when
a call to D8KFREE is made for a sub pool, the chained list of free
storage is searched for a block of equal or larger size. The first block
of larger or equal storage is used to satisfy the call (an equal-size
block taking priority), except that blocks within the dyna.ic paging
area are avoided if at all possible. If no equal or larger block is
found, all the subpool blocks currently not in use are returned to the
.ain free storage chain, and then the free storage chain is again
searched for a block large enough to satisfy the call. If there still is
no block large enough to satisfy the request, then D8KPTRFR is called to
obtain anotber page frame of storage fro. the dynamic paging area, and
the process is repeated to obtain the needed block.
If a call to D8KFREE is made for a block larger than 30 doublewords, the
chained list of free storage is searched for a block of equal or larg.er
size. If-an equal-size block is found, it is detached fro. the chain and
given to the caller. If at least one larger block is found, the desired
block size is split off the high-numbered end of the last larger block
found, and given to the caller. If no equal or larger block is found, D8KPTRFR is called to obtain another page frame of storage from the dynamic paging area, and the above process is repeated (as necessary) to obtain the needed block.
If a subpool block is given back via a call to DftKFRET, the block is
attached to the appropriate subpool chain on a LIFO (push-down stack)
basis, and return is .ade to the caller. If, however, the block was in a page within the dynamic paging area, the block is returned to the
regular free storage chain instead.
CP Introduction 1-121
If a block larger than 30 doublewords is returned via it is merged appropriately into the regular free storage chain. Then, unless
the block was returned by DMKPRETR (see "Initialization") a check is made to see if the area given back (after all merging has been done) is
a page frame within the dynamic paging area. If so, returns it
to the dynamic paging area for subsequent use. !ll.Q£at!on The number of page frames allocated to free storage depends upon:
1. The real machine storage size
2. The RKSIZE operand specified in the SYSCOR macro at system generation time
3 The FREE operand in the SYSCOR macro
The storage size used DY is the smaller of the real machine storage size and the RKSIZE value.
If the PREE operand was not included in the SYSCOR macro statement for DKKSYS, the default number of fixed free storage pages allocated at IPL time for the first 256K of storage is 3 and 1 page for each 64K
thereafter, not including V=R size, if any.
If the FREE operand was included in the SYSCOR macro statement for DMKSYS, that value is the number of fixed free storage page frames allocated at IPL time. If those pages represent an amount of free
storage greater than 25% of the VK/370 storage size (not including V=R size, if any) the default allocation is used. CP INITIALIZATION System initialization starts when the operator selects the DASD device
address of the CP system residence volume (SYSRES) and presses the IPt button. The Systea/370 hardware reads 24 bytes from record 1 of
cylinder 0 on SYSRES into location 0 of main storage. This record
consists of an initial PSW and a channel program. The channel prograa
reads the module DMKCKP into location 1'800' and gives it control. DKKCKP checks location CPID in module DMKPSA. If CPID contains the value CPCP or WARM, DMKCKP saves the spool file
control blocks, system log messages, accounting information, status of
spool devices, spool hold queue blocks, and spool record allocation
blocks and writes them on the warm start cylinders. If CPID contains
the value CPCP, DKKCKP loads a disabled wait state code 1'008'. If location CPID does not contain the value CPCP, DMKCKP nov loads DKKSAV and passes control to it at entry point DMKSAVRS. reloads
a page image copy of the CP nucleus into real storage starting at page O. When DKKSAV is finished, control is transferred to performs the main initialization function. This includes calling DKKiRK to retrieve the information stored on the warm start cylinder. This
also includes calling DKKCKS to initialize the dynamic checkpoint
cylinders and to checkpoint the current status of the spool file system. When DMKCPI has finished, it passes control to loads
a wait state PSi to wait for work. See "CP Initialization for the
Attached Processor" for additional 1-122 IBM VM/370 System Logic and Problem Deteraination--Voluae 1
Previous Page Next Page