Client and Server Stubs

CMSC621: Advanced Operating Systems
Nilanjan Banerjee
Associate Professor, University of Maryland
Baltimore County
[email protected]
http://www.csee.umbc.edu/~nilanb/teaching/621/
Slide Credit: Dr. Ying Lu
Advanced Operating Systems
1
Client-Server Communication
• Assume that you are developing a client-server
application:
– How to let the two processes (client and server)
located on two machines communicate with each
other?
• Socket programming: using functions like connect(sd,
(struct sockaddr *)&sin, sizeof(sin)), write(sd, buf,
strlen(buf)) etc.
Remote Procedure Calls (RPC)
• Avoid explicit message exchange between
processes
• Basic idea is to allow a process on a machine to
call procedures on a remote machine
– Make a remote procedure possibly look like a local
one
• Original paper on RPC:
– A. Birrell, B Nelson, “Implementing Remote
Procedure Calls”, ACM Symposium on Operating
System Principles, 1984
Conventional Procedure Call
• How are parameters passed in a local procedure call
– E.g.,
#include <sys/types.h>
#include <unistd.h>
...
char buf[20];
size_t nbytes;
ssize_t bytes_read;
int fd;
...
nbytes = sizeof(buf);
bytes_read = read(fd, buf, nbytes);
...
Conventional Procedure Call
Figure 4-5. (a) Parameter passing in a local procedure call:
the stack before the call to read. (b) The stack while the
called procedure is active.
Remote Procedure Calls (RPC)
• How are parameter passed in a remote
procedure call, while making it look like a local
procedure call?
Client and Server Stubs
Principle of RPC between a client and server
program.
Steps of a Remote Procedure Call
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Client procedure calls client stub in normal way
Client stub builds message, calls local OS
Client's OS sends message to remote OS
Remote OS gives message to server stub
Server stub unpacks parameters, calls server
Server does work, returns result to the stub
Server stub packs it in message, calls local OS
Server's OS sends message to client's OS
Client's OS gives message to client stub
Stub unpacks result, returns to client
Passing Value Parameters (1)
2-8
Steps involved in doing remote computation through RPC
Passing Value Parameters (2)
Passing Value Parameters (3)
a) Original message on the Pentium (little-endian)
b) The message after receipt on the SPARC (big-endian)
Note: the little numbers in boxes indicate the address of
each byte
Passing Value Parameters (3)
a)
b)
c)
Original message on the Pentium (little-endian)
The message after receipt on the SPARC (big-endian)
The message after being inverted (integer 5, string:
“LLIJ”)
Note: the little numbers in boxes indicate the address of
each byte
Passing reference parameters
– What is Call By Value and Call By Refernce?
– Example: call foo(int, int * ) or read(fd, buf, nbytes)
Machine B
Machine A
a
b
Copy value a and contents of loc b
into a’ and loc b’
Return Copy contents of loc b’ into b
foo(a, &b )
– Call by copy/restore
– The dreaded “pointer problem”
• Linked list
• Complex graph
a’
b’
Call foo(a, &b’ )
Marshalling
Values must match cross the network
Machine formats differ
– Integer byte order
• Little-endian or big-endian
– Floating point format
• IEEE 754 or not
Marshalling  transferring data structure used in remote
procedure call from one address space to another.
Define a “network format”, for example following XDR
(eXternal Data Representation) standard
http://www.ietf.org/rfc/rfc1832.txt
RPC: The basic mechanism
Client process
Client
routines
Server
routines
1
2
1. Client calls a local procedure on the
client stub
Server process
5
Client stub
Server
stub
RPC
runtime
RPC
runtime
3
Network
routines
Process
kernel
4
Network
routines
3. The client stub send this to the
remote system (via TCP/UDP)
4. The server stub unmarshalls the call
and args from the client
Process
kernel
6
2. The client stub acts as a proxy and
marshalls the call and the args.
5. The server stub calls the actual
procedure on the server
6. The server stub marshalls the
reply and sends it back to the client
Source: R. Stevens, Unix Network Programming (IPC)
Vol 2, 1998
Binding a Client to a Server (1)
• Registration of a server makes it possible for
a client to locate the server and bind to it.
• Server location is done in two steps:
1. Locate the server’s machine.
2. Locate the server on that machine.
Binding a Client to a Server (2)
Figure 4-13. Client-to-server binding in DCE.
Asynchronous RPC (1)
2-12
a)
b)
The interconnection between client and server in a
traditional RPC
The interaction using asynchronous RPC
Asynchronous RPC (2)
A client and server interacting through two
asynchronous RPCs
2-13
LPC v.s. RPC
• Global variables
• Client and server fail independently
– RPC: requires code to deal with server crashes
When Things Go Wrong
• Semantics of remote procedure calls
– Local procedure call: exactly once
• How many times a remote procedure call may
be called?
• A remote procedure call may be called:
– 0 time: server crashed or server process died before
executing server code
– 1 time: everything worked well
– 1 or more: due to excess latency or lost reply from
server, client retransmitted
• Exactly once may be difficult to achieve with
RPC
RPC Semantics
• Most RPC systems will offer either:
– at least once semantics
– or at most once semantics
• Understand application:
– Illustrate some applications that “at least once” is suitable?
• Idempotent functions: may be run any number of times without
harm
– Illustrate some applications that “at most once” is suitable?