DIRECTORY Mach, YggEnvironment, YggFile, YggLog, YggRestartFile; YggRestartFileImpl: CEDAR MONITOR IMPORTS Mach EXPORTS YggRestartFile = BEGIN RecordID: TYPE = YggLog.RecordID; WordNumber: TYPE = YggEnvironment.WordNumber; ReadRestartRecord: PUBLIC ENTRY PROC [] RETURNS [recordIDForCheckpointCompleteRecord: RecordID] ~ { mappedAddress: Mach.vmAddressT; kernCode: Mach.kernReturnT; pointerToCards: LONG POINTER TO ARRAY [0..3] OF CARD32; [mappedAddress: mappedAddress, kernCode: kernCode] _ Mach.vmAllocateWithPager[targetTask: Mach.taskSelf[], address: 0, size: 4096, anywhere: TRUE, pagingObject: [9], offset: 0, raiseSignal: TRUE]; pointerToCards _ LOOPHOLE[mappedAddress]; TRUSTED { recordIDForCheckpointCompleteRecord _ [sign: positive, low: pointerToCards[0], high: pointerToCards[1]]; }; [] _ Mach.vmDeallocate[targetTask: Mach.taskSelf[], address: mappedAddress, size: 4096, raiseSignal: TRUE]; }; WriteRestartRecord: PUBLIC ENTRY PROC [ recordIDForCheckpointCompleteRecord: RecordID] = { mappedAddress: Mach.vmAddressT; kernCode: Mach.kernReturnT; pointerToCards: LONG POINTER TO ARRAY [0..3] OF CARD32; [mappedAddress: mappedAddress, kernCode: kernCode] _ Mach.vmAllocateWithPager[targetTask: Mach.taskSelf[], address: 0, size: 4096, anywhere: TRUE, pagingObject: [9], offset: 0, raiseSignal: TRUE]; pointerToCards _ LOOPHOLE[mappedAddress]; TRUSTED { pointerToCards[0] _ recordIDForCheckpointCompleteRecord.low; pointerToCards[1] _ recordIDForCheckpointCompleteRecord.high; }; [] _ Mach.vmDeallocate[targetTask: Mach.taskSelf[], address: mappedAddress, size: 4096, raiseSignal: TRUE]; }; END. ’YggRestartFileImpl.mesa Copyright Σ 1989 by Xerox Corporation. All rights reserved. Last edited by Bob Hagmann May 8, 1989 2:50:58 pm PDT ΚΧ˜šœ™Icodešœ<™<—šœ™K™&—J˜šΟk ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜J˜—šœ ˜!š˜J˜—š˜Jšœ˜—Jš˜Jšœ œ˜!Jšœ œ˜-J˜J˜š Οnœœœœœ4˜cJšœ˜Jšœ˜Jš œœœœœœœ˜7Jšœœ-œ˜ΔJšœœ˜)šœ˜ Jšœi˜iJ˜—Jšœeœ˜kJ˜J˜—šžœœœœ5˜ZJšœ˜Jšœ˜Jš œœœœœœœ˜7Jšœœ-œ˜ΔJšœœ˜)šœ˜ Jšœ<˜