skip to main content
10.1145/1346281.1346303acmconferencesArticle/Chapter ViewAbstractPublication PagesasplosConference Proceedingsconference-collections
research-article

The design and implementation of microdrivers

Published:01 March 2008Publication History

ABSTRACT

Device drivers commonly execute in the kernel to achieve high performance and easy access to kernel services. However, this comes at the price of decreased reliability and increased programming difficulty. Driver programmers are unable to use user-mode development tools and must instead use cumbersome kernel tools. Faults in kernel drivers can cause the entire operating system to crash. User-mode drivers have long been seen as a solution to this problem, but suffer from either poor performance or new interfaces that require a rewrite of existing drivers.

This paper introduces the Microdrivers architecture that achieves high performance and compatibility by leaving critical path code in the kernel and moving the rest of the driver code to a user-mode process. This allows data-handling operations critical to I/O performance to run at full speed, while management operations such as initialization and configuration run at reduced speed in user-level. To achieve compatibility, we present DriverSlicer, a tool that splits existing kernel drivers into a kernel-level component and a user-level component using a small number of programmer annotations. Experiments show that as much as 65% of driver code can be removed from the kernel without affecting common-case performance, and that only 1-6 percent of the code requires annotations.

Skip Supplemental Material Section

Supplemental Material

Video

References

  1. Apple Inc. Introduction to I/O kit fundamentals, 2006.Google ScholarGoogle Scholar
  2. Francois Armand. Give a process to your drivers! In EurOpen Autumn 1991, September 1991.Google ScholarGoogle Scholar
  3. T. Ball and S. K. Rajamani. The SLAM project: Debugging system software via static analysis. In POPL, 2002. Google ScholarGoogle ScholarDigital LibraryDigital Library
  4. B. N. Bershad, T. E. Anderson, E. D. Lazowska, and H. M. Levy. Lightweight remote procedure call. ACM TOCS, 8(1), 1990. Google ScholarGoogle ScholarDigital LibraryDigital Library
  5. D. Brumley and D. Song. Privtrans: Automatically partitioning programs for privilege separation. In USENIX Security, 2004. Google ScholarGoogle ScholarDigital LibraryDigital Library
  6. S. Chong, J. Liu, A. C. Myers, X. Qi, K. Vikram, L. Zheng, and X. Zheng. Secure web applications via automatic partitioning. In SOSP, 2007. Google ScholarGoogle ScholarDigital LibraryDigital Library
  7. A. Chou, J. Yang, B. Chelf, S. Hallem, and D. Engler. An empirical study of operating system errors. In SOSP, 2001. Google ScholarGoogle ScholarDigital LibraryDigital Library
  8. P. Chubb. Get more device drivers out of the kernel! In Ottawa Linux Symp., 2004.Google ScholarGoogle Scholar
  9. C. L. Conway and S. A. Edwards. NDL: A domain-specific language for device drivers. In LCTES, 2004. Google ScholarGoogle ScholarDigital LibraryDigital Library
  10. Information Networks Division. Netperf: A network performance benchmark. http://www.netperf.org.Google ScholarGoogle Scholar
  11. J. Elson. FUSD: A Linux framework for user-space devices, 2004. User manual for FUSD 1.0.Google ScholarGoogle Scholar
  12. D. R. Engler, B. Chelf, A. Chou, and S. Hallem. Checking system rules using system-specific, programmer-written compiler extensions. In OSDI, 2000. Google ScholarGoogle ScholarDigital LibraryDigital Library
  13. Ú. Erlingsson, T. Roeder, and T. Wobber. Virtual environments for unreliable extensions. Technical Report MSR-TR-05-82, Microsoft Research, June 2005.Google ScholarGoogle Scholar
  14. M. Rozier et al. Overview of the Chorus distributed operating system. In USENIX Symp. on Microkernels & other kernel architectures, 1992. Google ScholarGoogle ScholarDigital LibraryDigital Library
  15. K. Fraser, S. Hand, R. Neugebauer, I. Pratt, A. Warfield, and M. Williamson. Safe hardware access with the Xen virtual machine monitor. In Workshop on Operating System and Architectural Support for the On-Demand IT Infrastructure, 2004.Google ScholarGoogle Scholar
  16. V. Ganapathy, A. Balakrishnan, M. M. Swift, and S. Jha. Microdrivers: A new architecture for device drivers. In HotOS, 2007. Google ScholarGoogle ScholarDigital LibraryDigital Library
  17. G. C. Hunt and M. L. Scott. The Coign automatic distributed partitioning system. In OSDI, 1999. Google ScholarGoogle ScholarDigital LibraryDigital Library
  18. Jungo. Windriver cross platform device driver development environment. Technical report, Jungo Corporation, February 2002. http://www.jungo.com/windriver.html.Google ScholarGoogle Scholar
  19. J. Lepreau, M. Hibler, B. Ford, J. Law, and D. B. Orr. In-kernel servers on Mach 3.0: Implementation and performance. In USENIX Mach III Symp., 1993. Google ScholarGoogle ScholarDigital LibraryDigital Library
  20. B. Leslie, P. Chubb, N. Fitzroy-Dale, S. Gotz, C. Gray, L. Macpherson, D. Potts, Y. Shen, K. Elphinstone, and G. Heiser. User-level device drivers: Achieved performance. Jour. Comp. Sci. and Tech., 20(5), 2005.Google ScholarGoogle Scholar
  21. J. LeVasseur, V. Uhlig, J. Stoess, and S. Gotz. Unmodified device driver reuse and improved system dependability via virtual machines. In OSDI, 2004. Google ScholarGoogle ScholarDigital LibraryDigital Library
  22. J. Liedtke. On μ-kernel construction. In SOSP, 1995.Google ScholarGoogle ScholarDigital LibraryDigital Library
  23. A. Manolitzas. A specific domain language for network interface cards, 2001.Google ScholarGoogle Scholar
  24. F. Mérillon, L. Réveillère, C. Consel, R. Marlet, and G. Muller. Devil: An IDL for hardware programming. In OSDI, 2000.Google ScholarGoogle ScholarDigital LibraryDigital Library
  25. Microsoft. Architecture of the user-mode driver framework, May 2006. Version 0.7.Google ScholarGoogle Scholar
  26. Microsoft Corp. Wdm: Introduction to windows driver model. http://www.microsoft.com/whdc/archive/wdm.mspx.Google ScholarGoogle Scholar
  27. Microsoft Corporation. Windows XP embedded with service pack 1 reliability. http://msdn2.microsoft.com/enus/library/ms838661.aspx, January 2003.Google ScholarGoogle Scholar
  28. Microsoft Inc. Microsoft interface definition language.Google ScholarGoogle Scholar
  29. G. C. Necula, S. Mcpeak, S. P. Rahul, and W. Weimer. CIL: Intermediate language and tools for analysis and transformation of C programs. In Intl. Conf. on Compiler Constr., 2002. Google ScholarGoogle ScholarDigital LibraryDigital Library
  30. N. Nethercode and J. Seward. Valgrind: A framework for heavyweight dynamic binary instrumentation. In PLDI, 2007. Google ScholarGoogle ScholarDigital LibraryDigital Library
  31. A. Purohit, C. P. Wright, J. Spadavecchia, and E. Zadok. Cosy: Develop in user-land, run in kernel-mode. In HotOS, 2003. Google ScholarGoogle ScholarDigital LibraryDigital Library
  32. M. E. Russionvich and D. A. Solomon. Inside Windows 2000. Microsoft Press, Redmond, Washington, 2000.Google ScholarGoogle Scholar
  33. David A. Solomon. Inside Windows NT. Microsoft Press, 1998. Google ScholarGoogle ScholarDigital LibraryDigital Library
  34. Sun Microsystems. Java idl. http://java.sun.com/products/jdk/idl.Google ScholarGoogle Scholar
  35. M. M. Swift, M. Annamalai, B. N. Bershad, and H. M. Levy. Recovering device drivers. In OSDI, 2004. Google ScholarGoogle ScholarDigital LibraryDigital Library
  36. M. M. Swift, B. N. Bershad, and H. M. Levy. Improving the reliability of commodity operating systems. ACM TOCS, 23(1), February 2005. Google ScholarGoogle ScholarDigital LibraryDigital Library
  37. L. Torvalds. UIO: Linux patch for user-mode I/O, July 2007.Google ScholarGoogle Scholar
  38. K. T. Van Maren. The Fluke device driver framework. Master's thesis, Dept. of Computer Science, Univ. of Utah, December 1999.Google ScholarGoogle Scholar
  39. T. von Eicken, A. Basu, V. Buch, and W. Vogels. U-Net: A user-level network interface for parallel and distributed computing. In SOSP, 1995. Google ScholarGoogle ScholarDigital LibraryDigital Library
  40. E. Witchel, J. Rhee, and K. Asanovic. Mondrix: Memory isolation for Linux using Mondriaan memory protection. In SOSP, 2005. Google ScholarGoogle ScholarDigital LibraryDigital Library
  41. M. Young, M. Accetta, R. Baron, W. Bolosky, D. Golub, R. Rashid, and A. Tevanian. Mach: A new kernel foundation for UNIX development. In Summer USENIX Conference, 1986.Google ScholarGoogle Scholar
  42. S. Zdancewic, L. Zheng, N. Nystrom, and A. C. Myers. Secure program partitioning. ACM TOCS, 20(3), August 2002. Google ScholarGoogle ScholarDigital LibraryDigital Library
  43. F. Zhou, J. Condit, Z. Anderson, I. Bagrak, R. Ennals, M. Harren, G. Necula, and E. Brewer. SafeDrive: Safe and recoverable extensions using language-based techniques. In OSDI, 2006. Google ScholarGoogle ScholarDigital LibraryDigital Library

Index Terms

  1. The design and implementation of microdrivers

          Recommendations

          Comments

          Login options

          Check if you have access through your login credentials or your institution to get full access on this article.

          Sign in

          PDF Format

          View or Download as a PDF file.

          PDF

          eReader

          View online with eReader.

          eReader
          About Cookies On This Site

          We use cookies to ensure that we give you the best experience on our website.

          Learn more

          Got it!