-- RTStorageAccounting.Mesa -- last edited January 14, 1983 9:06 am by Paul Rovner DIRECTORY PSB USING[PsbIndex], RTRefCounts USING[InternalReclaim], RTOS USING[GetCurrent]; RTStorageAccounting: DEFINITIONS IMPORTS RTOS, RTRefCounts = BEGIN -- TYPES PSBIMap: TYPE = RECORD[elements: SEQUENCE maxLength: CARDINAL OF CellCount]; CellCount: TYPE = RECORD[total, current: LONG INTEGER]; -- CONSTANTS defaultCollectionInterval: LONG CARDINAL = 40000B; -- VARIABLES nWordsRequested: LONG CARDINAL; nWordsAllocated: LONG CARDINAL; SUMnWordsAllocated: LONG CARDINAL; nObjectsCreated: LONG CARDINAL; MapPsbiToWordsAllocated: LONG POINTER TO PSBIMap; CollectionInterval: LONG INTEGER; SuspensionThreshold: LONG INTEGER; AllocatorCallbackProcForSpy: UNSPECIFIED; -- YAAAAAAAAAAHHHHRRRRRGGGGGHHHH --PROCS ResetNWordsAllocated: PROC; ResetTotalNWordsAllocatedOnly: PROC; ConsiderCollection: PROC[requestedWords, suppliedWords: LONG CARDINAL] = INLINE {psbi: PSB.PsbIndex = RTOS.GetCurrent[]; nw: LONG INTEGER _ MapPsbiToWordsAllocated.elements[psbi].current + suppliedWords; MapPsbiToWordsAllocated.elements[psbi].current _ nw; nWordsAllocated _ nWordsAllocated + suppliedWords; -- total count for all processes since the last colection nWordsRequested _ nWordsRequested + requestedWords; -- total count for all processes IF LOOPHOLE[nWordsAllocated, INT] >= CollectionInterval THEN RTRefCounts.InternalReclaim[allocationInterval, nw > SuspensionThreshold]}; END. Κ/– "Mesa" style˜Iprocš|ΟcSœΟk œžœžœžœžœžœ$ž œžœžœžœ œ žœžœ žœ žœžœžœžœžœžœ œžœžœ  œžœžœžœžœžœžœžœžœžœžœžœ!žœžœžœžœ"ž œ!œœΟnœžœŸœžœŸœžœ ž œžœ žœ žœžœžœΊ:œ:!œ žœžœžœžœ}žœ˜· —…—:o