DIRECTORY BcdDefs USING [MTIndex], LoadState USING [BcdBase, CopiesList, GlobalFrameHandle, ModuleIndex, Type]; LoadStateFormat: DEFINITIONS = BEGIN OPEN LoadState; Handle: TYPE = REF Object; Object: TYPE = RECORD [ -- concrete version of LoadState.Object useCount: INTEGER, -- -1 = exclusive, 0 = not in use, >0 = shared changeCount: INT _ 0, configTable: REF ConfigTable, -- -> gf mapping copyTable: REF CopyTable, collisionTable: REF CollisionTable, -- gfht: ARRAY HashIndex OF Entry -- gf -> mapping ]; htSize: NAT = 1019; HashIndex: TYPE = NAT[0..htSize); EntryType: TYPE = {empty, collision, copy, original}; Entry: TYPE = RECORD [ SELECT type: EntryType FROM empty => NULL, collision => [list: CollisionTableIndex], -- appears only in hash table copy => [ copyIndex: CopyIndex, gfh: GlobalFrameHandle -- superfluous if Entry is in hash table ], original => [ copyIndex: ShortCopyIndex, configID: ConfigID, module: ModuleIndex ], ENDCASE ]; ConfigID: TYPE = NAT[0..256); CollisionTableIndex: TYPE = NAT; CollisionTable: TYPE = RECORD [ nCollisions: CollisionTableIndex, collisions: SEQUENCE length: CollisionTableIndex OF CollisionList ]; CollisionList: TYPE = LIST OF Entry; ConfigTable: TYPE = RECORD [ nConfigs: NAT, configs: SEQUENCE length: NAT OF Config ]; Config: TYPE = REF ConfigObject; ConfigObject: TYPE = RECORD [ bcd: BcdBase, ref: REF ANY, nModules: NAT, modules: SEQUENCE length: NAT OF ModuleEntry -- replicated entries for multi-gft modules ]; ModuleEntry: TYPE = RECORD [ mti: BcdDefs.MTIndex, gfh: GlobalFrameHandle, type: Type ]; CopyIndex: TYPE = NAT[0..37777B]; -- packs with EntryType in a word ShortCopyIndex: TYPE = NAT[0..77B]; -- packs with EntryType and ConfigID into a word nullCopyIndex: CopyIndex = 0; fuzzyCopyIndex: CopyIndex = ShortCopyIndex.LAST; CopyTable: TYPE = RECORD [ nCopies: CopyIndex, copies: SEQUENCE length: NAT OF CopyEntry ]; CopyEntry: TYPE = RECORD [ parent: GlobalFrameHandle, copies: CopiesList ]; END. €LoadStateFormat.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Levin on August 9, 1983 5:00 pm Russ Atkinson (RRA) February 1, 1985 5:00:29 pm PST Doug Wyatt, February 27, 1985 10:07:40 am PST Selection criteria: prime expected number of modules / htsize ~= 1 SIZE[Entry]*htSize-3*SIZE[REF] is nearly a multiple of the virtual memory page size. This is arranged to occupy a maximum of two words ΚI˜codešœ™Kšœ Οmœ1™