DIRECTORY DragOpsCross USING [Word]; DragOpsCrossProcess: CEDAR DEFINITIONS = BEGIN OPEN DragOpsCross; Queue: TYPE = LONG POINTER TO QueueRep; QueueRep: TYPE = RECORD [busy: Process, chain: Process]; MetaQueue: TYPE = LONG POINTER TO Process; MetaQueueRep: TYPE = Process; MonitorLock: TYPE = LONG POINTER TO MonitorLockRep; MonitorLockRep: TYPE = RECORD [queue: QueueRep, owner: Process]; Condition: TYPE = LONG POINTER TO ConditionRep; ConditionRep: TYPE = RECORD [queue: QueueRep, timeout: Word]; InterruptCondition: TYPE = LONG POINTER TO InterruptConditionRep; InterruptConditionRep: TYPE = RECORD [queue: QueueRep, timeout: Word, requests: Word]; ProcessPtr: TYPE = LONG POINTER TO Process; Process: TYPE = LONG POINTER TO ProcessRep; ProcessRep: TYPE = RECORD [ queue: Queue, -- pointer to queue that this process is waiting for next: Process, -- next process in above circular queue meta: Process, -- next process in ready queue, timeout queue or page fault queue when: Word, -- when timeout will occur OR page number for fault priority: Priority, -- priority of this process state: ProcessState, -- process state euState: EUstate -- useful registers in EU ]; Priority: TYPE = MACHINE DEPENDENT { slothful (0), -- user-level deep background processing (idle) sluggish (1), -- user-level background processing normal (2), -- user-level normal processing perky (3), -- user-level foreground processing nervous (4), -- system-level ?? processing jumpy (5), -- system-level ?? processing excited (6), -- system-level real-time processing hyper (7) -- system-level emergency processing }; ProcessState: TYPE = MACHINE DEPENDENT { free (0), -- process is on free list running (1), -- process is running (assigned to a processor) ready (2), -- process is ready to run (on ready queue) waitingPage (3), -- process is waiting for page fault (on page fault queue) waitingQueue (4), -- process is waiting for Notify (on condition queue) stopped (5), -- process is stopped (on stopped queue) done (6) -- process is done (waiting for Join) }; EUstateIndex: TYPE = MACHINE DEPENDENT { MDF (0), -- shifter control Hook (1), -- pointer to the youngest frame saved to memory FramesLeft (2), -- frames left before fault occurs FloatingMode (3) -- floating point mode register }; EUstate: TYPE = ARRAY EUstateIndex OF Word; Processor: TYPE = LONG POINTER TO ProcessorRep; ProcessorRep: TYPE = RECORD [ next: Processor, -- next processor in ring orders: ProcessorOrders, -- orders for what to do after reschedule switchTo: Process, -- if orders = switchToGiven, then this is the one to switch to running: Process -- the process currently being run ]; ProcessorOrders: TYPE = MACHINE DEPENDENT { reset (0), -- useful during system init (?) noChange (1), -- ignore the reschedule switchToGiven (2), -- switch to process given by processor.switchTo (NIL => to best) panicStop (3) -- save current process, then spin on these orders }; RequestKind: TYPE = [0..31]; RequestWordPtr: TYPE = LONG POINTER TO RequestWord; RequestWord: TYPE = PACKED ARRAY RequestKind OF BOOL; NullRequestWord: RequestWord = LOOPHOLE[LONG[0]]; END. ΖDragOpsCrossProcess.mesa Copyright c 1984, 1985 by Xerox Corporation. All rights reserved. Russ Atkinson (RRA) July 15, 1985 8:58:24 pm PDT Data Types for Process machinery (wizards only) Κβ˜codešœ™Kšœ Οmœ7™BK™0—K˜šΟk ˜ Kšœ žœ˜K˜—Kš œžœž œžœžœ˜AK˜™0K™Kš œžœžœžœžœ ˜'šœ žœžœ!˜8K˜—Kš œ žœžœžœžœ ˜*šœžœ ˜K˜—Kš œ žœžœžœžœ˜3šœžœžœ#˜@K˜—Kš œ žœžœžœžœ˜/šœžœžœ"˜=K˜—Kš œžœžœžœžœ˜Ašœžœžœ2˜VK˜—Kš œ žœžœžœžœ ˜+Kš œ žœžœžœžœ ˜+–24 sp tabStopsšœ žœžœ˜K–24 sp tabStopsšœΟc5˜CK–24 sp tabStopsšœŸ'˜6K–24 sp tabStopsšœŸA˜PK–24 sp tabStopsšœ Ÿ3˜?K–24 sp tabStopsšœŸ˜/K–24 sp tabStopsšœŸ˜%K–24 sp tabStopsšœŸ˜*K–24 sp tabStopsšœ˜—–24 sp tabStopsšœ žœžœž œ˜$K–24 sp tabStopsšœŸ/˜=K–24 sp tabStopsšœŸ#˜1K–24 sp tabStopsšœ Ÿ˜+K–24 sp tabStopsšœ Ÿ#˜.K–24 sp tabStopsšœ Ÿ˜*K–24 sp tabStopsšœ Ÿ˜(K–24 sp tabStopsšœ Ÿ$˜1K–24 sp tabStopsšœ Ÿ$˜.K–24 sp tabStopsšœ˜—–24 sp tabStopsšœžœžœž œ˜(K–24 sp tabStopsšœ Ÿ˜$K–24 sp tabStopsšœ Ÿ/˜