The input/output system is the part of the operating system
charged with the management of I/O devices. Acting as the interface between
system users and I/O devices, the input/output system provides a means, by which
files and devices are treated in a uniform manner and are manipulated by means
of a set of high-level commands, such as READ_STRING. At the device end,
however, the I/O system must supply the device-specific control signals to each
particular type of device, possibly many times in the course of execution of a
single high-level command. Higher-level function of the input/output system.
After a brief outline of the structure and role of the
input/output section of computer system, we introduce the notion of an
input/output port, stressing the aspect of concern to system programming and
informaly analyze the resulting timing in order to asses to performance
boundaries of the various I/O schemes. Following the exposition of program
controlled I/O, we present a somewhat more involved discussion of interrupts.
The purpose of this discussion is both
to explore the kind of hardware support to the operating system normally provided in this area and to indicate the potential for parallel operation that is exploited by multiprogramming operating system and is discussed in detail in subsequent chapters.
to explore the kind of hardware support to the operating system normally provided in this area and to indicate the potential for parallel operation that is exploited by multiprogramming operating system and is discussed in detail in subsequent chapters.
Given is complexity and impact on performance, concurrency
is a major topic in operating system theory. As many of the concurrency-related
problems are either originating from or present in the input/output system, our
goal in this chapter is to explore the principles of input/output system, to
study the elements of I/O programming, and to introduce the increasing degrees
of concurrent execution of I/O operations that the hardware supports. In so
doing, we will encounter a number of increasingly difficult scheduling problem
that we solve using largely ad hoc and intuitive techniques, mimicking those
frequently used by programmers. Toward the end of the chapter we conclude that
even higher degrees of concurrency are possible, but that they require a much
more rigid and systematic programming discipline, discussed in subsequent
chapters.