A Transaction Processing Monitor
Things that would have helped

There are two things that were not available for the TPM that would have been useful in implementing an efficient system:
  • Broadcast Our system frequently does operations that involve broadcasting identical messages to multiple processes. For example, the second phase of an event involves the TPM sending exactly the same message to every server participating in the event. All message-based IPC in UNIX is, unfortunately, point-to-point, which forces the TPM to do one write() per participating server. It could have been much more efficient if some sort of "write to multiple file descriptor" call was available.
  • Shared Memory The availability of shared memory would have added the capability to distribute the work of the TPM across the processes in the system and reduce the cost of the IPC. If the TPM database could be placed in a segment of shared memory that is in the address space of every process in the system, then there would be no need for a centralized TPM process : all of the server lookup could be done in a set of library routines that manipulate the shared memory segment.

    A form of broadcast could also be implemented in a efficient way by writing the request to be broadcast into a shared memory buffer and giving the buffer ID of the request to all of the servers that participate in the event.