CPS110: More Networks Landon Cox March 27, 2008 Network abstractions We’ve been using send/receive Client sends a request to the server Server receives request Server sends response to client What else in CS is this interaction like? Calling a function Remote procedure call (RPC) RPC makes request/response look local Provide a function call abstraction RPC isn’t a really a function call In a normal call, the PC jumps to the function Function then jumps back to caller This is similar to request/response though Stream of control goes from client to server And then returns back to the client RPC stub functions Key to making RPC work Stub functions RPC stub functions call return return call Client stub Server stub send recv send recv RPC stub functions Client stub 1) Builds request message with server function name and parameters 2) Sends request message to server stub (transfer control to server stub) 8) Receives response message from server stub 9) Returns response value to client Server stub 3) Receives request message 4) Calls the right server function with the specified parameters 5) Waits for the server function to return 6) Builds a response message with the return value 7) Sends response message to client stub RPC example Client calls produce(5) Client stub: Server stub: // must be named produce! int produce (int n) { int status; send (sock, &n, sizeof(n)); recv (sock, &status, sizeof(status)); return status; } // could be named anything void produce_stub () { int n; int status; recv (sock, &n, sizeof(n)); // produce func on server! status = produce (n); send (sock, &status, sizeof(status)); } Server stub code can be generated automatically (C/C++: rpcgen, Java: rmic) What info do you need to generate the stubs? Input parameter types and the return value type. Java RMI example Remote calculator program Problems with RPC How is RPC different from local function calls? Hard to pass pointers (and global variables) What happens if server dereferences a passed-in pointer? Pointer will access server’s memory (not client’s) How do we solve this? Send all data reachable from pointer to the server Change the pointers on the server to point to the copy Copy data back when server function returns Example RPC with pointers On client: int a[100]; Want to send “a” (a pointer to an array) Copy entire array to server Have server’s pointer point to copy of a Copy array back to client on return What if a is more complicated? A linked list? Have to marshal the transitive closure of pointer Problems with RPC Data may be represented differently Machines have different “endianness” Byte 0 may be least or most significant Must agree on standard network representation RPC has different failure modes Server or client can fail during a call In local case, client and server fail simultaneously Finishing RPC Where have you used RPC in CPS 110? Project 2 infrastructure C library interface to system calls is similar Makes something look like a function call Structuring a concurrent system Talked about two ways to build a system Alternative structure Can also give cooperating threads an address space Each thread is basically a separate process Use messages instead of shared data to communicate Why would you want to do this? Protection Each module runs in its own address space Reasoning behind micro-kernels Each service runs as a separate process Mach from CMU (influenced parts Mac OS X) Vista’s handling of device drivers Course administration Project 2 scores (out of 89) 88, 86, 86, 86, 86, 84, 84, 84, 84, 71, 66, 50 Great! Project 3 out next week (I hope) Questions?