10 March, 2015

Lect-17 (I/O Models)

What is I/O multiplexing?
The capacity to tell the kernel that we want to be notified if one or more I/O conditions are ready (e.g. input is ready to be read, or the buffer is capable of taking more output) Provided by select and poll functions.

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

Scenarios for I/O multiplexing in C/S
        I/O multiplexing: to be notified, by kernel, if one or more I/O conditions are ready.
        A client handles multiple descriptors, or sockets
        A server handles both a listening socket and its connected sockets
        A server handles both TCP and UDP
        A server handles multiple services and protocols
        It is possible, but rare, for a client to handle multiple sockets at the same time.

I/O Models
          There are five I/O models under Unix
        Blocking I/O
        Nonblocking I/O
        I/O multiplexing (select and poll)
        Signal driven I/O (SIGIO)
        Asynchronous I/O
          Two distinct phases for an input operation
        Waiting for the data to be ready
        Copying the data from the kernel to the process
          Definition of “data being ready”
        For UDP, an entire datagram has been received
        For TCP, data received passed the low-water mark
Blocking I/O

          Process is put to sleep if blocked

Non Blcoking IO
          When an I/O cannot be completed, the process is not put to sleep, but returns with an error (EWOULDBLOCK) and Waste of CPU time.

I/O Multiplexing

          Use select or poll to report if some descriptor is readable or writable. select may be blocked if no descriptor is readable or writable.

          Signal driven I/O:
       If a descriptor is ready, notify the process with the SIGIO signal. Non blocked in wait but   blocked in copy (signaled when I/O can be initiated)

Asynchronous I/O
The process initiates an I/O operation. When it is complete, the process is notified.
           



Comparison of I/O models: