The flow of events within the device subsystem is engineered
to minimize overhead and maximize throughput when a device
is in raw mode. To accomplish this, the following
rules are used:
- Interrupt handlers place received data directly into a
memory queue. Only when a read operation is pending,
and that read operation can be satisfied, will the
interrupt handler schedule the driver to run. In all
other cases, the interrupt simply returns. Moreover, if
io-char is already running, no scheduling takes
place, since the availability of data will be noticed
without further notification.
- When a read operation is satisfied, the driver
replies to the application process directly from
the raw input buffer into the application's receive buffer.
The net result is that the data is copied only once.
These rules—coupled with the extremely small
interrupt and scheduling latencies inherent within the OS—result in a very lean
input model that provides
POSIX conformance together with extensions suitable to the
realtime requirements of protocol implementations.