In order to continue a computation from a persistent store, the user simply selects it in the application manager. The operating system will then invoke the wrapper code at the beginning of the store which will in turn locate the SpotlessVM and invoke it, passing the store as a parameter. The VM will then perform the following steps in order to resume the suspended computation.
First, it will open the store database and map the store header to the appropriate C struct (see Section 1). The store header is the only record of type 'STOR' in the database and can thus be uniquely located by the VM.
Next, the VM will start opening the individual heap records - these can be identified by their record ID (ranging from 1 to lastRecordId) and type ('VMem'). After opening and locking a record, the header information has to be updated in case the record has been moved since it was suspended. This operation involves three major changes to the record header.
After all records have been opened and the appropriate break table entries have been appended, the VM runs a (slightly modified) pointer update phase of the garbage collector in order to adjust the pointers within the heap and from global C variables (still being stored in the store header) into the heap.
After all pointers have been updated, individual modules of the VM are asked to restore their state from the contents of their associated store header field.
Then callbacks that have been registered to recreate external state are executed (see 3.4).
Finally, the virtual machine resumes the execution of the application from the point where it was suspended earlier.