This document provides an overview of VAX/VMS device drivers, explaining their role, structure, and interaction within the operating system. A device driver is defined as a collection of routines and tables that enable the VMS operating system to process I/O requests for peripheral devices.
The module reviews key VMS concepts, including processes, system routines, Interrupt Priority Levels (IPLs), and access modes. It details the architecture of device drivers, outlining their functions (such as initiating I/O, handling interrupts, reporting errors, and device initialization) and components, which include Driver Prologue Tables (DPT), Driver Dispatch Tables (DDT), and Function Decision Tables (FDT). These tables guide the operating system in satisfying user I/O requests.
The document differentiates between Programmed I/O (CPU-driven byte/word transfers) and Direct Memory Access (DMA) (device-driven block transfers), and discusses two types of I/O: Direct I/O (data transferred directly between user buffer and device, with locked buffer pages) and Buffered I/O (data transferred via an intermediate system buffer, allowing user processes to be swappable).
It explains the $ASSIGN system service for establishing a channel to a device and the $QIO system service for queuing I/O requests to a driver, highlighting both device-independent and device-dependent parameters. A significant portion is dedicated to driver fork processes, which handle I/O operations with minimal context, run in system space, and manage synchronization using IPLs, fork queues, and wait queues.
Finally, the document addresses driver resource contention for shared resources such as the central processor, mapping registers (used for address translation), buffered data paths, and the controller data channel, concluding with an overview of the entire I/O sequence from a user's request to its completion.
Site structure and layout ©2025 Majenko Technologies