Next: About this document
Up: SPIN Storage Management Issues
Previous: M3 passing compiler
- Obsolete the unstrong reference interface.
- Change the m3 collector to scan the untraced heap and treat it
is source of ambiguous roots.
- Change the m3 collector to remove strong reference if there are
no ambiguous roots to the data. This effectively mobilizes the
data, allowing the collector to defragment the heap.
- Change the m3 collector to delete the data if there are no ambiguous
roots and there are no references from the traced heap. Note that at
this point the strong reference will already have been removed by the
above point.
- Change the m3 compiler to automatically create a strong
reference when passing traced data to GC unsafe modules. I.e., a call
to the above Enqueue() procedure would automatically emit code to
create a strong reference to the que head and que arguments.
- Change the m3 compiler to emit warnings when using untraced
references in safe module.
- Change compiler to disallow allocation of untraced data in safe
module.
- Allocate all data out of the traced heap and rely on the garbage
collector.
- m3 allocation subsystem must be initialized earlier in the
boot phase. (This may conflict with our requirement of being
able to debug all of our code with ttd.)
- traced allocation needs to work from interrupt handlers.
(requires support to atomically update state in the allocator path.)
- reserve type headers and type codes to allocate
bucket sized data for foreign code data.
One solution might be to use the sixteen
different data sizes that the bsd/kern_malloc.c function uses
for its buckets.
- Automatic strongref'ing of data allocated for foreign code.
- Change layout of typeheader for traced data. Don't just prepend
it, but instead use a hash function to locate it, for example.
- Obsolete M3 UNTRACED REF type, eliminating memory dichotomy.
Next: About this document
Up: SPIN Storage Management Issues
Previous: M3 passing compiler
Marc Fiuczynski
Thu Dec 28 15:39:17 PST 1995