summaryrefslogtreecommitdiff
path: root/Mach/mach/ports.mdwn
diff options
context:
space:
mode:
Diffstat (limited to 'Mach/mach/ports.mdwn')
-rw-r--r--Mach/mach/ports.mdwn31
1 files changed, 31 insertions, 0 deletions
diff --git a/Mach/mach/ports.mdwn b/Mach/mach/ports.mdwn
new file mode 100644
index 00000000..54cc12ac
--- /dev/null
+++ b/Mach/mach/ports.mdwn
@@ -0,0 +1,31 @@
+Mach ports are [[capabilities]].
+
+A Mach port is a kernel queue. Each port has associated with
+it a receive right and one or more send and send-once rights.
+A queue can hold a number of messages. Once the queue is full,
+the send blocks until their is space to enqueue the message
+(this is interruptible via a timeout mechanism).
+
+A receive right designates a queue and authorizes the holder to
+dequeue messages from the queue, and to create send and send-once
+rights.
+
+Send and send-once rights designate a queue and authorize the
+hold to enqueue messages (in the case of a send-once right,
+a single message). Enqueuing a message is equivalent to
+[[invoke|invoking]] a capability.
+
+Send and receive rights are named using local names. Each
+task has associated with it a port address space. A ports
+are addressed via this table. Each task thus has its own
+private [[NamingContext]] for ports.
+
+Ports can be [[delegate]]d in an IPC message. When the
+receiver dequeues the message, the right is made available
+to it.
+
+A thread can only block receiving on a single port. To work
+around this, the concept of a port set was introduced. A receive
+right can be added to (at most) one port set. When a thread
+receives from a port set, it dequeues from any of the ports that
+has a message available. \ No newline at end of file