Ravenbrook / Projects / Memory Pool System / Version 1.111 Product Sources / Design Documents

Memory Pool System Project


                     THE DESIGN OF THE ROOT MANAGER
                            design.mps.root
                           incomplete design
                           richard 1995-08-25

INTRODUCTION

.intro:

.readership:


BASICS

.root.def: The root node of the object graph is the node which defines whether 
objects are accessible, and the place from which the mutator acts to change the 
graph.  In the MPS, a root is an object which describes part of the root node.  
The root node is the total of all the roots attached to the space.  [Note that 
this combines two definitions of root: the accessibility is what defines a root 
for tracing (see analysis.tracer.root.* and the mutator action for barriers 
(see analysis.async-gc.root).  pekka 1998-03-20]

.root.repr: Functionally, roots are defined by their scanning functions.  Roots 
_could_ be represented as function closures, i.e. a pointer to a C function and 
some auxiliary fields.  The most general variant of roots is just that.  
However, for reasons of efficiency, some special variants are separated out.


DETAILS


Creation

.create: A root becomes "active" as soon as it is created.

.create.col: The root inherits its colour from the mutator, since it can only 
contain references copied there by the mutator from somewhere else.  If the 
mutator is grey for a trace when a root is created then that root will be used 
to determine accessibility for that trace.  More specifically, the root will be 
scanned when that trace flips.


Destruction

.destroy: It's OK to destroy a root at any time, except perhaps concurrently 
with scanning it, but that's prevented by the arena lock.  If a root is 
destroyed the references in it become invalid and unusable.


Invariants

.inv.white: Roots are never white for any trace, because they cannot be 
condemned.

.inv.rank: Roots always have a single rank.  A root without ranks would be a 
root without references, which would be pointless.  The tracer doesn't support 
multiple ranks in a single colour.


Scanning

.method: Root scanning methods are provided by the client so that the MPS can 
locate and scan the root set.  See protocol.mps.root for details.  [There are 
some more notes about root methods in meeting.qa.1996-10-16.]

A. References

B. Document History

2002-06-07 RB Converted from MMInfo database design document.