The process manager calls a function get_work to receive a message.
The pm handles incoming messages sequentially: one incoming message at a time.
This function copies the incoming message into a (process manager) global variable:
message m_in;
However, the pm needs to store the reply message somewhere else so that it can be copied by the kernel mini_send function.
The reply message is a reply to some process.
Each process has an entry in the process manager's part of the process table. Each struct entry contains a message member mp_reply
message mp_reply; /* place to put reply message */
The do_XXXX function that implements the system call should place the reply message in this variable.
The pm main function will then call send passing the identity of the original caller and the address of this message.
In mini_send, the kernel will then copy the reply message from the pm back to the calling user process's message structure.