summaryrefslogtreecommitdiff
path: root/ipc.mdwn
blob: 022e0bc4b20674cdf69ec6bae3e8dffbfe87dc2c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
[[!meta copyright="Copyright © 2007, 2008, 2010, 2011 Free Software Foundation,
Inc."]]

[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
id="license" text="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]]."]]"""]]

*IPC* stands for *inter-process communication*.

On [[Unix]], inter-process communication can be achieved using pipes.
This is inefficient for large amounts of data as the data must be
copied.  This is generally not a problem as most services are
provided by the Unix kernel and Unix is not designed to be
[[extensible|extensibility]].

[[Microkernel]] systems, on the other hand, are generally composed
of many components.  As components are separated by their respective
[[address_space]] boundaries, unlike the kernel, they cannot arbitrarily
examine and modify the caller's state.  The advantage is that if the
protocol is carefully designed, the callee cannot cause the caller
any [[destructive_interference]] thereby removing the need for the
caller to [[trust]] the callee thus reducing the former's [[TCB]].
When done systematically, this can increase the system's [[robustness]].
To this end, microkernels provide richer IPC semantics that include
the ability to transfer [[capabilities|capability]] and to use [[virtual_memory]]
[[mechanism]]s to copy data.

Continue reading about [[Mach's IPC system|microkernel/mach/IPC]].


<a name="performance"></a>
# Performance

  * {{$performance_irrelevance}}


# See Also

  * [[RPC]]


[[!ymlfront data="""

performance_irrelevance:

  "Brian N. Bershad, 1992: [The Increasing Irrelevance of IPC Performance for
  Microkernel-Based Operating
  Systems](http://www.cs.cmu.edu/afs/cs/project/mach/public/www/doc/abstracts/IPCperf.html)
  ([doc](http://www.cs.cmu.edu/afs/cs/project/mach/public/doc/published/IPCperf.doc),
  [ps](http://www.cs.cmu.edu/afs/cs/project/mach/public/doc/published/IPCperf.ps),
  [CiteSeerX](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.51.16))"

"""]]