Dingo: taming device drivers

  • Authors:
  • Leonid Ryzhyk;Peter Chubb;Ihor Kuz;Gernot Heiser

  • Affiliations:
  • University of New South Wales, Sydney, Australia;NICTA, Sydney, Australia;NICTA, Sydney, Australia;NICTA, Sydney, Australia

  • Venue:
  • Proceedings of the 4th ACM European conference on Computer systems
  • Year:
  • 2009

Quantified Score

Hi-index 0.00

Visualization

Abstract

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.