Commuicating between temporally independent software programs.
The term distributed computing typically conjures up images of multiple computer systems connect by a network cooperating to achive a large scale objective. Although that covers a common scenario, I am extending the definition to include any computing problem that requires more than one "independently" operating computer programs to cooperatively solve a problem.
The reasons for "distributing" an application are varied. In the typical case it is done to enhance performance or scalability. Using my definition, distributed computing can include multi-threaded applications running on a single processor. While the techniques used for communicating between the threads are somewhat different than those applications that use CORBA to communicate across a WAN over TCP/IP, many of the fundamental issues are the same.
Distributed computing systems can be catagorized by the communications medium as follows:
Shared memory systems are able to exchange data directly through memory.
- Shared Memory - Shared Address Space - Multiple Threads - Single Process - Single Processor
- Shared Memory - Shared Address Space - Multiple Threads - Single Process - SMP
- Shared Memory - Separate Address Spaces - Multiple Processes - Single Processor
- Shared Memory - Separate Address Spaces - Multiple Processes - SMP
- System Address Space - Multiple Processes - Single or SMP Processors
- Network Address Space - Multiple Processes - Multiple Homogenous Independent Processors
- Network Address Space - Multiple Processes - Multiple Hetrogenous Independent Processors
Shared address spaces have the ability to exchange memory addresses without translation. This is a feature of multi-threaded applications.
Separate address spaces can exist on a given processor through the use of an MMU. This type of shared memory communication is possible on a single or SMP processor using multiple processes. It is also common in "Real-Time" systems that have multiple processors on a single bus sharing memory resources that may be on a card separate from the processors.