13.07.2015 Views

iAPX 286 Operating System Writers Guide 1983

iAPX 286 Operating System Writers Guide 1983

iAPX 286 Operating System Writers Guide 1983

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

DATA SHARING, ALIASING, AND SYNCHRONIZATIONPL/M-<strong>286</strong> COMPILER 960-508 date PAGE 2293031323334353637383912212212211FREE MSG SPACE: PROCEDURE(BOX ID,MSG PTR) EXTERNAL;DECLARE-BOX ID SELECTOR, -MSG-PTR POINTER;END FREE_MSG=SPACE;ENQUEUE MESSAGE: PROCEDURE(BOX ID, MSG_PTR) EXTERNAL;DECLARE BOX ID SELECTOR, -MSG PTR POINTER;END ENQUEUE_MESSAGE;DEQUEUE_MESSAGE: IlROCEDURE(BOX_ID, MSG P P, EXCEP P)EXTERNAL;DECLARE BOX ID SELECTOR, (MSG P P, EXCEP_P) POINTER;END DEQUEUE_MESSAGE; - -/*******************************************************//* Mailbox Data Structures */DECLARE MDATA SIZE LITERALLY 146 I ;DECLARE MESSAGE FORMAT LITERALLY, MDATA-(MDATA SIZE) BYTE,-DESCRl (4 )WORD,DESCR2 (4 ) WORD' ;/*******************************************************//* Send Message via Mailbox */401SEND MESSAGE:PROCEDURE(BOX ID, MDATA PTR, SLOT1, SLOT2,EXCEP _P) PUBLIC REENTRANT;412DECLARE BOX IDSELECTOR,MDATA PTR POINTER,(SLOTl, SLOT2) SELECTOR;422DECLARE EXCEP PEXCEP- BASED EXCEP PPOINTER,WORD;434445464748495051525354552222333222233DECLARE MSG PTR POINTER,MESSAGE BASED MSG PTR STRUCTURE(MESSAGE_FORMAT);CALL GET MSG SPACE(BOX ID, @MSG PTR, @EXCEP);IF EXCEP=FAILED THEN /* the box-is full of messages */DO;CALL DISPATCHER;RETURN;END;/* The next statement will cause an exception if thesegment containing the data is not present.Therefore interrupts are enabled. */CALL MOVB (MDATA PTR,@MESSAGE.MDATA,MDATA SIZE);IF SLOT1=SELECTOR$OF (NIL) -THEN MESSAGE.DESCR1(2)=0; /* Mark as null */ELSE DO;CALL STORE DESCR(SLOT1,@MESSAGE.DESCR1);CALL DISABLE_ALIAS_PTR(SLOT1);Figure 5·7. Example of Mailbox Procedures (Cont'd.)5-14 121960-001

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!