Verhofstad, J.S.M., Computing Laboratory, University of Newcastle upon Tyne
Systems structures and data structures which make possible the state restoration of user objects are described in this thesis. Recovery is linked with types which suggests making a distinction between recoverable and unrecoverable types. For convenience recovery is discussed in terms of recovery blocks as developed at the University of Newcastle upon Tyne. Recovery is taken to mean restoring the values of recoverable types. Recoverable multi-level systems are considered. On the one hand levels in such systems can be backed out. On the other hand these levels provide explicit recovery for new types they introduce. and so can be called on to restore states of objects used in higher levels. The concepts and issues are discussed and explained; mechanisms and techniques for building such systems are presented. Recovery techniques for complex global data structures and techniques to maintain consistency at any time even when recovery is impossible such as after a crash are described and compared. Many of the presented techniques are employed in an implemented recoverable two-level system with a recoverable filing system. This two-level system is described in detail. It is argued that in order to implement recoverability in multi-level systems with efficiency and flexibility, the interfaces of the system should provide both recoverable and unrecoverable types. It is also shown that the way in which complex data structures are updated is of major importance if recovery is to be provided in a "reasonably" efficient way and consistency is to be guaranteed after a crash.