From 02d9affcb344f1ebc4253c59230fea7119469a89 Mon Sep 17 00:00:00 2001 From: Godmar Back Date: Fri, 29 Aug 2008 20:42:15 +0000 Subject: [PATCH] rearranged figures, various fixes for style, grammar, and clarity --- sigcse2009/abstract.tex | 21 ++++++----- sigcse2009/assignments.tex | 16 ++++---- sigcse2009/figures.tex | 21 +++++++++++ sigcse2009/introduction.tex | 18 ++++----- sigcse2009/pintosoverviewlegend.pdf | Bin 0 -> 54035 bytes sigcse2009/pintosoverviewnolegend.pdf | Bin 0 -> 78046 bytes sigcse2009/principles.tex | 51 ++++++++++++++------------ sigcse2009/racedt.tex | 2 +- sigcse2009/rest.tex | 8 ++-- 9 files changed, 82 insertions(+), 55 deletions(-) create mode 100644 sigcse2009/pintosoverviewlegend.pdf create mode 100644 sigcse2009/pintosoverviewnolegend.pdf diff --git a/sigcse2009/abstract.tex b/sigcse2009/abstract.tex index 372fa22..2656271 100644 --- a/sigcse2009/abstract.tex +++ b/sigcse2009/abstract.tex @@ -1,10 +1,13 @@ Pintos is an instructional operating system, complete with documentation -and ready-made, structured assignments that introduce students to the -principles of multi-programming, scheduling, virtual memory, and file systems. -By allowing students to run their work product on actual hardware, -rather than only in simulated or emulated environments, Pintos can -increase student engagement. Unlike tailored versions of commercial -or open source OS such as Linux, Pintos is designed from the ground up -from an educational perspective. Finally, Pintos includes a set of -debugging, diagnosis, and dynamic analysis tools to reduce the complexity -of kernel-level development. +and ready-made, structured assignments that introduce students to +the principles of multi-programming, scheduling, virtual memory, +and file systems. By allowing students to run their work product on +actual hardware, while simultaneously benefiting from the debugging +and dynamic analysis tools provided in simulated and emulated environments, +Pintos increases student engagement. Unlike tailored versions of +commercial or open source OS such as Linux, Pintos is designed from the +ground up from an educational perspective. +It has been used by multiple institutions for a number of years and +is available for wider use. +%Finally, Pintos includes a set of debugging, diagnosis, and dynamic analysis +%tools to reduce the complexity of kernel-level development. diff --git a/sigcse2009/assignments.tex b/sigcse2009/assignments.tex index 5187b5e..3d8ff0f 100644 --- a/sigcse2009/assignments.tex +++ b/sigcse2009/assignments.tex @@ -19,7 +19,7 @@ \subsection{Project 1 -- Threads} % intro -Project 1 centers around threads. The baseline Pintos code boots into a kernel that +Project 1 revolves around threads. The baseline Pintos code boots into a kernel that supports multiple in-kernel threads. It provides code for initialization, thread creation and destruction, context switches, thread blocking and unblocking as well as a simple but preemptive round-robin scheduler. @@ -27,7 +27,7 @@ Students study the existing, barebones threading system (about 600 lines of C co understand how threads are created and destroyed, and to understand the transitioning of threads between the READY, RUNNING, and BLOCKED states. They also study how a thread's internal memory is managed, which is used to store its runtime stack and thread control block. -Student can examine the context switch code, but the projects do not involve any modifications +Students can examine the context switch code, but the projects do not involve any modifications to it. After reading the baseline code, the project asks students to implement several features @@ -178,7 +178,7 @@ page replacement schemes. \paragraph{Learning Objectives} In project 3, students learn how an OS creates the environment in which a user program executes as it relates to the program's code and variables. -It also provides a deep understanding of how OS use fault resumption to +It also provides a deep understanding of how OS use fault resumption to virtualize a process's use of physical memory. In addition, students gain hands-on experience with page replacement algorithms and have the opportunity to observe their performance impact. @@ -200,17 +200,17 @@ we use an intermediate ``scratch'' disk or partition that is attached to the physical or virtual computer on which Pintos runs, and use the student's kernel to copy files in and out of their filesystems. Similarly, we encourage students to experiment with different replacement -strategies for their buffercache (though we require that their algorithm +strategies for their buffer cache (though we require that their algorithm behaves at least as good as a least-recently-used (LRU) strategy. As with all projects, this assignment includes additional parallel programming -tasks: in this project, we include a requirement that students a multiple-reader, -single-writer access scheme for individual buffer cache blocks. +tasks: in this project, we suggest that students implement +a multiple-reader, single-writer access scheme for individual buffer cache blocks. \paragraph{Testing and Grading} Project 4 adds a new set of test cases that test the extended functionality. -Project 4 does not require the virtual memory functionality, so can be built -either on project 2 or 3 depending on the instructor's judgment. +Project 4 does not require the virtual memory functionality, so it can be built +on either project 2 or 3, depending on the instructor's judgment. For each functionality test, we provide a sibling persistence test that verifies that the changes done to the filesystem survive a shutdown and restart. diff --git a/sigcse2009/figures.tex b/sigcse2009/figures.tex index 5510a75..68194ce 100644 --- a/sigcse2009/figures.tex +++ b/sigcse2009/figures.tex @@ -21,6 +21,27 @@ \end{figure*} } +% these are needed to use \fbox{} to surround includegraphics with so we can see the borders +\setlength\fboxsep{0pt} +\setlength\fboxrule{0.5pt} + +\newcommand{\pintosdetailfiguretwo}{ + \begin{figure*}[htp] + % \centering + \begin{tabular}{cc} + % left bottom right top + \includegraphics[trim=.0in .4in .25in .1in, width=.7\textwidth]{pintosoverviewnolegend.pdf} + & + \includegraphics[trim=.0in 3.3in 7.3in .0in, width=1.6in]{pintosoverviewlegend.pdf} + \\ + \end{tabular} + \caption{Components of Pintos split in provided support code, test cases, + and components created in assignments. Overlapping components indicate + when students have to replace parts of the support code.} + \label{fig:pintosdetail} + \end{figure*} +} + \newcommand{\pintostestcounttable}{ \begin{table} \begin{tabular}{lccc} diff --git a/sigcse2009/introduction.tex b/sigcse2009/introduction.tex index 7584680..cd76579 100644 --- a/sigcse2009/introduction.tex +++ b/sigcse2009/introduction.tex @@ -3,12 +3,12 @@ Despite the wide use of higher-level languages and environments, gaining a robust understanding of operating systems (OS) fundamentals and training in the current design and -implementation practices of operating systems remains a cornerstone goal of +implementation practices of OS remains a cornerstone goal of undergraduate computer science education. % abstract/concrete % internal/external -Approaches to teaching such a course generally fall along two axes: +Approaches to teaching OS courses generally fall along two axes: whether the treatment of the material is abstract or concrete~\cite{Hovemeyer2004Running}, and whether they adopt an internal or external perspective~\cite{Deitel2003Operating}. @@ -40,7 +40,7 @@ Designing course material for the internal and concrete approach is challenging for several reasons. While realistic, assignments should be relatively simple and doable within a realistic time frame. Whereas assignments should use current hardware architectures, -they must not impart too much knowledge that is transient. +they must not impart too much transient knowledge. Assignments should include and emphasize the use of modern software engineering practices and tools, such as dynamic program analysis. @@ -48,13 +48,13 @@ This paper introduces Pintos, an instructional operating system kernel that has been in use at several institutions for about 4 years. Pintos provides a bootable kernel for standard personal computers. We provide several structured assignments in which students implement a basic priority -scheduler, a multi-level feedback queue scheduler, the ability to -load programs and support a set of system calls, page-based virtual memory +scheduler, a multi-level feedback queue scheduler, a process-based +multi-programming system, page-based virtual memory including on-demand paging, memory-mapped files, and swapping, and a simple hierarchical file system. An overview of the projects enabled by Pintos is given in Figure~\ref{fig:pintosdetail}, which shows which -software is provided, which is created by students, and the relative -relationship of test cases to Pintos modules. +software is provided as support code and test cases, +the parts that are created by students, and their relationship. Although Pintos follows in the tradition of instructional operating systems such as Nachos~\cite{Christopher1993Nachos}, OS/161~\cite{Holland2002New}, and @@ -75,7 +75,7 @@ mistakes such as race conditions. Figure~\ref{fig:pintosenvs} shows the three environments in which the same kernel can be run. Others have used Linux, either on dedicated devices (e.g., iPodLinux~\cite{1352199}), -or in virtualizated environments~\cite{1008027,1352648,Nieh2005Experiences}, to provide +or in virtualized environments~\cite{1008027,1352648,Nieh2005Experiences}, to provide an internal, concrete perspective. Compared to those approaches, Pintos provides a similar level of realism to students in that they can see the result of their work on concrete or virtualized hardware, but does not require that students @@ -89,7 +89,7 @@ Pintos code is written to be studied by students. \pintosenvfigure{} -\pintosdetailfigure{} +\pintosdetailfiguretwo{} % Challenges. % How to embed principles? diff --git a/sigcse2009/pintosoverviewlegend.pdf b/sigcse2009/pintosoverviewlegend.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8cb87926e2c1b295139d71417c862ff9f017b57f GIT binary patch literal 54035 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�zqA=JYl98%E2W_D?m+arH_xpVT$Ym-OLTb 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 Y(eKX*1&8khzZ>j7bY^2_{hQAJ2h;%u1ONa4 literal 0 HcmV?d00001 diff --git a/sigcse2009/pintosoverviewnolegend.pdf b/sigcse2009/pintosoverviewnolegend.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f6fbe60754b2996b0b8c2349979145e936f284a6 GIT binary patch literal 78046 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 Z42@~%|B{@*a$)F0iyXD8Da!Du{{p}`Wat0@ literal 0 HcmV?d00001 diff --git a/sigcse2009/principles.tex b/sigcse2009/principles.tex index 059ba71..6812348 100644 --- a/sigcse2009/principles.tex +++ b/sigcse2009/principles.tex @@ -1,21 +1,24 @@ \section{Design Principles} \label{sec:designprinciples} -The Pintos series of projects are built on a number of principles. +Pintos's projects are built on a number of principles. \paragraph{Read before you Code} Each project involves a significant amount of reading code before -students write the first line of their code. +students write the first line of code. Because software maintenance constitutes the vast majority of all software development efforts~\cite{Boehm1981Software}, this setup mirrors the environment in which most software engineers work. +Simultaneously, we limit the amount students have to read +by encapsulating lower layers, such as device drivers. We went to great lengths to write the entire Pintos baseline code, -and in particular the portions students will read, in a style that shows, -by example, the coding style we expect from students. This style -includes purely syntactical convention such as the choice of the -GNU indentation style, and extends to commenting style and naming -conventions. During the semesters in which Pintos was used, we -continuously refined the internal code documentation, focusing on those +and in particular the portions students must read, in a style that shows, +by example, the coding style we expect from students. +% cut for length +%This style includes purely syntactical convention such as the choice of the +%GNU indentation style, and extends to commenting style and naming conventions. +We continuously refined the internal code documentation over several +semesters, focusing on those portions that initially proved difficult to understand or confusing. \paragraph{Maximize Creative Freedom} @@ -28,42 +31,42 @@ own data structures and associated algorithms as much as possible. \paragraph{Practice Test-driven Development} %Test-driven development~\cite{Edwards} Each project includes a large number of test cases that is accessible -to students. -They must implement the API that is exercised by these test cases. An overview is provided in Table~\ref{table:tests}. +to students, as shown in Table~\ref{table:tests}. +They must implement the API that is exercised by these test cases. Students are encouraged to add their own test cases. \paragraph{Work in a Team} The projects presented in this paper are designed to be accomplished by teams of 2-4 students. Working in a team provides an environment that more closely resembles -industrial software development, and it provides a way for students brainstorm and +industrial software development, and it provides a way for students to brainstorm and implement together. In addition, we teach and require the use of group collaboration tools, notably shared source code version control systems such as CVS. \paragraph{Justify your Design} Design justification and rationale is as important for learning as creating an artifact -that fulfill a set of given requirements. We designed a set of structured questionnaires +that fulfills a set of given requirements. We designed a set of structured questionnaires in which students describe their design and discuss choices and trade-offs they made. \paragraph{Provide a Reproducible, Manageable Environment} Operating Systems are inherently concurrent environments, which can be difficult to debug. For educational use, we must provide an environment that is -manageable and reproducible, which is given by the option -of running Pintos in a simulated environment eliminates this -non-determinism. As a result, Pintos kernels can be debugged in a manner that +manageable and reproducible, which we do by providing the option +of running Pintos in a simulated, fully deterministic environment. +As a result, Pintos kernels can be debugged in a manner that is substantially similar to how user programs are being debugged. \paragraph{Include Analysis Tools} -Static and dynamic analysis tools are now widely being used; an OS course should -be no exception. We have extended the Qemu emulator that perform tailored -analyses that can point out errors such as race conditions. +Static and dynamic analysis tools are now being widely used; an OS course should +be no exception. We have extended the QEMU emulator~\cite{Bellard2005QEMU} to +perform tailored analyses that point out errors such as race conditions. \paragraph{Provide Extensive and Structured Documentation} -Instructional systems often are not shared, or fall in disuse because the expertise to use them -in a teaching setting relies on too much undocumented knowledge, making training of -teaching assistants difficult and providing a steep learning curve for instructors -wishing to use. Pintos includes an extensive 129 page manual, a sample solution, -and instructions for teaching assistants. The assignment documentation separates those parts -students must read from those parts that merely provide supplemental information. +If using an instructional system requires too much undocumented knowledge, +the system is often not shared, or falls into disuse, because the learning curve +for instructors wishing to use it is too steep and training teaching assistants is difficult. +Pintos includes an extensive 129 page manual, a sample solution, +and instructions for teaching assistants. The assignment documentation separates sections +students must read from sections that merely provide supplemental information. %Even though Pintos uses an existing and complex architecture, our experience indicates %that the manual is sufficient for most students. diff --git a/sigcse2009/racedt.tex b/sigcse2009/racedt.tex index 2c9064d..5200655 100644 --- a/sigcse2009/racedt.tex +++ b/sigcse2009/racedt.tex @@ -16,7 +16,7 @@ call stacks for the racing threads is generated. Invalid memory accesses, such as a read from newly allocated but uninitialized data, are detected by tracking all memory accesses. Heap allocation calls are instrumented to map a range of addresses as -uninitialized. When data is written to a memory address, it is marked as initialized. If a address +uninitialized. When data is written to a memory address, it is marked as initialized. If an address marked as uninitialized is read from, the error is reported and the address is marked as uninitialized to mask spurious reports. % More sophisticated analysis may be implemented in the future. diff --git a/sigcse2009/rest.tex b/sigcse2009/rest.tex index fc73c43..7f22a85 100644 --- a/sigcse2009/rest.tex +++ b/sigcse2009/rest.tex @@ -3,11 +3,11 @@ In the future, we will expand Pintos's analysis capabilities to provide quantitative information and include realistic device models. -We also considering the extension of Pintos to multiple -CPUs, and the development of assignments that involve +We are also considering extending Pintos to multiple +CPUs, and developing assignments that involve networking and interprocess communication (IPC). Although feedback from our industrial affiliates, who compare -students having Pintos to students having taken course that use -less concrete or external approaches, is highly favorable, +students having used Pintos to students having taken courses +that use less concrete or external approaches, is highly favorable, we need to perform a formal evaluation comparing learning outcomes using Pintos to other alternatives. -- 2.30.2