5d003182f995a6fbe254496560835047914bbdd8
[pintos-anon] / sigcse2009 / introduction.tex
1 \section{Introduction}
2 \label{sec:intro}
3
4 Despite the wide use of higher-level languages and environments, gaining a robust
5 understanding of operating systems (OS) fundamentals and training in the current design and
6 implementation practices of operating systems remains a cornerstone goal of 
7 undergraduate computer science education.
8
9 % abstract/concrete
10 % internal/external
11 Approaches to teaching such a course generally fall along two axes: 
12 whether the treatment of the material is abstract or 
13 concrete~\cite{Hovemeyer2004Running}, and whether they adopt an
14 internal or external perspective~\cite{Deitel2003Operating}.
15 An abstract approach discusses algorithms and techniques used in operating 
16 systems and may include partial implementation or simulation exercises,
17 whereas a concrete approach stresses the design and creation of 
18 realistic artifacts.
19 When adopting the internal perspective, an operating system is considered
20 from the point of view of the OS designer, whereas the external perspective 
21 assumes the role of a user or programmer using an OS's 
22 facilities~\cite{Bryant2002Computer}.
23
24 % is this too controversial for this audience?
25 The approach advocated in this paper adopts a concrete approach and the internal
26 perspective.  Students who have been in the role of an
27 OS designer bring a better understanding of how to use one; and students
28 who have both studied, implemented, and evaluated core OS techniques obtain 
29 a deeper understanding than those who have merely studied them.
30 Finally, adopting a concrete approach brings significant secondary
31 benefits, including training in modern software development techniques
32 and tools.  The C language remains the implementation language of choice
33 for operating system kernels and for many embedded systems.
34 Practice and debugging skills in C, particularly using modern tools,
35 not only increases students' ``market value,''~\cite{1292450} but provides students with
36 the insight that a low-level programming and runtime model is not incompatible
37 with high-level tools.
38
39 Designing course material for the internal and concrete 
40 approach is challenging for several reasons.  While realistic, 
41 assignments should be relatively simple and doable within a realistic time frame.  
42 Whereas assignments should use current hardware architectures, 
43 they must not impart too much knowledge that is transient.
44 Assignments should include and emphasize the use of modern software 
45 engineering practices and tools, such as dynamic program analysis.
46
47 This paper introduces Pintos, an instructional operating system kernel that 
48 has been in use at several institutions for about 4 years.  Pintos provides 
49 a bootable kernel for standard personal computers.  We provide several
50 structured assignments in which students implement a basic priority
51 scheduler, a multi-level feedback queue scheduler, the ability to
52 load programs and support a set of system calls, page-based virtual memory
53 including on-demand paging, memory-mapped files, and swapping, and a
54 simple hierarchical file system.  An overview of the projects enabled
55 by Pintos is given in Figure~\ref{fig:pintosdetail}, which shows which
56 software is provided, which is created by students, and the relative 
57 relationship of test cases to Pintos modules.
58
59 Although Pintos follows in the tradition of instructional operating systems 
60 such as Nachos~\cite{Christopher1993Nachos}, OS/161~\cite{Holland2002New}, and
61 GeekOS~\cite{Hovemeyer2004Running}, 
62 PortOS~\cite{Atkin2002PortOS},
63 BLITZ~\cite{PorterOverview},
64 JOS~\cite{1088822}, or Yalnix~\cite{1088822},
65 we believe that it is unique in two
66 aspects.  First, Pintos runs on both real hardware and in emulated and
67 simulated environments.\footnote{GeekOS claims to also run on real hardware, it requires,
68 however, a dedicated disk and does not support running off USB devices, making
69 it impractical for many lab settings.}
70 Second, we have created a set of analysis tools
71 for the emulated environment that allows students to detect programming
72 mistakes such as race conditions.  Figure~\ref{fig:pintosenvs} shows
73 the three environments in which the same kernel can be run.
74
75 Others have used Linux, either on dedicated devices (e.g., iPodLinux~\cite{1352199}),
76 or in virtualizated environments~\cite{1008027,1352648,Nieh2005Experiences}, to provide
77 an internal, concrete perspective.  Compared to those approaches, Pintos provides
78 a similar level of realism to students in that they can see the result of their
79 work on concrete or virtualized hardware, but does not require that students 
80 understand the often arcane and ill-documented interfaces of the Linux kernel,
81 which were not designed from an educational perspective.
82
83 This paper summarizes the design philosophy that underlies Pintos,
84 details its structure, and outlines the nature and learning goals of each
85 assignment.
86
87 \pintosenvfigure{}
88
89 \pintosdetailfigure{}
90
91 % Challenges.
92 % How to embed principles?
93 % How to teach software engineering?
94 % Realism vs. Simplification
95
96 %User-Mode Linux\cite{1008027}
97 %Virtualization\cite{1352648}
98 %Linux in VM\cite{Nieh2005Experiences}
99