A Comparison of the Linux and Windows Device Driver Architectures Melekam Tsegaye Rhodes University, South Africa g98t4414@campus.ru.ac.za Richard Foss Rhodes University, South Africa r.foss@ru.ac.za Abstract: In this paper the device driver architectures currently used by two of the most popular operating systems, Linux and Microsoft’s Windows, are examined. Driver components required when implementing device drivers for each operating system are presented and compared. The process of implementing a driver, for each operating system, that performs I/O to a kernel buffer is also presented. The paper concludes by examining the device driver development environments and facilities provided to developers by each operating system. 1. Introduction Modern operating system kernels consist of a number of components such as a memory manager, process scheduler, hardware abstraction layer (HAL) and security manager. For a detailed look at the Windows kernel refer to [Russinovich, 98] and for the Linux kernel [Rusling, 99], [Beck et al, 98]. The kernel can be viewed as a black box that should know how to interact with the many different types of hardware devices that exist and the many more devices that do not yet exist. Creating a kernel that has inbuilt functionality for interacting with all known hardware devices may be possible but is not practical. It would consume too many system resources, needlessly. 1.1. Kernel Modularity A kernel is not expected to know how to interact with new types of devices that do not yet exist at the time of its creation. Instead modern operating system kernels allow their functionality to be extended by the addition of device driver modules at runtime. A module implements functionality that will allow the kernel to interact with a particular new device. Each module implements a routine that the kernel will call at module load time and a routine that gets called at module removal time. Modules also implement various routines that will implement I/O functionality for transferring data to and from a device as well as a routine for issuing device I/O control instructions to a device. The above applies to both the Linux and Windows driver architectures. 1.2. Organisation of this paper The material in this paper is divided into the following sections: • General driver architecture of the two operating systems (section 2) • Driver architecture components of each operating system (sections 3) • Implementation of a driver that performs I/O to a kernel buffer (section 4) • Driver development environments and facilities offered by the two operating systems to developers (section 5) 1.3. Related Work The Windows device driver architecture is documented by documentation that accompanies the Windows Device Driver Development kit [Microsoft DDK, 02]. Further, the works produced by Walter Oney [Oney, 99] and Chris Cant [Cant, 99] present a detailed account of the Windows Driver Architecture. The Linux device driver architecture is documented well by the freely available publication authored by Rubini et al [Rubini et al, 01].