ebook img

Everything You Always Wanted To Know About MIG But Were Afraid To Ask PDF

23 Pages·2005·0.12 MB·English
by  
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Everything You Always Wanted To Know About MIG But Were Afraid To Ask

Everything You Always Wanted (cid:1) To Know About MIG (cid:1) But Were Afraid To Ask Richard P(cid:1) Draves rpd(cid:1)cs(cid:2)cmu(cid:2)edu School of Computer Science Carnegie Mellon University Pittsburgh(cid:2) PA (cid:3)(cid:4)(cid:5)(cid:3)(cid:6) (cid:1) Mig (cid:2) Stub generator for Mach IPC(cid:1) (cid:2) Pack(cid:2) unpack(cid:2) demultiplex messages(cid:1) (cid:2) NOT transparent language(cid:7)level RPCs(cid:1) (cid:2) Doesn(cid:8)t hide IPC features(cid:1) (cid:2) Assumes client(cid:9)server model(cid:1) (cid:2) Mig History early Matchmaker Mary Thompson Keith Wright Mike Jones - exceptions Mike Young - C late Matchmaker Mike Jones real types Lisp, Pascal, C MIG Mike Young Rich Draves - rewrote Draves & Golub - features (cid:3) Mig Programming Model (cid:2) Clients call stubs mach(cid:1)port(cid:1)t server(cid:1)port(cid:2) kr (cid:3) getbalance(cid:4)server(cid:1)port(cid:5) (cid:6)balance(cid:7)(cid:2) (cid:2) Server loop processes requests extern boolean(cid:1)t bank(cid:1)server(cid:4)(cid:7)(cid:2) mach(cid:1)port(cid:1)t server(cid:1)port(cid:2) (cid:8)define MAX(cid:1)SIZE (cid:9)(cid:10)(cid:11) (cid:4)void(cid:7) mach(cid:1)msg(cid:1)server(cid:4)bank(cid:1)server(cid:5) MAX(cid:1)SIZE(cid:5) server(cid:1)port(cid:7)(cid:2) kern(cid:1)return(cid:1)t getbalance(cid:4)server(cid:1)port(cid:5) balance(cid:7) mach(cid:1)port(cid:1)t server(cid:1)port(cid:2) int (cid:12)balance(cid:2) (cid:13)(cid:12) out (cid:12)(cid:13) (cid:14) (cid:15)(cid:15)(cid:15) (cid:16) (cid:4) Mig Example (cid:13)(cid:12) file example(cid:15)defs (cid:12)(cid:13) subsystem example (cid:17)(cid:18)(cid:11)(cid:19)(cid:20)(cid:2) (cid:8)include (cid:21)mach(cid:13)std(cid:1)types(cid:15)defs(cid:22) (cid:13)(cid:12) manipulate a bank account (cid:12)(cid:13) routine getbalance(cid:4) server (cid:23) mach(cid:1)port(cid:1)t(cid:2) out balance (cid:23) int(cid:7)(cid:2) Client call(cid:10) (cid:8)include (cid:24)example(cid:15)h(cid:24) mach(cid:1)port(cid:1)t server(cid:2) int balance(cid:2) kern(cid:1)return(cid:1)t kr(cid:2) kr (cid:3) getbalance(cid:4)server(cid:5) (cid:6)balance(cid:7)(cid:2) Server function(cid:10) kern(cid:1)return(cid:1)t getbalance(cid:4)server(cid:5) balance(cid:7) mach(cid:1)port(cid:1)t server(cid:2) int (cid:12)balance(cid:2) (cid:13)(cid:12) out (cid:12)(cid:13) (cid:14) (cid:12)balance (cid:3) server(cid:1)balance(cid:2) return KERN(cid:1)SUCCESS(cid:2) (cid:16) (cid:5) Type De(cid:1)nitions (cid:13)(cid:12) from mach(cid:13)std(cid:1)types(cid:15)defs (cid:12)(cid:13) type mach(cid:1)port(cid:1)t (cid:3) MACH(cid:1)MSG(cid:1)TYPE(cid:1)COPY(cid:1)SEND(cid:2) type int (cid:3) MACH(cid:1)MSG(cid:1)TYPE(cid:1)INTEGER(cid:1)(cid:17)(cid:11)(cid:2) type kern(cid:1)return(cid:1)t (cid:3) int(cid:2) (cid:13)(cid:12) pointer to out(cid:25)of(cid:25)line memory (cid:12)(cid:13) type pointer(cid:1)t (cid:3) (cid:26)array(cid:27)(cid:28) of MACH(cid:1)MSG(cid:1)TYPE(cid:1)BYTE(cid:2) (cid:13)(cid:12) a (cid:17)(cid:18)(cid:25)byte structure (cid:12)(cid:13) type mach(cid:1)port(cid:1)status(cid:1)t (cid:3) struct(cid:27)(cid:29)(cid:28) of int(cid:2) (cid:13)(cid:12) C declarations for these types (cid:12)(cid:13) import (cid:21)mach(cid:13)std(cid:1)types(cid:15)h(cid:22)(cid:2) (cid:6) Asynchronous Messages (cid:13)(cid:12) file example(cid:15)defs (cid:12)(cid:13) subsystem example (cid:17)(cid:18)(cid:11)(cid:19)(cid:20)(cid:2) (cid:8)include (cid:21)mach(cid:13)std(cid:1)types(cid:15)defs(cid:22) (cid:13)(cid:12) set bank account balance (cid:12)(cid:13) routine setbalance(cid:4) server (cid:23) mach(cid:1)port(cid:1)t(cid:2) in balance (cid:23) int(cid:7)(cid:2) (cid:13)(cid:12) set it with an asynchronous message (cid:12)(cid:13) simpleroutine asetbalance(cid:4) server (cid:23) mach(cid:1)port(cid:1)t(cid:2) in balance (cid:23) int(cid:7)(cid:2) (cid:1) Client and server code looks like RPC(cid:1) (cid:1) Message(cid:2)ordering problems in multi(cid:2)threaded servers(cid:1) (cid:1) Control(cid:2)(cid:3)ow worries(cid:1) (cid:1) Not recommended for general use(cid:1) (cid:7) Asynchronous Messages Client call(cid:10) (cid:8)include (cid:24)example(cid:15)h(cid:24) mach(cid:1)port(cid:1)t server(cid:2) int balance(cid:2) kern(cid:1)return(cid:1)t kr(cid:2) kr (cid:3) setbalance(cid:4)server(cid:5) balance(cid:7)(cid:2) (cid:15)(cid:15)(cid:15) kr (cid:3) asetbalance(cid:4)server(cid:5) balance(cid:7)(cid:2) Server function(cid:10) kern(cid:1)return(cid:1)t setbalance(cid:4)server(cid:5) balance(cid:7) mach(cid:1)port(cid:1)t server(cid:2) int balance(cid:2) (cid:13)(cid:12) in (cid:12)(cid:13) (cid:14) server(cid:1)balance (cid:3) balance(cid:2) return KERN(cid:1)SUCCESS(cid:2) (cid:16) kern(cid:1)return(cid:1)t asetbalance(cid:4)server(cid:5) balance(cid:7) mach(cid:1)port(cid:1)t server(cid:2) int balance(cid:2) (cid:13)(cid:12) in (cid:12)(cid:13) (cid:14) server(cid:1)balance (cid:3) balance(cid:2) return KERN(cid:1)SUCCESS(cid:2) (cid:16) (cid:8) Structure Arguments (cid:13)(cid:12) file example(cid:15)defs (cid:12)(cid:13) subsystem example (cid:17)(cid:18)(cid:11)(cid:19)(cid:20)(cid:2) (cid:8)include (cid:21)mach(cid:13)std(cid:1)types(cid:15)defs(cid:22) (cid:8)include (cid:24)example(cid:1)types(cid:15)defs(cid:24) routine structdemo(cid:4) server (cid:23) mach(cid:1)port(cid:1)t(cid:2) in arg(cid:10) (cid:23) small(cid:1)struct(cid:1)t(cid:2) out arg(cid:11) (cid:23) small(cid:1)struct(cid:1)t(cid:2) inout arg(cid:17) (cid:23) small(cid:1)struct(cid:1)t(cid:7)(cid:2) (cid:13)(cid:12) file example(cid:1)types(cid:15)defs (cid:12)(cid:13) (cid:8)include (cid:21)mach(cid:13)std(cid:1)types(cid:15)defs(cid:22) type small(cid:1)struct(cid:1)t (cid:3) struct(cid:27)(cid:17)(cid:28) of int(cid:2) import (cid:24)example(cid:1)types(cid:15)h(cid:24)(cid:2) (cid:13)(cid:12) file example(cid:1)types(cid:15)h (cid:12)(cid:13) (cid:8)ifndef (cid:1)EXAMPLE(cid:1)TYPES(cid:1)H(cid:1) (cid:8)define (cid:1)EXAMPLE(cid:1)TYPES(cid:1)H(cid:1) typedef struct small(cid:1)struct (cid:14) int one(cid:2) int two(cid:27)(cid:11)(cid:28)(cid:2) (cid:16) small(cid:1)struct(cid:1)t(cid:2) (cid:8)endif (cid:1)EXAMPLE(cid:1)TYPES(cid:1)H(cid:1) (cid:9) Structure Arguments Client call(cid:10) (cid:8)include (cid:24)example(cid:15)h(cid:24) mach(cid:1)port(cid:1)t server(cid:2) small(cid:1)struct(cid:1)t arg(cid:10)(cid:5) arg(cid:11)(cid:5) arg(cid:17)(cid:2) kern(cid:1)return(cid:1)t kr(cid:2) kr (cid:3) structdemo(cid:4)server(cid:5) arg(cid:10)(cid:5) (cid:6)arg(cid:11)(cid:5) (cid:6)arg(cid:17)(cid:7)(cid:2) Server function(cid:10) kern(cid:1)return(cid:1)t structdemo(cid:4)server(cid:5) arg(cid:10)(cid:5) arg(cid:11)(cid:5) arg(cid:17)(cid:7) mach(cid:1)port(cid:1)t server(cid:2) small(cid:1)struct(cid:1)t arg(cid:10)(cid:2) (cid:13)(cid:12) in (cid:12)(cid:13) small(cid:1)struct(cid:1)t (cid:12)arg(cid:11)(cid:2) (cid:13)(cid:12) out (cid:12)(cid:13) small(cid:1)struct(cid:1)t (cid:12)arg(cid:17)(cid:2) (cid:13)(cid:12) inout (cid:12)(cid:13) (cid:14) (cid:12)arg(cid:11) (cid:3) (cid:12)arg(cid:17)(cid:2) (cid:12)arg(cid:17) (cid:3) arg(cid:10)(cid:2) return KERN(cid:1)SUCCESS(cid:2) (cid:16) (cid:1)(cid:10)

Description:
Lisp, Pascal, C early Matchmaker. Mary Thompson. Keith Wright. Mike Jones - exceptions. Mike Young - C. MIG. Mike Young. Rich Draves - rewrote.
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.