Device independency is the main goal to design input/output software.
Here, device independency means that it should be possible to write computer programs that an access any input/output device without having to specify the device in advance.
Here are the list of some important issues for input/output software:
Here synchronous versus asynchronous transfers can also be called as blocking versus interrupt driven transfers.
The table given below describes the above listed three issues for input/output software:
|Input/Output Software Issue||Description|
|Error Handling||Generally, errors should be handled as close as possible to the computer hardware. It should try to correct the error itself if it can in case if the controller discovers a read error. And in case if it can't then the device driver should handle it.|
|Synchronous Vs. Asynchronous||Most physical input/output is asynchronous. The central processing unit starts the transfer and goes off to do something other until the
interrupt arrives. In case if input/output operations are blocking the user programs are much easier to write. After a read system call the
program is automatically suspended until the data are available in buffer.
Basically, it is up to the OS to make the operation that are really asynchronous look blocking to the user programs.
|Buffering||Sometime data that come off a device can't be stored directly in its final destination.
Buffering sometime has a major impact on the system's input/output performance because it involves considerable copying.