DOIO Read System Call

                             

Initial semaphore settings:

 

req_serviced := 0; req_pending := 0; device := 0; op_complete := 0;

                                                           

USER                               DOIO                            Device Handler           Device

                                         

DOIO(stream, mode,         identify device;              wait(req_pending);      wait(device);

      amount, destination,    perform error checks;    pick IORB from                 locate device

      semaphore);               assemble IORB;                   request queue;                 descriptor;

                                       place IORB on device     initiate I/O;                       satisfy read request;

            .                                request queue;        signal(device);            signal(op_complete);

            .                          signal(req_pending);      wait(op_complete);

            .                          exit;                              perform error checks;

wait(req_serviced);                                                                       perform housekeeping;

test error location;                                                                       signal(req_serviced);

                                                                                                    delete IORB;

 

               Operating System Boundary                                               Hardware Boundary