Untitled-1

Back to the previous slide, on to the next slide or up to the storage overview

Links are a mechanism that is usually not provided in a storage system. At a some performance penalty they could be implemented in the different storage servers. However, we feel that a pointer mechanism that was uniform across all storage servers would be much more powerful. This requires standardization, which is most easily accomplished by providing the link mechanism in the microstorage kernel. Furthermore, in order to efficiently implement garbage collection mechanisms, it was best that the microstorage kernel be aware of the structure of links. Finally, experience has shown that unless garbage collection mechanisms are provided at the initial design of storage system, they are rarely successfully implemented. All of these issues strongly supported our decision to provide the link mechanism in the microstore.

The full form a link is a rather large structure, since it must uniquely identify every machine on the network (at least the Internet) and all the segments each machine is able manage. Thus they are typically about 128 bits (2^(64) different machines, 2^(24) disks per machine and 2^(40) bytes per disk). When a segment containing a link is loaded into memory, however, the link is represented by the machine's standard pointer. If the link points to data that is not in memory then a fault will result when the link is de-referenced. This simple approach directly implements virtual memory as a special case.

This mechanism can be used for other purposes as well. In an object store, inter-object pointers are naturally implemented as links. In parallel processing environments it useful to have a split-transaction type of remote procedure call. For this type of procedure call, the caller does not wait for the callee to return the value. Instead, the caller proceeds with its computation until the callee's result is needed and then checks to see if has already been provided. Using the link mechanism, the callee will immediately return a link to a block of memory that will contain the result of the computation. The caller can then anything desired with the link. If it tries to de-reference the link before the computation is complete the microstore will fault.

Richard Zippel