xv6/web/index.html
2011-02-19 21:21:49 -05:00

252 lines
7.9 KiB
HTML

<html>
<head>
<title>Xv6, a simple Unix-like teaching operating system</title>
<style type="text/css"><!--
body {
background-color: white;
color: black;
font-size: medium;
line-height: 1.2em;
margin-left: 0.5in;
margin-right: 0.5in;
margin-top: 0;
margin-bottom: 0;
}
h1 {
text-indent: 0in;
text-align: left;
margin-top: 2em;
font-weight: bold;
font-size: 1.4em;
}
h2 {
text-indent: 0in;
text-align: left;
margin-top: 2em;
font-weight: bold;
font-size: 1.2em;
}
--></style>
</head>
<body bgcolor=#ffffff>
<h1>Xv6, a simple Unix-like teaching operating system</h1>
<h2>Introduction</h2>
Xv6 is a teaching operating system developed in the summer of 2006 for
MIT's operating systems
course, <a href="http://pdos.csail.mit.edu/6.828">6.828: operating
systems Engineering</a>. We hope that xv6 will be useful in other
courses too. This page collects resources to aid the use of xv6 in
other courses, including a commentary on the source code itself.
<p><font color="red">Status: The xv6 code is in pretty good shape, but
the commentary is rough.</font>
<h2>History and Background</h2>
<p>For many years, MIT had no operating systems course. In the fall
of 2002, Frans Kaashoek, Josh Cates, and Emil Sit created a new,
experimental course (6.097) to teach operating systems engineering.
In the course lectures, the class worked through <a href="#v6">Sixth
Edition Unix (aka V6)</a> using John Lions's famous commentary. In
the lab assignments, students wrote most of an exokernel operating
system, eventually named Jos, for the Intel x86. Exposing students to
multiple systems&ndash;V6 and Jos&ndash;helped develop a sense of the
spectrum of operating system designs. In the fall of 2003, the
experimental 6.097 became the official course 6.828; the course has
been offered each fall since then.
<p>
V6 presented pedagogic challenges from the start.
Students doubted the relevance of an obsolete 30-year-old operating system
written in an obsolete programming language (pre-K&R C)
running on obsolete hardware (the PDP-11).
Students also struggled to learn the low-level details of two different
architectures (the PDP-11 and the Intel x86) at the same time.
By the summer of 2006, we had decided to replace V6
with a new operating system, xv6, modeled on V6
but written in ANSI C and running on multiprocessor
Intel x86 machines.
Xv6's use of the x86 makes it more relevant to
students' experience than V6 was
and unifies the course around a single architecture.
Adding multiprocessor support requires handling concurrency head on with
locks and threads (instead of using special-case solutions for
uniprocessors such as
enabling/disabling interrupts) and helps relevance.
Finally, writing a new system allowed us to write cleaner versions
of the rougher parts of V6, like the scheduler and file system.
<p> 6.828 substituted xv6 for V6 in the fall of 2006. Based on
that experience, we cleaned up rough patches of xv6. Since then, xv6
has stabilized, so we are making it available in the hopes that others
will find it useful too.
<p>
6.828 uses both xv6 and Jos.
Courses taught at UCLA, NYU, Peking University, Stanford, Tsinghua,
and University Texas (Austin) have used
Jos without xv6; we believe other courses could use
xv6 without Jos, though we are not aware of any that have.
<h2>Xv6 sources</h2>
The latest xv6 is <a href="xv6-rev5.tar.gz">xv6-rev5.tar.gz</a>.
We distribute the sources in electronic form but also as
a printed booklet with line numbers that keep everyone
together during lectures. The booklet is available as
<a href="xv6-rev5.pdf">xv6-rev5.pdf</a>.
The xv6 source code is licensed under the traditional <a href="http://www.opensource.org/licenses/mit-license.php">MIT license</a>;
see the LICENSE file in the source distribution.
<p>
xv6 compiles using the GNU C compiler,
targeted at the x86 using ELF binaries.
On BSD and Linux systems, you can use the native compilers;
On OS X, which doesn't use ELF binaries,
you must use a cross-compiler.
Xv6 does boot on real hardware, but typically
we run it using the Bochs emulator.
Both the GCC cross compiler and Bochs
can be found on the <a href="../2010/tools.html">6.828 tools page</a>.
<h2>Xv6 lecture material</h2>
In 6.828, the lectures in the first half of the course introduce the
PC hardware, the Intel x86, and then xv6. The lectures in the second
half consider advanced topics using research papers; for some, xv6
serves as a useful base for making discussions concrete. The lecture
notes are available from the 6.828 schedule page, and the chapters of
the commentary are below.
<h2>Xv6 commentary (rough)</h2>
<p>The chapters are rough drafts.
<p>Introduction yet to be written.<br>
<ul>
<li>read with the code side by side
<li>code references look like (xxxx) or (xxxx-yyyy) in small text.
<li><a href="xv6-rev5.pdf">this pdf</a> is the one with matching line numbers.
<li>each chapter starts with an introduction to the topic,
spends most of the text on code,
and then wraps up talking about how xv6
compares to real-world operating systems.
</ul>
<a href="unix.pdf">Chapter 0: Operating system interfaces</a>
<blockquote>
The Unix system call interface. (rev 4)
</blockquote>
<a href="boot.pdf">Chapter 1: Bootstrap</a>
<blockquote>
From power on to kernel start. (rev 4)
</blockquote>
<a href="mem.pdf">Chapter 2: Processes</a>
<blockquote>
Memory and process allocation, segments, the first user process. (rev 4)
</blockquote>
<a href="trap.pdf">Chapter 3: Traps</a>
<blockquote>
Low-level trap mechanism, trap handler, system call arguments, sbrk, fork.
</blockquote>
<a href="lock.pdf">Chapter 4: Locks</a>
<blockquote>
Locks and interrupts.
</blockquote>
<a href="sched.pdf">Chapter 5: Scheduling and coordination</a>
<blockquote>
Scheduling, sleep and wakeup, pipes, wait and exit.
</blockquote>
<a href="disk.pdf">Chapter 6: Buffer cache</a>
<blockquote>
Buffer cache and IDE disk driver.
</blockquote>
<a href="fsdata.pdf">Chapter 7: File system data</a>
<blockquote>
Block in use bitmap, block allocation, inode structure, inode contents,
directories, path names.
</blockquote>
<a href="fscall.pdf">Chapter 8: File system calls</a>
<blockquote>
FIle descriptors, open, close, dup, read, write.
</blockquote>
<a href="exec.pdf">Chapter 9: Exec</a>
<blockquote>
Exec
</blockquote>
Appendix A: Low-level C and inline assembly
<blockquote>
Intro to C and inline assembly for people who only know Java (say).
Examples drawn entirely from xv6 source.
</blockquote>
Appendix B: Additional drivers.
<blockquote>
Keyboard, screen, probably MP hardware.
</blockquote>
<a name="v6"></a>
<h2>Unix Version 6</h2>
<p>6.828's xv6 is inspired by Unix V6 and by:
<ul>
<li>Lions' <i>Commentary on UNIX' 6th Edition</i>, John Lions, Peer to
Peer Communications; ISBN: 1-57398-013-7; 1st edition (June 14, 2000).
<ul>
<li>An on-line version of the <a
href="http://www.lemis.com/grog/Documentation/Lions/">Lions
commentary</a>, and <a href="http://v6.cuzuco.com/">the source code</a>.
<li>The v6 source code is also available <a
href="http://minnie.tuhs.org/UnixTree/V6/usr/sys/">online</a>
through <a
href="http://minnie.tuhs.org/PUPS/">the PDP Unix Preservation
Society</a>.
</ul>
</ul>
The following are useful to read the original code:
<ul>
<li><i>
The PDP11/40 Processor Handbook</i>, Digital Equipment Corporation, 1972.
<ul>
<li>A <a href="http://pdos.csail.mit.edu/6.828/2005/readings/pdp11-40.pdf">PDF</a> (made from scanned images,
and not text-searchable)
<li>A <a href="http://pdos.csail.mit.edu/6.828/2005/pdp11/">web-based
version</a> that is indexed by instruction name.
</ul>
</ul>
<h2>Feedback</h2>
If you are interested in using xv6 or have used xv6 in a course,
we would love to hear from you.
If there's anything that we can do to make xv6 easier
to adopt, we'd like to hear about it.
We'd also be interested to hear what worked well and what didn't.
<p>
Russ Cox (rsc@swtch.com)<br>
Frans Kaashoek (kaashoek@mit.edu)<br>
Robert Morris (rtm@mit.edu)
<p>
You can reach all of us at 6.828-staff@pdos.csail.mit.edu.