Mach Network Message Server (NetMsgServer)

NetMsgServer performs transparent naming and transport for #202204222158 to communicate with remote devices at user level. It is protocol-independent and capable of using various network protocols.

In order to establish communication between computers within a network, NetMsgServer provides a primitive network-wide name service. Its responsibility is to register ports, requested by local tasks, for lookup by tasks from other computer. NetMsgServers also maintain a distributed database of port rights that have been transferred between devices and of port to which these rights pointed to. These ports could be removed from and/or added to the database as long as the port value of them are matched.

The sender’s NetMsgServer creates proxy port, if it has received a send right from a remote computer, to represent the original port from that computer. Therefore, Mach could treat it like any local port where the sender can send messages to this proxy port without hassle. The receiver’s NetMsgServer then translate the message# from the sender’s format to the receiver’s format by referring to the type information stored in it.

Links to this page
  • Mach’s Networking

    To improve the efficiency, Mach caches the remote memory objects into local memory. For local memory objects, it passes the messages by merely moving the pointer to point to the shared memory objects. For all messages, if they are local to the machine, especially if they are large too, they are 202203251058. Otherwise, they will be handled by 202204231514#.

  • Mach’s Interprocess Communication (IPC) Facility

    To receive messages, every object in Mach, upon creation, must have a port where those messages could send to and queue at. If the queue is full, the sender could abort the send operation and then wait for its turn when the queue is once more available for queuing, or the kernel could deliver that message on behalf of the sender. The port creation share similarity with standard PID concept in UNIX. If the port specified in message# cannot be translated into internal port data structure address, it will then be passed to 202204231514# from the kernel.

#networking