-- PSBDefs.Mesa Edited by Sandman on June 30, 1980 5:01 PM
-- Copyright Xerox Corporation 1979, 1980
DIRECTORY
ControlDefs USING [FrameHandle],
ProcessDefs USING [Priority, Ticks];
PSBDefs: DEFINITIONS =
BEGIN
MonitorLock: TYPE = MACHINE DEPENDENT RECORD [
lock: {locked, unlocked}, -- priority: Priority,
queue: PackedQueue];
MonitorHandle: TYPE = POINTER TO MonitorLock;
LockedEmpty: MonitorLock = [locked, Empty];
UnlockedEmpty: MonitorLock = [unlocked, Empty];
-- NOTE: Both fields of a MonitorLock are packed into the same word, with
-- the lock in the high-order bit and "locked" represented by zero, so
-- that a MonitorHandle to a locked MonitorLock can be loopholed into a
-- QueueHandle.
Condition: TYPE = MACHINE DEPENDENT RECORD [
wakeupWaiting: {no, yes}, queue: PackedQueue, timeout: ProcessDefs.Ticks];
ConditionHandle: TYPE = POINTER TO Condition;
-- NOTE: The first two fields of a Condition are packed into the same word,
-- with wakeupWaiting in the high-order bit and "no" represented by zero,
-- so that a ConditionHandle to a Condition without a waiting wakeup can
-- be loopholed into a QueueHandle.
ProcessHandle: TYPE = POINTER TO PSB;
PSB: TYPE = MACHINE DEPENDENT RECORD [
link: ProcessHandle,
cleanup: ProcessHandle,
timeout: ProcessDefs.Ticks,
enterFailed: BOOLEAN,
detached: BOOLEAN,
fill: [0..37B],
state: {frameReady, frameTaken, dead, alive},
timeoutAllowed, abortPending, timeoutPending, waitingOnCV: BOOLEAN,
priority: ProcessDefs.Priority,
frame: ControlDefs.FrameHandle];
PackedQueue: TYPE = POINTER [0..77777B] TO PSB;
Empty: PackedQueue = FIRST[PackedQueue];
END.