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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

REAL MEMORY MANAGEMENTPL/M-<strong>286</strong> COMPILER 960-501 date PAGE 3NEXT LINK BASED SLOT_C STRUCTURE (MEM_LINK);293031323334353637383940414243444546474849505152535455222333222333212222222233322IF THIS LINK. PRIOR = NULL PHYS ADDR/* ThIs is the beginning of the list. */THEN FIRST AVLBL = THIS LINK. NEXT ;ELSE DO; /* Update link-from prior segment. */CALL POINT AT(SLOT C, DWRIGHTS,- -@THIS LINK.PRIOR, LINK_LIMIT);PRIOR_LINK.NEXT = THIS_LINK. NEXT; .END;IF THIS LINK. NEXT = NULL PHYS ADDR/* This is the end of the list. */THEN LAST AVLBL = THIS_LINK. PRIOR;ELSE DO; /* Update link from next segment. */CALL POINT AT(SLOT C, DWRIGHTS,-@THIS LINK.NEXT, LINK_LIMIT);NEXT_LINK. PRIOR THIS_LINK. PRIOR;END;END DELINK;1*******************************************************/FIND FIRST FIT: PROCEDURE (SIZE,BASE ADDR PTR)- - WORD REENTRANT;DECLARE SIZE WORD,BASE ADDR PTR POINTER,BASE-ADDR-BASED BASE ADDR_PTR DWORD;DECLARE CURR LINK BASED SLOT_A STRUCTURE (MEM_LINK),PHYS-SIZE DWORD,SIZE-DIFF DWORD,/* Boundary tag items */BOUND ADDR DWORD,BOUND-MID BASED SLOT B STRUCTURE (MEM LINK) ,BOUND-HI BASED SLOT B STRUCTURE (MEM:=LINK);DECLARE TOP LOOP LABEL;PHYS SIZE = SIZE;CALL-ROUND SIZE(@PHYS SIZE);CALL POINT-AT(SLOT A,-DWRIGHTS,- @CURR_AVLBL, LINK_LIMIT);TOP LOOP:IF-SLOT A SELECTOR$OF(NIL) /* Check for end of list */THEN DO;IF FIRST AVLBL = NULL PHYS ADDR/* The list is empty~ */ -THEN RETURN FAILED;END;ELSE CALL POINT AT(SLOT A, DWRIGHTS,- @FIRST AVLBL, LINK LIMIT);/* Continue from beginning of list. */ -IF CURR LINK. SIZE < PHYS SIZETHEN /* This segment is-too small, so •.. */Figure 3-9. Code for Memory-Management Example (Cont'd.)3-17 121960-001

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

Saved successfully!

Ooh no, something went wrong!