NUCLEUS

NUCLEUS is a library for fast message passing on ND-500-II or ND-5000 computers. It can be used for message passing both in the ND-100 and in the ND-500/5000, but is not available on pure ND-100 computers: NUCLEUS requires either an ND-5000 with OCTOBUS and a DOMINO controller and MF-Bus memory (former MPM-5), or an ND-500-II with OCTOBUS alone (DOMINO is not available for ND-500).

=NUCLEUS purpose= NUCLEUS is intended for communication between processes within one computer. Unlike XMSG, it cannot be used between computers. "Computer" in this context means one or several main CPUs with access to the same physical memory and OCTOBUS.

=NUCLEUS components=

Kernel
NUCLEUS data structures / messages are passed through shared memory (MPM), and managed via OCTOBUS.

Library
Applications will interface to the NUCLEUS kernel through libraries. Applications are isolated from the physical implementation of NUCLEUS which differs between ND-500 and ND-5000.

Monitor
The NUCLEUS monitor is a tool for inspection of parts of the NUCLEUS kernel, e.g. message queues.

=NUCLEUS concepts= Communication between processes is based on ports and messages. Ports and messages have descriptions in physical memory (the NUCLEUS kernel). A port is a defined communication port between processes, and it can be given a name. A message is constructed as a buffer for data, and a header. The header may contain e.g. a description of the data, and it can also link to other messages.

An application can create a message, and then link it to a port. The port could be owned by another process. Messages are queued in the sequence they arrive.

=Difference between ND-500 and ND-5000= Due to the DOMINO I/O controllers used in ND-5000, time-critical parts of NUCLEUS messaging do not have to go through the ND-100 (via a monitor call), so NUCLEUS communication between ND-5000 processes is faster and has less overhead than communication between ND-500 processes. ND-5000 CPUs have NUCLEUS support in the microcode for the time-critical functions.

=NUCLEUS functions=
 * nkCrePort – Create a new port. The creating process becomes port owner.
 * nkCreName – Assign a name to a port, so that other processes can refer to it.
 * nkOpenPort – Get a send reference to a named port.
 * nkOpenReturnPort – Get a send reference to the home port or last sender of a message.
 * nkDelName – Delete the symbolic name of a port. The port itself is not removed.
 * nkCreMessage – Allocate a message buffer in a contiguous area of physical memory.
 * nkMove – Write, read, or insert data into or from a message buffer.
 * nkSend – Send a message to a port.
 * nkReceive – The first message in the queue to a port is received.
 * nkGetInfo – Get information about the specified message or port.
 * nkClose – Close a port, a message, or a send reference.
 * nkVersion – Get version of different NUCLEUS parts (kernel, library..).

=References=