Programming Interface Information:
This information is NOT intended to be used as Programming Interfaces of z/VM. |
FRMTE
Control Block Contents
FRMTE DSECT
Cross Reference (Contains links to field and bit definitions)
FRMTE Prolog
NAME : HCPFRMTE DESCRIPTION: FRAME TABLE ENTRY DSECT : FRMTE FUNCTION : A FRAME TABLE ENTRY DESCRIBES ONE 4K ALIGNED BLOCK OF REAL STORAGE. LOCATED BY : PFXFTBL + (REAL FRAME ADDRESS / 4096 * 16) VMDFR1ST USER OWNED FRAME FORWARD ANCHOR VMDFRLST USER OWNED FRAME BACKWARD ANCHOR FRMFPNT FIELD OF HCPFRMTE FOR CHAINED FRAMES FRMBPNT FIELD OF HCPFRMTE FOR CHAINED FRAMES FRMFRNXT FREE STORAGE FRMTE FORWARD POINTER SUBANCH SUBBK FRMTE LIST ANCHOR CREATED BY : HCPIST ENTRIES INITIALIZED AT STORAGE INIT DELETED BY : NONE NOTES : THE FRMTES ARE CONTAINED IN THE FRAME TABLE. SPACE FOR THE FRAME TABLE IS RESERVED AT SYSGEN BY HCPGENER. THE SPACE FOR THE FRAME TABLE IS NEVER RELEASED. Serialized : The following serialization discussion generally applies to FRMTEs with pageable FRMCSB0 frame codes (that is, frames where the FRMUSER x'80' bit is on in FRMCSB3). Such FRMTEs are referred to as "pageable FRMTEs" in this discussion. Note that this includes most available frames (frames which have the FRMAVAIL bit set in FRMCSB3, whether they are actually on the global available list, one of the processor local available lists, or in some other "in transit" state), since the previous use frame codes are not changed while a frame is available. Pageable FRMTEs are serialized primarily by the four FRMTE serialization bits: FRMAVAIL, FRMTRANS, FRMRELSE, and FRMSTEAL, all in FRMCSWRD FRMCSB3. (The remaining four FRMCSB3 bits comprise FRMLTRCT, the frame last translated count. Interactions between FRMLTRCT and the FRMCSB3 serialization bits are covered below.) These four bits are essentially mutually exclusive spin locks. Under normal circumstances, they may be turned on *ONLY* one at a time and *ONLY* by a word concurrent interlocked instruction such as CS or CDS. That is, only *ONE* of the four bits is allowed to be on at any given time. If any one of the four serialization bits is on, none of the other three serialization bits may be turned on until it goes off, and no changes to the rest of the FRMTE are allowed by any task other than the one that currently "owns" the FRMTE (that is, the task that turned the current serialization bit on). Note while the four FRMTE serialization bits are somewhat similar to normal spin locks, they are unique in that the usual "no loss of control while a spin lock is held" rule does *NOT* necessarily apply. The reason for this exception is that FRMTEs may need to be left in these serialized states for long periods of time, so spin loops attempting to obtain pageable FRMTE serialization must only spin if the current state is known to be a "short term" state, and must take into consideration possible status changes in the remainder of FRMCSWRD (and possibly FRMPTE as well). Generally, only word concurrent interlocked instructions should be used to manipulate pageable FRMTEs' FRMCSB3. However, for performance reasons, there are special cases where a task which currently holds exclusive ownership of a FRMTE (by having turned one of the FRMCSB3 serialization bits on via CS or CDS) may release FRMTE serialization using a non-interlocked byte concurrent instruction, such as ST or NI. This technique is *ABSOLUTELY* dependent on mutual exclusivity of the four FRMCSB3 serialization bits, and use of word concurrent interlocked instructions in setting them on. A FRMCSB3 serialization bit may *ONLY* be turned off (regardless whether the instruction used is interlocked or not) if it is known without any doubt to be on and held by the running task. Turning an FRMCSB3 serialization bit which is already zero off *again* with a non-interlocked instruction such as NI "just in case" or to combine code paths is a dangerous exposure to lost FRMCSB3 updates. A FRMCSB3 serialization bit may *NOT* be turned off with a non-interlocked instruction such as NI if there is any possibility that any other task running on another processor might be attempting to increment or decrement FRMLTRCT (unless that other task will spin waiting for whatever FRMCSB3 serialization bit is currently on to be turned off). FRMLTRCT may only be updated with word concurrent interlocked instructions such as CS or CDS. The CS|CDS *MUST* insist that any FRMCSB3 serialization bits *NOT held by the running task be zero before attempting the update. FRMLTRCT may *NOT* be updated, even with CS or CDS, if any of the FRMCSB3 serialization bits could be changing state; either all four of the bits must be off, or one of them (typically FRMRELSE) *MUST* be on and held by the executing task across the FRMLTRCT change. This ensures that the running task sees the *RESULT* of any NI used to turn off any FRMCSB3 serialization bit that might have been held by a task running on another processor, and therefore prevents interleaving of processor fetches and stores with the execution of the NI on the other processor (and the attendant risk of lost FRMCSB3 updates). One additional requirement for FRMLTRCT is that when incrementing in the resident page software translation fast paths in HCPPTR (390) or HCPHTR (ESAME), the CS or CDS *MUST* require that FRMTRANS be off (that is, no other processor is performing long path translation for the frame); support for more than 14 host processors depends on this. Occasionally, FRMTEs which are not on any queue or associated with any active PTE are said to be under "task local" serialization. In this case, the assumption is that no other task can get the address of the FRMTE, since no other control structures point to it. However, it must *ALWAYS* be kept in mind that the frame table scan function in HCPALF can find *ANY* FRMTE, regardless of state, since it processes the entire frame table sequentially, looking for pageable FRMTEs which are in a "stealable" state. Therefore, this "task local" serialization technique is only valid for non-pageable FRMTEs, where FRMCSB3 FRMUSER (x'80')is off. Also, it should be kept in mind that frame table scan approaches frame and page serialization backwards from most other code, in that it attempts to get the lowest level serialization first by (conditionally) obtaining FRMSTEAL, and working up (again, conditionally) from there. Therefore, frame table scan must obtain all serialization conditionally, and be able to release all held serialization and abandon the current FRMTE, if any serialization conflict is encountered. Otherwise, deadlocks with tasks obtain serialization in the normal "top down" fashion will result. This discussion not meant to be an exhaustive definition of FRMTE serialization. There are special circumstances such as system initialization where these rules do not apply, and other non-pageable frame code types have their own serialization mechanisms depending on usage. There are also some special pageable frame code types (such as MDC related FRMTEs and pageable page table FRMTEs) which are bound by these rules but have additional special serialization mechanisms as well. There may well be places in the existing code which do not abide by these rules and are not yet known to have caused any problems, but any such instances should be thoroughly investigated. Any code that violates the FRMCSB3 serialization bit mutual exclusivity rule for pageable FRMTEs while the system is in a normal running state is very likely in error, though, and should be addressed as soon as possible. The reason for all of this paranoia is that FRMTE serialization problems (such as lost FRMCSB3 updates) are notoriously difficult to debug. FRMTE serialization errors usually lead to unpredictable (but invariably bad) results which typically do not cause external symptoms immediately. By the time external symptoms arise, most in-storage evidence of the root cause has usually been overwritten. Known typical symptoms of FRMTE serialization errors include incorrect FRMLTRCT values (causing LTR001 ABENDs or permanently and excessively last-translated "locked" pages), various loops and hangs, and MCW002 ABENDs, but other symptoms are quite possible.
FRMTE Control Block Content
FRMTE DSECT
Hex Dec Type/Val Lng Label (dup) Comments ---- ---- --------- ---- -------------- -------- 0000 0 Structure FRMTE FRAME TABLE ENTRY 0000 0 Signed 4 FRMORGIN (0) FRAME TABLE ENTRY ORIGIN 0000 0 Signed 4 FRMFPNT CHAINED FRAME FORWARD POINTER 0004 4 Signed 4 FRMBPNT CHAINED FRAME BACKWARD POINTER 0008 8 Signed 4 FRMPTE POINTER TO PAGE TABLE ENTRY. THE PTE ADDRESS IS THE SAME AS THE VPGTE ADDRESS FOR THE 4K BLOCK OF VIRTUAL STORAGE, BUT THE VPGTE IS A MORE CONVENIENT MAPPING. FRMPTE must be cleared whenever a frame is put on the global or local available list. 000C 12 Signed 4 FRMCSWRD FRAME STATUS BITS AND FLAGS. ALL BITS ARE CONTAINED IN A SINGLE FULLWORD SO THAT COMPARE AND SWAP CAN BE USED TO SERIALIZE FRAME STATE CHANGES. See the serialization section of this part prologue for a detailed discussion of FRMTE serialization rules. WARNING: Do *NOT* change any FRMTE serialization code without first *THOROUGHLY* understanding the FRMTE serialization rules 00000010 FRMLENTH *-FRMTE LENGTH OF FRAME TABLE ENTRY 0010 16 Signed 4 FRMNEXT (0) NEXT SEQUENTIAL ENTRY FRMBPNT IS SET BY HCPPTTFF (FRONT END OF FASTPATH PAGE FAULT PROCESSOR) TO INDICATE TO HCPPGXPL (BACK END OF FASTPATH PAGE PROCESSOR) WHAT TYPE OF PAGE FAULT OCCURED. FOR A PAGE FAULT SATISFIED BY PGIN OF AN XSTORE BLOCK FROM A NON-ALTERNATE PGMBK, THE XSTORE BLOCK NUMBER IS STORED IN FRMBPNT. IF THE VALUE IN FRMBNTP IS GREATER THAN X'FFFFFFFC', NO XSTORE BLOCK WAS INVOLVED AND FRMBFLAG WILL INDICATE THE TYPE OF PAGE FAULT THAT TOOK PLACE. 0004 4 Bitstring 1 * (3) 0007 7 Bitstring 1 FRMBFLAG FASTPATH STATUS FLAG 1111 11.1 FRMALTMV X'FD' PAGE IN FRAME WAS MOVED FROM A PAGE FOUND IN AN ALTERNATE PGMBK 1111 111. FRMALTPG X'FE' PAGE IN FRAME WAS PGIN'D FROM AN XSTORE BLOCK FOUND IN AN ALTERNATE PGMBK 1111 1111 FRMFTPF X'FF' PAGE IN FRAME WAS CLEARED TO SATISFY A FIRST TIME PAGE FAULT THESE BITS ARE STATIC FRAME FLAG BITS Redefinition for Minidisk Cache (FTC). 0000 0 Signed 4 * Not redefined for MDC, original field name, FRMFPNT, used 0004 4 Signed 2 FRMTCSTE Offset within MDC segment table to the SEGTE that this segment represents (Page table pages only) 0006 6 Bitstring 1 FRMPSCT Count of free PTE sets. Used in garbage collection only. (Page table pages only and must be initialized to 0) 0007 7 Bitstring 1 FRMASSEL Address space selector bits 11.. .... TCHASPAC X'C0' These bits identify the address space used for caching Note: TCMALMSK and TCMALSHF depend on these bits ..11 1111 TCHIXMSK X'3F' Bits to hold DPSBK index See also TCMIXMSK. 0008 8 Signed 4 FRMSTO STO for this address space (Segment table pages only) 000C 12 Signed 4 * May not be redefined for use in any way by MDC. Original field name, FRMCSWRD, and subdefinitions are used. 0008 8 Signed 2 FRMPS1ST First PTE set queued on frame for MDC garbage collection. (Page table pages only. Must be initialized to 0 when frame is allocated as a page table.) 000A 10 Signed 2 FRMPSLST Last PTE set queued on frame for MDC garbage collection. (Page table pages only. Must be initialized to 0 when frame is allocated as a page table.) 0008 8 Signed 4 FRMDCKEY MDC hash key here for MDC frames End of redefinition for Minidisk Cache (FTC). The codes that include the x'01' in their definition are a function of the FRMCP bit and are considered to be CP frames. Only frames with FRMCP bit on are included in a CP dump. An exception is VDISK frames, identified by frame code x'C3' (FRMSUTIL + x'40'), which are CP System Utility address space frames, and are CP owned and managed, but contain user data, and are therefore *NOT* included in CP dumps. The codes that include the X'02' in their definition are a function of the FRMDS bit and are considered to be data space frames. FRMDS bit is only allowed to be used to combine with FRMUSER or FRMSUSER and FRMCP to form FRMDTSP or FRMSUTIL. USER FRAMES ARE ASSOCIATED WITH EACH OTHER BY THE X'80' BIT. FRMPPGM IS IDENTIFIED BY THE X'80' BIT AS PAGEABLE FRMNPGM AND FRMPPGM ARE ASSOCIATED WITH EACH OTHER BY THE X'50' BITS. FREE STORAGE FRAMES ARE ASSOCIATED WITH EACH OTHER BY THE X'60' BITS. Notes : Any new frame code that contains the X'61' bits must be a type of free storage frame. There are places in the system that check for the X'61' bits to determine whether or not a frame is a free storage frame. All Mini-Disk Cache frame codes have the X'08' bit set (Notes : other frames codes that are not MDC may also use the x'08' bit). FRMFTADD is identified as pageable by the X'80' bit. The code X'FF' is never a valid frame usage code in FRMCSB0. FRMNEVER is available to test whether a value is a frame usage code or not. For example, whether a parameter passed in SAVER2B3 is a frame usage code or not. 000C 12 Bitstring 1 FRMCSB0 COMPARE AND SWAP WORD BYTE 0. COMPARE AND SWAP NOT NECESSARILY REQUIRED TO ALTER THESE BITS. 00000005 FRMNOTI X'05' Frame is not initialized. TB/SSKE/ISKE has not been issued against this frame. 00000009 FRMFTTBL X'09' Frame used for MDC segment or page table. 0000000D FRMMDCHT X'0D' Frame used for MDC hash table. 00000010 FRMOFFLN X'10' FRAME IS OFF-LINE AND UNAVAILABLE 00000040 FRMVR X'40' VIRTUAL = REAL USER FRAME 00000051 FRMNPGM X'51' Frame is a non-pageable pgmbk .* 00000051 FRMNPGM1 FRMNPGM First frame of an ESAME non-pageable PGMBK 00000055 FRMNPGM2 X'55' Second fame of and ESAME non-pageable PGMBK .* SAVE AREA FRAME 00000063 FRMFRVR X'63' FRAME IN USE FOR V=R FREE STORAGE 00000065 FRMFRVM X'65' FRAME USED FOR USER VMDBK FREE Note that if the first (lowest address) block in the frame is not available (that is, is not on the FRMCHAIN chain of available blocks and does not have an active free storage header), it may be an active segment table. 00000067 FRMFRSY X'67' FRAME USED FOR SYSTEM FREE 00000069 FRMAFS X'69' FRAME USED FOR ALIGNED FREE STORAGE 0000006B FRMVCB X'6B' FRAME USED FOR VERIFIABLE CONTROL BLOCK FREE STORAGE 0000006F FRMPERSY X'6F' Frame used for PERSYS (Persistent SYSPERM) free storage 00000082 FRMDTSP X'82' Frame used for a user's data space page 00000083 FRMSUTIL X'83' FRAME USED FOR CP UTILITY ADDRESS SPACE PAGE 00000088 FRMFTADD X'88' Frame is part of the MDC address space. It contains user data. 000000C3 FRMSVDSK X'C3' Frame used for VDISK System Utility address space page 000000D1 FRMPPGM X'D1' Frame is a pageable PGMBK .* 000000D1 FRMPPGM1 FRMPPGM First frame of an ESAME pageable PGMBK 000000D5 FRMPPGM2 X'D5' Second fame of and ESAME pageable PGMBK .* 0000007D FRMPDISO X'7D' Isolate FRMUSER and FRMDTSP fields of FRMCSB0. This is done to allow code to test, for either FRMUSER *or* FRMDTSP being on with one instruction. 000000FF FRMNEVER X'FF' Equate to reserve a value which will never be a valid frame usage code. 00000001 FRMCP X'01' FRAME IN USE BY CONTROL PROGRAM 00000021 FRMTRACE X'21' CP TRACE TABLE FRAME 00000031 FRMPRFX X'31' PREFIX PAGE FRAME 00000061 FRMFREE X'61' FRAME USED FOR FREE STORAGE OR SAVE AREA FRAME 00000080 FRMUSER X'80' FRAME USED AS USER PAGE 00000081 FRMSUSER X'81' IN USE AS SYSTEM VIRTUAL PAGE 000001FD FREMX 509 Maximum number of double-words . that can be obtained without . requiring full-page request. . This value should be the . same as that calculated and . stored in HCPFREMX. 00000FE8 FREMXB FREMX*8 Maximum number of bytes that can . be obtained without . requiring full-page request. THESE CODES ARE PRIMARILY STATIC FRAME USE CODES THE FOLLOWING FRAMES CAN BE STOLEN BY THE STEAL TASK: FRMUSER - BOTH PRIVATE AND SHARED FRAMES. FRMDTSP - Data space frames (private and shared). FRMSUSER - SYSTEM USED FRAMES. FRMSUTIL - SYSTEM UTILITY FRAMES. FRMPPGM - PAGEABLE PGMBK BLOCKS. The following frames can be stolen by the Mini-Disk Cache (MDC) steal task: FRMFTADD - Mini-Disk Cache address space pages. ALL THE REST CANNOT BE STOLEN. 000D 13 Bitstring 1 FRMCSB1 COMPARE AND SWAP WORD BYTE 1. COMPARE AND SWAP NOT NECESSARILY REQUIRED TO ALTER THESE BITS. 1... .... FRMLOCKD X'80' FRAME IS LOCKED IN REAL STORAGE (FRMLCNT IS GREATER THAN ZERO) .1.. .... FRMCPLOK X'40' FRAME LOCKED BY CP LOCK COMMAND (FRAME IS PART OF CP NUCLEUS) ..1. .... FRMOWNED X'20' FRAME IS ON A USER OWNED LIST ...1 .... FRMSHARE X'10' FRAME IS SHARED STORAGE FRAME .... 1... FRMRONLY X'08' Frame is a read only frame (e.g., the frame is being used to back a read only page, PAGPROT should be set in the associated PTE pointed to by FRMPTE) .... ..1. FRMONQUE X'02' FRAME IS CURRENTLY ON A QUEUE OR LIST. CHECK THE FRAME CODE TO DETERMINE WHAT QUEUE THE FRAME IS ON. FRMFRSY - THE SYSTEM FREE STORAGE FRAMES QUEUE. FRMFRVM - THE VMDBK FREE STORAGE FRAMES QUEUE. FRMPPGM - THE DEFERRED PGMBK PAGING LIST OR THE PAGED PGMBK AGING LIST FRMNPGM - THE LIST OF FRMTE'S CONTAINING PREVIOUSLY DEALLOCATED PTRM PTE'S BELOW CURRENT POINTER. .... ...1 FRMERROR X'01' FRAME IS IN ERROR (STORAGE CHECK) THESE BITS ARE PRIMARILY STATIC FRAME FLAG BITS 000E 14 Bitstring 1 FRMCSB2 COMPARE AND SWAP WORD BYTE 2. COMPARE AND SWAP NOT NECESSARILY REQUIRED TO ALTER THESE BITS. 1... .... FRMFXASA X'80' Indicates PTE associated with this FRMTE has a fixed ASA. This flag is used by slot alloc (HCPPGT) to keep track of which FRMTEs need ASAs. ..1. .... FRMRFRSH X'20' Frame data is invalid. The frame must be refreshed before being used. .... ...1 FRMLAVL X'01' FRAME RESIDES ON LOCAL AVAILABLE LIST. THIS BIT CAN ONLY BE ON FOR FRAMES MARKED AS AVAILABLE (FRMAVAIL BIT IS ON.) FRAMES RESIDE ON THE GLOBAL AVAILABLE LIST WHEN THE FRMAVAIL BIT IS ON AND THE FRMLAVL BIT IS OFF. THESE BITS DENOTE DYNAMIC FRAME STATES FRMCSB3 FRMTE serialization byte. Contains the four mutually exclusive FRMTE serialization bits and also the four bit frame last translated count. See the serialization section of this part prologue for a detailed discussion of FRMTE serialization rules. WARNING: Do *NOT* change any FRMTE serialization code without first *THOROUGHLY* understanding the FRMTE serialization rules!!!!!!!!!!!!!!!!!!! 000F 15 Bitstring 1 FRMCSB3 COMPARE AND SWAP WORD BYTE 3. 1... .... FRMAVAIL X'80' Frame is on the global available list, local available list, or the processor-local processed list. FRMPTE must be cleared and FRMAVAIL must be set to one when a frame is on the global available list. FRMPTE must be cleared plus FRMAVAIL, FRMLAVAL, and FRMUSER must be set to one when a frame is on the local available list. FRMPTE must be non-zero plus FRMAVAIL, FRMLAVL, and FRMUSER must be set to one when a frame is on the processor local processed list. .1.. .... FRMTRANS X'40' FRAME IS BEING TRANSLATED ..1. .... FRMRELSE X'20' FRAME IS BEING RELEASED ...1 .... FRMSTEAL X'10' FRAME IS BEING STOLEN NOTE. THIS STATE (FRMSTEAL) IS SOMETIMES USED IN LIEU OF FRMLOCKD IN SITUATIONS WHERE IT IS NOT FEASABLE TO USE THE LOCKED FRAME INTERFACE. AN EXAMPLE IS HCPPAF SAVING PAGES ON BEHALF OF A GUEST REQUEST. .... 1111 FRMLTRCT X'0F' Frame last translated count. These four bits are the count of CPUs which have this FRMTE as last translated. If any of these bits are one, the frame cannot be stolen. This equate is used as a mask to isolate the 4 bit frame last translated count. The maximum value (currently 14) of this count represents the maximum number of CPUs on which a given frame may be concurrently last translated, but does *NOT constitute an upper limit on the number of concurrently online CPUs supported. FRMLTRCT can only be non-zero in FRMTEs which represent frames below the 2G line (addressable via 31 bit addresses) as we never allow manual translation of pages to frames above the 2G line; all host real or absolute addresses returned by manual translation are 31 bit addresses (below 2G). FRMLTRCT for an architecturally attached frame (pointed to by a a valid and attached PTE) is maintained ONLY via interlocked instructions such as CS or CDS; any task which is updating FRMLTRCT must require either that all of the four FRMCSB3 serialization bits (FRMAVAIL, FRMTRANS, FRMRELSE, FRMSTEAL) be off and stay off, or that one and only of them, if known to be held by the current task (typically FRMRELSE) is on and stays on. When the resident page software translation fast paths in HCPPTR (390) or HCPHTR (ESAME) increment FRMLTRCT, there is a further requirement that FRMTRANS must be off and stay off (support for more than 14 host processors dependends on this). .... 1... FRMLTRHI X'08' High order bit of the frame last translated count. Used in masks when incrementing FRMLTRCT to take longer path for FRMTLRCT values greater than 7 (b'0111') .... 111. FRMLTRMX X'0E' Maximum allowable value of the frame last translated count. Used when incrementing FRMLTRCT, in longer path. END OF DEFINITION FOR FRAME TABLE ENTRIES THESE BITS ARE USED TO SERIALIZE FRAME STATE CHANGES REDEFINITION FOR FRAMES THAT ARE NOT CHAINED. 0000 0 Signed 4 FRMID 4 CHARACTER IDENTIFIER IDENTIFIERS USED IN FRMID THESE IDENTIFIERS ARE FOR VISUAL RECOGNITION AND ARE NOT INTENDED TO BE USED AS FLAGS. '*CP*' FRAME IN USE BY CONTROL PROGRAM 'TRAC' CP TRACE TABLE PAGE 'FREE' FRAME IN USE FOR FREE STORAGE 'SAVE' FRAME IN USE BY SAVE AREA MANAGER '*VR*' VIRTUAL = REAL USER FRAME 'FRVR' FRAME IN USE FOR V=R FREE STORAGE 'OFLN' FRAME IS OFF-LINE AND UNAVAILABLE 'PRFX' PREFIX PAGE FRAME ' ' LOCKED USER FRAME 'PPGM' PAGEABLE PGMBK 'NPGM' NON-PAGEABLE PGMBK 'AFS ' ALIGNED FREE STORAGE 'VCB ' VERIFIABLE CONTROL BLOCK 'FTBL' Frame Table frame '*RFT' Host Region First Table frame '*RST' Host Region Second Table frame '*RTT' Host Region Third Table frame '*SEG' Host Segment Table frame Eyecatchers *RTF, *RST, *RTT, and *SEG are only used in the ESAME build of CP. Note that FRMCSB0 still == FRMCP for FRMTEs marked with *RTF, *RTS, *RTT, and *SEG eyecatchers 0004 4 Signed 4 FRMLKCNT FRAME LOCK COUNT 0008 8 Signed 4 * 000C 12 Signed 4 * FRMCSWRD (FLAGS AND STATUS BITS) REDEFINITION FOR FREE STORAGE FRAMES. 0000 0 Signed 4 FRMFRNXT NEXT FRMTE WITH AVAILABLE BLOCKS 0004 4 Signed 2 FRMDHTOD TOD TIME STAMP (SECS) 0004 4 Signed 2 FRMVMFRG FRAGMENT SIZE WHEN USED BY FREVM 0006 6 Signed 2 FRMDWUSE DOUBLE WORDS OF STORAGE IN USE 0008 8 Address 4 FRMCHN POINTER TO FIRST FREE STORAGE AVAILABLE BLOCK IN THIS FRAME. THIS FIELD IS ALSO USED WHEN CONTIGUOUS FRAMES ARE ALLOCATED AND RELEASED BY HCPPTEMF AND HCPPTECR RESPECTIVELY. WHEN USED FOR THIS REASON, FRMCHN WILL CONTAIN A NUMBER INDICATING THE TOTAL NUMBER OF CONTIGUOUS FRAMES IN A CONTIGUOUS SET (FROM LOWEST TO HIGHEST FRMTE ADDRESS.) An allocated single frame may have a FRMCHN value of zero (indicating it was allocated via HCPPTFGF) or one (indicating it was allocated via HCPPTEMF). ALSO, THE LEFT-MOST 2 BYTES OF THIS FIELD CONTAIN THE OFFSET OF THE FIRST FREE PAGE TABLE ENTRY AVAILABLE IN THIS FRAME (FOR NON PAGEABLE PGMBK FRAMES ONLY - NPGM) WHICH WERE PREVIOUSLY DEALLOCATED. 000C 12 Signed 4 * FRMCSWRD (FLAGS AND STATUS BITS) FRMCHN redefinitions used by fast subpooled free storage garbage collection (HCPFRFDX): Note that fast subpooled free storage frames do not otherwise use the typical free storage frame queueing techniques except during garbage collection processing (HCPFRFDX, SUBMTFTE queue, etc.). This means that FRMONQUE gets set even when subpooled free storage FRMTEs aren't on any queue. 0008 8 Signed 2 FRMBCT Count of returned blocks 000A 10 Signed 2 FRMLAST Last block queued Redefinition for host DAT (region/segment) table frames 0000 0 Signed 4 * FRMID: eyecatcher, see FRMID definition above 0004 4 Signed 4 FRMHDPBK Pointer to Host DAT table Programming area block for the DAT table associated with this frame. Filled in for each FRMTE for multi-frame DAT tables. 0008 8 Signed 4 * FRMCHN: for multi-frame host DAT tables, contains the number of contiguous frames starting at and including this frame, by ascending address 000C 12 Signed 4 * FRMCSWRD: as above
FRMTE Storage Layout
*** FRMTE - FRAME TABLE ENTRY * * +---------------------------+---------------------------+ * 0 | FRMFPNT | FRMBPNT | * +---------------------------+---------------------------+ * 8 | FRMPTE | FRMCSWRD | * +---------------------------+---------------------------+ * *** FRMTE - FRAME TABLE ENTRY *** Overlay for FRMBPNT in FRMTE * * +--------------------+------+ * 0 ... 4 |////////////////////|:BFLAG| * +--------------------+------+ * 8 * *** Overlay for FRMBPNT in FRMTE *** Overlay for FRMFPNT in FRMTE * * +---------------------------+-------------+------+------+ * 0 |///////////////////////////| FRMTCSTE |:PSCT |:ASSEL| * +---------------------------+-------------+------+------+ * 8 | FRMSTO |///////////////////////////| * +---------------------------+---------------------------+ * 10 * *** Overlay for FRMFPNT in FRMTE *** Overlay for FRMPTE in FRMTE * * +-------------+-------------+ * 8 | FRMPS1ST | FRMPSLST | C * +-------------+-------------+ * *** Overlay for FRMPTE in FRMTE *** Overlay for FRMPTE in FRMTE * * +---------------------------+ * 8 | FRMDCKEY | C * +---------------------------+ * *** Overlay for FRMPTE in FRMTE *** Overlay for FRMCSWRD in FRMTE * * +------+------+------+------+ * 8 ... C |:CSB0 |:CSB1 |:CSB2 |:CSB3 | * +------+------+------+------+ * 10 * *** Overlay for FRMCSWRD in FRMTE *** Overlay for FRMORGIN in FRMTE * * +---------------------------+---------------------------+ * 0 | FRMID | FRMLKCNT | * +---------------------------+---------------------------+ * 8 |///////////////////////////|///////////////////////////| * +---------------------------+---------------------------+ * 10 * *** Overlay for FRMORGIN in FRMTE *** Overlay for FRMORGIN in FRMTE * * +---------------------------+-------------+ * 0 | FRMFRNXT | FRMDHTOD | 6 * +---------------------------+-------------+ * *** Overlay for FRMORGIN in FRMTE *** Overlay for FRMDHTOD in FRMTE * * +-------------+-------------+ * 0 ... 4 | FRMVMFRG | FRMDWUSE | * +---------------------------+-------------+-------------+ * 8 | FRMCHN |///////////////////////////| * +---------------------------+---------------------------+ * 10 * *** Overlay for FRMDHTOD in FRMTE *** Overlay for FRMCHN in FRMTE * * +-------------+-------------+ * 8 | FRMBCT | FRMLAST | C * +-------------+-------------+ * *** Overlay for FRMCHN in FRMTE *** Overlay for FRMORGIN in FRMTE * * +---------------------------+---------------------------+ * 0 |///////////////////////////| FRMHDPBK | * +---------------------------+---------------------------+ * 8 |///////////////////////////|///////////////////////////| * +---------------------------+---------------------------+ * 10 * *** Overlay for FRMORGIN in FRMTE
FRMTE Cross Reference
Symbol Dspl Value -------------- ---- ----- FREMX 000C 000001FD FREMXB 000C 00000FE8 FRMAFS 000C 00000069 FRMALTMV 0007 FD FRMALTPG 0007 FE FRMASSEL 0007 FRMAVAIL 000F 80 FRMBCT 0008 FRMBFLAG 0007 FRMBPNT 0004 FRMCHN 0008 FRMCP 000C 00000001 FRMCPLOK 000D 40 FRMCSB0 000C FRMCSB1 000D FRMCSB2 000E FRMCSB3 000F FRMCSWRD 000C FRMDCKEY 0008 FRMDHTOD 0004 FRMDTSP 000C 00000082 FRMDWUSE 0006 FRMERROR 000D 01 FRMFPNT 0000 FRMFREE 000C 00000061 FRMFRNXT 0000 FRMFRSY 000C 00000067 FRMFRVM 000C 00000065 FRMFRVR 000C 00000063 FRMFTADD 000C 00000088 FRMFTPF 0007 FF FRMFTTBL 000C 00000009 FRMFXASA 000E 80 FRMHDPBK 0004 FRMID 0000 FRMLAST 000A FRMLAVL 000E 01 FRMLENTH 000C 00000010 FRMLKCNT 0004 FRMLOCKD 000D 80 FRMLTRCT 000F 0F FRMLTRHI 000F 08 FRMLTRMX 000F 0E FRMMDCHT 000C 0000000D FRMNEVER 000C 000000FF FRMNEXT 0010 FRMNOTI 000C 00000005 FRMNPGM 000C 00000051 FRMNPGM1 000C 00000051 FRMNPGM2 000C 00000055 FRMOFFLN 000C 00000010 FRMONQUE 000D 02 FRMORGIN 0000 FRMOWNED 000D 20 FRMPDISO 000C 0000007D FRMPERSY 000C 0000006F FRMPPGM 000C 000000D1 FRMPPGM1 000C 000000D1 FRMPPGM2 000C 000000D5 FRMPRFX 000C 00000031 FRMPSCT 0006 FRMPSLST 000A FRMPS1ST 0008 FRMPTE 0008 FRMRELSE 000F 20 FRMRFRSH 000E 20 FRMRONLY 000D 08 FRMSHARE 000D 10 FRMSTEAL 000F 10 FRMSTO 0008 FRMSUSER 000C 00000081 FRMSUTIL 000C 00000083 FRMSVDSK 000C 000000C3 FRMTCSTE 0004 FRMTRACE 000C 00000021 FRMTRANS 000F 40 FRMUSER 000C 00000080 FRMVCB 000C 0000006B FRMVMFRG 0004 FRMVR 000C 00000040 TCHASPAC 0007 C0 TCHIXMSK 0007 3F
Copyright IBM Corporation, 1990, 2001