| OCR Text |
Show 80 a migration point on the stack. If the migration point 1s later than either the previous stack frame or the last choice point, the stack is reset to its location. 4.4.3 RecycUng Value Cells If a Boplog process 1s successful in maximizing the length of sequential periods of execution, it is likely to operate on unshared data areas much of the time. When this happens, the process can recycle value cells, saving value cell creation and link time as well as preventing the growth of binding lists. Suppose that a process which seeks to create a new binding for a variable determines that the value cell which results from disambiguating and dereferencing the variable is in an unshared stack area. If the time stamp of the value cell indicates that it 1s no longer valid, the value cell can be recycled and used to store the new binding. Recycling the value cell is safe because there can be no other references to it. Recycling a cell saves memory and prevents lengthening the binding list. Recycling is also much faster than creating and linking a new cell. To create a new cell, the space for the cell is allocated on the binding stack, the fields of the new cell are initialized, and the cell is linked either at the end of a local binding list (if one exists already) or into the global binding list. Adding to the global binding list requires some locking, and adding to either list requires that the previous cell on the list be mapped into the virtual address space so that its links can be set correctly. To recycle a cell, the value of the cell is set to reference itself, and the time stamp is set to the current time. 4.5 Other Design Considerations Beyond the obvious problems of handling multiple bindings and migrating work, the design is also impacted by more pragmatic decisions. This section covers several important practical implementation issues. Memory management is the most critical of these issues. A technique for performing fast memory-map changes on the Butterfly is presented first . Using this |