<> <> <> <> <> DIRECTORY Rope USING[ROPE], YggEnvironment USING[DID, PageCount, PageNumber, PageRun], YggInternal USING[FileHandle]; YggFilePageMgr: CEDAR DEFINITIONS = BEGIN VMPageSet: TYPE = RECORD [ pages: LONG POINTER, pageRun: YggEnvironment.PageRun, refChunk: PRIVATE RefChunk]; <> nullVMPageSet: VMPageSet = [NIL, [0, 0], NIL]; RefChunk: TYPE = REF Chunk; Chunk: TYPE; <> < GetSize[fileHandle] except that the ReadAhead procedures just stop and return when PageRunExtendsPastEof is encountered. No proc returns a VMPageSet with count = 0. >> ReadPages: PROCEDURE [fileHandle: YggInternal.FileHandle, pageRun: YggEnvironment.PageRun] RETURNS [vMPageSet: VMPageSet]; <> <> ReadAheadPages: PROCEDURE[fileHandle: YggInternal.FileHandle, pageRun: YggEnvironment.PageRun]; <> <> UsePages: PROCEDURE [fileHandle: YggInternal.FileHandle, pageRun: YggEnvironment.PageRun] RETURNS [vMPageSet: VMPageSet]; <> <> ReadLogPages: PROCEDURE [fileHandle: YggInternal.FileHandle, pageRun: YggEnvironment.PageRun] RETURNS [vMPageSet: VMPageSet]; <> ReadAheadLogPages: PROCEDURE[fileHandle: YggInternal.FileHandle, pageRun: YggEnvironment.PageRun]; <> UseLogPages: PROCEDURE [fileHandle: YggInternal.FileHandle, pageRun: YggEnvironment.PageRun] RETURNS [vMPageSet: VMPageSet]; <> ShareVMPageSet: PROCEDURE [vMPageSet: VMPageSet]; <> <> ReleaseVMPageSet: PROCEDURE [vMPageSet: VMPageSet, releaseState: ReleaseState, keep: BOOLEAN]; <> ReleaseState: TYPE = {writeIndividualWait, writeBatchedWait, writeIndividualNoWait, writeBatchedNoWait, clean}; DirtyReleaseState: TYPE = ReleaseState[writeIndividualWait..writeBatchedNoWait]; DirtyWaitReleaseState: TYPE = ReleaseState[writeIndividualWait..writeBatchedWait]; DirtyNoWaitReleaseState: TYPE = ReleaseState[writeIndividualNoWait..writeBatchedNoWait]; <> ForceOutVMPageSet: PROCEDURE [vMPageSet: VMPageSet]; <> <> ForceOutFile: PROCEDURE [fileHandle: YggInternal.FileHandle]; <> <> ForceOutEverything: PROCEDURE; <> <> Create: PROCEDURE [did: YggEnvironment.DID, filePart: Rope.ROPE, initialSize: YggEnvironment.PageCount]; <> <> Delete: PROCEDURE [fileHandle: YggInternal.FileHandle]; <> FileExists: PROCEDURE [fileHandle: YggInternal.FileHandle] RETURNS [fileExists: BOOLEAN]; <> GetSize: PROCEDURE [fileHandle: YggInternal.FileHandle] RETURNS [size: YggEnvironment.PageCount]; <> <> SetSize: PROCEDURE [fileHandle: YggInternal.FileHandle, size: YggEnvironment.PageCount]; <> <> CheckPointOccuring: PROC [checkPointEpoch: NAT _ 1, expectedSecondsToNextCheckpoint: NAT _ 300] RETURNS [oldestEpochWithDirtyUnwrittenPages: NAT _ 1]; <> InitializeFilePageMgr: PROCEDURE[nNormalChunksInCache: NAT _ 20, nLogChunksInCache: NAT _ 20, checkPointEpoch: NAT _ 1]; <> RestoreCacheToCleanState: PROCEDURE; <> <> <> InsufficientSpaceOnVolume: -- ABSTRACTION -- ERROR; VolumeTooFragmented: -- ABSTRACTION -- ERROR; VolumeWentOffline: -- ABSTRACTION -- ERROR; NoSuchFile: -- CALLING -- ERROR; NoSuchVolume: -- CALLING -- ERROR; PageRunArgIllegal: -- CALLING -- ERROR; PageRunExtendsPastEof: -- CALLING -- ERROR; SizeArgIllegal: -- CALLING -- ERROR; END. Edit Log Initial: Kolling: 26-Jan-82 14:13:06: defs file for the File Page Manager which sits between the rest of Alpine and Pilot. Changed by MBrown on August 16, 1982 2:10 pm <> <<>> Nodified: by Hauser on February 19, 1985 4:30:38 pm PST <> <> <<>> <<>>