[ivy]<Satterthwaite>Mimosa>Alloc.mesa!3

Alloc.mesa
Copyright © 1985 by Xerox Corporation. All rights reserved.
Sweet, 19-Aug-81 12:14:14
Satterthwaite, June 10, 1986 3:02:18 pm PDT
Rovner, September 19, 1983 9:36 pm
Russ Atkinson (RRA) January 31, 1985 1:05:54 pm PST
DIRECTORY
VM: TYPE USING[wordsPerPage];
Alloc: DEFINITIONS = {
Selector: TYPE = CARDINAL;
Base: TYPE = LONG ORDERED BASE POINTER;
Index: TYPE = Base RELATIVE LONG POINTER;
OrderedIndex: TYPE = Base RELATIVE LONG ORDERED POINTER;
Handle: TYPE = REF InstanceData;
InstanceData: TYPE;
allocation from the tables as stacks
Words: PROC[h: Handle, table: Selector, size: CARDINAL] RETURNS[OrderedIndex];
Trim: PROC[h: Handle, table: Selector, size: CARD];
allocation from free list
defaultChunkType: Selector = Selector.FIRST;
GetChunk: PROC[h: Handle, size: CARDINAL, table: Selector�ultChunkType] RETURNS[Index];
FreeChunk: PROC[h: Handle, index: Index, size: CARDINAL, table: Selector�ultChunkType];
inquiries
Bounds: PROC[h: Handle, table: Selector] RETURNS[base: Base, size: CARD];
Top: PROC[h: Handle, table: Selector] RETURNS[OrderedIndex];
Bias: PROC[h: Handle, table: Selector] RETURNS[CARD];
inquiries and notification of moving subtables
BaseSeq: TYPE = RECORD[SEQUENCE length: NAT OF Base];
Notifier: TYPE = PROC[base: REF BaseSeq];
AddNotify: PROC[h: Handle, proc: Notifier];
DropNotify: PROC[h: Handle, proc: Notifier];
initialization and termination
addrSpan: CARD = 1000000H;-- 24 bits of address
TableInfo: TYPE = RECORD[
tag: [0..100H),-- 8 bits of tag
initialPages: CARDINAL,
maxPages: CARD�rSpan/VM.wordsPerPage-- and 24 bits of offset
];
Create: PROC[weights: DESCRIPTOR FOR ARRAY OF TableInfo] RETURNS[Handle];
Destroy: PROC[Handle];
Reset: PROC[Handle];
Chunkify: PROC[
h: Handle, table: Selector�ultChunkType,
firstSmall: NAT𡤅, nSmall: NAT𡤄];
UnChunkify: PROC[h: Handle, table: Selector];
ResetChunk: PROC[h: Handle, table: Selector];
ResetTable: PROC[h: Handle, table: Selector, info: TableInfo];
Failure: ERROR[h: Handle, table: Selector];
Overflow: SIGNAL[h: Handle, table: Selector] RETURNS[extra: CARD];
}.