Dedicated Operating Systems

Dedicated Operating Systems is an advanced course on Operating Systems offered within the context of our Computer Science Degree Program. It is a practical course that targets the engineering of dedicated operating systems as arrangements of customizable software components. The Application-driven Embedded System Design methodology lays the conceptual foundations of this course, while the EPOS System yields a platform for the practical exercises carried along the course.


The formal requisite for this course is Operating System I. However, basic knowledge about Object-Oriented Design and Programming and about the C++ Programming Language is also desirable.

Program (72 hours)

Topic Notes Hours
1 - Introduction PDF HTML 4
2 - Operating Systems Engineering
2.1 - Fundamentals
2.2 - Aspect-oriented Programming
2.3 - Static Metaprogramming
2.4 - Application Driven Embedded System Design
2.5 - Case Study: EPOS Domain Engineering
3 - Operating Systems Implementation
3.1 - System programming with C++
3.2 - Case Study: EPOS Implementation
4 - Development of an operating system component and related aspects 36
5 - Discussion 4
6 - Optimization topics PDF HTML PDF HTML 4


Students will have their skills to engineer an operating system evaluated through practical work that consists in designing and implementing an operating system component utilizing the software engineering techniques discussed during the course. This will be evaluated in three phases: design, implementation, and presentation of results.


The following exercises have been devised as an introduction to OS kernel development. They are based on a didactic version of EPOS. For the exercises bellow, this version has been striped down to an even simpler version that will be incrementally enriched step by step. The ine5424 branch will be used on this track up to a point in which the differences between the didactic version of EPOS and OpenEPOS will be basically added functionality. Before starting, you might want to read OpenEPOS Documentation (which largely applies to the didactic version too) or this specific Quick Start Brief.

  1. E1: blocking thread synchronization
  2. E2: blocking thread joining
  3. E3: idle thread
  4. E4: timing
  5. E5: system object destruction
  6. E6: multiple, specialized heaps
  7. E7: scheduler isolation
  8. E8: real-time task scheduling
  9. E9: on OS software architecture


  1. Thomas Anderson, The Case for Application-Specific Operating Systems, in Proceedings of the Third Workshop on Workstation Operating Systems, pages 92-94, 1992.
  2. Maurice J. Bach, The Design of the UNIX Operating System, Prentice-Hall, 1987.
  3. Moshe Bar, Linux Internals, Osborne McGraw-Hill, 2000.
  4. Danilo Beuche at al., The PURE Family of Object-Oriented Operating Systems for Deeply Embedded Systems, in Proceedings of the 2nd IEEE International Symposium on Object-Oriented Real-Time Distributed Computing, 1999.
  5. Roy H. Campbell, Gary M. Johnston and Vincent F. Russo, Choices (Class Hierarchical Open Interface for Custom Embedded Systems), Operating Systems Review, 21(3):9-17, 1987.
  6. Krysztof Czarnecki and Ulrich Eisenecker, Generative Programming: Methods, Tools, and Applications, Addison-Wesley, 2000.
  7. Dawson R. Engler, M. Frans Kaashoek, James O'Toole, Exokernel: An Operating System Architecture for Application-level Resource Management, in Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles, pages 251-266, 1995.
  8. Bryan Ford at al., The Flux OS Toolkit: Reusable Components for OS Implementation, in Proceedings of the Sixth Workshop on Hot Topics in Operating Systems, pages 14-19, 1997.
  9. Antônio Augusto Fröhlich, Application-Oriented Operating Systems, GMD - Forschungszentrum Informationstechnik, 2001.
  10. Samuel J. Leffler, Marshall Kirk McKusick, and Michael J. Karels, The Desing and Implementation of The 4.3 BSD UNIX Operating System, Addison-Wesley, 1989.
  11. David Lorge Parnas, On the Design and Development of Program Families, IEEE Transactions on Software Engineering, SE-2(1):1-9, 1976.
  12. Abraham Silberschatz, Peter Galvin and James Peterson, Operating Systems Concepts, 5th ed., John Wiley and Sons, 1998.
  13. Wolfgang Schröder-Preikschat, The Logical Design of Parallel Operating Systems, Prentice-Hall, 1994.
  14. Bjarne Stroustrup, The C++ Programming Language, Addison-Wesley, 1997.
  15. Andrew S. Tanenbaum, Modern Operating Systems, Prentice-Hall, 1992.