From 3aadab63d2d3dfa8ad40c2cbdac84a7d54975878 Mon Sep 17 00:00:00 2001 From: Godmar Back Date: Fri, 29 Aug 2008 02:03:49 +0000 Subject: [PATCH] updates --- sigcse2009/Makefile | 2 +- sigcse2009/assignments.tex | 85 +++++++++----- sigcse2009/figures.tex | 22 ++++ sigcse2009/introduction.tex | 40 +++++-- sigcse2009/pintosoptions.pdf | Bin 0 -> 68192 bytes sigcse2009/pintosoverview.pdf | Bin 0 -> 78542 bytes sigcse2009/principles.tex | 25 ++-- sigcse2009/racedt.tex | 23 ++++ sigcse2009/rest.tex | 13 +-- sigcse2009/sigcse2009.bib | 210 ++++++++++++++++++++++++++++++++++ sigcse2009/sigcse2009.tex | 31 ++++- 11 files changed, 394 insertions(+), 57 deletions(-) create mode 100644 sigcse2009/figures.tex create mode 100644 sigcse2009/pintosoptions.pdf create mode 100644 sigcse2009/pintosoverview.pdf create mode 100644 sigcse2009/racedt.tex diff --git a/sigcse2009/Makefile b/sigcse2009/Makefile index 8ebd118..86b09e2 100644 --- a/sigcse2009/Makefile +++ b/sigcse2009/Makefile @@ -4,7 +4,7 @@ # BASE=sigcse2009 -$(BASE).pdf: $(BASE).tex introduction.tex abstract.tex $(BASE).bib principles.tex assignments.tex +$(BASE).pdf: $(BASE).tex introduction.tex abstract.tex $(BASE).bib principles.tex assignments.tex figures.tex pdflatex $(BASE).tex -bibtex $(BASE) pdflatex $(BASE).tex diff --git a/sigcse2009/assignments.tex b/sigcse2009/assignments.tex index 8801a27..f2332a5 100644 --- a/sigcse2009/assignments.tex +++ b/sigcse2009/assignments.tex @@ -4,16 +4,16 @@ % % Not sure if we need that. % -\subsection{Project 0} -If Pintos is used in a semester-long course, project 0 serves as a ``warm-up'' project. -In this project, students will gain familiarity with the Pintos source tree and some -supporting classes, in particular its implementation of doubly-linked lists. -In OS, doubly-linked lists are frequently used because they allow $O(1)$ insertion and -removal operations. Moreover, they are often used in a style in which the list cell -containing the next and prev pointers is embedded in some larger structure, such as -a thread control block, rather than having separately allocated list cells. -In project 0, students use Pintos's list implementation to implement a simple, first-fit -memory allocator. +% \subsection{Project 0} +% If Pintos is used in a semester-long course, project 0 serves as a ``warm-up'' project. +% In this project, students will gain familiarity with the Pintos source tree and some +% supporting classes, in particular its implementation of doubly-linked lists. +% In OS, doubly-linked lists are frequently used because they allow $O(1)$ insertion and +% removal operations. Moreover, they are often used in a style in which the list cell +% containing the next and prev pointers is embedded in some larger structure, such as +% a thread control block, rather than having separately allocated list cells. +% In project 0, students use Pintos's list implementation to implement a simple, first-fit +% memory allocator. \subsection{Project 1 -- Threads} % intro @@ -28,7 +28,7 @@ internal memory is managed, which is used to store its runtime stack and thread Student can examine the context switch code, but the projects do not involve any modifications to it. -After reading the baseline code, the projects ask students to implement several features +After reading the baseline code, the project asks students to implement several features that exercise thread state transitions. The first part of this project includes a simple alarm clock, which requires maintaining a timer queue of sleeping threads and changing the timer interrupt handler to unblock those threads whose wakeup time has arrived. @@ -45,14 +45,14 @@ thread states, and the scheduler. Based on the priority scheduler, students implement two additional tasks: priority inheritance and a multi-level feedback queue scheduler. Priority inheritance is a way to avoid priority inversion, a phenonemon that most famously led to an almost-failure -of the Mars Pathfinder Mission~\cite{MarsPathFinder}. We use this example to motivate +of the Mars Pathfinder Mission. We use this example to motivate the problem. Implementing priority inheritance correctly requires a deep understanding of the interaction of threads and locks. Separately, students build a multi-level feedback queue scheduler on top of the strict priority scheduler. This scheduler adjusts threads' priority based on a sampling of how much CPU time a thread has received recently. -\paragraph{Testing and Grading.} +\paragraph{Testing and Grading} Project 1 is accompanied by about $XX$ tests, which are run using the Bochs simulator by a grading script. Most tests are designed to test a single aspect, but some tests test more involved scenarios. Most of the tests are designed to produce a deterministic @@ -69,7 +69,7 @@ convey the importance of using efficient algorithms and data structures within a because wasting CPU cycles in the kernel reduces the amount available to applications. % intro -\paragraph{Learning Objectives.} +\paragraph{Learning Objectives} Project 1 has three learning objectives. First, students will understand how the illusion that ``computers can do multiple things at once'' is created by a sequence of thread state transitions and context switches. Second, they will understand how @@ -115,7 +115,7 @@ synchronization presented in accompanying lectures. % How threads extend into processes. -\paragraph{Testing and Grading.} +\paragraph{Testing and Grading} The tests for project 2 exclusively consist of user programs written in C. They are divided into functionality and robustness tests. Functionality tests check that the operating system provides the expected set of services when it is used as @@ -125,7 +125,7 @@ invalid input to system calls. To pass those tests, the student's kernel must b conditions by creating a large number of processes and pseudo-randomly introducing failures in some of them. We expect the kernel to fully recover from such situations. -\paragraph{Learning Objectives.} +\paragraph{Learning Objectives} In project 2, students learn how the thread abstraction introduced in project 1 is extended into the process abstraction, which combines a thread, a virtual address space, and its associated resources. @@ -154,15 +154,15 @@ space. In early offerings, this significant creative freedom came at the cost that some students were lost as how to accomplish set goals. We added an intermediate -design review stage to this projects using a structured questionnaire in which students +design review stage to this project using a structured questionnaire in which students outline their planned design. We also provide a suggested order of implementation. -Like project 2, project 3 requires reasoning using parallel programming strategies. +Like project 2, project 3 requires the use of parallel programming techniques. Since the Pintos kernel is fully preemptive, students must consider which data structures -require locking, and the must design a locking strategy that both avoids deadlock +require locking, and they must design a locking strategy that both avoids deadlock and reduces unnecessary serialization. -\paragraph{Testing and Grading.} +\paragraph{Testing and Grading} Project 3 relies on project 2, therefore, we include all tests provided with project 2 as regression tests to ensure that system call functionality does not break in the presence of virtual memory. Furthermore, we provide functionality tests for the @@ -175,11 +175,11 @@ the kernel when run under emulation, relative to the amount of memory that is accessed by our test programs. Timeouts are used to detect grossly inefficient page replacement schemes. -\paragraph{Learning Objectives.} +\paragraph{Learning Objectives} In project 3, students learn how an OS creates the environment in which a user -program executes, specifically as it relates to code and variables used in a program. -It provides a deep understanding of how OS use fault resumption to -to virtualize a process's interaction with physical memory. +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 +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. @@ -187,6 +187,39 @@ and have the opportunity to observe their performance impact. % % \subsection{Project 4} -\paragraph{Testing and Grading.} -\paragraph{Learning Objectives.} +Project 4 asks the students to design and implement a hierarchical, multi-threaded +filesystem and buffer cache. In projects 2 and 3, students use a basic filesystem +to access the disk, which supports only fixed-size files, no subdirectories, +and which lacks a buffer cache. +Though we suggest a traditional, Unix-like filesystem design, which stores file +metadata in inodes and in which directories are treated as files, students have +complete freedom in designing the layout of their filesystem's metadata as long +as their design does not suffer from external fragmentation. +Since our host tools will not know how to interpret the student's filesystems, +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 +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. + +\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. +For each functionality test, we provide a sibling persistence test that verifies +that the changes done to the filesystem survive a shutdown and restart. + +\paragraph{Learning Objectives} +This project provides a deeper understanding of how OS's manage secondary storage +while avoiding fragmentation and providing efficiency for commonly occurring +disk access patterns. +Students learn how the use of a buffer cache helps absorb disk requests and +improve performance. +They also gain insight into filesystem semantics in the presence of simultaneously +occurring requests. diff --git a/sigcse2009/figures.tex b/sigcse2009/figures.tex new file mode 100644 index 0000000..761b797 --- /dev/null +++ b/sigcse2009/figures.tex @@ -0,0 +1,22 @@ +\newcommand{\pintosenvfigure}{ + \begin{figure}[htp] + \centering + \includegraphics[trim=.5in 3.2in .7in .3in, clip,width=\columnwidth]{pintosoptions.pdf} + \caption{The same Pintos instructional kernel runs in a + fully reproducible simulated environment, in an enhanced + emulated environment with dynamic analysis capability, and + on actual hardware.} + \label{fig:pintosenvs} + \end{figure} +} + +\newcommand{\pintosdetailfigure}{ + \begin{figure*}[htp] + \centering + \includegraphics[width=.7\textwidth]{pintosoverview.pdf} + \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*} +} diff --git a/sigcse2009/introduction.tex b/sigcse2009/introduction.tex index 961c918..1673e6f 100644 --- a/sigcse2009/introduction.tex +++ b/sigcse2009/introduction.tex @@ -32,13 +32,13 @@ benefits, including training in modern software development techniques and tools. The C language remains the implementation language of choice for operating system kernels and for many embedded systems. Practice and debugging skills in C, particularly using modern tools, -not only increases students' ``market value,'' but provides students with +not only increases students' ``market value,''~\cite{1292450} but provides students with the insight that a low-level programming and runtime model is not incompatible with high-level tools. 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. +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. Assignments should include and emphasize the use of modern software @@ -51,21 +51,39 @@ 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 including on-demand paging, memory-mapped files, and swapping, and a -simple hierarchical file system. +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. Although Pintos follows in the tradition of instructional operating systems -such as Nachos~\cite{Christopher1993Nachos}, +such as Nachos~\cite{Christopher1993Nachos}, OS/161~\cite{Holland2002New}, and GeekOS~\cite{Hovemeyer2004Running}, -and OS/161~\cite{Holland2002New}, we believe that it is unique in two +PortOS~\cite{Atkin2002PortOS}, +JOS~\cite{1088822}, or Yalnix~\cite{1088822} +we believe that it is unique in two aspects. First, Pintos runs on both real hardware and in emulated and -simulated environments. Second, we have created a set of analysis tools +simulated environments.~\footnote{GeekOS claims to also run on real hardware, it requires, +however, a dedicated disk and does not support running off USB devices, making +it impractical for many lab settings.} +Second, we have created a set of analysis tools for the emulated environment that allows students to detect programming -mistakes such as race conditions. +mistakes such as race conditions. Figure~\ref{fig:pintosenvs} shows +the three environments in which the same kernel can be run. This paper reports on the design philosophy that underlies Pintos, -details its structure, and outline the nature and learning goals of each -assignment. - +details its structure, and outlines the nature and learning goals of each +assignments. + +\pintosenvfigure{} + +\pintosdetailfigure{} + +To be discussed: +User-Mode Linux\cite{1008027} +iPodLinux~\cite{1352199} +Linux in VM\cite{Nieh2005Experiences} + % Challenges. % How to embed principles? % How to teach software engineering? diff --git a/sigcse2009/pintosoptions.pdf b/sigcse2009/pintosoptions.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e6930941a8f877428c0f8e8b2a4ebd97d71f2989 GIT binary patch literal 68192 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 literal 0 HcmV?d00001 diff --git a/sigcse2009/pintosoverview.pdf b/sigcse2009/pintosoverview.pdf new file mode 100644 index 0000000000000000000000000000000000000000..12bb36a3e0e11416e0fd81f0b4db79d97122022c GIT binary patch literal 78542 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

CWkY^UWSOTHH5OPN$=(1B1luYoQS_ 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 L)N)+;_Ko^aQ(QDm literal 0 HcmV?d00001 diff --git a/sigcse2009/principles.tex b/sigcse2009/principles.tex index 896d12d..1b9db19 100644 --- a/sigcse2009/principles.tex +++ b/sigcse2009/principles.tex @@ -7,7 +7,7 @@ The Pintos series of projects are built on a number of principles. Each project involves a significant amount of reading code before students write the first line of their code. Because software maintenance constitutes the vast majority of all -software development efforts~\cite{askEliforcite}, this setup mirrors the +software development efforts~\cite{Boehm1981Software}, this setup mirrors the environment in which most software engineers work. 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, @@ -28,9 +28,9 @@ 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. In keeping with us adopting an internal perspective, students -do not develop test cases, rather, they must implement the API that is exercised -by these test cases. +to students. +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 @@ -44,11 +44,16 @@ Design justification and rationale is as important for learning as creating an a that fulfill 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.} -Some concurrent environments are difficult to manage and debug. - -Teaching OS involves teaching concurrency - -Operating systems are fundamentally +\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 +is substantially similar to how user programs are being debugged. \paragraph{Provide 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. + diff --git a/sigcse2009/racedt.tex b/sigcse2009/racedt.tex new file mode 100644 index 0000000..0d9b282 --- /dev/null +++ b/sigcse2009/racedt.tex @@ -0,0 +1,23 @@ +\section{Dynamic Analysis Tools} + +Data races and invalid memory accesses are some of the most common and +difficult to debug errors that may occur in concurrent C code. +We developed dynamic analysis tools that run on top of the QEMU +system emulator~\cite{Bellard2005QEMU} to help detect these mistakes. +Since these tools do not require additional support from the Pintos kernel; +students can use them without complicating their code. + +Data races are found by using a semaphore-aware modification of the RaceTrack algorithm~\cite{RaceTrack}. +Calls to Pintos's synchronization primitives are instrumented at runtime to track every thread's data +sharing pattern. Meanwhile, every memory access records synchronization information to shadow memory +maintained by the analysis tool. When the synchronization information for a memory address +indicates that a data race occurred, a report including heap information for the data location and the +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 +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 d26b886..a6f85f1 100644 --- a/sigcse2009/rest.tex +++ b/sigcse2009/rest.tex @@ -1,9 +1,8 @@ -\section{Rest of paper} - -philosophy - \section{Future Work} -Pintos doesn't do SMP or multicore. -Pintos doesn't do IPC. -Pintos doesn't do networking. +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 +networking and interprocess communication (IPC). diff --git a/sigcse2009/sigcse2009.bib b/sigcse2009/sigcse2009.bib index e3631e6..e539757 100644 --- a/sigcse2009/sigcse2009.bib +++ b/sigcse2009/sigcse2009.bib @@ -1,6 +1,216 @@ % % This file is automatically generated by citeulike.org % +@inproceedings{1352201, + address = {New York, NY, USA}, + author = {Brylow, Dennis }, + booktitle = {SIGCSE '08: Proceedings of the 39th SIGCSE technical symposium on Computer science education}, + citeulike-article-id = {3170966}, + doi = {http://doi.acm.org/10.1145/1352135.1352201}, + location = {Portland, OR, USA}, + pages = {192--196}, + posted-at = {2008-08-29 02:40:19}, + priority = {2}, + publisher = {ACM}, + title = {An experimental laboratory environment for teaching embedded operating systems}, + url = {http://dx.doi.org/http://doi.acm.org/10.1145/1352135.1352201}, + year = {2008} +} + + + +@article{1067462, + address = {New York, NY, USA}, + author = {Goldweber, Michael and Davoli, Renzo and Morsiani, Mauro }, + citeulike-article-id = {3170961}, + doi = {http://doi.acm.org/10.1145/1151954.1067462}, + journal = {SIGCSE Bull.}, + number = {3}, + pages = {49--53}, + posted-at = {2008-08-29 02:36:28}, + priority = {2}, + publisher = {ACM}, + title = {The Kaya OS project and the {\$\\mu\$}MPS hardware emulator}, + url = {http://dx.doi.org/http://doi.acm.org/10.1145/1151954.1067462}, + volume = {37}, + year = {2005} +} + + + +@inproceedings{1008027, + address = {New York, NY, USA}, + author = {Davoli, Renzo }, + booktitle = {ITiCSE '04: Proceedings of the 9th annual SIGCSE conference on Innovation and technology in computer science education}, + citeulike-article-id = {3170960}, + doi = {http://doi.acm.org/10.1145/1007996.1008027}, + location = {Leeds, United Kingdom}, + pages = {112--116}, + posted-at = {2008-08-29 02:36:03}, + priority = {2}, + publisher = {ACM}, + title = {Teaching operating systems administration with user mode linux}, + url = {http://dx.doi.org/http://doi.acm.org/10.1145/1007996.1008027}, + year = {2004} +} + + + +@inproceedings{299805, + address = {New York, NY, USA}, + author = {Goldweber, Michael and Barr, John and Camp, Tracy and Grahm, John and Hartley, Stephen }, + booktitle = {SIGCSE '99: The proceedings of the thirtieth SIGCSE technical symposium on Computer science education}, + citeulike-article-id = {3170955}, + doi = {http://doi.acm.org/10.1145/299649.299805}, + location = {New Orleans, Louisiana, United States}, + pages = {348--349}, + posted-at = {2008-08-29 02:32:49}, + priority = {2}, + publisher = {ACM}, + title = {A comparison of operating systems courseware}, + url = {http://dx.doi.org/http://doi.acm.org/10.1145/299649.299805}, + year = {1999} +} + + + +@inproceedings{563384, + address = {New York, NY, USA}, + author = {Atkin, Benjamin and Sirer, Emin G. }, + booktitle = {SIGCSE '02: Proceedings of the 33rd SIGCSE technical symposium on Computer science education}, + citeulike-article-id = {3170954}, + doi = {http://doi.acm.org.ezproxy.lib.vt.edu:8080/10.1145/563340.563384}, + location = {Cincinnati, Kentucky}, + pages = {116--120}, + posted-at = {2008-08-29 02:32:08}, + priority = {2}, + publisher = {ACM}, + title = {PortOS: an educational operating system for the Post-PC environment}, + url = {http://dx.doi.org/http://doi.acm.org.ezproxy.lib.vt.edu:8080/10.1145/563340.563384}, + year = {2002} +} + + + +@article{1088822, + address = {, USA}, + author = {Anderson, Charles L. and Nguyen, Minh }, + citeulike-article-id = {3170948}, + journal = {J. Comput. Small Coll.}, + number = {1}, + pages = {183--190}, + posted-at = {2008-08-29 02:26:24}, + priority = {2}, + publisher = {Consortium for Computing Sciences in Colleges}, + title = {A survey of contemporary instructional operating systems for use in undergraduate courses}, + volume = {21}, + year = {2005} +} + + + +@inproceedings{1370881, + address = {New York, NY, USA}, + author = {Babka, Vlastimil and Bulej, Lubomir and Decky, Martin and Holub, Viliam and Tuma, Petr }, + booktitle = {SEESE '08: Proceedings of the 2008 international workshop on Software Engineering in east and south europe}, + citeulike-article-id = {3170946}, + doi = {http://doi.acm.org/10.1145/1370868.1370881}, + location = {Leipzig, Germany}, + pages = {71--78}, + posted-at = {2008-08-29 02:24:56}, + priority = {2}, + publisher = {ACM}, + title = {Teaching operating systems: student assignments and the software engineering perspective}, + url = {http://dx.doi.org/http://doi.acm.org/10.1145/1370868.1370881}, + year = {2008} +} + + + +@article{1292450, + address = {, USA}, + author = {Gaspar, Alessio and Boyer, Naomi and Ejnioui, Abdel }, + citeulike-article-id = {3170945}, + journal = {J. Comput. Small Coll.}, + number = {2}, + pages = {120--127}, + posted-at = {2008-08-29 02:23:25}, + priority = {2}, + publisher = {Consortium for Computing Sciences in Colleges}, + title = {Role of the C language in current computing curricula part 1: survey analysis}, + volume = {23}, + year = {2007} +} + + + +@inproceedings{1167448, + address = {New York, NY, USA}, + author = {Hill, James H. and Gokhale, Aniruddha S. }, + booktitle = {ACM-SE 43: Proceedings of the 43rd annual Southeast regional conference}, + citeulike-article-id = {3170941}, + doi = {http://doi.acm.org/10.1145/1167350.1167448}, + location = {Kennesaw, Georgia}, + pages = {355--358}, + posted-at = {2008-08-29 02:19:41}, + priority = {2}, + publisher = {ACM}, + title = {Visual OS: design and implementation of a visual framework for learning operating system concepts}, + url = {http://dx.doi.org/http://doi.acm.org/10.1145/1167350.1167448}, + year = {2005} +} + + + +@article{1352199, + address = {New York, NY, USA}, + author = {Lawson, Barry and Barnett, Lewis }, + citeulike-article-id = {3170937}, + doi = {http://doi.acm.org/10.1145/1352322.1352199}, + journal = {SIGCSE Bull.}, + number = {1}, + pages = {182--186}, + posted-at = {2008-08-29 02:18:53}, + priority = {2}, + publisher = {ACM}, + title = {Using iPodLinux in an introductory OS course}, + url = {http://dx.doi.org/http://doi.acm.org/10.1145/1352322.1352199}, + volume = {40}, + year = {2008} +} + + + +@inproceedings{Bellard2005QEMU, + address = {Berkeley, CA, USA}, + author = {Bellard, Fabrice }, + booktitle = {ATEC'05: Proceedings of the USENIX Annual Technical Conference 2005 on USENIX Annual Technical Conference}, + citeulike-article-id = {2373099}, + pages = {41}, + posted-at = {2008-08-29 02:02:24}, + priority = {2}, + publisher = {USENIX Association}, + title = {QEMU, a fast and portable dynamic translator}, + url = {http://portal.acm.org/citation.cfm?id=1247401}, + year = {2005} +} + + + +@book{Boehm1981Software, + author = {Boehm, Barry W. }, + citeulike-article-id = {126034}, + isbn = {0138221227}, + posted-at = {2008-08-29 02:01:18}, + priority = {2}, + publisher = {Prentice Hall PTR}, + title = {Software Engineering Economics}, + url = {http://portal.acm.org/citation.cfm?id=539425}, + year = {1981} +} + + + @book{Deitel2003Operating, abstract = {The third edition of \_Operating Systems\_**\_ has been entirely updated to reflect current core operating system concepts and design considerations. To diff --git a/sigcse2009/sigcse2009.tex b/sigcse2009/sigcse2009.tex index ec3f8f2..7f741a1 100644 --- a/sigcse2009/sigcse2009.tex +++ b/sigcse2009/sigcse2009.tex @@ -47,6 +47,29 @@ \documentclass{sig-alternate} +\usepackage{graphicx} + +% from http://mintaka.sdsu.edu/GF/bibliog/latex/floats.html +% Alter some LaTeX defaults for better treatment of figures: +% See p.105 of "TeX Unbound" for suggested values. +% See pp. 199-200 of Lamport's "LaTeX" book for details. +% General parameters, for ALL pages: +\renewcommand{\topfraction}{0.9} % max fraction of floats at top +\renewcommand{\bottomfraction}{0.8} % max fraction of floats at bottom +% Parameters for TEXT pages (not float pages): +\setcounter{topnumber}{2} +\setcounter{bottomnumber}{2} +\setcounter{totalnumber}{4} % 2 may work better +\setcounter{dbltopnumber}{2} % for 2-column pages +\renewcommand{\dbltopfraction}{0.9} % fit big float above 2-col. text +\renewcommand{\textfraction}{0.07} % allow minimal text w. figs +% Parameters for FLOAT pages (not text pages): +\renewcommand{\floatpagefraction}{0.7} % require fuller float pages +% N.B.: floatpagefraction MUST be less than topfraction !! +\renewcommand{\dblfloatpagefraction}{0.7} % require fuller float pages +% remember to use [htp] or [htpb] for placement +%------------------ + \begin{document} % % --- Author Metadata here --- @@ -57,7 +80,7 @@ \title{The Pintos Instructional Operating System Kernel} -\subtitle{[Draft]} +% \subtitle{[Draft]} \numberofauthors{3} \author{ @@ -92,16 +115,20 @@ %\keywords{Fill in keywords here if we need them} +\input{figures} + \input{introduction} \input{principles} \input{assignments} +\input{racedt} + \input{rest} % remove the following line before submitting! -\nocite{*} +% \nocite{*} \bibliographystyle{abbrv} -- 2.30.2