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 961J-51J8 date PAGE 35657585961J61626364656667686971J717233222333322222221CALL NULLIFY(SLOT1);END;,IF SLOT2=SELECTOR$OF(NIL)THEN MESSAGE.DESCR2(2)=IJ; /* Mark as null */ELSE DO;CALL STORE DESCR(SLOT2,@MESSAGE.DESCR2);CALL DISABLE ALIAS PTR(SLOT2);CALL NULLIFY(SLOT2);END;DISABLE;CALL ENQUEUE MESSAGE(BOX ID, MSG PTR);CALL DEQUEUE-WAIT(BOX ID~@EXCEP);ENABLE; - -CALL DISPATCHER;RETURN;END SEND_MESSAGE;/*************************************************~*** **//* Receive Message from Mailbox */RECEivE_MESSAGE: PROCEDURE (BOX ID, MDATA PTR, SLOT1,SLOT2, EXCEP=P) PUBLIC-REENTRANT;732DECLARE BOX IDMDATA PTR(SLOTI, SLOT2)SELECTOR,POINTER,SELECTOR;742DECLARE EXCEP PEXCEP-BASED EXCEP PPOINTER,WORD;757677787981J81828384858687888991J9192939422222333332222333223DECLARE MSG PTR POINTER,MESSAGE BASED MSG PTR STRUCTURE(MESSAGE_FORMAT);CHECK MAIL:DISABLE;CALL DEQUEUE MESSAGE (BOX ID, @MSG PTR, @EXCEP);IF EXCEP=FAILED THEN /* No mail today */DO;CALL ENQUEUE WAIT (BOX_ID);ENABLE; -CALL DISPATCHER;GOTO CHECK MAIL;END; -ENABLE;/* Next statement may cause exception. */CALL MOVB(@MESSAGE.MDATA, MDATA PTR, MDATA SIZE);IF MESSAGE.DESCR1(2)1J /* Test-for null descriptor */THEN DO;CALL LOAD DESCR(@MESSAGE.DESCR1, SLOT1);CALL FIX_ALIAS_PTR(@MESSAGE.DESCR1);END;IF MESSAGE.DESCR2(2)1J /* Test for null descriptor */THEN DO;CALL LOAD_DESCR(@MESSAGE.DESCR2, SLOT2);Figure 5-7. Example of Mailbox Procedures (Cont'd.)5-15 121960-001

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

Saved successfully!

Ooh no, something went wrong!