diff options
author | Thomas Schwinge <tschwinge@gnu.org> | 2007-09-03 15:26:03 +0200 |
---|---|---|
committer | Thomas Schwinge <tschwinge@gnu.org> | 2007-09-03 15:28:06 +0200 |
commit | 855af9a0ee8d1bdebff882a62104134a71044dba (patch) | |
tree | 00a93447c5c045df3cc69375de884e76b065ad4a /microkernel/mach/port.mdwn | |
parent | 94aafdb76706abe3c0d2f0f06c8f37fbcdb1056e (diff) | |
download | web-855af9a0ee8d1bdebff882a62104134a71044dba.tar.gz web-855af9a0ee8d1bdebff882a62104134a71044dba.tar.bz2 web-855af9a0ee8d1bdebff882a62104134a71044dba.zip |
Break up `Mach' and `Mig' hierarchies, merge them into `microkernel/mach/', `microkernel/mach/gnumach/', `microkernel/mach/mig/', and elsewhere.
Diffstat (limited to 'microkernel/mach/port.mdwn')
-rw-r--r-- | microkernel/mach/port.mdwn | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/microkernel/mach/port.mdwn b/microkernel/mach/port.mdwn new file mode 100644 index 00000000..47ef427a --- /dev/null +++ b/microkernel/mach/port.mdwn @@ -0,0 +1,48 @@ +[[license text=""" +Copyright © 2007 Free Software Foundation, Inc. + +Permission is granted to copy, distribute and/or modify this document under the +terms of the GNU Free Documentation License, Version 1.2 or any later version +published by the Free Software Foundation; with no Invariant Sections, no +Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included +in the section entitled [[GNU_Free_Documentation_License|/fdl.txt]]. + +By contributing to this page, you agree to assign copyright for your +contribution to the Free Software Foundation. The Free Software Foundation +promises to always use either a verbatim copying license or a free +documentation license when publishing your contribution. We grant you back all +your rights under copyright, including the rights to copy, modify, and +redistribute your contributions. +"""]] + +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. |