<> <> <> <> DIRECTORY PrincOps USING [ ControlLink, Frame, FrameHandle, GlobalFrameHandle, Priority, PsbIndex, PsbNull ], WorldVM USING [ World ]; AMProcessBasic: DEFINITIONS = BEGIN OPEN WorldVM; <> State: TYPE = { ready, -- on the ready list (but not waitingSV or waitingCV) waitingSV, -- ready (but not waitingCV), but no state vector available waitingCV, -- "waiting" flag in PSB: indicates process is on some CV queue waitingML, -- "enterFailed" flag in PSB and not ready, not faulted: waiting to enter a monitor frameFault, pageFault, writeProtectFault, unknownFault, -- on a fault queue dead, -- not a currently valid process unknown, -- not dead, not waitngCV, not waitingML, not on ready list, not on a fault queue uncaughtSignal, breakpoint, callDebugger -- these states aren't generated by this interface }; Faulted: TYPE = State[frameFault..unknownFault]; GFTable: TYPE = REF GFTableObject; -- NIL => all modules GFTableObject: TYPE = RECORD[ count: CARDINAL, -- amount of the sequence actually used; "length" is allocated length frames: SEQUENCE length: CARDINAL OF PrincOps.GlobalFrameHandle ]; Info: PROC[world: World, psbi: PrincOps.PsbIndex, freeze, thaw: BOOL, fullStatus: BOOL, filter: GFTable, wantedStates: PACKED ARRAY State OF BOOL] RETURNS[ state: State, faultData: LONG CARDINAL, priority: PrincOps.Priority, frame: PrincOps.FrameHandle, frozenFrame: PrincOps.FrameHandle, topFrame: PrincOps.FrameHandle]; Thaw: PROC[world: World, psbi: PrincOps.PsbIndex]; Abort: PROC[world: World, psbi: PrincOps.PsbIndex]; ReturnLink: PROC[world: World, frame: PrincOps.FrameHandle, psbi: PrincOps.PsbIndex _ PrincOps.PsbNull] RETURNS [link: PrincOps.ControlLink]; <> END.