Presentation is loading. Please wait.

Presentation is loading. Please wait.

I/O Multiplexing. What is I/O multiplexing? When an application needs to handle multiple I/O descriptors at the same time –E.g. file and socket descriptors,

Similar presentations


Presentation on theme: "I/O Multiplexing. What is I/O multiplexing? When an application needs to handle multiple I/O descriptors at the same time –E.g. file and socket descriptors,"— Presentation transcript:

1 I/O Multiplexing

2 What is I/O multiplexing? When an application needs to handle multiple I/O descriptors at the same time –E.g. file and socket descriptors, multiple socket descriptors When I/O on any one descriptor can result in blocking

3 Non-forking concurrent server Concurrent Server select() C1C2C3C4C5 listenfd fd1fd2fd3fd4 fd5 Sockets  Clients 

4 I/O Models 1.Blocking I/O 2.Non-blocking I/O 3.I/O multiplexing – select() 4.Signal driven I/O 5.Asynchronous I/O

5 Blocking I/O recvfrom() No datagram ready datagram ready Copy datagram Copy completeProcess datagram System call ApplicationOperating system Wait for data Copy data to user Return ok Process blocks

6 Non-Blocking I/O recvfrom() No datagram ready datagram ready Copy datagram Copy completeProcess datagram System call ApplicationOperating system Copy data to user Return ok Process blocks EWOULDBLOCK recvfrom() No datagram ready System call EWOULDBLOCK recvfrom() System call

7 I/O Multiplexing select() No datagram ready datagram ready Copy datagram Copy completeProcess datagram System call ApplicationOperating system Wait for data Copy data to user Return ok Process blocks Return readable Process blocks recvfrom() System call

8 Signal driven I/O Establish SIGIO Signal handler No datagram ready datagram ready Copy datagram Copy complete Process datagram System call ApplicationOperating system Wait for data Copy data to user Return ok Process blocks Deliver SIGIO Process continues recvfrom() System call Signal Handler

9 Asynchronous I/O aio_read() No datagram ready datagram ready Copy datagram Copy complete Signal handler Process datagram System call ApplicationOperating system Wait for data Copy data to user Return ok Process continues return

10 select() call Allows a process to wait for an event to occur on any one of its descriptors. Types of event –ready for read –ready for write –Exception condition

11 select() call int select( int maxfdp1,/* max. fd + 1 */ fd_set *readfds, /* read ready? */ fd_set *writefds, /* write ready? */ fd_set *exceptfds, /* exceptions? */ struct timeval *timeout); struct timeval { long tv_sec; /* seconds */ long tv_usec; /* microseconds */ }

12 struct fd_set Set of descriptors that we want to wait on for events. Typically holds 256 descriptor states. Manipulation macros –void FD_ZERO(fd_set *fds) –void FD_SET (int fd, fd_set *fds) –void FD_CLR (int fd, fd_set *fds) –void FD_ISSET(int fd, fd_set *fds)

13 Non-forking Concurrent Server fdset rdset, wrset; int listenfd, connfd1, connfd2; int maxfdp1; ……… Connection establishment etc. ……… /* initialize */ FD_ZERO(&rdset); FD_ZERO(&wrset);

14 for( ;; ) { FD_SET(connfd1, &rdset); FD_SET(connfd2, &wrset); FD_SET(listenfd, &rdset); maxfdp1 = max(connfd1, connfd2, listenfd) + 1; /* wait for some event */ Select(maxfdp1, &rdset, &wrset, NULL, NULL); if( FD_ISSET(connfd1, &rdset) ) { Read data from connfd1… } if( FD_ISSET(connfd2, &wrset) ) { Write data to connfd2… } if( FD_ISSET(listenfd, &rdset) { Process a new connection… }

15 High resolution timer! Select can be used as a millisecond resolution timer. select ( 0, NULL, NULL, NULL, &timeval) Usual sleep (…) call has resolution of seconds.

16 Socket Options

17 Managing socket options – 3 ways getsockopt() and setsockopt() fcntl() ioctl()

18 getsockopt() and setsockopt() int getsockopt( int sockfd, int level, /* SOL_SOCKET, IPPROTO_IP, IPPROTO_TCP etc */ int optname, /* option name */ void *opt­val, /* option value */ socklen_t *optlen); /* data length of option*/ int setsockopt( int sockfd, int level, int optname, const void *optval, socklen_t optlen);

19 Some socket options SO_BROADCAST - enable socket for sending broadcast SO_KEEPALIVE – regularly probes on inactive TCP connection. SO_LINGER – linger till all data is sent before returning from close() on a TCP connection. SO_RCVBUF/ SO_SNDBUF – size of receive/send buffers on socket. SO_RCVTIMEO/SO_SNDTIMEO – place timeout on receive/send operation.

20 fcntl() int fcntl(int fd, int cmd, long arg); Miscellaneous file control operations –Non-blocking I/O (O_NONBLOCK, F_SETFL) –Signal-driven I/O (O_ASYNC, F_SETFL) –Set socket owner (F_SETOWN)


Download ppt "I/O Multiplexing. What is I/O multiplexing? When an application needs to handle multiple I/O descriptors at the same time –E.g. file and socket descriptors,"

Similar presentations


Ads by Google