School of Computer Science and Engineering
University of New South Wales
Sydney 2052 Australia
National ICT Australia, Sydney,
Australia
Open Kernel Labs, Sydney, Australia
Device drivers are notorious for being a major source of failure in operating systems. In analysing a sample of real defects in Linux drivers, we found that a large proportion (39%) of bugs are due to two key shortcomings in the device-driver architecture enforced by current operating systems: poorly-defined communication protocols between drivers and the OS, which confuse developers and lead to protocol violations, and a multithreaded model of computation that leads to numerous race conditions and deadlocks. We claim that a better device driver architecture can help reduce the occurrence of these faults, and present our Dingo framework as constructive proof. Dingo provides a formal, state-machine based, language for describing driver protocols, which avoids confusion and ambiguity, and helps driver writers implement correct behaviour. It also enforces an event-driven model of computation, which eliminates most concurrency-related faults. Our implementation of the Dingo architecture in Linux offers these improvements, while introducing negligible performance overhead. It allows Dingo and native Linux drivers to coexist, providing a gradual migration path to more reliable device drivers.
@inproceedings{Ryzhyk_CKH_09,
author = {Leonid Ryzhyk and Peter Chubb and Ihor Kuz and Gernot Heiser},
booktitle = {Proceedings of the 4th EuroSys Conference},
title = {Dingo: Taming Device Drivers},
year = {2009},
month = {Apr},
address = {Nuremberg, Germany}
}