@X @~
~V7 56 2 -5
~D10
~H                    MUSS
~
~
~D10
~H             SYS023
~D10
~MMANCHESTER UNIVERSITY  -  CONFIDENTIAL
~
~
                                                           ISSUE 11~
~V9 -1
~P
~V9 1
~YSYS023
~S1~M~OSYS IMPLEMENTATION DESCRIPTION
~
~M~OSection 2 Version 3
~S1~OSection 2.3 Core Manager (Variable block size version - Buddy system)
~S1~O1. General Description
~BThis module is responsible for the allocation and de-allocation
of space in the main store.
~KThe size of pages may vary in powers of 2 of the minimum
block size, and are alligned in the store on the same size boundaries.~K
~S1~O2. Interfaces
~
Other modules used~
   Section 14 (Virtual Store Manager)~
Interrupt level interface procedures~
   OBTAIN.PAGE (SIZE) PAGE~
   RELEASE.PAGE (PAGE, SIZE)~
Configuration parameters~
   NO.OF.PAGES~
   ~KALLOCATED.CORE~
   LOG.MAX.SIZE~
Hardware registers~
   V.CORE.PAGE~
   V.CORE.DATA~K~
~S1~O2.1 Hardware Interface
~B~KAccesses to pages in the real store are made using
the V-lines V.CORE.PAGE and V.CORE.DATA. V.CORE.PAGE is set to
the page to be accessed. Read or write accesses to V.CORE.DATA access
the integer quantity at the start of the specified page.~K
~S1~O2.2 Software Interface
~S11) OBTAIN.PAGE (SIZE) PAGE
~BThis procedure allocates a page of core of specified size. If sufficient
space is not available, the virtual store manager will be
requested to generate some free space, in which case, the calling activity may b
e halted.
~S12) RELEASE.PAGE (PAGE, SIZE)
~BThis procedure returns a core page to the pool of available
space.
~S13) NO.OF.PAGES
~BThis configuration parameter specifies the size of the
store, in blocks.
~S14) ~KALLOCATED.CORE~K
~BThis configuration parameter specifies the number of blocks which
are allocated for the operating system. This space is assumed
to be at the start of the store.
~S15) ~KLOG.MAX.SIZE
~BThe maximum block size which may be allocated, represented as a
power of 2 of the minimum block size.~K
~S1~O3. Implementation
~S1~O3.1 Outline of Operation
~B~KThe store is assumed to be divided into units which are
a power of 2 of the minimum block size, up to a maximum size of
2{LOG.MAX.SIZE-1}* page size. A linked list is maintained to
indicate the free blocks of each size available. When space is
requested, if a block of the exact size is not available then
one of larger size is allocated, and surplus space is linked
onto the appropriate free lists for the smaller sizes. Similarly
when space is released, adjacent free blocks may be combined to give
a block of the next higher size. The store rejection algorithm of
SYS14 is triggered if a request for free space cannot be satisfied~K.
~S1~O3.2 Data Structures
~T% 6
~
~KLINK~IA vector which is used to link together pages of the
same size.~K
~S1~O3.3 Special Notes
~BNone
~Y
~V9 -1
~P
~V9 -1
~D15
~HFLOWCHARTS
~
~
~H                SYS023
~V9 -1
~F
@TITLE SYS02(3,9)
@COL 1S-2R-3R-4R-5R-6F
@FLOW 1-2-3-4-5-6

@BOX 1.0
CORE MANAGER
@BOX 4.0
PROCEDURES IN MODULE:
   INT1 OBTAIN PAGE
   INT2 RELEASE PAGE
@BOX 6.0
END
@BOX 1.1
#SYS02/1
MODULE SYS02 (OBTAIN.PAGE, RELEASE.PAGE);
@BOX 4.1
*CODE 2;
PSPEC OBTAIN.PAGE (INTEGER) / INTEGER;
PSPEC RELEASE.PAGE (INTEGER, INTEGER);
   #SYSINT02.1
   #SYSINT02.2
@BOX 5.1
@BOX 6.1
*END
@END
@TITLE SYS02/1(3,9)
@COL 1S-2R-3R-4R
@FLOW 1-2-3-4
@BOX 1.0
OTHER MODULES REFERENCED
@BOX 4.0
SYS14 VIRTUAL STORE MANAGER
@BOX 1.1
:: EXTERNAL ENVIRONMENT
@BOX 2.1
IMPORT LITERAL LOG.MAX.SIZE;
INTEGER NO.OF.CORE.PAGES;
INTEGER [LOG.MAX.SIZE] LINK;
IMPORT VSTORE V.CORE.PAGE, V.CORE.DATA;
@BOX 4.1
PSPEC SYS14.STORE.REJECTION ();
@END
@TITLE SYSINT02.1(3,9)

@COL 1S-2R-3N-4T-5R-6R-7F
@COL 8N-9R

@ROW 8-3
@ROW 5-9

@FLOW 1-2-3-4-5-6-7
@FLOW 4NONE-9-8-3

@BOX 1.0
OBTAIN PAGE (NO OF BLOCKS)
@BOX 2.0
ROUND SIZE TO SUITABLE
POWER OF 2
@BOX 4.0
FIND FIRST BLOCK OF
AT LEAST REQUIRED SIZE
@BOX 5.0
ALLOCATE THE BLOCK
@BOX 6.0
ATTACH ADDITIONAL FREE BLOCKS
TO LISTS OF CORRECT SIZE
@BOX 7.0
END
@BOX 9.0
STORE REJECTION
[SYS14]
@BOX 1.1
PROC OBTAIN.PAGE (NO.OF.BLOCKS);
INTEGER BLOCK.SIZE, POWER, PAGE.NO, I;
@BOX 2.1
1 => BLOCK.SIZE;
0 => POWER;
WHILE BLOCK.SIZE < NO.OF.BLOCKS DO
   BLOCK.SIZE <<- 1 => BLOCK.SIZE;
   1 +> POWER;
OD
@BOX 4.1
POWER => I;
WHILE I < LOG.MAX.SIZE AND
   LINK [I] < 0 DO
   1 +> I;
OD
IF I = LOG.MAX.SIZE
@BOX 5.1
LINK [I] => PAGE.NO => OBTAIN.PAGE;
PAGE.NO => V.CORE.PAGE;
V.CORE.DATA => LINK [I];
@BOX 6.1
BLOCK.SIZE +> PAGE.NO;
WHILE I /= POWER DO
   PAGE.NO => V.CORE.PAGE;
   -1 => V.CORE.DATA;
   PAGE.NO => LINK [POWER];
   BLOCK.SIZE +> PAGE.NO;
   1 +> POWER;
   BLOCK.SIZE <<- 1 => BLOCK.SIZE;
OD
@BOX 7.1
END
@BOX 9.1
SYS14.STORE.REJECTION ();
@END


@TITLE SYSINT02.2(3,9)

@COL 1S-10R-3N-4R-5T-6R-7F
@COL 8N-9R

@ROW 3-8
@ROW 6-9

@FLOW 1-10-3-4-5NO-6-7
@FLOW 5YES-9-8-3

@BOX 1.0
RELEASE PAGE (PAGE NO, SIZE)
@BOX 4.0
FIND POSITION OF PAGE IN
LIST OF SAME SIZED BLOCKS
@BOX 5.0
CAN BLOCKS BE MERGED?
@BOX 6.0
LINK BLOCK INTO LIST
@BOX 7.0
END
@BOX 9.0
MERGE ADJACENT BLOCKS
@BOX 10.0
ROUND SIZE TO POWER OF 2
@BOX 1.1
PROC RELEASE.PAGE (PAGE.NO, NO.OF.BLOCKS);
INTEGER BLOCK.SIZE, POWER, PTR, PAGE.POSN, PREV.PTR;
@BOX 4.1
BLOCK.SIZE -= PAGE.NO => PAGE.POSN;
LINK [POWER] => PTR;
WHILE PTR >= 0 < PAGE.POSN DO
   PTR => PREV.PTR;
   PTR => V.CORE.PAGE;
   V.CORE.DATA => PTR;
OD
@BOX 5.1
IF PTR = PAGE.POSN AND
   POWER + 1 < LOG.MAX.SIZE
@BOX 6.1
PAGE.NO => V.CORE.PAGE;
PTR => V.CORE.DATA;
IF LINK [POWER] = PTR THEN
   PAGE.NO => LINK [POWER];
ELSE
   PREV.PTR => V.CORE.PAGE;
   PAGE.NO => V.CORE.DATA;
FI
BLOCK.SIZE +> PAGE.NO;
BLOCK.SIZE -> NO.OF.BLOCKS;
@BOX 7.1
END
@BOX 9.1
PTR => V.CORE.PAGE;
V.CORE.DATA => PTR;
IF LINK [POWER] = PAGE.POSN THEN
   PTR => LINK [POWER];
ELSE
   PREV.PTR => V.CORE.PAGE;
   PTR => V.CORE.DATA;
FI
BLOCK.SIZE & PAGE.NO -=> PAGE.NO;
BLOCK.SIZE +> NO.OF.BLOCKS;
1 +> POWER;
BLOCK.SIZE <<- 1 => BLOCK.SIZE;
@BOX 10.1
1 => BLOCK.SIZE;
0 => POWER;
WHILE BLOCK.SIZE < NO.OF.BLOCKS DO
   1 +> POWER;
   BLOCK.SIZE <<- 1 => BLOCK.SIZE;
OD
@END




