Interprocess Communication

Interprocess Communication

Networks • Mechanism by which two processes exchange information and coordinate activities Computer Computer Inter-process Communication process Computer CS 217 process NetworkNetwork Computer Computer 1 2 Inter-process Communication Pipes •Sockets • Provides an interprocess communication channel o Processes can be on any machine Processes can be created independently o output input o Used for clients/servers, distributed systems, etc. Process A Process B •Pipes o Processes must be on same machine o One process spawns the other • A filter is a process that reads from stdin and writes to stdout o Used mostly for filters stdin Filter stdout 3 4 Pipes (cont) Creating a Pipe • Many Unix tools are written as filters output o grep, sort, sed, cat, wc, awk ... Process A input Process B • Shells support pipes ls –l | more • Pipe is a communication channel abstraction who | grep mary | wc o Process A can write to one end using “write” system call ls *.[ch] | sort o Process B can read from the other end using “read” system call cat < foo | grep bar | sort > save • System call int pipe( int fd[2] ); return 0 upon success –1 upon failure fd[0] is open for reading fd[1] is open for writing • Two coordinated processes created by fork can pass data to each other using a pipe. 5 6 Pipe Example Dup int pid, p[2]; • Duplicate a file descriptor (system call) ... int dup( int fd ); if (pipe(p) == -1) duplicates as the lowest unallocated descriptor exit(1); fd pid = fork(); • Commonly used to redirect stdin/stdout if (pid == 0) { close(p[1]); • Example: redirect stdin to “foo” ... read using p[0] as fd until EOF ... int fd; } fd = open(“foo”, O_RDONLY, 0); else { close(0); close(p[0]); dup(fd); ... write using p[1] as fd ... close(fd); close(p[1]); /* sends EOF to reader */ wait(&status); } 7 8 Dup (cont) Pipes and Standard I/O • For convenience… int pid, p[2]; if (pipe(p) == -1) dup2( int fd1, int fd2 ); exit(1); use fd2(new) to duplicate fd1 (old) pid = fork(); closes fd2 if it was in use if (pid == 0) { • Example: redirect stdin to “foo” close(p[1]); dup2(p[0],0); fd = open(“foo”, O_RDONLY, 0); close(p[0]); dup2(fd,0); ... read from stdin ... close(fd); } else { close(p[0]); dup2(p[1],1); close(p[1]); ... write to stdout ... wait(&status); } 9 10 Pipes and Exec() K&P’s Example int pid, p[2]; #include <signal.h> close(tty); #include <stdio.h> if (pipe(p) == -1) istat = signal(SIGINT, SIG_IGN); exit(1); system( char *s) { pid = fork(); int status, pid, w, tty; qstat = if (pid == 0) { signal(SIGQUIT, SIG_IGN); fflush(stdout); close(p[1]); tty = open(“/dev/tty”, while ( dup2(p[0],0); O_RDWR); (w = wait(&status)) != pid close(p[0]); if (tty == -1) { && (w != -1) execl(...); fprintf(stderr, “...” ); ; return -1; } if (w == -1) status = -1; } else { signal(SIGINT, istat); close(p[0]); if ((pid = fork()) == 0 ) { signal(SIGQUIT, qstat); dup2(p[1],1); close(0); dup(tty); close(1); dup(tty); close(p[1]); return status; close(2); dup(tty); } ... write to stdout ... execlp(“sh”, “sh”, “-c”, s, wait(&status); NULL); } exit(127); } 11 12 Unix shell (sh, csh, bash, ...) Client-Server Model • Loop o Read command line from stdin o Expand wildcards o Interpret redirections < > | o pipe (as necessary), fork, dup, exec, wait Server Network (file server, • Start from code on previous slides, edit it until it’s a Unix Network mail server, shell! Client web server) Web browser Passive participant Emailer Waiting to be contacted Applications Active participant Initiate contacts 13 14 Message Passing Network Subsystem • Mechanism to pass data between two processes Sender sends a message from its memory User Application o Level Receiver receives the message and places it into its memory program o Socket API • Message passing is like using a telephone TCP or UDP Reliable data stream o Caller or unreliable data grams o Receiver Kernel IP Routes through the internet Level Device Driver Transmit or receive on LAN HW NIC Network interface card 15 16 Names and Addresses Socket •Host name • Socket abstraction o like a post office name; e.g., www.cs.princeton.edu o An end-point of network connection Treat like a file descriptor • Host address o o like a zip code; e.g., 128.112.92.191 • Conceptually like a telephone Connect to the end of a phone plug • Port number o o You can speak to it and listen to it o like a mailbox; e.g., 0-64k NetworkNetwork 17 18 Steps for Client and Server Creating A Socket (Install A Phone) Client Server • Creating a socket • Create a socket with the socket() • Create a socket with the socket() #include <sys/types.h> system call system call #include <sys/socket.h> • Connect the socket to the • Bind the socket to an address int socket(int domain, int type, int protocol) address of the server using the using the bind() system call. For – Domain: PF_INET (Internet), PF_UNIX (local) connect() system call a server socket on the Internet, an address consists of a port – Type: SOCK_STREAM, SOCK_DGRAM, SOCK_RAW • Send and receive data, using number on the host machine. – Protocol: 0 usually for IP (see /etc/protocols for details) write() and read() system calls or send() and recv() system calls • Listen for connections with the • Like installing a phone listen() system call o Need to what services you want • Accept a connection with the – Local or long distance accept() system call. This call – Voice or data typically blocks until a client – Which company do you want to use connects with the server. • Send and receive data 19 20 Connecting To A Socket Binding A Socket • Active open a socket (like dialing a phone number) • Need to give the created socket an address to listen to int connect(int socket, (like getting a phone number) struct sockaddr *addr, int addr_len) int bind(int socket, struct sockaddr *addr, int addr_len) – Passive open on a server 21 22 Specifying Queued Connections Accepting A Socket • Queue connection requests (like “call waiting”) • Wait for a call to a socket (picking up a phone when it rings) int listen(int socket, int backlog) int accept(int socket, – Set up the maximum number of requests that will be queued struct sockaddr *addr, before being denied (usually the max is 5) int addr_len) – Return a socket which is connected to the caller – Typically blocks until the client connects to the socket 23 24 Sending and Receiving Data Close A Socket • Sending a message • Done with a socket (like hanging up the phone) int send(int socket, char *buf, int blen, int flags) • Receiving a message close(int socket) int recv(int socket, char *buf, int blen, int flags) • Treat it just like a file descriptor 25 26 Summary •Pipes o Process communication on the same machine o Connecting processes with stdin and stdout • Messages o Process communication across machines o Socket is a common communication channels o They are built on top of basic communication mechanisms 27.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    7 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us