Process-oriented device driver development

Operating systems (OSs) are the core software component of many modern computer systems, ranging from small specialized embedded systems through to large distributed OSs. The demands placed upon these systems are increasingly complex, in particular, the need to handle concurrency in order to exploit increasingly parallel (multi-core) hardware, to support increasing numbers of user and system processes and to take advantage of increasingly distributed and decentralized systems. The languages and designs that existing OSs employ provide little support for concurrency, leading to unmanageable programming complexities and ultimately errors in the resulting systems, which are hard to detect, hard to remove and hard to prove correct. This article presents the process-oriented design of a universal serial bus device driver infrastructure for the Raw Metal occam eXperiment (RMoX) OS and its implementation in the occam-pi multiprocessing language. We show how concurrency can be used for the benefit of such systems, simplifying design and implementation, providing freedom from race-hazard and aliasing errors and the potential for guarantees of operating system scalability, reliability and efficiency. Copyright © 2007 F.R.M. Barnes & C.G. Ritson. [Correction made here after initial online publication] Revised version of Ritson CG, Barnes FRM. A Process Oriented Approach to USB Driver Development. In McEwan AA, Schneider S, Ifill W, Welch PH (eds). Communicating Process Architectures 2007. IOS Press: Amsterdam. Published with permission from IOS Press. This article was published online on 8 May 2009. An error was subsequently identified. This notice is included in the online and print versions to indicate that both have been corrected [18 June 2009].

[1]  Pat Hanrahan,et al.  Brook for GPUs: stream computing on graphics hardware , 2004, SIGGRAPH 2004.

[2]  Robin Milner,et al.  Communicating and mobile systems - the Pi-calculus , 1999 .

[3]  C. A. R. Hoare,et al.  Communicating sequential processes , 1978, CACM.

[4]  Thomas A. Henzinger,et al.  The software model checker Blast , 2007, International Journal on Software Tools for Technology Transfer.

[5]  Konstantinos Sagonas,et al.  A language for specifying type contracts in erlang and its interaction with success typings , 2007, ERLANG '07.

[6]  Peter H. Welch,et al.  Communicating Mobile Processes , 2004, 25 Years Communicating Sequential Processes.

[7]  Fred R. M. Barnes,et al.  Dynamics and pragmatics for high performance concurrency , 2003 .

[8]  Mark P. Jones,et al.  A principled approach to operating system construction in Haskell , 2005, ICFP '05.

[9]  Brian Vinter,et al.  RMoX: A Raw-Metal occam Experiment , 2003 .

[10]  Peter H. Welch,et al.  Graceful Termination -- Graceful Resetting , 1989 .

[11]  S. Ramesh,et al.  Assertion Checking Environment (ACE) for Formal Verification of C Programs , 2002, SAFECOMP.

[12]  Galen C. Hunt,et al.  Solving the starting problem: device drivers as self-describing artifacts , 2006, EuroSys '06.

[13]  Peter H. Welch,et al.  Mobile Data, Dynamic Allocation and Zero Aliasing: an occam Experiment , 2001 .

[14]  James R. Larus,et al.  Language support for fast and reliable message-based communication in singularity OS , 2006, EuroSys.

[15]  Peter H. Welch,et al.  Higher-Level Paradigms for Deadlock-Free High-Performance Systems , 1993 .

[16]  Fred R. M. Barnes,et al.  A Process Oriented Approach to USB Driver Development , 2007, CPA.

[17]  Thomas A. Henzinger,et al.  The software model checker B last : Applications to software engineering , 2007 .

[18]  Ken Thompson,et al.  Plan 9 from Bell Labs , 1995 .