A kernel for distributed and shared memory communication
Interprocess communication via shared memory has received considerable attention in the past. More recently, there has been a growing interest in communication in distribution environments. This dissertation examines distributed communication and attempts to integrate it with shared memory communication. A kernel is presented which provides simple tools to facilitate communication in these environments, and allows definition of new communication mechanisms.The kernel consists of features for synchronization, data transfer and locking. By combining the synchronization and data transfer facilities, distributed communication may be modelled. Shared memory communication normally requires synchronization and locking. Some applications require both shared memory and distributed communication. Such "hybrid" applications typically use the kernel features for synchronization, data transfer and locking. The kernel operations, though somewhat low level, provide flexibility in designing efficient mechanisms well suited for specific applications. Several examples illustrate the use of the kernel in programming solutions to a variety of communication problems, as well as in modelling some programming language mechanisms (including Ada and CSP).Several situations are identified which involve both distributed and shared communication. It is argued that in programming such hybrid problems, a unified approach to the different communication paradigms should be used, while permitting the programmer to take advantage of the benefits offered by the underlying physical architectures. Such an approach is demonstrated through examples using the kernel.The kernel has been implemented using the UNIX operating system. This implementation has been used to program a number of problem solutions, as well as in the construction of a compiler for the CSP language. Issues pertaining to a network implementation of the kernel are addressed.Measurements obtained from the implemented kernel have been used in a performance comparison of distributed and shared memory programs.