Page of GC20-1807-7 As Updated April 1, 1981 by TNL GN2S-0829
return. There is no default for this operand. If it is
omitted and an error occurs, the system will abend. r , AREA=ILOW I tHIGHI L J
indicates the area of CMS free storage from which this request
for free storage is filled. LOW indicates the low storage
area between DMSNUC and the transient program area. HIGH
indicates the area of storage between the uset program area
and the CMS loader tables. If AREA is not specified, storage
is allocated wherever it is available. r , TY PCALL= I I I BALRI L J
indicates how control is passed to DMSFREE. Because DMSFREE is a nucleus-resident routine, other nucleus-resident routines
can branch directly to it while routines that
are not nucleus-resident must use linkage SVC (TYPCALL=SVC). The pointers FREEUPPR and FREELOWE in NUCON indicate the amount of
storage that DMSFREE has allocated from the high portion of the user
program area. These pointers are initialized to the beginning of the
loader tables.
The pointer FREELOWE is the "low extend" pointer of DMSFREE storage
in the crser program area. As storage is allocated from the user program
area to satisfy DMSFREE requests, this pointer will be adjusted
downward. Such adjustments are always in multiples of 4K bytes, so that
this pointer is always on a 4K boundary. As the allocated storage is
released, this pointer is adjusted upward.
The pointer FREELOWE can never be lower than MAINHIGH, the "high
extend" pointer for GETMAIN storage. If a DMSFREE request cannot be
satisfied without extending FREELOWE below MAINHIGH, then DMSFREE will
take an error exit, indicating that storage is insufficient to satisfy
the Figure 27 shows the relationship of these storage areas.
The FREETAB free storage table is kept in free storage, usually in
low storage, just below the Master File Directory for the System Disk
(S-disk). However, the FREETAB may be located at the top of the user
program area. This table contains one byte for each page of virtual
storage. Each such byte contains a code indicating the use of that page
of virtcral storage. The codes in this table are as follows: USER COD E ( X ' 0 1 ' ) The page is assigned to user storage. NUCCODE (X'02') The page is assigned to nucleus storage. TRNCODE (X'03') The page is part of the transient program area. US ARCODE (X'04') The page is part of the user prog ram area. SYSCODE (X'OS') The page is none of the above. The page is assigned
to system storage, system code, or the loader
tables.
248 IBM VM/370 System Programmer's Guide
Page of GC20-1807-7 As Updated April 1, 1981 by TNL GN25-0829 OtheL DMSFREE storage pointers are maintained in the DMSFRT CSECT, in NUCON; The four chain header blocks are the most important fields in DMSFRT. The four chains of unallocated elements are: • The low storage nucleus chain • The low storage user chain • The high storage nucleus chain • The high storage user chain
For each of these chains of unallocated elements, there is a control
block consisting of four words, with the following format: POINTER NUM MAX FLAGS r 1 0(0) I I 4 (4)
8 (8)
12 (C)
i POINTER -- pointer to the first
free element on the chain
6
or
zero, if the chain is empty. ----I 1 1---- NUM -- the number of elements on
the chain. MAX -- a value equal to or grea ter
than the size of the largest
element. I I FLAGS- I SKEY I TCODE -I Unused Flag IStorage IFREETAB byte 1 key I code
1
points to the first element on this chain of free elements.
If there are no elements on this free chain, then the POINTER field contains all zeros.
contains the number of elements on this
elements. If there are no elements on this
this field contains all zeros.
chain of free
free chain, then
is used to avoid searches that will fail. It contains a
number equal to or greater than the size, in bytes, of the
largest element on the free chain. Thus, a search for an
element of a given size will not be made if that size exceeds
the MAX field. However, this number may actually be larger
than the size of the largest free element on the chain.
The following flags are used:
FLCLN (X'80') -- Clean-up flag. This flag is set if the chain
must be updated. This will be necessary in the following
circumstances: • If one of the two high storage chains contains a 4K page to
which FREELOWE points, then that page can be removed from
the chain, and FREELOWE can be increased. • All completely unallocated 4K -pa-g-€-s are kep-t on th-e user
chain, by convention. Thus, if one of the nucleus chains
(low storage or high storage) contains a full page, then
this page must be transferred to the corresponding user
chain. Part 3. Conversational Monitor System (CMS) 249
Previous Page Next Page