-- file GlobalStorage -- edited by Levin, September 8, 1980 4:37 PM -- edited by Schroeder, August 23, 1978 2:38 PM -- edited by Brotz, September 10, 1980 12:16 PM -- Global Storage Division - the memory czar. This division provides the memory space -- needed by other divisions by interfacing with the Mesa runtime storage allocator. DIRECTORY ControlDefs: FROM "ControlDefs", FrameDefs: FROM "FrameDefs", FrameOps: FROM "FrameOps", gsD: FROM "GlobalStorageDefs", SegmentDefs: FROM "SegmentDefs", SystemDefs: FROM "SystemDefs"; GlobalStorage: PROGRAM IMPORTS FrameDefs, FrameOps, SegmentDefs, SystemDefs EXPORTS gsD SHARES gsD = PUBLIC BEGIN OPEN gsD; flusherEnabled: BOOLEAN _ TRUE; GetMemoryPages: PROCEDURE [numPages: CARDINAL] RETURNS [mp: MemoryPagePtr] = -- Obtains numPages contiguous memory page and returns a pointer to the start of these -- pages to the caller. BEGIN mp _ SystemDefs.AllocateResidentPages[numPages]; SegmentDefs.VMtoDataSegment[mp].type _ gsD.storageType; END; -- of GetMemoryPages -- ReturnMemoryPages: PROCEDURE [numPages: CARDINAL, page: MemoryPagePtr] = -- Accepts the memory pages back into the storage pool. BEGIN SystemDefs.FreePages[page]; END; -- of ReturnMemoryPages -- FlushCodeSegments: PROCEDURE = BEGIN ClearItOut: PROCEDURE [gFH: ControlDefs.GlobalFrameHandle] RETURNS [BOOLEAN] = BEGIN IF FrameOps.CodeHandle[gFH].lock = 0 THEN FrameDefs.SwapOutCode[gFH]; RETURN [FALSE]; END; -- of ClearItOut -- IF flusherEnabled THEN [] _ FrameDefs.EnumerateGlobalFrames[ClearItOut]; END; -- FlushCodeSegments -- DisableFlusher: PROCEDURE = {flusherEnabled _ FALSE}; EnableFlusher: PROCEDURE = {flusherEnabled _ TRUE}; END. -- of GlobalStorage --z20461(529)\f1