[LMH] Oldspace?

Steve Krueger stevelisp@grape-krueger.com
Tue May 25 20:52:01 2004


Alastair,

Pointers to oldspace are never permitted inside the machine, so if the 
data being read is a pointer to oldspace, the object it points to must 
be transported to newspace and the pointer changed to a pointer to the 
new object.

Of course, if the object read was an immediate type like a fixnum, you 
don't do any of the extra stuff.

Here is how it works on Explorer I:

After a memory read, the level 1 memory map is run again on the data 
returned in order to get the oldspace bit.  This bit is bit 10 (decimal) 
of the Level 1 map.

The Q-DATA-TYPE field plus the oldspace bit are used for the transport 
dispatch microinstruction.  The resulting dispatch table has an even and 
an odd entry for each data type.  Pointer types send the microcode off 
to the transporter to copy the object to newspace and fixup the pointer 
in MD.

The transporter dispatch also uses a special feature 
DISPATCH-STACK-OWN-ADDRESS.  Call transfers from the transporter 
dispatch stack the return address of the transporter dispatch rather 
than of the next microinstruction or the one after that (depending on 
XCT-NEXT).  This allows a forwarding pointer (DTP-GC-FORWARD that the 
transporter leaves behind in oldspace when it evacuates an object, or 
DTP-ONE-Q-FORWARD, etc.) to loop following forwarding pointer.  Neat trick.

On Explorer II (Hummingbird-based), we split off the region bits in the 
memory map into a separate address space map.  The AS map was addressed 
by MD always and the VM map was addressed by VMA.  The oldspace bit 
(being a region property) was in the AS map.  The AS map was run after 
the data was returned to get the oldspace bit so that it was set up for 
the transporter dispatch.  In all other ways, it was the same as 
described above.

I just dashed this off.  I hope it isn't too cryptic.

    -Steve




nyef@sc.am wrote:

>Hello all.
>
>Just a quick question. For DISPATCH on the Oldspace bit, is this the 
>level-1 map from the last read or write through VMA, the level-1 map 
>from the current contents of VMA, or the level-1 map indexed from the 
>current contents of MD?
>
>--Alastair
>
>http://lists.unlambda.com/mailman/listinfo/lispm-hackers
>
>  
>