From NDWiki
Jump to navigation Jump to search

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)[1].


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 data structures / messages are passed through shared memory (MPM), and managed via OCTOBUS.


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.


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


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[2].

Library 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..).

Product numbers


  1. Norsk Data Document ND–820026.1 DOMINO and NUCLEUS Software Guide preface
  2. Norsk Data Document ND–820026.1 DOMINO and NUCLEUS Software Guide NUCLEUS Overview