Improved Device Driver Reliability Through Verification Reuse

Faulty device drivers are a major source of operating system failures. We argue that the underlying cause of many driver faults is the separation of two highly-related tasks: device verification and driver development. These two tasks have a lot in common, and result in software that is conceptually and functionally similar, yet kept totally separate. The result is a particularly bad case of duplication of effort: the verification code is correct, but is discarded after the device has been manufactured; the driver code is inferior, but used in actual device operation. We claim that the two tasks, and the software they produce, can and should be unified, and this will result in drastic improvement of device-driver quality and reduction in the development cost and time to market. In this paper we discuss technical issues involved in achieving such unification and present our solutions to these issues. We report the results of a case study that applies this approach to implement a driver for an Ethernet controller device.

[1]  Leonid Ryzhyk,et al.  Dingo: taming device drivers , 2009, EuroSys '09.

[2]  YangJunfeng,et al.  An empirical study of operating systems errors , 2001 .

[3]  Asim Kadav,et al.  Tolerating hardware device failures in software , 2009, SOSP '09.

[4]  Franco Fummi,et al.  Correct-by-construction generation of device drivers based on RTL testbenches , 2009, 2009 Design, Automation & Test in Europe Conference & Exhibition.

[5]  Soha Hassoun,et al.  A transaction-based unified simulation/emulation architecture for functional verification , 2001, Proceedings of the 38th Design Automation Conference (IEEE Cat. No.01CH37232).

[6]  Archana Ganapathi,et al.  Windows XP Kernel Crash Analysis , 2006, LISA.

[7]  George Candea,et al.  Testing Closed-Source Binary Device Drivers with DDT , 2010, USENIX Annual Technical Conference.

[8]  Junfeng Yang,et al.  An empirical study of operating systems errors , 2001, SOSP.

[9]  Gernot Heiser,et al.  User-Level Device Drivers: Achieved Performance , 2005, Journal of Computer Science and Technology.

[10]  Laurent Réveillère,et al.  Devil: an IDL for hardware programming , 2000, OSDI.

[11]  Leonid Ryzhyk,et al.  Automatic device driver synthesis with termite , 2009, SOSP '09.

[12]  Sriram K. Rajamani,et al.  Thorough static analysis of device drivers , 2006, EuroSys.