The Fluke Device Driver Framework

Kevin T. Van Maren
Department of Computer Science
University of Utah, Salt Lake City, UT 84112
vanmaren@cs.utah.edu

Master's Thesis
December, 1999

Abstract

Providing efficient device driver support in the Fluke operating system presents novel challenges, which stem from two conflicting factors: (i) a design and maintenance requirement to reuse unmodified legacy device drivers, and (ii) the mismatch between the Fluke kernel's internal execution environment and the execution environment expected by these legacy device drivers. This thesis presents a solution to this conflict: a framework whose design is based on running device drivers as user-mode servers, which resolves the fundamental execution environment mismatch.

This approach introduces new problems and issues, of which the most important are synchronization, interrupt delivery, physical memory allocation, access to shared resources, and performance. We successfully addressed the functional issues, as demonstrated by the fact that the majority of device drivers execute successfully without change and are routinely used by Fluke developers. Based on our experience with the minority of drivers that did require changes, and our experience developing the framework, we propose guidelines for improving device drivers' portability across different execution environments.

Running device drivers in user mode raises serious performance issues but on the whole they were successfully mitigated. We compare the driver performance in Fluke with that in the original legacy systems, in terms of latency, bandwidth, and processor utilization. We find that reasonable performance (between 88-93% of the best-performing Unix systems in a realistic workload) and acceptable processor overhead (between 0-100%) are achievable. The limiting factor is the IPC performance of the underlying Fluke layers.


The full thesis is available in gzip'ed Postscript and PDF formats.