summaryrefslogtreecommitdiff
path: root/microkernel/mach/mig.mdwn
blob: f8046cb2203cbfc08492dbecfffdd75fa2534fcb (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
[[!meta copyright="Copyright © 2001, 2002, 2003, 2006, 2007, 2008, 2010, 2013
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]]."]]"""]]

The *Mach Interface Generator* (*MIG*) is an [[IDL]] compiler.  Based on an
interface definition, it creates stub code to [[invoke]] object methods and to
demultiplex incoming messages.  These stub functions conveniently hide the
details of Mach's [[IPC]] and [[port]] machinery and make it easy to implement
and use Mach [[interface]]s as [[remote procedure calls (RPC)|rpc]]: by using
the stub functions, the client programs can call remote procedures more or less
like any other C function.

These functions encode arguments into [[message]]s' format (*marshalling*),
wait for a result on a newly created [[reply port|port]], decode return
arguments from the reply message (*demarshalling*, or *unmarshalling*) and pass
them to the client program.  Similar actions are provided in the skeletons that
are linked to server programs.
MIG allows very precise semantics to be specified about what the arguments are
and how to be passed.
It has its problems with
[[structured_data|open_issues/mig_portable_rpc_declarations]], however.


  * [[Documentation]]


# Implementations

  * [[GNU_MIG]]