diff options
Diffstat (limited to 'web/index.txt')
-rw-r--r-- | web/index.txt | 339 |
1 files changed, 0 insertions, 339 deletions
diff --git a/web/index.txt b/web/index.txt deleted file mode 100644 index 6f3e1f6..0000000 --- a/web/index.txt +++ /dev/null @@ -1,339 +0,0 @@ -** Xv6, a simple Unix-like teaching operating system -Xv6 is a teaching operating system developed -in the summer of 2006 for MIT's operating systems course, -``6.828: Operating Systems Engineering.'' -We used it for 6.828 in Fall 2006 and Fall 2007 -and are using it this semester (Fall 2008). -We hope that xv6 will be useful in other courses too. -This page collects resources to aid the use of xv6 -in other courses. - -* History and Background - -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 Sixth Edition Unix (aka V6) -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--V6 and Jos--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. - -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. - -6.828 substituted xv6 for V6 in the fall of 2006. -Based on that experience, we cleaned up rough patches -of xv6 for the course in the fall of 2007. -Since then, xv6 has stabilized, so we are making it -available in the hopes that others will find it useful too. - -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. - - -* Xv6 sources - -The latest xv6 is [xv6-rev2.tar.gz]. -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 -[xv6-rev2.pdf]. - -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 [../../2007/tools.html | 6.828 tools page]. - - -* Lectures - -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. -This section describe a typical 6.828 lecture schedule, -linking to lecture notes and homework. -A course using only xv6 (not Jos) will need to adapt -a few of the lectures, but we hope these are a useful -starting point. - - -Lecture 1. Operating systems - -The first lecture introduces both the general topic of -operating systems and the specific approach of 6.828. -After defining ``operating system,'' the lecture -examines the implementation of a Unix shell -to look at the details the traditional Unix system call interface. -This is relevant to both xv6 and Jos: in the final -Jos labs, students implement a Unix-like interface -and culminating in a Unix shell. - -[l1.html | lecture notes] -[os-lab-1.pdf | OS abstractions slides] - - -Lecture 2. PC hardware and x86 programming - -This lecture introduces the PC architecture, the 16- and 32-bit x86, -the stack, and the GCC x86 calling conventions. -It also introduces the pieces of a typical C tool chain--compiler, -assembler, linker, loader--and the Bochs emulator. - -Reading: PC Assembly Language - -Homework: familiarize with Bochs - -[l2.html | lecture notes] -[os-lab-2.pdf | x86 intro slides] -[x86-intro.html | homework] - - -Lecture 3. Operating system organization - -This lecture continues Lecture 1's discussion of what -an operating system does. -An operating system provides a ``virtual computer'' -interface to user space programs. -At a high level, the main job of the operating system -is to implement that interface -using the physical computer it runs on. - -The lecture discusses four approaches to that job: -monolithic operating systems, microkernels, -virtual machines, and exokernels. -Exokernels might not be worth mentioning -except that the Jos labs are built around one. - -Reading: Engler et al., Exokernel: An Operating System Architecture -for Application-Level Resource Management - -[l3.html | lecture notes] - - -Lecture 4. Address spaces using segmentation - -This is the first lecture that uses xv6. -It introduces the idea of address spaces and the -details of the x86 segmentation hardware. -It makes the discussion concrete by reading the xv6 -source code and watching xv6 execute using the Bochs simulator. - -Reading: x86 MMU handout, -xv6: bootasm.S, bootother.S, bootmain.c, main.c, init.c, and setupsegs in proc.c. - -Homework: Bochs stack introduction - -[l4.html | lecture notes] -[os-lab-3.pdf | x86 virtual memory slides] -[xv6-intro.html | homework] - - -Lecture 5. Address spaces using page tables - -This lecture continues the discussion of address spaces, -examining the other x86 virtual memory mechanism: page tables. -Xv6 does not use page tables, so there is no xv6 here. -Instead, the lecture uses Jos as a concrete example. -An xv6-only course might skip or shorten this discussion. - -Reading: x86 manual excerpts - -Homework: stuff about gdt -XXX not appropriate; should be in Lecture 4 - -[l5.html | lecture notes] - - -Lecture 6. Interrupts and exceptions - -How does a user program invoke the operating system kernel? -How does the kernel return to the user program? -What happens when a hardware device needs attention? -This lecture explains the answer to these questions: -interrupt and exception handling. - -It explains the x86 trap setup mechanisms and then -examines their use in xv6's SETGATE (mmu.h), -tvinit (trap.c), idtinit (trap.c), vectors.pl, and vectors.S. - -It then traces through a call to the system call open: -init.c, usys.S, vector48 and alltraps (vectors.S), trap (trap.c), -syscall (syscall.c), -sys_open (sysfile.c), fetcharg, fetchint, argint, argptr, argstr (syscall.c), - -The interrupt controller, briefly: -pic_init and pic_enable (picirq.c). -The timer and keyboard, briefly: -timer_init (timer.c), console_init (console.c). -Enabling and disabling of interrupts. - -Reading: x86 manual excerpts, -xv6: trapasm.S, trap.c, syscall.c, and usys.S. -Skim lapic.c, ioapic.c, picirq.c. - -Homework: Explain the 35 words on the top of the -stack at first invocation of <code>syscall</code>. - -[l-interrupt.html | lecture notes] -[x86-intr.html | homework] - - -Lecture 7. Multiprocessors and locking - -This lecture introduces the problems of -coordination and synchronization on a -multiprocessor -and then the solution of mutual exclusion locks. -Atomic instructions, test-and-set locks, -lock granularity, (the mistake of) recursive locks. - -Although xv6 user programs cannot share memory, -the xv6 kernel itself is a program with multiple threads -executing concurrently and sharing memory. -Illustration: the xv6 scheduler's proc_table_lock (proc.c) -and the spin lock implementation (spinlock.c). - -Reading: xv6: spinlock.c. Skim mp.c. - -Homework: Interaction between locking and interrupts. -Try not disabling interrupts in the disk driver and watch xv6 break. - -[l-lock.html | lecture notes] -[xv6-lock.html | homework] - - -Lecture 8. Threads, processes and context switching - -The last lecture introduced some of the issues -in writing threaded programs, using xv6's processes -as an example. -This lecture introduces the issues in implementing -threads, continuing to use xv6 as the example. - -The lecture defines a thread of computation as a register -set and a stack. A process is an address space plus one -or more threads of computation sharing that address space. -Thus the xv6 kernel can be viewed as a single process -with many threads (each user process) executing concurrently. - -Illustrations: thread switching (swtch.S), scheduler (proc.c), sys_fork (sysproc.c) - -Reading: proc.c, swtch.S, sys_fork (sysproc.c) - -Homework: trace through stack switching. - -[l-threads.html | lecture notes (need to be updated to use swtch)] -[xv6-sched.html | homework] - - -Lecture 9. Processes and coordination - -This lecture introduces the idea of sequence coordination -and then examines the particular solution illustrated by -sleep and wakeup (proc.c). -It introduces and refines a simple -producer/consumer queue to illustrate the -need for sleep and wakeup -and then the sleep and wakeup -implementations themselves. - -Reading: proc.c, sys_exec, sys_sbrk, sys_wait, sys_exec, sys_kill (sysproc.c). - -Homework: Explain how sleep and wakeup would break -without proc_table_lock. Explain how devices would break -without second lock argument to sleep. - -[l-coordination.html | lecture notes] -[xv6-sleep.html | homework] - - -Lecture 10. Files and disk I/O - -This is the first of three file system lectures. -This lecture introduces the basic file system interface -and then considers the on-disk layout of individual files -and the free block bitmap. - -Reading: iread, iwrite, fileread, filewrite, wdir, mknod1, and - code related to these calls in fs.c, bio.c, ide.c, and file.c. - -Homework: Add print to bwrite to trace every disk write. -Explain the disk writes caused by some simple shell commands. - -[l-fs.html | lecture notes] -[xv6-disk.html | homework] - - -Lecture 11. Naming - -The last lecture discussed on-disk file system representation. -This lecture covers the implementation of -file system paths (namei in fs.c) -and also discusses the security problems of a shared /tmp -and symbolic links. - -Understanding exec (exec.c) is left as an exercise. - -Reading: namei in fs.c, sysfile.c, file.c. - -Homework: Explain how to implement symbolic links in xv6. - -[l-name.html | lecture notes] -[xv6-names.html | homework] - - -Lecture 12. High-performance file systems - -This lecture is the first of the research paper-based lectures. -It discusses the ``soft updates'' paper, -using xv6 as a concrete example. - - -* Feedback - -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. - -Russ Cox ([email protected])<br> -Frans Kaashoek ([email protected])<br> -Robert Morris ([email protected]) - -You can reach all of us at [email protected]. - -xv6 and lecture notes are copyright © 2006-present by Russ Cox, -Frans Kaashoek, and Robert Morris. |