Transcript IOSystems

I/O Hardware
 Incredible variety of I/O devices
Operating System Concepts
13.1
Silberschatz, Galvin and Gagne 2002
I/O Hardware
 Devices vary in many dimensions
 Direction
 Read, Write, Read-Write
 Character, Block
 Speed
 Latency, Transfer rate, Delay between operations
 Access
 Sequential, Random
 Sharing
 Sharable, Dedicated
 IO subsystem reduces perceived differences for apps, and
optimizes performances for apps
Operating System Concepts
13.2
Silberschatz, Galvin and Gagne 2002
I/O Hardware
 Common concepts (provide abstraction)
 Port (serial, parallel, ethernet)
 Bus (daisy chain or shared direct access)
 Controller (host adapter operates ports/bus/device)
 See my picture
Operating System Concepts
13.3
Silberschatz, Galvin and Gagne 2002
A Kernel I/O Structure
Operating System Concepts
13.4
Silberschatz, Galvin and Gagne 2002
Application I/O Interface
 I/O system calls encapsulate device behaviors in generic
classes
 Device-driver layer hides differences among I/O
controllers from kernel
 Makes OS independent of the IO hardware
 Provided by the device/controller manufacturers
 DDs are part of the OS (not processes) usually
 OS defines interface to DDs
 Non-standard across OSs => device manufacturers have to
provide a DD for each OS (bugger)
 Applications normally reach the DDs via the OS
 Escape entry (e.g., ioctl) allows more direct access
Operating System Concepts
13.5
Silberschatz, Galvin and Gagne 2002
Kernel I/O Subsystem
 Scheduling
 To maximize performance
 I/O request ordering via per-device queue
 Some OSs try fairness
 Device reservation - provides exclusive
access to a device (e.g., in VMS)
 System calls for allocation and deallocation
 Wait for device on call, e.g., NT
 Watch out for deadlock
Operating System Concepts
13.6
Silberschatz, Galvin and Gagne 2002
Kernel I/O Subsystem
 Buffering - store data in memory while transferring
between devices
 To cope with device speed mismatch
 E.g., modem to disk (x1000)
 Double buffering
 To cope with device transfer size mismatch
 E.g., keyboard to disk
 Collating network packets
 To maintain “copy semantics”
 Caching - fast memory holding copy of data
 Always just a copy (as opposed to a buffer)
 Often implemented in buffer system
 Key to performance
Operating System Concepts
13.7
Silberschatz, Galvin and Gagne 2002
Error Handling
 OS can recover from transient failures E.g., disk read,
device unavailable, network failures
 Permanent failures
 OS can make devices unavailable
 Need operator intervention
 System calls return an error code when I/O fails
 System error logs hold problem reports
 More detailed information than return values
 HW diagnostic information, e.g., from SCSI controllers
Operating System Concepts
13.8
Silberschatz, Galvin and Gagne 2002
Blocking and Non-blocking I/O
 Blocking - process suspended until I/O completed
 Easy to use and understand
 Insufficient for some needs
 Non-blocking - I/O call returns as much as available
 E.g., user interface, data copy (buffered I/O)
 Can be implemented via multi-threading
 Returns quickly with count of bytes read or written
 Asynchronous - process runs while I/O executes
 Difficult to use
 I/O subsystem signals process when I/O completed
Operating System Concepts
13.9
Silberschatz, Galvin and Gagne 2002
Life Cycle of An I/O Request
 Request may be satisfied




immediately, e.g., in cache
The request for the DD may
have to be queued
CPU runs async with device
DD waits in sync with device
It’s blocking I/O.
 Non-blocking I/O always “can
satisfy request”
 Asynchronous I/O does not
block the process
 Direct I/O instructions
 Placed in registers
 Status, control, data-in, data-out
 Memory-mapped I/O
 Maps registers onto RAM
 Can be faster than I/O
instructions
Operating System Concepts
13.10
Silberschatz, Galvin and Gagne 2002
An Alternative - Polling
 Synchronous communication
 Controller waits for command-ready bit in controller status
register bit to be set
 Host waits for busy bit in controller status register to be clear
(initially it is clear)
 Host places command in command register, and any required
data in data register
 Host sets command-ready bit, and waits for it to clear
 Controller notices command-ready bit, sets busy bit, clears
command-ready bit.
 Host loops waiting for busy bit to clear, while controller does IO
 Controller clears busy and command-ready bits, and loops
 Vantages
 Done once for each byte
 Wasteful of CPU time if IO takes long
 Can use offboard CPU, e.g., in SCSI controller
 Useful for fast data streams
Operating System Concepts
13.11
Silberschatz, Galvin and Gagne 2002
Direct Memory Access
 Used to avoid programmed I/O for large data movement
 If device transmits close to memory speeds, little time is left
for processing
 Requires DMA controller
 Bypasses CPU to transfer data directly between I/O
device and memory
 DMA controller steals RAM cycles from CPU
Operating System Concepts
13.12
Silberschatz, Galvin and Gagne 2002
Six Step Process to Perform DMA Transfer
Operating System Concepts
13.13
Silberschatz, Galvin and Gagne 2002
Spooling
 Spooling - hold output for a device
 If device can serve only one request at a time
 Provides asynchronous I/O
 i.e., Printing and the lpd
Operating System Concepts
13.14
Silberschatz, Galvin and Gagne 2002
Network Devices
 Approaches vary widely
 Pipes
 FIFOs
 Streams
 Queues
 Mailboxes
 Socket interface
 Separates network protocol from network operation
 Includes select functionality
Operating System Concepts
13.15
Silberschatz, Galvin and Gagne 2002
Kernel Data Structures
 Kernel keeps state info for I/O components, including
open file tables, network connections, character device
state
 Many, many complex data structures to track buffers,
memory allocation, “dirty” blocks
 Some use object-oriented methods and message passing
to implement I/O, e.g., NT, Nachos, nu
Operating System Concepts
13.16
Silberschatz, Galvin and Gagne 2002
4.3 BSD Kernel I/O Structure
 Cooked interfaces are buffered
 Block buffers
 C-lists
 Raw interfaces are unbuffered
 Devices have major and minor device numbers.
 Major number used as index into array of DD entry points
 Direct access via ioctl() and /dev files
Operating System Concepts
13.17
Silberschatz, Galvin and Gagne 2002
Block Buffer Cache
 Consist of buffer headers, each of which can point to a piece of




physical memory, and contain a device number and a block
number on the device.
The buffer headers for blocks not currently in use are kept in
several linked lists:
 Buffers not recently used, or with invalid contents (AGE list).
 Buffers recently used, linked in LRU order (LRU list).
 Buffers with no associated physical memory (EMPTY list).
On read the cache is searched.
 If the block is found it is used - no I/O transfer is necessary.
 If it is not found, a buffer is chosen from the AGE list, or the
LRU list if AGE is empty.
On write, if the block is in the cache, then write and set dirty bit
 Dirty blocks are output by regular sync()
Blocks may be fragmented, and headers are taken from EMPTY
Operating System Concepts
13.18
Silberschatz, Galvin and Gagne 2002
Raw Device Interfaces
 The raw device interface — unlike the block interface, it
bypasses the block buffer cache.
 Each disk driver maintains a queue of pending transfers:
 whether it is a read or a write
 a main memory address for the transfer
 a device address for the transfer
 a transfer size
 Can use user memory for a transfer record
Operating System Concepts
13.19
Silberschatz, Galvin and Gagne 2002
C-Lists
 Terminal drivers use a character buffering system which
involves keeping small blocks of characters in linked lists.
 A write system call to a terminal enqueues characters on
a list for the device. An initial transfer is started, and
interrupts cause dequeueing of characters and further
transfers, i.e., it’s asynchronous
 Input is similarly interrupt driven.
 It is also possible to have the device driver bypass the
canonical queue and return characters directly from the
raw queue — raw mode (used by full-screen editors and
other programs that need to react to every keystroke).
Operating System Concepts
13.20
Silberschatz, Galvin and Gagne 2002