From ee87eebc5cfa875671a225c60d167752a267a050 Mon Sep 17 00:00:00 2001
From: Bashar <basal573@student.liu.se>
Date: Fri, 11 Feb 2022 12:25:03 +0100
Subject: [PATCH] deleting src

---
 src/.cvsignore                                |    1 -
 src/.gitignore                                |    1 -
 src/LICENSE                                   |   95 -
 src/Make.config                               |   58 -
 src/Makefile                                  |   29 -
 src/Makefile.build                            |  108 --
 src/Makefile.kernel                           |   20 -
 src/Makefile.userprog                         |   55 -
 src/devices/disk.c                            |  571 ------
 src/devices/disk.h                            |   26 -
 src/devices/input.c                           |   52 -
 src/devices/input.h                           |   12 -
 src/devices/intq.c                            |  116 --
 src/devices/intq.h                            |   43 -
 src/devices/kbd.c                             |  207 --
 src/devices/kbd.h                             |    9 -
 src/devices/serial.c                          |  228 ---
 src/devices/serial.h                          |   11 -
 src/devices/timer.c                           |  204 --
 src/devices/timer.h                           |   23 -
 src/devices/vga.c                             |  165 --
 src/devices/vga.h                             |    6 -
 src/examples/.gitignore                       |   29 -
 src/examples/Makefile                         |   56 -
 src/examples/bubsort.c                        |   38 -
 src/examples/bubsort.o                        |  Bin 3456 -> 0 bytes
 src/examples/cat.c                            |   34 -
 src/examples/cat.o                            |  Bin 4212 -> 0 bytes
 src/examples/child.c                          |   22 -
 src/examples/child.o                          |  Bin 3044 -> 0 bytes
 src/examples/cmp.c                            |   68 -
 src/examples/cmp.o                            |  Bin 5244 -> 0 bytes
 src/examples/cp.c                             |   55 -
 src/examples/cp.o                             |  Bin 4568 -> 0 bytes
 src/examples/create-bad.c                     |   32 -
 src/examples/create-bad.o                     |  Bin 3496 -> 0 bytes
 src/examples/dummy.c                          |   12 -
 src/examples/dummy.o                          |  Bin 2428 -> 0 bytes
 src/examples/echo.c                           |   14 -
 src/examples/echo.o                           |  Bin 3032 -> 0 bytes
 src/examples/halt.c                           |   14 -
 src/examples/halt.o                           |  Bin 2196 -> 0 bytes
 src/examples/hex-dump.c                       |   35 -
 src/examples/hex-dump.o                       |  Bin 4440 -> 0 bytes
 src/examples/insult.c                         |  369 ----
 src/examples/insult.o                         |  Bin 27636 -> 0 bytes
 src/examples/lab1test                         |  Bin 44164 -> 0 bytes
 src/examples/lab1test.c                       |  107 -
 src/examples/lab1test.o                       |  Bin 7996 -> 0 bytes
 src/examples/lab1test2                        |  Bin 45652 -> 0 bytes
 src/examples/lab1test2.c                      |  209 --
 src/examples/lab1test2.o                      |  Bin 9980 -> 0 bytes
 src/examples/lab2test.c                       |  107 -
 src/examples/lab2test.o                       |  Bin 7996 -> 0 bytes
 src/examples/lab2test_beta.c                  |  112 --
 src/examples/lab3test1                        |  Bin 40952 -> 0 bytes
 src/examples/lab3test1.c                      |   17 -
 src/examples/lab3test1.o                      |  Bin 2984 -> 0 bytes
 src/examples/lab3test2                        |  Bin 41176 -> 0 bytes
 src/examples/lab3test2.c                      |   23 -
 src/examples/lab3test2.o                      |  Bin 3272 -> 0 bytes
 src/examples/lab4test1                        |  Bin 41056 -> 0 bytes
 src/examples/lab4test1.c                      |   21 -
 src/examples/lab4test1.o                      |  Bin 3088 -> 0 bytes
 src/examples/lib/.gitignore                   |    1 -
 src/examples/lib/arithmetic.o                 |  Bin 7572 -> 0 bytes
 src/examples/lib/debug.o                      |  Bin 3380 -> 0 bytes
 src/examples/lib/random.o                     |  Bin 5152 -> 0 bytes
 src/examples/lib/stdio.o                      |  Bin 20632 -> 0 bytes
 src/examples/lib/stdlib.o                     |  Bin 10572 -> 0 bytes
 src/examples/lib/string.o                     |  Bin 16504 -> 0 bytes
 src/examples/lib/user/.dummy                  |    0
 src/examples/lib/user/.gitignore              |    1 -
 src/examples/lib/user/console.o               |  Bin 5228 -> 0 bytes
 src/examples/lib/user/debug.o                 |  Bin 3492 -> 0 bytes
 src/examples/lib/user/entry.o                 |  Bin 2428 -> 0 bytes
 src/examples/lib/user/syscall.o               |  Bin 8644 -> 0 bytes
 src/examples/libc.a                           |  Bin 82520 -> 0 bytes
 src/examples/lineup.c                         |   46 -
 src/examples/lineup.o                         |  Bin 4964 -> 0 bytes
 src/examples/longrun.c                        |   86 -
 src/examples/longrun.o                        |  Bin 5344 -> 0 bytes
 src/examples/ls.c                             |   90 -
 src/examples/ls.o                             |  Bin 6644 -> 0 bytes
 src/examples/matmult.c                        |   57 -
 src/examples/matmult.o                        |  Bin 3480 -> 0 bytes
 src/examples/mcat.c                           |   45 -
 src/examples/mcat.o                           |  Bin 4364 -> 0 bytes
 src/examples/mcp.c                            |   68 -
 src/examples/mcp.o                            |  Bin 4756 -> 0 bytes
 src/examples/mkdir.c                          |   24 -
 src/examples/mkdir.o                          |  Bin 2964 -> 0 bytes
 src/examples/parent.c                         |   41 -
 src/examples/parent.o                         |  Bin 3924 -> 0 bytes
 src/examples/pfs.c                            |  110 --
 src/examples/pfs.h                            |    4 -
 src/examples/pfs.o                            |  Bin 6684 -> 0 bytes
 src/examples/pfs_reader.c                     |   51 -
 src/examples/pfs_reader.o                     |  Bin 4380 -> 0 bytes
 src/examples/pfs_writer.c                     |   57 -
 src/examples/pfs_writer.o                     |  Bin 5180 -> 0 bytes
 src/examples/printf                           |  Bin 40844 -> 0 bytes
 src/examples/printf.c                         |   10 -
 src/examples/printf.o                         |  Bin 2724 -> 0 bytes
 src/examples/pwd.c                            |  152 --
 src/examples/pwd.o                            |  Bin 7096 -> 0 bytes
 src/examples/recursor.c                       |   34 -
 src/examples/recursor.o                       |  Bin 4204 -> 0 bytes
 src/examples/recursor_ng                      |  Bin 48764 -> 0 bytes
 src/examples/recursor_ng.c                    |   52 -
 src/examples/recursor_ng.o                    |  Bin 4808 -> 0 bytes
 src/examples/rm.c                             |   21 -
 src/examples/rm.o                             |  Bin 3384 -> 0 bytes
 src/examples/shell.c                          |  104 -
 src/examples/shell.o                          |  Bin 5680 -> 0 bytes
 src/examples/sumargv.c                        |   26 -
 src/examples/sumargv.o                        |  Bin 3604 -> 0 bytes
 src/examples/supertest                        |  Bin 40676 -> 0 bytes
 src/examples/supertest.c                      |   15 -
 src/examples/supertest.o                      |  Bin 2356 -> 0 bytes
 src/filesys/.gitignore                        |    3 -
 src/filesys/Make.vars                         |   13 -
 src/filesys/Makefile                          |    1 -
 src/filesys/directory.c                       |  236 ---
 src/filesys/directory.h                       |   30 -
 src/filesys/file.c                            |  168 --
 src/filesys/file.h                            |   29 -
 src/filesys/filesys.c                         |  104 -
 src/filesys/filesys.h                         |   20 -
 src/filesys/free-map.c                        |   84 -
 src/filesys/free-map.h                        |   17 -
 src/filesys/fsutil.c                          |  197 --
 src/filesys/fsutil.h                          |   10 -
 src/filesys/inode.c                           |  348 ----
 src/filesys/inode.h                           |   23 -
 src/filesys/off_t.h                           |   15 -
 src/lib/arithmetic.c                          |  189 --
 src/lib/ctype.h                               |   28 -
 src/lib/debug.c                               |   32 -
 src/lib/debug.h                               |   38 -
 src/lib/inttypes.h                            |   48 -
 src/lib/kernel/bitmap.c                       |  372 ----
 src/lib/kernel/bitmap.h                       |   51 -
 src/lib/kernel/console.c                      |  191 --
 src/lib/kernel/console.h                      |    8 -
 src/lib/kernel/debug.c                        |   48 -
 src/lib/kernel/hash.c                         |  430 -----
 src/lib/kernel/hash.h                         |  103 -
 src/lib/kernel/list.c                         |  532 -----
 src/lib/kernel/list.h                         |  168 --
 src/lib/kernel/slist.c                        |  153 --
 src/lib/kernel/slist.h                        |   27 -
 src/lib/kernel/stdio.h                        |    6 -
 src/lib/limits.h                              |   34 -
 src/lib/random.c                              |   83 -
 src/lib/random.h                              |   10 -
 src/lib/round.h                               |   18 -
 src/lib/stdarg.h                              |   14 -
 src/lib/stdbool.h                             |    9 -
 src/lib/stddef.h                              |   12 -
 src/lib/stdint.h                              |   51 -
 src/lib/stdio.c                               |  637 ------
 src/lib/stdio.h                               |   39 -
 src/lib/stdlib.c                              |  208 --
 src/lib/stdlib.h                              |   22 -
 src/lib/string.c                              |  375 ----
 src/lib/string.h                              |   35 -
 src/lib/syscall-nr.h                          |   34 -
 src/lib/user/console.c                        |   94 -
 src/lib/user/debug.c                          |   25 -
 src/lib/user/entry.c                          |   10 -
 src/lib/user/stdio.h                          |    7 -
 src/lib/user/syscall.c                        |  184 --
 src/lib/user/syscall.h                        |   48 -
 src/lib/user/user.lds                         |   57 -
 src/misc/bochs-2.2.6-big-endian.patch         |   63 -
 src/misc/bochs-2.2.6-build.sh                 |   40 -
 src/misc/bochs-2.2.6-gdbstub-ENN.patch        |   29 -
 src/misc/bochs-2.2.6-jitter.patch             |   61 -
 src/misc/bochs-2.2.6-ms-extensions.patch      |   14 -
 src/misc/bochs-2.2.6-page-fault-segv.patch    |   79 -
 src/misc/bochs-2.2.6-paranoia.patch           |   19 -
 src/misc/bochs-2.2.6-solaris-link.patch       |   11 -
 src/misc/bochs-2.2.6-solaris-tty.patch        |   31 -
 src/misc/bochs-2.2.6-triple-fault.patch       |   57 -
 src/misc/gcc-3.3.6-cross-howto                |   39 -
 src/misc/gdb-macros                           |  120 --
 src/tests/Algorithm/Diff.pm                   | 1713 -----------------
 src/tests/Make.tests                          |   76 -
 src/tests/arc4.c                              |   53 -
 src/tests/arc4.h                              |   17 -
 src/tests/arc4.pm                             |   29 -
 src/tests/cksum.c                             |   92 -
 src/tests/cksum.h                             |    8 -
 src/tests/cksum.pm                            |   87 -
 src/tests/filesys/Grading.no-vm               |   18 -
 src/tests/filesys/Grading.with-vm             |   22 -
 src/tests/filesys/base/Make.tests             |   18 -
 src/tests/filesys/base/Rubric                 |   19 -
 src/tests/filesys/base/child-syn-read.c       |   44 -
 src/tests/filesys/base/child-syn-wrt.c        |   35 -
 src/tests/filesys/base/full.inc               |   20 -
 src/tests/filesys/base/lg-create.c            |    5 -
 src/tests/filesys/base/lg-create.ck           |   13 -
 src/tests/filesys/base/lg-full.c              |    6 -
 src/tests/filesys/base/lg-full.ck             |   16 -
 src/tests/filesys/base/lg-random.c            |    7 -
 src/tests/filesys/base/lg-random.ck           |   14 -
 src/tests/filesys/base/lg-seq-block.c         |    7 -
 src/tests/filesys/base/lg-seq-block.ck        |   16 -
 src/tests/filesys/base/lg-seq-random.c        |    6 -
 src/tests/filesys/base/lg-seq-random.ck       |   16 -
 src/tests/filesys/base/random.inc             |   59 -
 src/tests/filesys/base/seq-block.inc          |   20 -
 src/tests/filesys/base/seq-random.inc         |   22 -
 src/tests/filesys/base/sm-create.c            |    5 -
 src/tests/filesys/base/sm-create.ck           |   13 -
 src/tests/filesys/base/sm-full.c              |    6 -
 src/tests/filesys/base/sm-full.ck             |   16 -
 src/tests/filesys/base/sm-random.c            |    7 -
 src/tests/filesys/base/sm-random.ck           |   14 -
 src/tests/filesys/base/sm-seq-block.c         |    7 -
 src/tests/filesys/base/sm-seq-block.ck        |   16 -
 src/tests/filesys/base/sm-seq-random.c        |    6 -
 src/tests/filesys/base/sm-seq-random.ck       |   16 -
 src/tests/filesys/base/syn-read.c             |   31 -
 src/tests/filesys/base/syn-read.ck            |   33 -
 src/tests/filesys/base/syn-read.h             |    7 -
 src/tests/filesys/base/syn-remove.c           |   30 -
 src/tests/filesys/base/syn-remove.ck          |   16 -
 src/tests/filesys/base/syn-write.c            |   31 -
 src/tests/filesys/base/syn-write.ck           |   32 -
 src/tests/filesys/base/syn-write.h            |    9 -
 src/tests/filesys/create.inc                  |   15 -
 src/tests/filesys/extended/Make.tests         |   61 -
 .../filesys/extended/Rubric.functionality     |   26 -
 src/tests/filesys/extended/Rubric.persistence |   24 -
 src/tests/filesys/extended/Rubric.robustness  |    9 -
 src/tests/filesys/extended/child-syn-rw.c     |   53 -
 .../extended/dir-empty-name-persistence.ck    |    6 -
 src/tests/filesys/extended/dir-empty-name.c   |   12 -
 src/tests/filesys/extended/dir-empty-name.ck  |   10 -
 .../extended/dir-mk-tree-persistence.ck       |   16 -
 src/tests/filesys/extended/dir-mk-tree.c      |   12 -
 src/tests/filesys/extended/dir-mk-tree.ck     |   12 -
 .../filesys/extended/dir-mkdir-persistence.ck |    6 -
 src/tests/filesys/extended/dir-mkdir.c        |   15 -
 src/tests/filesys/extended/dir-mkdir.ck       |   13 -
 .../filesys/extended/dir-open-persistence.ck  |    6 -
 src/tests/filesys/extended/dir-open.c         |   21 -
 src/tests/filesys/extended/dir-open.ck        |   20 -
 .../extended/dir-over-file-persistence.ck     |    6 -
 src/tests/filesys/extended/dir-over-file.c    |   13 -
 src/tests/filesys/extended/dir-over-file.ck   |   11 -
 .../extended/dir-rm-cwd-persistence.ck        |    8 -
 src/tests/filesys/extended/dir-rm-cwd.c       |   75 -
 src/tests/filesys/extended/dir-rm-cwd.ck      |   51 -
 .../extended/dir-rm-parent-persistence.ck     |    6 -
 src/tests/filesys/extended/dir-rm-parent.c    |   16 -
 src/tests/filesys/extended/dir-rm-parent.ck   |   14 -
 .../extended/dir-rm-root-persistence.ck       |    6 -
 src/tests/filesys/extended/dir-rm-root.c      |   13 -
 src/tests/filesys/extended/dir-rm-root.ck     |   11 -
 .../extended/dir-rm-tree-persistence.ck       |    6 -
 src/tests/filesys/extended/dir-rm-tree.c      |   62 -
 src/tests/filesys/extended/dir-rm-tree.ck     |   14 -
 .../filesys/extended/dir-rmdir-persistence.ck |    6 -
 src/tests/filesys/extended/dir-rmdir.c        |   14 -
 src/tests/filesys/extended/dir-rmdir.ck       |   12 -
 .../extended/dir-under-file-persistence.ck    |    6 -
 src/tests/filesys/extended/dir-under-file.c   |   13 -
 src/tests/filesys/extended/dir-under-file.ck  |   11 -
 .../filesys/extended/dir-vine-persistence.ck  |   37 -
 src/tests/filesys/extended/dir-vine.c         |   85 -
 src/tests/filesys/extended/dir-vine.ck        |   11 -
 .../extended/grow-create-persistence.ck       |    6 -
 src/tests/filesys/extended/grow-create.c      |    4 -
 src/tests/filesys/extended/grow-create.ck     |   13 -
 .../extended/grow-dir-lg-persistence.ck       |    9 -
 src/tests/filesys/extended/grow-dir-lg.c      |    6 -
 src/tests/filesys/extended/grow-dir-lg.ck     |   61 -
 src/tests/filesys/extended/grow-dir.inc       |   41 -
 .../extended/grow-file-size-persistence.ck    |    7 -
 src/tests/filesys/extended/grow-file-size.c   |   33 -
 src/tests/filesys/extended/grow-file-size.ck  |   17 -
 .../extended/grow-root-lg-persistence.ck      |    9 -
 src/tests/filesys/extended/grow-root-lg.c     |    4 -
 src/tests/filesys/extended/grow-root-lg.ck    |   60 -
 .../extended/grow-root-sm-persistence.ck      |    9 -
 src/tests/filesys/extended/grow-root-sm.c     |    4 -
 src/tests/filesys/extended/grow-root-sm.ck    |   30 -
 .../extended/grow-seq-lg-persistence.ck       |    7 -
 src/tests/filesys/extended/grow-seq-lg.c      |    5 -
 src/tests/filesys/extended/grow-seq-lg.ck     |   17 -
 .../extended/grow-seq-sm-persistence.ck       |    7 -
 src/tests/filesys/extended/grow-seq-sm.c      |    5 -
 src/tests/filesys/extended/grow-seq-sm.ck     |   17 -
 src/tests/filesys/extended/grow-seq.inc       |   20 -
 .../extended/grow-sparse-persistence.ck       |    6 -
 src/tests/filesys/extended/grow-sparse.c      |   25 -
 src/tests/filesys/extended/grow-sparse.ck     |   17 -
 .../filesys/extended/grow-tell-persistence.ck |    7 -
 src/tests/filesys/extended/grow-tell.c        |   32 -
 src/tests/filesys/extended/grow-tell.ck       |   17 -
 .../extended/grow-two-files-persistence.ck    |    9 -
 src/tests/filesys/extended/grow-two-files.c   |   62 -
 src/tests/filesys/extended/grow-two-files.ck  |   23 -
 src/tests/filesys/extended/mk-tree.c          |   67 -
 src/tests/filesys/extended/mk-tree.h          |    6 -
 .../filesys/extended/syn-rw-persistence.ck    |    8 -
 src/tests/filesys/extended/syn-rw.c           |   35 -
 src/tests/filesys/extended/syn-rw.ck          |   20 -
 src/tests/filesys/extended/syn-rw.h           |    9 -
 src/tests/filesys/extended/tar.c              |  250 ---
 src/tests/filesys/seq-test.c                  |   37 -
 src/tests/filesys/seq-test.h                  |   11 -
 src/tests/internal/list.c                     |  174 --
 src/tests/internal/stdio.c                    |  208 --
 src/tests/internal/stdlib.c                   |  114 --
 src/tests/lib.c                               |  196 --
 src/tests/lib.h                               |   50 -
 src/tests/lib.pm                              |   19 -
 src/tests/main.c                              |   15 -
 src/tests/main.h                              |    6 -
 src/tests/make-grade                          |  152 --
 src/tests/random.pm                           |   27 -
 src/tests/tests.pm                            |  622 ------
 src/tests/threads/Grading                     |    6 -
 src/tests/threads/Make.tests                  |   49 -
 src/tests/threads/Rubric.alarm                |    8 -
 src/tests/threads/Rubric.mlfqs                |   14 -
 src/tests/threads/Rubric.priority             |   15 -
 src/tests/threads/alarm-multiple.ck           |    4 -
 src/tests/threads/alarm-negative.c            |   15 -
 src/tests/threads/alarm-negative.ck           |   10 -
 src/tests/threads/alarm-priority.c            |   58 -
 src/tests/threads/alarm-priority.ck           |   19 -
 src/tests/threads/alarm-simultaneous.c        |   94 -
 src/tests/threads/alarm-simultaneous.ck       |   27 -
 src/tests/threads/alarm-single.ck             |    4 -
 src/tests/threads/alarm-wait.c                |  152 --
 src/tests/threads/alarm-zero.c                |   15 -
 src/tests/threads/alarm-zero.ck               |   10 -
 src/tests/threads/alarm.pm                    |   32 -
 src/tests/threads/mlfqs-block.c               |   64 -
 src/tests/threads/mlfqs-block.ck              |   17 -
 src/tests/threads/mlfqs-fair-2.ck             |    7 -
 src/tests/threads/mlfqs-fair-20.ck            |    7 -
 src/tests/threads/mlfqs-fair.c                |  124 --
 src/tests/threads/mlfqs-load-1.c              |   60 -
 src/tests/threads/mlfqs-load-1.ck             |   15 -
 src/tests/threads/mlfqs-load-60.c             |  155 --
 src/tests/threads/mlfqs-load-60.ck            |   36 -
 src/tests/threads/mlfqs-load-avg.c            |  167 --
 src/tests/threads/mlfqs-load-avg.ck           |   36 -
 src/tests/threads/mlfqs-nice-10.ck            |    7 -
 src/tests/threads/mlfqs-nice-2.ck             |    7 -
 src/tests/threads/mlfqs-recent-1.c            |  144 --
 src/tests/threads/mlfqs-recent-1.ck           |   31 -
 src/tests/threads/mlfqs.pm                    |  146 --
 src/tests/threads/priority-change.c           |   31 -
 src/tests/threads/priority-change.ck          |   14 -
 src/tests/threads/priority-condvar.c          |   53 -
 src/tests/threads/priority-condvar.ck         |   39 -
 src/tests/threads/priority-donate-chain.c     |  114 --
 src/tests/threads/priority-donate-chain.ck    |   46 -
 src/tests/threads/priority-donate-lower.c     |   51 -
 src/tests/threads/priority-donate-lower.ck    |   16 -
 src/tests/threads/priority-donate-multiple.c  |   77 -
 src/tests/threads/priority-donate-multiple.ck |   19 -
 src/tests/threads/priority-donate-multiple2.c |   90 -
 .../threads/priority-donate-multiple2.ck      |   19 -
 src/tests/threads/priority-donate-nest.c      |   94 -
 src/tests/threads/priority-donate-nest.ck     |   19 -
 src/tests/threads/priority-donate-one.c       |   65 -
 src/tests/threads/priority-donate-one.ck      |   17 -
 src/tests/threads/priority-donate-sema.c      |   82 -
 src/tests/threads/priority-donate-sema.ck     |   16 -
 src/tests/threads/priority-fifo.c             |   99 -
 src/tests/threads/priority-fifo.ck            |   63 -
 src/tests/threads/priority-preempt.c          |   41 -
 src/tests/threads/priority-preempt.ck         |   16 -
 src/tests/threads/priority-sema.c             |   45 -
 src/tests/threads/priority-sema.ck            |   29 -
 src/tests/threads/simplethreadtest.c          |   68 -
 src/tests/threads/tests.c                     |  104 -
 src/tests/threads/tests.h                     |   43 -
 src/tests/threads/threadtest.c                |  250 ---
 src/tests/userprog/Grading                    |   11 -
 src/tests/userprog/Make.tests                 |  132 --
 src/tests/userprog/Rubric.functionality       |   52 -
 src/tests/userprog/Rubric.robustness          |   48 -
 src/tests/userprog/args-dbl-space.ck          |   15 -
 src/tests/userprog/args-many.ck               |   35 -
 src/tests/userprog/args-multiple.ck           |   17 -
 src/tests/userprog/args-none.ck               |   13 -
 src/tests/userprog/args-single.ck             |   14 -
 src/tests/userprog/args.c                     |   25 -
 src/tests/userprog/bad-jump.c                 |   13 -
 src/tests/userprog/bad-jump.ck                |    9 -
 src/tests/userprog/bad-jump2.c                |   13 -
 src/tests/userprog/bad-jump2.ck               |    9 -
 src/tests/userprog/bad-read.c                 |   13 -
 src/tests/userprog/bad-read.ck                |    9 -
 src/tests/userprog/bad-read2.c                |   13 -
 src/tests/userprog/bad-read2.ck               |    9 -
 src/tests/userprog/bad-write.c                |   12 -
 src/tests/userprog/bad-write.ck               |    9 -
 src/tests/userprog/bad-write2.c               |   12 -
 src/tests/userprog/bad-write2.ck              |    9 -
 src/tests/userprog/boundary.c                 |   33 -
 src/tests/userprog/boundary.h                 |    7 -
 src/tests/userprog/child-bad.c                |   14 -
 src/tests/userprog/child-close.c              |   28 -
 src/tests/userprog/child-rox.c                |   55 -
 src/tests/userprog/child-simple.c             |   15 -
 src/tests/userprog/close-bad-fd.c             |   11 -
 src/tests/userprog/close-bad-fd.ck            |   13 -
 src/tests/userprog/close-normal.c             |   14 -
 src/tests/userprog/close-normal.ck            |   12 -
 src/tests/userprog/close-stdin.c              |   11 -
 src/tests/userprog/close-stdin.ck             |   13 -
 src/tests/userprog/close-stdout.c             |   11 -
 src/tests/userprog/close-stdout.ck            |   13 -
 src/tests/userprog/close-twice.c              |   18 -
 src/tests/userprog/close-twice.ck             |   19 -
 src/tests/userprog/create-bad-ptr.c           |   12 -
 src/tests/userprog/create-bad-ptr.ck          |    9 -
 src/tests/userprog/create-bound.c             |   14 -
 src/tests/userprog/create-bound.ck            |   11 -
 src/tests/userprog/create-empty.c             |   10 -
 src/tests/userprog/create-empty.ck            |   14 -
 src/tests/userprog/create-exists.c            |   16 -
 src/tests/userprog/create-exists.ck           |   15 -
 src/tests/userprog/create-long.c              |   17 -
 src/tests/userprog/create-long.ck             |   11 -
 src/tests/userprog/create-normal.c            |   10 -
 src/tests/userprog/create-normal.ck           |   11 -
 src/tests/userprog/create-null.c              |   11 -
 src/tests/userprog/create-null.ck             |    9 -
 src/tests/userprog/exec-arg.c                 |   10 -
 src/tests/userprog/exec-arg.ck                |   17 -
 src/tests/userprog/exec-bad-ptr.c             |   11 -
 src/tests/userprog/exec-bad-ptr.ck            |   13 -
 src/tests/userprog/exec-missing.c             |   12 -
 src/tests/userprog/exec-missing.ck            |   31 -
 src/tests/userprog/exec-multiple.c            |   14 -
 src/tests/userprog/exec-multiple.ck           |   18 -
 src/tests/userprog/exec-once.c                |   11 -
 src/tests/userprog/exec-once.ck               |   12 -
 src/tests/userprog/exit.c                     |   11 -
 src/tests/userprog/exit.ck                    |    9 -
 src/tests/userprog/halt.c                     |   11 -
 src/tests/userprog/halt.ck                    |   15 -
 src/tests/userprog/lib/.gitignore             |    1 -
 src/tests/userprog/lib/user/.dummy            |    0
 src/tests/userprog/lib/user/.gitignore        |    1 -
 src/tests/userprog/multi-child-fd.c           |   25 -
 src/tests/userprog/multi-child-fd.ck          |   25 -
 src/tests/userprog/multi-recurse.c            |   34 -
 src/tests/userprog/multi-recurse.ck           |   70 -
 src/tests/userprog/no-vm/Make.tests           |    8 -
 src/tests/userprog/no-vm/Rubric               |    3 -
 src/tests/userprog/no-vm/multi-oom.c          |  179 --
 src/tests/userprog/no-vm/multi-oom.ck         |   10 -
 src/tests/userprog/null.ck                    |    8 -
 src/tests/userprog/open-bad-ptr.c             |   13 -
 src/tests/userprog/open-bad-ptr.ck            |   13 -
 src/tests/userprog/open-boundary.c            |   14 -
 src/tests/userprog/open-boundary.ck           |   11 -
 src/tests/userprog/open-empty.c               |   13 -
 src/tests/userprog/open-empty.ck              |   10 -
 src/tests/userprog/open-missing.c             |   13 -
 src/tests/userprog/open-missing.ck            |   10 -
 src/tests/userprog/open-normal.c              |   13 -
 src/tests/userprog/open-normal.ck             |   10 -
 src/tests/userprog/open-null.c                |   12 -
 src/tests/userprog/open-null.ck               |   13 -
 src/tests/userprog/open-twice.c               |   19 -
 src/tests/userprog/open-twice.ck              |   12 -
 src/tests/userprog/read-bad-fd.c              |   21 -
 src/tests/userprog/read-bad-fd.ck             |   13 -
 src/tests/userprog/read-bad-ptr.c             |   16 -
 src/tests/userprog/read-bad-ptr.ck            |   15 -
 src/tests/userprog/read-boundary.c            |   30 -
 src/tests/userprog/read-boundary.ck           |   11 -
 src/tests/userprog/read-normal.c              |   11 -
 src/tests/userprog/read-normal.ck             |   13 -
 src/tests/userprog/read-stdout.c              |   14 -
 src/tests/userprog/read-stdout.ck             |   13 -
 src/tests/userprog/read-zero.c                |   22 -
 src/tests/userprog/read-zero.ck               |   11 -
 src/tests/userprog/rox-child.c                |    5 -
 src/tests/userprog/rox-child.ck               |   20 -
 src/tests/userprog/rox-child.inc              |   33 -
 src/tests/userprog/rox-multichild.c           |    5 -
 src/tests/userprog/rox-multichild.ck          |   44 -
 src/tests/userprog/rox-simple.c               |   19 -
 src/tests/userprog/rox-simple.ck              |   13 -
 src/tests/userprog/sample.inc                 |    6 -
 src/tests/userprog/sample.txt                 |    4 -
 src/tests/userprog/sc-bad-arg.c               |   17 -
 src/tests/userprog/sc-bad-arg.ck              |    9 -
 src/tests/userprog/sc-bad-sp.c                |   20 -
 src/tests/userprog/sc-bad-sp.ck               |    9 -
 src/tests/userprog/sc-boundary-2.c            |   22 -
 src/tests/userprog/sc-boundary-2.ck           |    9 -
 src/tests/userprog/sc-boundary.c              |   22 -
 src/tests/userprog/sc-boundary.ck             |    9 -
 src/tests/userprog/wait-bad-pid.c             |   11 -
 src/tests/userprog/wait-bad-pid.ck            |   13 -
 src/tests/userprog/wait-killed.c              |   11 -
 src/tests/userprog/wait-killed.ck             |   13 -
 src/tests/userprog/wait-simple.c              |   11 -
 src/tests/userprog/wait-simple.ck             |   13 -
 src/tests/userprog/wait-twice.c               |   15 -
 src/tests/userprog/wait-twice.ck              |   14 -
 src/tests/userprog/write-bad-fd.c             |   20 -
 src/tests/userprog/write-bad-fd.ck            |   13 -
 src/tests/userprog/write-bad-ptr.c            |   16 -
 src/tests/userprog/write-bad-ptr.ck           |   15 -
 src/tests/userprog/write-boundary.c           |   25 -
 src/tests/userprog/write-boundary.ck          |   11 -
 src/tests/userprog/write-normal.c             |   20 -
 src/tests/userprog/write-normal.ck            |   12 -
 src/tests/userprog/write-stdin.c              |   14 -
 src/tests/userprog/write-stdin.ck             |   13 -
 src/tests/userprog/write-zero.c               |   20 -
 src/tests/userprog/write-zero.ck              |   11 -
 src/tests/vm/Grading                          |   12 -
 src/tests/vm/Make.tests                       |  103 -
 src/tests/vm/Rubric.functionality             |   30 -
 src/tests/vm/Rubric.robustness                |   21 -
 src/tests/vm/child-inherit.c                  |   16 -
 src/tests/vm/child-linear.c                   |   36 -
 src/tests/vm/child-mm-wrt.c                   |   24 -
 src/tests/vm/child-qsort-mm.c                 |   25 -
 src/tests/vm/child-qsort.c                    |   32 -
 src/tests/vm/child-sort.c                     |   42 -
 src/tests/vm/mmap-bad-fd.c                    |   15 -
 src/tests/vm/mmap-bad-fd.ck                   |   15 -
 src/tests/vm/mmap-clean.c                     |   53 -
 src/tests/vm/mmap-clean.ck                    |   16 -
 src/tests/vm/mmap-close.c                     |   27 -
 src/tests/vm/mmap-close.ck                    |   11 -
 src/tests/vm/mmap-exit.c                      |   22 -
 src/tests/vm/mmap-exit.ck                     |   17 -
 src/tests/vm/mmap-inherit.c                   |   32 -
 src/tests/vm/mmap-inherit.ck                  |   16 -
 src/tests/vm/mmap-misalign.c                  |   16 -
 src/tests/vm/mmap-misalign.ck                 |   11 -
 src/tests/vm/mmap-null.c                      |   15 -
 src/tests/vm/mmap-null.ck                     |   11 -
 src/tests/vm/mmap-over-code.c                 |   19 -
 src/tests/vm/mmap-over-code.ck                |   11 -
 src/tests/vm/mmap-over-data.c                 |   21 -
 src/tests/vm/mmap-over-data.ck                |   11 -
 src/tests/vm/mmap-over-stk.c                  |   19 -
 src/tests/vm/mmap-over-stk.ck                 |   11 -
 src/tests/vm/mmap-overlap.c                   |   20 -
 src/tests/vm/mmap-overlap.ck                  |   13 -
 src/tests/vm/mmap-read.c                      |   32 -
 src/tests/vm/mmap-read.ck                     |   11 -
 src/tests/vm/mmap-remove.c                    |   43 -
 src/tests/vm/mmap-remove.ck                   |   14 -
 src/tests/vm/mmap-shuffle.c                   |   38 -
 src/tests/vm/mmap-shuffle.ck                  |   47 -
 src/tests/vm/mmap-twice.c                     |   28 -
 src/tests/vm/mmap-twice.ck                    |   15 -
 src/tests/vm/mmap-unmap.c                     |   23 -
 src/tests/vm/mmap-unmap.ck                    |    7 -
 src/tests/vm/mmap-write.c                     |   32 -
 src/tests/vm/mmap-write.ck                    |   13 -
 src/tests/vm/mmap-zero.c                      |   27 -
 src/tests/vm/mmap-zero.ck                     |   12 -
 src/tests/vm/page-linear.c                    |   44 -
 src/tests/vm/page-linear.ck                   |   14 -
 src/tests/vm/page-merge-mm.c                  |    8 -
 src/tests/vm/page-merge-mm.ck                 |   29 -
 src/tests/vm/page-merge-par.c                 |    8 -
 src/tests/vm/page-merge-par.ck                |   29 -
 src/tests/vm/page-merge-seq.c                 |  137 --
 src/tests/vm/page-merge-seq.ck                |   29 -
 src/tests/vm/page-merge-stk.c                 |    8 -
 src/tests/vm/page-merge-stk.ck                |   29 -
 src/tests/vm/page-parallel.c                  |   21 -
 src/tests/vm/page-parallel.ck                 |   17 -
 src/tests/vm/page-shuffle.c                   |   30 -
 src/tests/vm/page-shuffle.ck                  |   44 -
 src/tests/vm/parallel-merge.c                 |  149 --
 src/tests/vm/parallel-merge.h                 |    6 -
 src/tests/vm/process_death.pm                 |   22 -
 src/tests/vm/pt-bad-addr.c                    |   11 -
 src/tests/vm/pt-bad-addr.ck                   |    7 -
 src/tests/vm/pt-bad-read.c                    |   16 -
 src/tests/vm/pt-bad-read.ck                   |   10 -
 src/tests/vm/pt-big-stk-obj.c                 |   20 -
 src/tests/vm/pt-big-stk-obj.ck                |   10 -
 src/tests/vm/pt-grow-bad.c                    |   14 -
 src/tests/vm/pt-grow-bad.ck                   |    9 -
 src/tests/vm/pt-grow-pusha.c                  |   20 -
 src/tests/vm/pt-grow-pusha.ck                 |    9 -
 src/tests/vm/pt-grow-stack.c                  |   20 -
 src/tests/vm/pt-grow-stack.ck                 |   10 -
 src/tests/vm/pt-grow-stk-sc.c                 |   32 -
 src/tests/vm/pt-grow-stk-sc.ck                |   15 -
 src/tests/vm/pt-write-code-2.c                |   15 -
 src/tests/vm/pt-write-code.c                  |   12 -
 src/tests/vm/pt-write-code.ck                 |    7 -
 src/tests/vm/pt-write-code2.ck                |   10 -
 src/tests/vm/qsort.c                          |  136 --
 src/tests/vm/qsort.h                          |    8 -
 src/tests/vm/sample.inc                       |   19 -
 src/tests/vm/sample.txt                       |   17 -
 src/threads/interrupt.h                       |   70 -
 src/threads/intr-stubs.S                      |  204 --
 src/threads/intr-stubs.h                      |   19 -
 src/threads/io.h                              |  173 --
 src/threads/kernel.lds.S                      |   26 -
 src/threads/loader.S                          |  349 ----
 src/threads/loader.h                          |   38 -
 src/threads/malloc.c                          |  294 ---
 src/threads/malloc.h                          |   13 -
 src/threads/palloc.c                          |  189 --
 src/threads/palloc.h                          |   23 -
 src/threads/pte.h                             |  107 -
 src/threads/start.S                           |   16 -
 src/threads/switch.S                          |   65 -
 src/threads/switch.h                          |   39 -
 src/threads/synch.c                           |  338 ----
 src/threads/synch.h                           |   51 -
 src/threads/synchlist.c                       |   98 -
 src/userprog/.gitignore                       |    3 -
 src/userprog/Make.vars                        |    7 -
 src/userprog/Makefile                         |    1 -
 src/userprog/exception.c                      |  161 --
 src/userprog/exception.h                      |   12 -
 src/userprog/gdt.c                            |  146 --
 src/userprog/gdt.h                            |   15 -
 src/userprog/pagedir.c                        |  263 ---
 src/userprog/pagedir.h                        |   18 -
 src/userprog/process.c                        |  522 -----
 src/userprog/process.h                        |   11 -
 src/userprog/start_pfs.sh                     |   10 -
 src/userprog/start_recursor.sh                |    6 -
 src/userprog/syscall.h                        |    6 -
 src/userprog/syscall.h.gch                    |  Bin 1708464 -> 0 bytes
 src/userprog/tss.c                            |  106 -
 src/userprog/tss.h                            |   11 -
 src/utils/.gitignore                          |    4 -
 src/utils/Makefile                            |   12 -
 src/utils/backtrace                           |  106 -
 src/utils/pintos                              |  905 ---------
 src/utils/pintos-gdb                          |   20 -
 src/utils/pintos-mkdisk                       |   37 -
 src/utils/setitimer-helper.c                  |   49 -
 src/utils/squish-pty.c                        |  345 ----
 src/utils/squish-unix.c                       |  353 ----
 src/vm/.gitignore                             |    3 -
 src/vm/Make.vars                              |    7 -
 src/vm/Makefile                               |    1 -
 661 files changed, 30006 deletions(-)
 delete mode 100644 src/.cvsignore
 delete mode 100644 src/.gitignore
 delete mode 100644 src/LICENSE
 delete mode 100644 src/Make.config
 delete mode 100644 src/Makefile
 delete mode 100644 src/Makefile.build
 delete mode 100644 src/Makefile.kernel
 delete mode 100644 src/Makefile.userprog
 delete mode 100644 src/devices/disk.c
 delete mode 100644 src/devices/disk.h
 delete mode 100644 src/devices/input.c
 delete mode 100644 src/devices/input.h
 delete mode 100644 src/devices/intq.c
 delete mode 100644 src/devices/intq.h
 delete mode 100644 src/devices/kbd.c
 delete mode 100644 src/devices/kbd.h
 delete mode 100644 src/devices/serial.c
 delete mode 100644 src/devices/serial.h
 delete mode 100644 src/devices/timer.c
 delete mode 100644 src/devices/timer.h
 delete mode 100644 src/devices/vga.c
 delete mode 100644 src/devices/vga.h
 delete mode 100644 src/examples/.gitignore
 delete mode 100644 src/examples/Makefile
 delete mode 100644 src/examples/bubsort.c
 delete mode 100644 src/examples/bubsort.o
 delete mode 100644 src/examples/cat.c
 delete mode 100644 src/examples/cat.o
 delete mode 100644 src/examples/child.c
 delete mode 100644 src/examples/child.o
 delete mode 100644 src/examples/cmp.c
 delete mode 100644 src/examples/cmp.o
 delete mode 100644 src/examples/cp.c
 delete mode 100644 src/examples/cp.o
 delete mode 100644 src/examples/create-bad.c
 delete mode 100644 src/examples/create-bad.o
 delete mode 100644 src/examples/dummy.c
 delete mode 100644 src/examples/dummy.o
 delete mode 100644 src/examples/echo.c
 delete mode 100644 src/examples/echo.o
 delete mode 100644 src/examples/halt.c
 delete mode 100644 src/examples/halt.o
 delete mode 100644 src/examples/hex-dump.c
 delete mode 100644 src/examples/hex-dump.o
 delete mode 100644 src/examples/insult.c
 delete mode 100644 src/examples/insult.o
 delete mode 100755 src/examples/lab1test
 delete mode 100644 src/examples/lab1test.c
 delete mode 100644 src/examples/lab1test.o
 delete mode 100755 src/examples/lab1test2
 delete mode 100644 src/examples/lab1test2.c
 delete mode 100644 src/examples/lab1test2.o
 delete mode 100644 src/examples/lab2test.c
 delete mode 100644 src/examples/lab2test.o
 delete mode 100644 src/examples/lab2test_beta.c
 delete mode 100755 src/examples/lab3test1
 delete mode 100755 src/examples/lab3test1.c
 delete mode 100644 src/examples/lab3test1.o
 delete mode 100755 src/examples/lab3test2
 delete mode 100755 src/examples/lab3test2.c
 delete mode 100644 src/examples/lab3test2.o
 delete mode 100755 src/examples/lab4test1
 delete mode 100755 src/examples/lab4test1.c
 delete mode 100644 src/examples/lab4test1.o
 delete mode 100644 src/examples/lib/.gitignore
 delete mode 100644 src/examples/lib/arithmetic.o
 delete mode 100644 src/examples/lib/debug.o
 delete mode 100644 src/examples/lib/random.o
 delete mode 100644 src/examples/lib/stdio.o
 delete mode 100644 src/examples/lib/stdlib.o
 delete mode 100644 src/examples/lib/string.o
 delete mode 100644 src/examples/lib/user/.dummy
 delete mode 100644 src/examples/lib/user/.gitignore
 delete mode 100644 src/examples/lib/user/console.o
 delete mode 100644 src/examples/lib/user/debug.o
 delete mode 100644 src/examples/lib/user/entry.o
 delete mode 100644 src/examples/lib/user/syscall.o
 delete mode 100644 src/examples/libc.a
 delete mode 100644 src/examples/lineup.c
 delete mode 100644 src/examples/lineup.o
 delete mode 100644 src/examples/longrun.c
 delete mode 100644 src/examples/longrun.o
 delete mode 100644 src/examples/ls.c
 delete mode 100644 src/examples/ls.o
 delete mode 100644 src/examples/matmult.c
 delete mode 100644 src/examples/matmult.o
 delete mode 100644 src/examples/mcat.c
 delete mode 100644 src/examples/mcat.o
 delete mode 100644 src/examples/mcp.c
 delete mode 100644 src/examples/mcp.o
 delete mode 100644 src/examples/mkdir.c
 delete mode 100644 src/examples/mkdir.o
 delete mode 100644 src/examples/parent.c
 delete mode 100644 src/examples/parent.o
 delete mode 100644 src/examples/pfs.c
 delete mode 100644 src/examples/pfs.h
 delete mode 100644 src/examples/pfs.o
 delete mode 100644 src/examples/pfs_reader.c
 delete mode 100644 src/examples/pfs_reader.o
 delete mode 100644 src/examples/pfs_writer.c
 delete mode 100644 src/examples/pfs_writer.o
 delete mode 100755 src/examples/printf
 delete mode 100644 src/examples/printf.c
 delete mode 100644 src/examples/printf.o
 delete mode 100644 src/examples/pwd.c
 delete mode 100644 src/examples/pwd.o
 delete mode 100644 src/examples/recursor.c
 delete mode 100644 src/examples/recursor.o
 delete mode 100755 src/examples/recursor_ng
 delete mode 100644 src/examples/recursor_ng.c
 delete mode 100644 src/examples/recursor_ng.o
 delete mode 100644 src/examples/rm.c
 delete mode 100644 src/examples/rm.o
 delete mode 100644 src/examples/shell.c
 delete mode 100644 src/examples/shell.o
 delete mode 100644 src/examples/sumargv.c
 delete mode 100644 src/examples/sumargv.o
 delete mode 100755 src/examples/supertest
 delete mode 100644 src/examples/supertest.c
 delete mode 100644 src/examples/supertest.o
 delete mode 100644 src/filesys/.gitignore
 delete mode 100644 src/filesys/Make.vars
 delete mode 100644 src/filesys/Makefile
 delete mode 100644 src/filesys/directory.c
 delete mode 100644 src/filesys/directory.h
 delete mode 100644 src/filesys/file.c
 delete mode 100644 src/filesys/file.h
 delete mode 100644 src/filesys/filesys.c
 delete mode 100644 src/filesys/filesys.h
 delete mode 100644 src/filesys/free-map.c
 delete mode 100644 src/filesys/free-map.h
 delete mode 100644 src/filesys/fsutil.c
 delete mode 100644 src/filesys/fsutil.h
 delete mode 100644 src/filesys/inode.c
 delete mode 100644 src/filesys/inode.h
 delete mode 100644 src/filesys/off_t.h
 delete mode 100644 src/lib/arithmetic.c
 delete mode 100644 src/lib/ctype.h
 delete mode 100644 src/lib/debug.c
 delete mode 100644 src/lib/debug.h
 delete mode 100644 src/lib/inttypes.h
 delete mode 100644 src/lib/kernel/bitmap.c
 delete mode 100644 src/lib/kernel/bitmap.h
 delete mode 100644 src/lib/kernel/console.c
 delete mode 100644 src/lib/kernel/console.h
 delete mode 100644 src/lib/kernel/debug.c
 delete mode 100644 src/lib/kernel/hash.c
 delete mode 100644 src/lib/kernel/hash.h
 delete mode 100644 src/lib/kernel/list.c
 delete mode 100644 src/lib/kernel/list.h
 delete mode 100644 src/lib/kernel/slist.c
 delete mode 100644 src/lib/kernel/slist.h
 delete mode 100644 src/lib/kernel/stdio.h
 delete mode 100644 src/lib/limits.h
 delete mode 100644 src/lib/random.c
 delete mode 100644 src/lib/random.h
 delete mode 100644 src/lib/round.h
 delete mode 100644 src/lib/stdarg.h
 delete mode 100644 src/lib/stdbool.h
 delete mode 100644 src/lib/stddef.h
 delete mode 100644 src/lib/stdint.h
 delete mode 100644 src/lib/stdio.c
 delete mode 100644 src/lib/stdio.h
 delete mode 100644 src/lib/stdlib.c
 delete mode 100644 src/lib/stdlib.h
 delete mode 100644 src/lib/string.c
 delete mode 100644 src/lib/string.h
 delete mode 100644 src/lib/syscall-nr.h
 delete mode 100644 src/lib/user/console.c
 delete mode 100644 src/lib/user/debug.c
 delete mode 100644 src/lib/user/entry.c
 delete mode 100644 src/lib/user/stdio.h
 delete mode 100644 src/lib/user/syscall.c
 delete mode 100644 src/lib/user/syscall.h
 delete mode 100644 src/lib/user/user.lds
 delete mode 100644 src/misc/bochs-2.2.6-big-endian.patch
 delete mode 100644 src/misc/bochs-2.2.6-build.sh
 delete mode 100644 src/misc/bochs-2.2.6-gdbstub-ENN.patch
 delete mode 100644 src/misc/bochs-2.2.6-jitter.patch
 delete mode 100644 src/misc/bochs-2.2.6-ms-extensions.patch
 delete mode 100644 src/misc/bochs-2.2.6-page-fault-segv.patch
 delete mode 100644 src/misc/bochs-2.2.6-paranoia.patch
 delete mode 100644 src/misc/bochs-2.2.6-solaris-link.patch
 delete mode 100644 src/misc/bochs-2.2.6-solaris-tty.patch
 delete mode 100644 src/misc/bochs-2.2.6-triple-fault.patch
 delete mode 100644 src/misc/gcc-3.3.6-cross-howto
 delete mode 100644 src/misc/gdb-macros
 delete mode 100644 src/tests/Algorithm/Diff.pm
 delete mode 100644 src/tests/Make.tests
 delete mode 100644 src/tests/arc4.c
 delete mode 100644 src/tests/arc4.h
 delete mode 100644 src/tests/arc4.pm
 delete mode 100644 src/tests/cksum.c
 delete mode 100644 src/tests/cksum.h
 delete mode 100644 src/tests/cksum.pm
 delete mode 100644 src/tests/filesys/Grading.no-vm
 delete mode 100644 src/tests/filesys/Grading.with-vm
 delete mode 100644 src/tests/filesys/base/Make.tests
 delete mode 100644 src/tests/filesys/base/Rubric
 delete mode 100644 src/tests/filesys/base/child-syn-read.c
 delete mode 100644 src/tests/filesys/base/child-syn-wrt.c
 delete mode 100644 src/tests/filesys/base/full.inc
 delete mode 100644 src/tests/filesys/base/lg-create.c
 delete mode 100644 src/tests/filesys/base/lg-create.ck
 delete mode 100644 src/tests/filesys/base/lg-full.c
 delete mode 100644 src/tests/filesys/base/lg-full.ck
 delete mode 100644 src/tests/filesys/base/lg-random.c
 delete mode 100644 src/tests/filesys/base/lg-random.ck
 delete mode 100644 src/tests/filesys/base/lg-seq-block.c
 delete mode 100644 src/tests/filesys/base/lg-seq-block.ck
 delete mode 100644 src/tests/filesys/base/lg-seq-random.c
 delete mode 100644 src/tests/filesys/base/lg-seq-random.ck
 delete mode 100644 src/tests/filesys/base/random.inc
 delete mode 100644 src/tests/filesys/base/seq-block.inc
 delete mode 100644 src/tests/filesys/base/seq-random.inc
 delete mode 100644 src/tests/filesys/base/sm-create.c
 delete mode 100644 src/tests/filesys/base/sm-create.ck
 delete mode 100644 src/tests/filesys/base/sm-full.c
 delete mode 100644 src/tests/filesys/base/sm-full.ck
 delete mode 100644 src/tests/filesys/base/sm-random.c
 delete mode 100644 src/tests/filesys/base/sm-random.ck
 delete mode 100644 src/tests/filesys/base/sm-seq-block.c
 delete mode 100644 src/tests/filesys/base/sm-seq-block.ck
 delete mode 100644 src/tests/filesys/base/sm-seq-random.c
 delete mode 100644 src/tests/filesys/base/sm-seq-random.ck
 delete mode 100644 src/tests/filesys/base/syn-read.c
 delete mode 100644 src/tests/filesys/base/syn-read.ck
 delete mode 100644 src/tests/filesys/base/syn-read.h
 delete mode 100644 src/tests/filesys/base/syn-remove.c
 delete mode 100644 src/tests/filesys/base/syn-remove.ck
 delete mode 100644 src/tests/filesys/base/syn-write.c
 delete mode 100644 src/tests/filesys/base/syn-write.ck
 delete mode 100644 src/tests/filesys/base/syn-write.h
 delete mode 100644 src/tests/filesys/create.inc
 delete mode 100644 src/tests/filesys/extended/Make.tests
 delete mode 100644 src/tests/filesys/extended/Rubric.functionality
 delete mode 100644 src/tests/filesys/extended/Rubric.persistence
 delete mode 100644 src/tests/filesys/extended/Rubric.robustness
 delete mode 100644 src/tests/filesys/extended/child-syn-rw.c
 delete mode 100644 src/tests/filesys/extended/dir-empty-name-persistence.ck
 delete mode 100644 src/tests/filesys/extended/dir-empty-name.c
 delete mode 100644 src/tests/filesys/extended/dir-empty-name.ck
 delete mode 100644 src/tests/filesys/extended/dir-mk-tree-persistence.ck
 delete mode 100644 src/tests/filesys/extended/dir-mk-tree.c
 delete mode 100644 src/tests/filesys/extended/dir-mk-tree.ck
 delete mode 100644 src/tests/filesys/extended/dir-mkdir-persistence.ck
 delete mode 100644 src/tests/filesys/extended/dir-mkdir.c
 delete mode 100644 src/tests/filesys/extended/dir-mkdir.ck
 delete mode 100644 src/tests/filesys/extended/dir-open-persistence.ck
 delete mode 100644 src/tests/filesys/extended/dir-open.c
 delete mode 100644 src/tests/filesys/extended/dir-open.ck
 delete mode 100644 src/tests/filesys/extended/dir-over-file-persistence.ck
 delete mode 100644 src/tests/filesys/extended/dir-over-file.c
 delete mode 100644 src/tests/filesys/extended/dir-over-file.ck
 delete mode 100644 src/tests/filesys/extended/dir-rm-cwd-persistence.ck
 delete mode 100644 src/tests/filesys/extended/dir-rm-cwd.c
 delete mode 100644 src/tests/filesys/extended/dir-rm-cwd.ck
 delete mode 100644 src/tests/filesys/extended/dir-rm-parent-persistence.ck
 delete mode 100644 src/tests/filesys/extended/dir-rm-parent.c
 delete mode 100644 src/tests/filesys/extended/dir-rm-parent.ck
 delete mode 100644 src/tests/filesys/extended/dir-rm-root-persistence.ck
 delete mode 100644 src/tests/filesys/extended/dir-rm-root.c
 delete mode 100644 src/tests/filesys/extended/dir-rm-root.ck
 delete mode 100644 src/tests/filesys/extended/dir-rm-tree-persistence.ck
 delete mode 100644 src/tests/filesys/extended/dir-rm-tree.c
 delete mode 100644 src/tests/filesys/extended/dir-rm-tree.ck
 delete mode 100644 src/tests/filesys/extended/dir-rmdir-persistence.ck
 delete mode 100644 src/tests/filesys/extended/dir-rmdir.c
 delete mode 100644 src/tests/filesys/extended/dir-rmdir.ck
 delete mode 100644 src/tests/filesys/extended/dir-under-file-persistence.ck
 delete mode 100644 src/tests/filesys/extended/dir-under-file.c
 delete mode 100644 src/tests/filesys/extended/dir-under-file.ck
 delete mode 100644 src/tests/filesys/extended/dir-vine-persistence.ck
 delete mode 100644 src/tests/filesys/extended/dir-vine.c
 delete mode 100644 src/tests/filesys/extended/dir-vine.ck
 delete mode 100644 src/tests/filesys/extended/grow-create-persistence.ck
 delete mode 100644 src/tests/filesys/extended/grow-create.c
 delete mode 100644 src/tests/filesys/extended/grow-create.ck
 delete mode 100644 src/tests/filesys/extended/grow-dir-lg-persistence.ck
 delete mode 100644 src/tests/filesys/extended/grow-dir-lg.c
 delete mode 100644 src/tests/filesys/extended/grow-dir-lg.ck
 delete mode 100644 src/tests/filesys/extended/grow-dir.inc
 delete mode 100644 src/tests/filesys/extended/grow-file-size-persistence.ck
 delete mode 100644 src/tests/filesys/extended/grow-file-size.c
 delete mode 100644 src/tests/filesys/extended/grow-file-size.ck
 delete mode 100644 src/tests/filesys/extended/grow-root-lg-persistence.ck
 delete mode 100644 src/tests/filesys/extended/grow-root-lg.c
 delete mode 100644 src/tests/filesys/extended/grow-root-lg.ck
 delete mode 100644 src/tests/filesys/extended/grow-root-sm-persistence.ck
 delete mode 100644 src/tests/filesys/extended/grow-root-sm.c
 delete mode 100644 src/tests/filesys/extended/grow-root-sm.ck
 delete mode 100644 src/tests/filesys/extended/grow-seq-lg-persistence.ck
 delete mode 100644 src/tests/filesys/extended/grow-seq-lg.c
 delete mode 100644 src/tests/filesys/extended/grow-seq-lg.ck
 delete mode 100644 src/tests/filesys/extended/grow-seq-sm-persistence.ck
 delete mode 100644 src/tests/filesys/extended/grow-seq-sm.c
 delete mode 100644 src/tests/filesys/extended/grow-seq-sm.ck
 delete mode 100644 src/tests/filesys/extended/grow-seq.inc
 delete mode 100644 src/tests/filesys/extended/grow-sparse-persistence.ck
 delete mode 100644 src/tests/filesys/extended/grow-sparse.c
 delete mode 100644 src/tests/filesys/extended/grow-sparse.ck
 delete mode 100644 src/tests/filesys/extended/grow-tell-persistence.ck
 delete mode 100644 src/tests/filesys/extended/grow-tell.c
 delete mode 100644 src/tests/filesys/extended/grow-tell.ck
 delete mode 100644 src/tests/filesys/extended/grow-two-files-persistence.ck
 delete mode 100644 src/tests/filesys/extended/grow-two-files.c
 delete mode 100644 src/tests/filesys/extended/grow-two-files.ck
 delete mode 100644 src/tests/filesys/extended/mk-tree.c
 delete mode 100644 src/tests/filesys/extended/mk-tree.h
 delete mode 100644 src/tests/filesys/extended/syn-rw-persistence.ck
 delete mode 100644 src/tests/filesys/extended/syn-rw.c
 delete mode 100644 src/tests/filesys/extended/syn-rw.ck
 delete mode 100644 src/tests/filesys/extended/syn-rw.h
 delete mode 100644 src/tests/filesys/extended/tar.c
 delete mode 100644 src/tests/filesys/seq-test.c
 delete mode 100644 src/tests/filesys/seq-test.h
 delete mode 100644 src/tests/internal/list.c
 delete mode 100644 src/tests/internal/stdio.c
 delete mode 100644 src/tests/internal/stdlib.c
 delete mode 100644 src/tests/lib.c
 delete mode 100644 src/tests/lib.h
 delete mode 100644 src/tests/lib.pm
 delete mode 100644 src/tests/main.c
 delete mode 100644 src/tests/main.h
 delete mode 100644 src/tests/make-grade
 delete mode 100644 src/tests/random.pm
 delete mode 100644 src/tests/tests.pm
 delete mode 100644 src/tests/threads/Grading
 delete mode 100644 src/tests/threads/Make.tests
 delete mode 100644 src/tests/threads/Rubric.alarm
 delete mode 100644 src/tests/threads/Rubric.mlfqs
 delete mode 100644 src/tests/threads/Rubric.priority
 delete mode 100644 src/tests/threads/alarm-multiple.ck
 delete mode 100644 src/tests/threads/alarm-negative.c
 delete mode 100644 src/tests/threads/alarm-negative.ck
 delete mode 100644 src/tests/threads/alarm-priority.c
 delete mode 100644 src/tests/threads/alarm-priority.ck
 delete mode 100644 src/tests/threads/alarm-simultaneous.c
 delete mode 100644 src/tests/threads/alarm-simultaneous.ck
 delete mode 100644 src/tests/threads/alarm-single.ck
 delete mode 100644 src/tests/threads/alarm-wait.c
 delete mode 100644 src/tests/threads/alarm-zero.c
 delete mode 100644 src/tests/threads/alarm-zero.ck
 delete mode 100644 src/tests/threads/alarm.pm
 delete mode 100644 src/tests/threads/mlfqs-block.c
 delete mode 100644 src/tests/threads/mlfqs-block.ck
 delete mode 100644 src/tests/threads/mlfqs-fair-2.ck
 delete mode 100644 src/tests/threads/mlfqs-fair-20.ck
 delete mode 100644 src/tests/threads/mlfqs-fair.c
 delete mode 100644 src/tests/threads/mlfqs-load-1.c
 delete mode 100644 src/tests/threads/mlfqs-load-1.ck
 delete mode 100644 src/tests/threads/mlfqs-load-60.c
 delete mode 100644 src/tests/threads/mlfqs-load-60.ck
 delete mode 100644 src/tests/threads/mlfqs-load-avg.c
 delete mode 100644 src/tests/threads/mlfqs-load-avg.ck
 delete mode 100644 src/tests/threads/mlfqs-nice-10.ck
 delete mode 100644 src/tests/threads/mlfqs-nice-2.ck
 delete mode 100644 src/tests/threads/mlfqs-recent-1.c
 delete mode 100644 src/tests/threads/mlfqs-recent-1.ck
 delete mode 100644 src/tests/threads/mlfqs.pm
 delete mode 100644 src/tests/threads/priority-change.c
 delete mode 100644 src/tests/threads/priority-change.ck
 delete mode 100644 src/tests/threads/priority-condvar.c
 delete mode 100644 src/tests/threads/priority-condvar.ck
 delete mode 100644 src/tests/threads/priority-donate-chain.c
 delete mode 100644 src/tests/threads/priority-donate-chain.ck
 delete mode 100644 src/tests/threads/priority-donate-lower.c
 delete mode 100644 src/tests/threads/priority-donate-lower.ck
 delete mode 100644 src/tests/threads/priority-donate-multiple.c
 delete mode 100644 src/tests/threads/priority-donate-multiple.ck
 delete mode 100644 src/tests/threads/priority-donate-multiple2.c
 delete mode 100644 src/tests/threads/priority-donate-multiple2.ck
 delete mode 100644 src/tests/threads/priority-donate-nest.c
 delete mode 100644 src/tests/threads/priority-donate-nest.ck
 delete mode 100644 src/tests/threads/priority-donate-one.c
 delete mode 100644 src/tests/threads/priority-donate-one.ck
 delete mode 100644 src/tests/threads/priority-donate-sema.c
 delete mode 100644 src/tests/threads/priority-donate-sema.ck
 delete mode 100644 src/tests/threads/priority-fifo.c
 delete mode 100644 src/tests/threads/priority-fifo.ck
 delete mode 100644 src/tests/threads/priority-preempt.c
 delete mode 100644 src/tests/threads/priority-preempt.ck
 delete mode 100644 src/tests/threads/priority-sema.c
 delete mode 100644 src/tests/threads/priority-sema.ck
 delete mode 100644 src/tests/threads/simplethreadtest.c
 delete mode 100644 src/tests/threads/tests.c
 delete mode 100644 src/tests/threads/tests.h
 delete mode 100644 src/tests/threads/threadtest.c
 delete mode 100644 src/tests/userprog/Grading
 delete mode 100644 src/tests/userprog/Make.tests
 delete mode 100644 src/tests/userprog/Rubric.functionality
 delete mode 100644 src/tests/userprog/Rubric.robustness
 delete mode 100644 src/tests/userprog/args-dbl-space.ck
 delete mode 100644 src/tests/userprog/args-many.ck
 delete mode 100644 src/tests/userprog/args-multiple.ck
 delete mode 100644 src/tests/userprog/args-none.ck
 delete mode 100644 src/tests/userprog/args-single.ck
 delete mode 100644 src/tests/userprog/args.c
 delete mode 100644 src/tests/userprog/bad-jump.c
 delete mode 100644 src/tests/userprog/bad-jump.ck
 delete mode 100644 src/tests/userprog/bad-jump2.c
 delete mode 100644 src/tests/userprog/bad-jump2.ck
 delete mode 100644 src/tests/userprog/bad-read.c
 delete mode 100644 src/tests/userprog/bad-read.ck
 delete mode 100644 src/tests/userprog/bad-read2.c
 delete mode 100644 src/tests/userprog/bad-read2.ck
 delete mode 100644 src/tests/userprog/bad-write.c
 delete mode 100644 src/tests/userprog/bad-write.ck
 delete mode 100644 src/tests/userprog/bad-write2.c
 delete mode 100644 src/tests/userprog/bad-write2.ck
 delete mode 100644 src/tests/userprog/boundary.c
 delete mode 100644 src/tests/userprog/boundary.h
 delete mode 100644 src/tests/userprog/child-bad.c
 delete mode 100644 src/tests/userprog/child-close.c
 delete mode 100644 src/tests/userprog/child-rox.c
 delete mode 100644 src/tests/userprog/child-simple.c
 delete mode 100644 src/tests/userprog/close-bad-fd.c
 delete mode 100644 src/tests/userprog/close-bad-fd.ck
 delete mode 100644 src/tests/userprog/close-normal.c
 delete mode 100644 src/tests/userprog/close-normal.ck
 delete mode 100644 src/tests/userprog/close-stdin.c
 delete mode 100644 src/tests/userprog/close-stdin.ck
 delete mode 100644 src/tests/userprog/close-stdout.c
 delete mode 100644 src/tests/userprog/close-stdout.ck
 delete mode 100644 src/tests/userprog/close-twice.c
 delete mode 100644 src/tests/userprog/close-twice.ck
 delete mode 100644 src/tests/userprog/create-bad-ptr.c
 delete mode 100644 src/tests/userprog/create-bad-ptr.ck
 delete mode 100644 src/tests/userprog/create-bound.c
 delete mode 100644 src/tests/userprog/create-bound.ck
 delete mode 100644 src/tests/userprog/create-empty.c
 delete mode 100644 src/tests/userprog/create-empty.ck
 delete mode 100644 src/tests/userprog/create-exists.c
 delete mode 100644 src/tests/userprog/create-exists.ck
 delete mode 100644 src/tests/userprog/create-long.c
 delete mode 100644 src/tests/userprog/create-long.ck
 delete mode 100644 src/tests/userprog/create-normal.c
 delete mode 100644 src/tests/userprog/create-normal.ck
 delete mode 100644 src/tests/userprog/create-null.c
 delete mode 100644 src/tests/userprog/create-null.ck
 delete mode 100644 src/tests/userprog/exec-arg.c
 delete mode 100644 src/tests/userprog/exec-arg.ck
 delete mode 100644 src/tests/userprog/exec-bad-ptr.c
 delete mode 100644 src/tests/userprog/exec-bad-ptr.ck
 delete mode 100644 src/tests/userprog/exec-missing.c
 delete mode 100644 src/tests/userprog/exec-missing.ck
 delete mode 100644 src/tests/userprog/exec-multiple.c
 delete mode 100644 src/tests/userprog/exec-multiple.ck
 delete mode 100644 src/tests/userprog/exec-once.c
 delete mode 100644 src/tests/userprog/exec-once.ck
 delete mode 100644 src/tests/userprog/exit.c
 delete mode 100644 src/tests/userprog/exit.ck
 delete mode 100644 src/tests/userprog/halt.c
 delete mode 100644 src/tests/userprog/halt.ck
 delete mode 100644 src/tests/userprog/lib/.gitignore
 delete mode 100644 src/tests/userprog/lib/user/.dummy
 delete mode 100644 src/tests/userprog/lib/user/.gitignore
 delete mode 100644 src/tests/userprog/multi-child-fd.c
 delete mode 100644 src/tests/userprog/multi-child-fd.ck
 delete mode 100644 src/tests/userprog/multi-recurse.c
 delete mode 100644 src/tests/userprog/multi-recurse.ck
 delete mode 100644 src/tests/userprog/no-vm/Make.tests
 delete mode 100644 src/tests/userprog/no-vm/Rubric
 delete mode 100644 src/tests/userprog/no-vm/multi-oom.c
 delete mode 100644 src/tests/userprog/no-vm/multi-oom.ck
 delete mode 100644 src/tests/userprog/null.ck
 delete mode 100644 src/tests/userprog/open-bad-ptr.c
 delete mode 100644 src/tests/userprog/open-bad-ptr.ck
 delete mode 100644 src/tests/userprog/open-boundary.c
 delete mode 100644 src/tests/userprog/open-boundary.ck
 delete mode 100644 src/tests/userprog/open-empty.c
 delete mode 100644 src/tests/userprog/open-empty.ck
 delete mode 100644 src/tests/userprog/open-missing.c
 delete mode 100644 src/tests/userprog/open-missing.ck
 delete mode 100644 src/tests/userprog/open-normal.c
 delete mode 100644 src/tests/userprog/open-normal.ck
 delete mode 100644 src/tests/userprog/open-null.c
 delete mode 100644 src/tests/userprog/open-null.ck
 delete mode 100644 src/tests/userprog/open-twice.c
 delete mode 100644 src/tests/userprog/open-twice.ck
 delete mode 100644 src/tests/userprog/read-bad-fd.c
 delete mode 100644 src/tests/userprog/read-bad-fd.ck
 delete mode 100644 src/tests/userprog/read-bad-ptr.c
 delete mode 100644 src/tests/userprog/read-bad-ptr.ck
 delete mode 100644 src/tests/userprog/read-boundary.c
 delete mode 100644 src/tests/userprog/read-boundary.ck
 delete mode 100644 src/tests/userprog/read-normal.c
 delete mode 100644 src/tests/userprog/read-normal.ck
 delete mode 100644 src/tests/userprog/read-stdout.c
 delete mode 100644 src/tests/userprog/read-stdout.ck
 delete mode 100644 src/tests/userprog/read-zero.c
 delete mode 100644 src/tests/userprog/read-zero.ck
 delete mode 100644 src/tests/userprog/rox-child.c
 delete mode 100644 src/tests/userprog/rox-child.ck
 delete mode 100644 src/tests/userprog/rox-child.inc
 delete mode 100644 src/tests/userprog/rox-multichild.c
 delete mode 100644 src/tests/userprog/rox-multichild.ck
 delete mode 100644 src/tests/userprog/rox-simple.c
 delete mode 100644 src/tests/userprog/rox-simple.ck
 delete mode 100644 src/tests/userprog/sample.inc
 delete mode 100644 src/tests/userprog/sample.txt
 delete mode 100644 src/tests/userprog/sc-bad-arg.c
 delete mode 100644 src/tests/userprog/sc-bad-arg.ck
 delete mode 100644 src/tests/userprog/sc-bad-sp.c
 delete mode 100644 src/tests/userprog/sc-bad-sp.ck
 delete mode 100644 src/tests/userprog/sc-boundary-2.c
 delete mode 100644 src/tests/userprog/sc-boundary-2.ck
 delete mode 100644 src/tests/userprog/sc-boundary.c
 delete mode 100644 src/tests/userprog/sc-boundary.ck
 delete mode 100644 src/tests/userprog/wait-bad-pid.c
 delete mode 100644 src/tests/userprog/wait-bad-pid.ck
 delete mode 100644 src/tests/userprog/wait-killed.c
 delete mode 100644 src/tests/userprog/wait-killed.ck
 delete mode 100644 src/tests/userprog/wait-simple.c
 delete mode 100644 src/tests/userprog/wait-simple.ck
 delete mode 100644 src/tests/userprog/wait-twice.c
 delete mode 100644 src/tests/userprog/wait-twice.ck
 delete mode 100644 src/tests/userprog/write-bad-fd.c
 delete mode 100644 src/tests/userprog/write-bad-fd.ck
 delete mode 100644 src/tests/userprog/write-bad-ptr.c
 delete mode 100644 src/tests/userprog/write-bad-ptr.ck
 delete mode 100644 src/tests/userprog/write-boundary.c
 delete mode 100644 src/tests/userprog/write-boundary.ck
 delete mode 100644 src/tests/userprog/write-normal.c
 delete mode 100644 src/tests/userprog/write-normal.ck
 delete mode 100644 src/tests/userprog/write-stdin.c
 delete mode 100644 src/tests/userprog/write-stdin.ck
 delete mode 100644 src/tests/userprog/write-zero.c
 delete mode 100644 src/tests/userprog/write-zero.ck
 delete mode 100644 src/tests/vm/Grading
 delete mode 100644 src/tests/vm/Make.tests
 delete mode 100644 src/tests/vm/Rubric.functionality
 delete mode 100644 src/tests/vm/Rubric.robustness
 delete mode 100644 src/tests/vm/child-inherit.c
 delete mode 100644 src/tests/vm/child-linear.c
 delete mode 100644 src/tests/vm/child-mm-wrt.c
 delete mode 100644 src/tests/vm/child-qsort-mm.c
 delete mode 100644 src/tests/vm/child-qsort.c
 delete mode 100644 src/tests/vm/child-sort.c
 delete mode 100644 src/tests/vm/mmap-bad-fd.c
 delete mode 100644 src/tests/vm/mmap-bad-fd.ck
 delete mode 100644 src/tests/vm/mmap-clean.c
 delete mode 100644 src/tests/vm/mmap-clean.ck
 delete mode 100644 src/tests/vm/mmap-close.c
 delete mode 100644 src/tests/vm/mmap-close.ck
 delete mode 100644 src/tests/vm/mmap-exit.c
 delete mode 100644 src/tests/vm/mmap-exit.ck
 delete mode 100644 src/tests/vm/mmap-inherit.c
 delete mode 100644 src/tests/vm/mmap-inherit.ck
 delete mode 100644 src/tests/vm/mmap-misalign.c
 delete mode 100644 src/tests/vm/mmap-misalign.ck
 delete mode 100644 src/tests/vm/mmap-null.c
 delete mode 100644 src/tests/vm/mmap-null.ck
 delete mode 100644 src/tests/vm/mmap-over-code.c
 delete mode 100644 src/tests/vm/mmap-over-code.ck
 delete mode 100644 src/tests/vm/mmap-over-data.c
 delete mode 100644 src/tests/vm/mmap-over-data.ck
 delete mode 100644 src/tests/vm/mmap-over-stk.c
 delete mode 100644 src/tests/vm/mmap-over-stk.ck
 delete mode 100644 src/tests/vm/mmap-overlap.c
 delete mode 100644 src/tests/vm/mmap-overlap.ck
 delete mode 100644 src/tests/vm/mmap-read.c
 delete mode 100644 src/tests/vm/mmap-read.ck
 delete mode 100644 src/tests/vm/mmap-remove.c
 delete mode 100644 src/tests/vm/mmap-remove.ck
 delete mode 100644 src/tests/vm/mmap-shuffle.c
 delete mode 100644 src/tests/vm/mmap-shuffle.ck
 delete mode 100644 src/tests/vm/mmap-twice.c
 delete mode 100644 src/tests/vm/mmap-twice.ck
 delete mode 100644 src/tests/vm/mmap-unmap.c
 delete mode 100644 src/tests/vm/mmap-unmap.ck
 delete mode 100644 src/tests/vm/mmap-write.c
 delete mode 100644 src/tests/vm/mmap-write.ck
 delete mode 100644 src/tests/vm/mmap-zero.c
 delete mode 100644 src/tests/vm/mmap-zero.ck
 delete mode 100644 src/tests/vm/page-linear.c
 delete mode 100644 src/tests/vm/page-linear.ck
 delete mode 100644 src/tests/vm/page-merge-mm.c
 delete mode 100644 src/tests/vm/page-merge-mm.ck
 delete mode 100644 src/tests/vm/page-merge-par.c
 delete mode 100644 src/tests/vm/page-merge-par.ck
 delete mode 100644 src/tests/vm/page-merge-seq.c
 delete mode 100644 src/tests/vm/page-merge-seq.ck
 delete mode 100644 src/tests/vm/page-merge-stk.c
 delete mode 100644 src/tests/vm/page-merge-stk.ck
 delete mode 100644 src/tests/vm/page-parallel.c
 delete mode 100644 src/tests/vm/page-parallel.ck
 delete mode 100644 src/tests/vm/page-shuffle.c
 delete mode 100644 src/tests/vm/page-shuffle.ck
 delete mode 100644 src/tests/vm/parallel-merge.c
 delete mode 100644 src/tests/vm/parallel-merge.h
 delete mode 100644 src/tests/vm/process_death.pm
 delete mode 100644 src/tests/vm/pt-bad-addr.c
 delete mode 100644 src/tests/vm/pt-bad-addr.ck
 delete mode 100644 src/tests/vm/pt-bad-read.c
 delete mode 100644 src/tests/vm/pt-bad-read.ck
 delete mode 100644 src/tests/vm/pt-big-stk-obj.c
 delete mode 100644 src/tests/vm/pt-big-stk-obj.ck
 delete mode 100644 src/tests/vm/pt-grow-bad.c
 delete mode 100644 src/tests/vm/pt-grow-bad.ck
 delete mode 100644 src/tests/vm/pt-grow-pusha.c
 delete mode 100644 src/tests/vm/pt-grow-pusha.ck
 delete mode 100644 src/tests/vm/pt-grow-stack.c
 delete mode 100644 src/tests/vm/pt-grow-stack.ck
 delete mode 100644 src/tests/vm/pt-grow-stk-sc.c
 delete mode 100644 src/tests/vm/pt-grow-stk-sc.ck
 delete mode 100644 src/tests/vm/pt-write-code-2.c
 delete mode 100644 src/tests/vm/pt-write-code.c
 delete mode 100644 src/tests/vm/pt-write-code.ck
 delete mode 100644 src/tests/vm/pt-write-code2.ck
 delete mode 100644 src/tests/vm/qsort.c
 delete mode 100644 src/tests/vm/qsort.h
 delete mode 100644 src/tests/vm/sample.inc
 delete mode 100644 src/tests/vm/sample.txt
 delete mode 100644 src/threads/interrupt.h
 delete mode 100644 src/threads/intr-stubs.S
 delete mode 100644 src/threads/intr-stubs.h
 delete mode 100644 src/threads/io.h
 delete mode 100644 src/threads/kernel.lds.S
 delete mode 100644 src/threads/loader.S
 delete mode 100644 src/threads/loader.h
 delete mode 100644 src/threads/malloc.c
 delete mode 100644 src/threads/malloc.h
 delete mode 100644 src/threads/palloc.c
 delete mode 100644 src/threads/palloc.h
 delete mode 100644 src/threads/pte.h
 delete mode 100644 src/threads/start.S
 delete mode 100644 src/threads/switch.S
 delete mode 100644 src/threads/switch.h
 delete mode 100644 src/threads/synch.c
 delete mode 100644 src/threads/synch.h
 delete mode 100644 src/threads/synchlist.c
 delete mode 100644 src/userprog/.gitignore
 delete mode 100644 src/userprog/Make.vars
 delete mode 100644 src/userprog/Makefile
 delete mode 100644 src/userprog/exception.c
 delete mode 100644 src/userprog/exception.h
 delete mode 100644 src/userprog/gdt.c
 delete mode 100644 src/userprog/gdt.h
 delete mode 100644 src/userprog/pagedir.c
 delete mode 100644 src/userprog/pagedir.h
 delete mode 100644 src/userprog/process.c
 delete mode 100644 src/userprog/process.h
 delete mode 100644 src/userprog/start_pfs.sh
 delete mode 100644 src/userprog/start_recursor.sh
 delete mode 100644 src/userprog/syscall.h
 delete mode 100644 src/userprog/syscall.h.gch
 delete mode 100644 src/userprog/tss.c
 delete mode 100644 src/userprog/tss.h
 delete mode 100644 src/utils/.gitignore
 delete mode 100644 src/utils/Makefile
 delete mode 100755 src/utils/backtrace
 delete mode 100755 src/utils/pintos
 delete mode 100755 src/utils/pintos-gdb
 delete mode 100755 src/utils/pintos-mkdisk
 delete mode 100644 src/utils/setitimer-helper.c
 delete mode 100644 src/utils/squish-pty.c
 delete mode 100644 src/utils/squish-unix.c
 delete mode 100644 src/vm/.gitignore
 delete mode 100644 src/vm/Make.vars
 delete mode 100644 src/vm/Makefile

diff --git a/src/.cvsignore b/src/.cvsignore
deleted file mode 100644
index bea5755..0000000
--- a/src/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-TAGS
diff --git a/src/.gitignore b/src/.gitignore
deleted file mode 100644
index bea5755..0000000
--- a/src/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-TAGS
diff --git a/src/LICENSE b/src/LICENSE
deleted file mode 100644
index 8702541..0000000
--- a/src/LICENSE
+++ /dev/null
@@ -1,95 +0,0 @@
-Pintos, including its documentation, is subject to the following
-license:
-
-    Copyright (C) 2004, 2005, 2006 Board of Trustees, Leland Stanford
-    Jr. University.  All rights reserved.
-
-    Permission is hereby granted, free of charge, to any person obtaining
-    a copy of this software and associated documentation files (the
-    "Software"), to deal in the Software without restriction, including
-    without limitation the rights to use, copy, modify, merge, publish,
-    distribute, sublicense, and/or sell copies of the Software, and to
-    permit persons to whom the Software is furnished to do so, subject to
-    the following conditions:
-
-    The above copyright notice and this permission notice shall be
-    included in all copies or substantial portions of the Software.
-
-    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-    LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-    OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-    WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-A few individual files in Pintos were originally derived from other
-projects, but they have been extensively modified for use in Pintos.
-The original code falls under the original license, and modifications
-for Pintos are additionally covered by the Pintos license above. 
-
-In particular, code derived from Nachos is subject to the following
-license:
-
-/* Copyright (c) 1992-1996 The Regents of the University of California.
-   All rights reserved.
-
-   Permission to use, copy, modify, and distribute this software
-   and its documentation for any purpose, without fee, and
-   without written agreement is hereby granted, provided that the
-   above copyright notice and the following two paragraphs appear
-   in all copies of this software.
-
-   IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO
-   ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR
-   CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE
-   AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA
-   HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-   THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY
-   WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-   PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS"
-   BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
-   PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
-   MODIFICATIONS.
-*/
-
-Also, code derived from MIT's 6.828 course code is subject to the
-following license:
-
-/*
- * Copyright (C) 1997 Massachusetts Institute of Technology 
- *
- * This software is being provided by the copyright holders under the
- * following license. By obtaining, using and/or copying this software,
- * you agree that you have read, understood, and will comply with the
- * following terms and conditions:
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose and without fee or royalty is
- * hereby granted, provided that the full text of this NOTICE appears on
- * ALL copies of the software and documentation or portions thereof,
- * including modifications, that you make.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO
- * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE,
- * BUT NOT LIMITATION, COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR
- * WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR
- * THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY
- * THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. COPYRIGHT
- * HOLDERS WILL BEAR NO LIABILITY FOR ANY USE OF THIS SOFTWARE OR
- * DOCUMENTATION.
- *
- * The name and trademarks of copyright holders may NOT be used in
- * advertising or publicity pertaining to the software without specific,
- * written prior permission. Title to copyright in this software and any
- * associated documentation will at all times remain with copyright
- * holders. See the file AUTHORS which should have accompanied this software
- * for a list of all copyright holders.
- *
- * This file may be derived from previously copyrighted software. This
- * copyright applies only to those changes made by the copyright
- * holders listed in the AUTHORS file. The rest of this file is covered by
- * the copyright notices, if any, listed below.
- */
diff --git a/src/Make.config b/src/Make.config
deleted file mode 100644
index f5c6705..0000000
--- a/src/Make.config
+++ /dev/null
@@ -1,58 +0,0 @@
-# -*- makefile -*-
-
-SHELL = /bin/sh
-
-VPATH = $(SRCDIR)
-
-# Binary utilities.
-# If the host appears to be x86, use the normal tools.
-# If it's x86-64, use the compiler and linker in 32-bit mode.
-# Otherwise assume cross-tools are installed as i386-elf-*.
-X86 = i.86\|pentium.*\|[pk][56]\|nexgen\|viac3\|6x86\|athlon.*\|i86pc
-X86_64 = x86_64
-ifneq (0, $(shell expr `uname -m` : '$(X86)'))
-  CC = gcc
-  LD = ld
-  OBJCOPY = objcopy
-else
-  ifneq (0, $(shell expr `uname -m` : '$(X86_64)'))
-    CC = gcc -m32
-    LD = ld -melf_i386
-    OBJCOPY = objcopy
-  else
-    CC = i386-elf-gcc
-    LD = i386-elf-ld
-    OBJCOPY = i386-elf-objcopy
-  endif
-endif
-
-ifeq ($(strip $(shell command -v $(CC) 2> /dev/null)),)
-$(warning *** Compiler ($(CC)) not found.  Did you set $$PATH properly?  Please refer to the Getting Started section in the documentation for details. ***)
-endif
-
-# filst04@liu 2014-01: added to support some Linux distributions
-# klaar36@ida 2014-01: which architecture, compiler and system
-#                      combinations need this? 
-ifneq (0, $(shell expr `uname -s` : 'Linux'))
-  # not supported by SunOS cross compiler
-  CFLAG_STACK_PROTECTOR = -fno-stack-protector
-  LDFLAG_BUILD_ID = -Wl,--build-id=none
-else
-  CFLAG_STACK_PROTECTOR =
-  LDFLAG_BUILD_ID =
-endif
-
-# Compiler and assembler invocation.
-DEFINES =
-WARNINGS = -Wall -W -Wstrict-prototypes -Wmissing-prototypes -Wsystem-headers
-CFLAGS = -std=gnu99 -ggdb -msoft-float -fno-omit-frame-pointer -ffreestanding -fno-inline -fno-pic -O $(CFLAG_STACK_PROTECTOR)
-CPPFLAGS =  -nostdinc -I$(SRCDIR) -I$(SRCDIR)/lib
-ASFLAGS = -Wa,--gstabs
-LDFLAGS = 
-DEPS = -MMD -MF $(@:.o=.d)
-
-%.o: %.c
-	$(CC) -c $< -o $@ $(CFLAGS) $(CPPFLAGS) $(WARNINGS) $(DEFINES) $(DEPS)
-
-%.o: %.S
-	$(CC) -c $< -o $@ $(ASFLAGS) $(CPPFLAGS) $(DEFINES) $(DEPS)
diff --git a/src/Makefile b/src/Makefile
deleted file mode 100644
index 229f85d..0000000
--- a/src/Makefile
+++ /dev/null
@@ -1,29 +0,0 @@
-BUILD_SUBDIRS = threads userprog vm filesys
-
-all::
-	@echo "Run 'make' in subdirectories: $(BUILD_SUBDIRS)."
-	@echo "This top-level make has only 'clean' targets."
-
-CLEAN_SUBDIRS = $(BUILD_SUBDIRS) examples utils
-
-clean::
-	for d in $(CLEAN_SUBDIRS); do $(MAKE) -C $$d $@; done
-	rm -f TAGS tags
-
-distclean:: clean
-	find . -name '*~' -exec rm '{}' \;
-
-TAGS_SUBDIRS = $(BUILD_SUBDIRS) devices lib
-TAGS_SOURCES = find $(TAGS_SUBDIRS) -name \*.[chS] -print
-
-TAGS::
-	etags --members `$(TAGS_SOURCES)`
-
-tags::
-	ctags -T --no-warn `$(TAGS_SOURCES)`
-
-cscope.files::
-	$(TAGS_SOURCES) > cscope.files
-
-cscope:: cscope.files
-	cscope -b -q -k
diff --git a/src/Makefile.build b/src/Makefile.build
deleted file mode 100644
index ab0fcef..0000000
--- a/src/Makefile.build
+++ /dev/null
@@ -1,108 +0,0 @@
-# -*- makefile -*-
-
-SRCDIR = ../..
-
-all: os.dsk
-
-include ../../Make.config
-include ../Make.vars
-include ../../tests/Make.tests
-
-# Compiler and assembler options.
-os.dsk: CPPFLAGS += -I$(SRCDIR)/lib/kernel
-
-# Core kernel.
-threads_SRC  = threads/init.c		# Main program.
-threads_SRC += threads/thread.c		# Thread management core.
-threads_SRC += threads/switch.S		# Thread switch routine.
-threads_SRC += threads/interrupt.c	# Interrupt core.
-threads_SRC += threads/intr-stubs.S	# Interrupt stubs.
-threads_SRC += threads/synch.c		# Synchronization.
-threads_SRC += threads/palloc.c		# Page allocator.
-threads_SRC += threads/malloc.c		# Subpage allocator.
-threads_SRC += threads/start.S		# Startup code.
-threads_SRC += threads/boundedbuffer.c	# bounded buffer code
-threads_SRC += threads/synchlist.c	# synchronized list code
-
-# Device driver code.
-devices_SRC  = devices/timer.c		# Timer device.
-devices_SRC += devices/kbd.c		# Keyboard device.
-devices_SRC += devices/vga.c		# Video device.
-devices_SRC += devices/serial.c		# Serial port device.
-devices_SRC += devices/disk.c		# IDE disk device.
-devices_SRC += devices/input.c		# Serial and keyboard input.
-devices_SRC += devices/intq.c		# Interrupt queue.
-
-# Library code shared between kernel and user programs.
-lib_SRC  = lib/debug.c			# Debug helpers.
-lib_SRC += lib/random.c			# Pseudo-random numbers.
-lib_SRC += lib/stdio.c			# I/O library.
-lib_SRC += lib/stdlib.c			# Utility functions.
-lib_SRC += lib/string.c			# String functions.
-lib_SRC += lib/arithmetic.c
-
-# Kernel-specific library code.
-lib/kernel_SRC  = lib/kernel/debug.c	# Debug helpers.
-lib/kernel_SRC += lib/kernel/list.c	# Doubly-linked lists.
-lib/kernel_SRC += lib/kernel/bitmap.c	# Bitmaps.
-lib/kernel_SRC += lib/kernel/hash.c	# Hash tables.
-lib/kernel_SRC += lib/kernel/console.c	# printf(), putchar().
-lib/kernel_SRC += lib/kernel/slist.c    # simple list
-
-# User process code.
-userprog_SRC  = userprog/process.c	# Process loading.
-userprog_SRC += userprog/pagedir.c	# Page directories.
-userprog_SRC += userprog/exception.c	# User exception handler.
-userprog_SRC += userprog/syscall.c	# System call handler.
-userprog_SRC += userprog/gdt.c		# GDT initialization.
-userprog_SRC += userprog/tss.c		# TSS management.
-
-# No virtual memory code yet.
-#vm_SRC = vm/file.c			# Some file.
-
-# Filesystem code.
-filesys_SRC  = filesys/filesys.c	# Filesystem core.
-filesys_SRC += filesys/free-map.c	# Free sector bitmap.
-filesys_SRC += filesys/file.c		# Files.
-filesys_SRC += filesys/directory.c	# Directories.
-filesys_SRC += filesys/inode.c		# File headers.
-filesys_SRC += filesys/fsutil.c		# Utilities.
-
-SOURCES = $(foreach dir,$(KERNEL_SUBDIRS),$($(dir)_SRC))
-OBJECTS = $(patsubst %.c,%.o,$(patsubst %.S,%.o,$(SOURCES)))
-DEPENDS = $(patsubst %.o,%.d,$(OBJECTS))
-
-threads/kernel.lds.s: CPPFLAGS += -P
-threads/kernel.lds.s: threads/kernel.lds.S threads/loader.h
-
-kernel.o: threads/kernel.lds.s $(OBJECTS) 
-	$(LD) -T $< -o $@ $(OBJECTS)
-
-kernel.bin: kernel.o
-	$(OBJCOPY) -O binary -R .note -R .note.* -R .comment -S $< $@.tmp
-	dd if=$@.tmp of=$@ bs=4096 conv=sync
-	rm $@.tmp
-
-threads/loader.o: threads/loader.S kernel.bin
-	$(CC) -c $< -o $@ $(ASFLAGS) $(CPPFLAGS) $(DEFINES) -DKERNEL_LOAD_PAGES=`perl -e 'print +(-s "kernel.bin") / 4096;'`
-
-loader.bin: threads/loader.o
-	$(LD) -N -e start -Ttext 0x7c00 -o $@.tmp $<
-	$(OBJCOPY) -O binary -R .note -R .note.* -R .comment -S $@.tmp $@
-	rm $@.tmp
-
-os.dsk: loader.bin kernel.bin
-	cat $^ > $@
-
-clean::
-	rm -f $(OBJECTS) $(DEPENDS) 
-	rm -f threads/loader.o threads/kernel.lds.s threads/loader.d
-	rm -f kernel.o kernel.lds.s
-	rm -f kernel.bin loader.bin os.dsk
-	rm -f bochsout.txt bochsrc.txt
-	rm -f results grade
-
-Makefile: $(SRCDIR)/Makefile.build
-	cp $< $@
-
--include $(DEPENDS)
diff --git a/src/Makefile.kernel b/src/Makefile.kernel
deleted file mode 100644
index 162a411..0000000
--- a/src/Makefile.kernel
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- makefile -*-
-
-all:
-
-include Make.vars
-
-DIRS = $(sort $(addprefix build/,$(KERNEL_SUBDIRS) $(TEST_SUBDIRS) lib/user))
-
-all grade check: $(DIRS) build/Makefile
-	cd build && $(MAKE) $@
-$(DIRS):
-	mkdir -p $@
-build/Makefile: ../Makefile.build
-	cp $< $@
-
-build/%: $(DIRS) build/Makefile
-	cd build && $(MAKE) $*
-
-clean:
-	rm -rf build
diff --git a/src/Makefile.userprog b/src/Makefile.userprog
deleted file mode 100644
index 9a60559..0000000
--- a/src/Makefile.userprog
+++ /dev/null
@@ -1,55 +0,0 @@
-# -*- makefile -*-
-
-$(PROGS): CPPFLAGS += -I$(SRCDIR)/lib/user -I.
-
-# Linker flags.
-$(PROGS): LDFLAGS = -nostdlib -static -Wl,-T,$(LDSCRIPT)
-$(PROGS): LDSCRIPT = $(SRCDIR)/lib/user/user.lds
-# To work with LINUX, thanks Klas.:
-$(PROGS): LDFLAGS += $(LDFLAG_BUILD_ID)
-
-# Library code shared between kernel and user programs.
-lib_SRC  = lib/debug.c			# Debug code.
-lib_SRC += lib/random.c			# Pseudo-random numbers.
-lib_SRC += lib/stdio.c			# I/O library.
-lib_SRC += lib/stdlib.c			# Utility functions.
-lib_SRC += lib/string.c			# String functions.
-lib_SRC += lib/arithmetic.c
-
-# User level only library code.
-lib/user_SRC  = lib/user/debug.c	# Debug helpers.
-lib/user_SRC += lib/user/syscall.c	# System calls.
-lib/user_SRC += lib/user/console.c	# Console code.
-
-LIB_OBJ = $(patsubst %.c,%.o,$(patsubst %.S,%.o,$(lib_SRC) $(lib/user_SRC)))
-LIB_DEP = $(patsubst %.o,%.d,$(LIB_OBJ))
-LIB = lib/user/entry.o libc.a
-
-PROGS_SRC = $(foreach prog,$(PROGS),$($(prog)_SRC))
-PROGS_OBJ = $(patsubst %.c,%.o,$(patsubst %.S,%.o,$(PROGS_SRC)))
-PROGS_DEP = $(patsubst %.o,%.d,$(PROGS_OBJ))
-# filst04@liu 2014-01: Needed to not break the system call functions
-# on modern Linux'es, works on SunOS too
-lib/user/syscall.o: CPPFLAGS += -fno-omit-frame-pointer
-all: $(PROGS)
-
-define TEMPLATE
-$(1)_OBJ = $(patsubst %.c,%.o,$(patsubst %.S,%.o,$($(1)_SRC)))
-$(1): $$($(1)_OBJ) $$(LIB) $$(LDSCRIPT)
-	$$(CC) $$(LDFLAGS) $$($(1)_OBJ) $$(LIB) -o $$@
-endef
-
-$(foreach prog,$(PROGS),$(eval $(call TEMPLATE,$(prog))))
-
-libc.a: $(LIB_OBJ)
-	rm -f $@
-	ar r $@ $^
-	ranlib $@
-
-clean::
-	rm -f $(PROGS) $(PROGS_OBJ) $(PROGS_DEP)
-	rm -f $(LIB_DEP) $(LIB_OBJ) lib/user/entry.[do] libc.a 
-
-.PHONY: all clean
-
--include $(LIB_DEP) $(PROGS_DEP)
diff --git a/src/devices/disk.c b/src/devices/disk.c
deleted file mode 100644
index 14fc631..0000000
--- a/src/devices/disk.c
+++ /dev/null
@@ -1,571 +0,0 @@
-#include "devices/disk.h"
-#include <ctype.h>
-#include <debug.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include "devices/timer.h"
-#include "threads/io.h"
-#include "threads/interrupt.h"
-#include "threads/synch.h"
-
-/* The code in this file is an interface to an ATA (IDE)
-   controller.  It attempts to comply to [ATA-3]. */
-
-/* ATA command block port addresses. */
-#define reg_data(CHANNEL) ((CHANNEL)->reg_base + 0)     /* Data. */
-#define reg_error(CHANNEL) ((CHANNEL)->reg_base + 1)    /* Error. */
-#define reg_nsect(CHANNEL) ((CHANNEL)->reg_base + 2)    /* Sector Count. */
-#define reg_lbal(CHANNEL) ((CHANNEL)->reg_base + 3)     /* LBA 0:7. */
-#define reg_lbam(CHANNEL) ((CHANNEL)->reg_base + 4)     /* LBA 15:8. */
-#define reg_lbah(CHANNEL) ((CHANNEL)->reg_base + 5)     /* LBA 23:16. */
-#define reg_device(CHANNEL) ((CHANNEL)->reg_base + 6)   /* Device/LBA 27:24. */
-#define reg_status(CHANNEL) ((CHANNEL)->reg_base + 7)   /* Status (r/o). */
-#define reg_command(CHANNEL) reg_status (CHANNEL)       /* Command (w/o). */
-
-/* ATA control block port addresses.
-   (If we supported non-legacy ATA controllers this would not be
-   flexible enough, but it's fine for what we do.) */
-#define reg_ctl(CHANNEL) ((CHANNEL)->reg_base + 0x206)  /* Control (w/o). */
-#define reg_alt_status(CHANNEL) reg_ctl (CHANNEL)       /* Alt Status (r/o). */
-
-/* Alternate Status Register bits. */
-#define STA_BSY 0x80            /* Busy. */
-#define STA_DRDY 0x40           /* Device Ready. */
-#define STA_DRQ 0x08            /* Data Request. */
-
-/* Control Register bits. */
-#define CTL_SRST 0x04           /* Software Reset. */
-
-/* Device Register bits. */
-#define DEV_MBS 0xa0            /* Must be set. */
-#define DEV_LBA 0x40            /* Linear based addressing. */
-#define DEV_DEV 0x10            /* Select device: 0=master, 1=slave. */
-
-/* Commands.
-   Many more are defined but this is the small subset that we
-   use. */
-#define CMD_IDENTIFY_DEVICE 0xec        /* IDENTIFY DEVICE. */
-#define CMD_READ_SECTOR_RETRY 0x20      /* READ SECTOR with retries. */
-#define CMD_WRITE_SECTOR_RETRY 0x30     /* WRITE SECTOR with retries. */
-
-/* An ATA device. */
-struct disk 
-  {
-    char name[8];               /* Name, e.g. "hd0:1". */
-    struct channel *channel;    /* Channel disk is on. */
-    int dev_no;                 /* Device 0 or 1 for master or slave. */
-
-    bool is_ata;                /* 1=This device is an ATA disk. */
-    disk_sector_t capacity;     /* Capacity in sectors (if is_ata). */
-
-    long long read_cnt;         /* Number of sectors read. */
-    long long write_cnt;        /* Number of sectors written. */
-  };
-
-/* An ATA channel (aka controller).
-   Each channel can control up to two disks. */
-struct channel 
-  {
-    char name[8];               /* Name, e.g. "hd0". */
-    uint16_t reg_base;          /* Base I/O port. */
-    uint8_t irq;                /* Interrupt in use. */
-
-    struct lock lock;           /* Must acquire to access the controller. */
-    bool expecting_interrupt;   /* True if an interrupt is expected, false if
-                                   any interrupt would be spurious. */
-    struct semaphore completion_wait;   /* Up'd by interrupt handler. */
-
-    struct disk devices[2];     /* The devices on this channel. */
-  };
-
-/* We support the two "legacy" ATA channels found in a standard PC. */
-#define CHANNEL_CNT 2
-static struct channel channels[CHANNEL_CNT];
-
-static void reset_channel (struct channel *);
-static bool check_device_type (struct disk *);
-static void identify_ata_device (struct disk *);
-
-static void select_sector (struct disk *, disk_sector_t);
-static void issue_pio_command (struct channel *, uint8_t command);
-static void input_sector (struct channel *, void *);
-static void output_sector (struct channel *, const void *);
-
-static void wait_until_idle (const struct disk *);
-static bool wait_while_busy (const struct disk *);
-static void select_device (const struct disk *);
-static void select_device_wait (const struct disk *);
-
-static void interrupt_handler (struct intr_frame *);
-
-/* Initialize the disk subsystem and detect disks. */
-void
-disk_init (void) 
-{
-  size_t chan_no;
-
-  for (chan_no = 0; chan_no < CHANNEL_CNT; chan_no++)
-    {
-      struct channel *c = &channels[chan_no];
-      int dev_no;
-
-      /* Initialize channel. */
-      snprintf (c->name, sizeof c->name, "hd%zu", chan_no);
-      switch (chan_no) 
-        {
-        case 0:
-          c->reg_base = 0x1f0;
-          c->irq = 14 + 0x20;
-          break;
-        case 1:
-          c->reg_base = 0x170;
-          c->irq = 15 + 0x20;
-          break;
-        default:
-          NOT_REACHED ();
-        }
-      lock_init (&c->lock);
-      c->expecting_interrupt = false;
-      sema_init (&c->completion_wait, 0);
- 
-      /* Initialize devices. */
-      for (dev_no = 0; dev_no < 2; dev_no++)
-        {
-          struct disk *d = &c->devices[dev_no];
-          snprintf (d->name, sizeof d->name, "%s:%d", c->name, dev_no);
-          d->channel = c;
-          d->dev_no = dev_no;
-
-          d->is_ata = false;
-          d->capacity = 0;
-
-          d->read_cnt = d->write_cnt = 0;
-        }
-
-      /* Register interrupt handler. */
-      intr_register_ext (c->irq, interrupt_handler, c->name);
-
-      /* Reset hardware. */
-      reset_channel (c);
-
-      /* Distinguish ATA hard disks from other devices. */
-      if (check_device_type (&c->devices[0]))
-        check_device_type (&c->devices[1]);
-
-      /* Read hard disk identity information. */
-      for (dev_no = 0; dev_no < 2; dev_no++)
-        if (c->devices[dev_no].is_ata)
-          identify_ata_device (&c->devices[dev_no]);
-    }
-}
-
-/* Prints disk statistics. */
-void
-disk_print_stats (void) 
-{
-  int chan_no;
-
-  for (chan_no = 0; chan_no < CHANNEL_CNT; chan_no++) 
-    {
-      int dev_no;
-
-      for (dev_no = 0; dev_no < 2; dev_no++) 
-        {
-          struct disk *d = disk_get (chan_no, dev_no);
-          if (d != NULL && d->is_ata) 
-            printf ("%s: %lld reads, %lld writes\n",
-                    d->name, d->read_cnt, d->write_cnt);
-        }
-    }
-}
-
-/* Returns the disk numbered DEV_NO--either 0 or 1 for master or
-   slave, respectively--within the channel numbered CHAN_NO.
-
-   Pintos uses disks this way:
-        0:0 - boot loader, command line args, and operating system kernel
-        0:1 - file system
-        1:0 - scratch
-        1:1 - swap
-*/
-struct disk *
-disk_get (int chan_no, int dev_no) 
-{
-  ASSERT (dev_no == 0 || dev_no == 1);
-
-  if (chan_no < (int) CHANNEL_CNT) 
-    {
-      struct disk *d = &channels[chan_no].devices[dev_no];
-      if (d->is_ata)
-        return d; 
-    }
-  return NULL;
-}
-
-/* Returns the size of disk D, measured in DISK_SECTOR_SIZE-byte
-   sectors. */
-disk_sector_t
-disk_size (struct disk *d) 
-{
-  ASSERT (d != NULL);
-  
-  return d->capacity;
-}
-
-/* Reads sector SEC_NO from disk D into BUFFER, which must have
-   room for DISK_SECTOR_SIZE bytes.
-   Internally synchronizes accesses to disks, so external
-   per-disk locking is unneeded. */
-void
-disk_read (struct disk *d, disk_sector_t sec_no, void *buffer) 
-{
-  struct channel *c;
-  
-  ASSERT (d != NULL);
-  ASSERT (buffer != NULL);
-
-  c = d->channel;
-  lock_acquire (&c->lock);
-  select_sector (d, sec_no);
-  issue_pio_command (c, CMD_READ_SECTOR_RETRY);
-  sema_down (&c->completion_wait);
-  if (!wait_while_busy (d))
-    PANIC ("%s: disk read failed, sector=%"PRDSNu, d->name, sec_no);
-  input_sector (c, buffer);
-  d->read_cnt++;
-  lock_release (&c->lock);
-}
-
-/* Write sector SEC_NO to disk D from BUFFER, which must contain
-   DISK_SECTOR_SIZE bytes.  Returns after the disk has
-   acknowledged receiving the data.
-   Internally synchronizes accesses to disks, so external
-   per-disk locking is unneeded. */
-void
-disk_write (struct disk *d, disk_sector_t sec_no, const void *buffer)
-{
-  struct channel *c;
-  
-  ASSERT (d != NULL);
-  ASSERT (buffer != NULL);
-
-  c = d->channel;
-  lock_acquire (&c->lock);
-  select_sector (d, sec_no);
-  issue_pio_command (c, CMD_WRITE_SECTOR_RETRY);
-  if (!wait_while_busy (d))
-    PANIC ("%s: disk write failed, sector=%"PRDSNu, d->name, sec_no);
-  output_sector (c, buffer);
-  sema_down (&c->completion_wait);
-  d->write_cnt++;
-  lock_release (&c->lock);
-}
-
-/* Disk detection and identification. */
-
-static void print_ata_string (char *string, size_t size);
-
-/* Resets an ATA channel and waits for any devices present on it
-   to finish the reset. */
-static void
-reset_channel (struct channel *c) 
-{
-  bool present[2];
-  int dev_no;
-
-  /* The ATA reset sequence depends on which devices are present,
-     so we start by detecting device presence. */
-  for (dev_no = 0; dev_no < 2; dev_no++)
-    {
-      struct disk *d = &c->devices[dev_no];
-
-      select_device (d);
-
-      outb (reg_nsect (c), 0x55);
-      outb (reg_lbal (c), 0xaa);
-
-      outb (reg_nsect (c), 0xaa);
-      outb (reg_lbal (c), 0x55);
-
-      outb (reg_nsect (c), 0x55);
-      outb (reg_lbal (c), 0xaa);
-
-      present[dev_no] = (inb (reg_nsect (c)) == 0x55
-                         && inb (reg_lbal (c)) == 0xaa);
-    }
-
-  /* Issue soft reset sequence, which selects device 0 as a side effect.
-     Also enable interrupts. */
-  outb (reg_ctl (c), 0);
-  timer_usleep (10);
-  outb (reg_ctl (c), CTL_SRST);
-  timer_usleep (10);
-  outb (reg_ctl (c), 0);
-
-  timer_msleep (150);
-
-  /* Wait for device 0 to clear BSY. */
-  if (present[0]) 
-    {
-      select_device (&c->devices[0]);
-      wait_while_busy (&c->devices[0]); 
-    }
-
-  /* Wait for device 1 to clear BSY. */
-  if (present[1])
-    {
-      int i;
-
-      select_device (&c->devices[1]);
-      for (i = 0; i < 3000; i++) 
-        {
-          if (inb (reg_nsect (c)) == 1 && inb (reg_lbal (c)) == 1)
-            break;
-          timer_msleep (10);
-        }
-      wait_while_busy (&c->devices[1]);
-    }
-}
-
-/* Checks whether device D is an ATA disk and sets D's is_ata
-   member appropriately.  If D is device 0 (master), returns true
-   if it's possible that a slave (device 1) exists on this
-   channel.  If D is device 1 (slave), the return value is not
-   meaningful. */
-static bool
-check_device_type (struct disk *d) 
-{
-  struct channel *c = d->channel;
-  uint8_t error, lbam, lbah, status;
-
-  select_device (d);
-
-  error = inb (reg_error (c));
-  lbam = inb (reg_lbam (c));
-  lbah = inb (reg_lbah (c));
-  status = inb (reg_status (c));
-
-  if ((error != 1 && (error != 0x81 || d->dev_no == 1))
-      || (status & STA_DRDY) == 0
-      || (status & STA_BSY) != 0)
-    {
-      d->is_ata = false;
-      return error != 0x81;      
-    }
-  else 
-    {
-      d->is_ata = (lbam == 0 && lbah == 0) || (lbam == 0x3c && lbah == 0xc3);
-      return true; 
-    }
-}
-
-/* Sends an IDENTIFY DEVICE command to disk D and reads the
-   response.  Initializes D's capacity member based on the result
-   and prints a message describing the disk to the console. */
-static void
-identify_ata_device (struct disk *d) 
-{
-  struct channel *c = d->channel;
-  uint16_t id[DISK_SECTOR_SIZE / 2];
-
-  ASSERT (d->is_ata);
-
-  /* Send the IDENTIFY DEVICE command, wait for an interrupt
-     indicating the device's response is ready, and read the data
-     into our buffer. */
-  select_device_wait (d);
-  issue_pio_command (c, CMD_IDENTIFY_DEVICE);
-  sema_down (&c->completion_wait);
-  if (!wait_while_busy (d))
-    {
-      d->is_ata = false;
-      return;
-    }
-  input_sector (c, id);
-
-  /* Calculate capacity. */
-  d->capacity = id[60] | ((uint32_t) id[61] << 16);
-
-  /* Print identification message. */
-  printf ("%s: detected %'"PRDSNu" sector (", d->name, d->capacity);
-  if (d->capacity > 1024 / DISK_SECTOR_SIZE * 1024 * 1024)
-    printf ("%"PRDSNu" GB",
-            d->capacity / (1024 / DISK_SECTOR_SIZE * 1024 * 1024));
-  else if (d->capacity > 1024 / DISK_SECTOR_SIZE * 1024)
-    printf ("%"PRDSNu" MB", d->capacity / (1024 / DISK_SECTOR_SIZE * 1024));
-  else if (d->capacity > 1024 / DISK_SECTOR_SIZE)
-    printf ("%"PRDSNu" kB", d->capacity / (1024 / DISK_SECTOR_SIZE));
-  else
-    printf ("%"PRDSNu" byte", d->capacity * DISK_SECTOR_SIZE);
-  printf (") disk, model \"");
-  print_ata_string ((char *) &id[27], 40);
-  printf ("\", serial \"");
-  print_ata_string ((char *) &id[10], 20);
-  printf ("\"\n");
-}
-
-/* Prints STRING, which consists of SIZE bytes in a funky format:
-   each pair of bytes is in reverse order.  Does not print
-   trailing whitespace and/or nulls. */
-static void
-print_ata_string (char *string, size_t size) 
-{
-  size_t i;
-
-  /* Find the last non-white, non-null character. */
-  for (; size > 0; size--)
-    {
-      int c = string[(size - 1) ^ 1];
-      if (c != '\0' && !isspace (c))
-        break; 
-    }
-
-  /* Print. */
-  for (i = 0; i < size; i++)
-    printf ("%c", string[i ^ 1]);
-}
-
-/* Selects device D, waiting for it to become ready, and then
-   writes SEC_NO to the disk's sector selection registers.  (We
-   use LBA mode.) */
-static void
-select_sector (struct disk *d, disk_sector_t sec_no) 
-{
-  struct channel *c = d->channel;
-
-  ASSERT (sec_no < d->capacity);
-  ASSERT (sec_no < (1UL << 28));
-  
-  select_device_wait (d);
-  outb (reg_nsect (c), 1);
-  outb (reg_lbal (c), sec_no);
-  outb (reg_lbam (c), sec_no >> 8);
-  outb (reg_lbah (c), (sec_no >> 16));
-  outb (reg_device (c),
-        DEV_MBS | DEV_LBA | (d->dev_no == 1 ? DEV_DEV : 0) | (sec_no >> 24));
-}
-
-/* Writes COMMAND to channel C and prepares for receiving a
-   completion interrupt. */
-static void
-issue_pio_command (struct channel *c, uint8_t command) 
-{
-  /* Interrupts must be enabled or our semaphore will never be
-     up'd by the completion handler. */
-  ASSERT (intr_get_level () == INTR_ON);
-
-  c->expecting_interrupt = true;
-  outb (reg_command (c), command);
-}
-
-/* Reads a sector from channel C's data register in PIO mode into
-   SECTOR, which must have room for DISK_SECTOR_SIZE bytes. */
-static void
-input_sector (struct channel *c, void *sector) 
-{
-  insw (reg_data (c), sector, DISK_SECTOR_SIZE / 2);
-}
-
-/* Writes SECTOR to channel C's data register in PIO mode.
-   SECTOR must contain DISK_SECTOR_SIZE bytes. */
-static void
-output_sector (struct channel *c, const void *sector) 
-{
-  outsw (reg_data (c), sector, DISK_SECTOR_SIZE / 2);
-}
-
-/* Low-level ATA primitives. */
-
-/* Wait up to 10 seconds for the controller to become idle, that
-   is, for the BSY and DRQ bits to clear in the status register.
-
-   As a side effect, reading the status register clears any
-   pending interrupt. */
-static void
-wait_until_idle (const struct disk *d) 
-{
-  int i;
-
-  for (i = 0; i < 1000; i++) 
-    {
-      if ((inb (reg_status (d->channel)) & (STA_BSY | STA_DRQ)) == 0)
-        return;
-      timer_usleep (10);
-    }
-
-  printf ("%s: idle timeout\n", d->name);
-}
-
-/* Wait up to 30 seconds for disk D to clear BSY,
-   and then return the status of the DRQ bit.
-   The ATA standards say that a disk may take as long as that to
-   complete its reset. */
-static bool
-wait_while_busy (const struct disk *d) 
-{
-  struct channel *c = d->channel;
-  int i;
-  
-  for (i = 0; i < 3000; i++)
-    {
-      if (i == 700)
-        printf ("%s: busy, waiting...", d->name);
-      if (!(inb (reg_alt_status (c)) & STA_BSY)) 
-        {
-          if (i >= 700)
-            printf ("ok\n");
-          return (inb (reg_alt_status (c)) & STA_DRQ) != 0;
-        }
-      timer_msleep (10);
-    }
-
-  printf ("failed\n");
-  return false;
-}
-
-/* Program D's channel so that D is now the selected disk. */
-static void
-select_device (const struct disk *d)
-{
-  struct channel *c = d->channel;
-  uint8_t dev = DEV_MBS;
-  if (d->dev_no == 1)
-    dev |= DEV_DEV;
-  outb (reg_device (c), dev);
-  inb (reg_alt_status (c));
-  timer_nsleep (400);
-}
-
-/* Select disk D in its channel, as select_device(), but wait for
-   the channel to become idle before and after. */
-static void
-select_device_wait (const struct disk *d) 
-{
-  wait_until_idle (d);
-  select_device (d);
-  wait_until_idle (d);
-}
-
-/* ATA interrupt handler. */
-static void
-interrupt_handler (struct intr_frame *f) 
-{
-  struct channel *c;
-
-  for (c = channels; c < channels + CHANNEL_CNT; c++)
-    if (f->vec_no == c->irq)
-      {
-        if (c->expecting_interrupt) 
-          {
-            inb (reg_status (c));               /* Acknowledge interrupt. */
-            sema_up (&c->completion_wait);      /* Wake up waiter. */
-          }
-        else
-          printf ("%s: unexpected interrupt\n", c->name);
-        return;
-      }
-
-  NOT_REACHED ();
-}
-
-
diff --git a/src/devices/disk.h b/src/devices/disk.h
deleted file mode 100644
index 3bcbb9a..0000000
--- a/src/devices/disk.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef DEVICES_DISK_H
-#define DEVICES_DISK_H
-
-#include <inttypes.h>
-#include <stdint.h>
-
-/* Size of a disk sector in bytes. */
-#define DISK_SECTOR_SIZE 512
-
-/* Index of a disk sector within a disk.
-   Good enough for disks up to 2 TB. */
-typedef uint32_t disk_sector_t;
-
-/* Format specifier for printf(), e.g.:
-   printf ("sector=%"PRDSNu"\n", sector); */
-#define PRDSNu PRIu32
-
-void disk_init (void);
-void disk_print_stats (void);
-
-struct disk *disk_get (int chan_no, int dev_no);
-disk_sector_t disk_size (struct disk *);
-void disk_read (struct disk *, disk_sector_t, void *);
-void disk_write (struct disk *, disk_sector_t, const void *);
-
-#endif /* devices/disk.h */
diff --git a/src/devices/input.c b/src/devices/input.c
deleted file mode 100644
index 4a12160..0000000
--- a/src/devices/input.c
+++ /dev/null
@@ -1,52 +0,0 @@
-#include "devices/input.h"
-#include <debug.h>
-#include "devices/intq.h"
-#include "devices/serial.h"
-
-/* Stores keys from the keyboard and serial port. */
-static struct intq buffer;
-
-/* Initializes the input buffer. */
-void
-input_init (void) 
-{
-  intq_init (&buffer);
-}
-
-/* Adds a key to the input buffer.
-   Interrupts must be off and the buffer must not be full. */
-void
-input_putc (uint8_t key) 
-{
-  ASSERT (intr_get_level () == INTR_OFF);
-  ASSERT (!intq_full (&buffer));
-
-  intq_putc (&buffer, key);
-  serial_notify ();
-}
-
-/* Retrieves a key from the input buffer.
-   If the buffer is empty, waits for a key to be pressed. */
-uint8_t
-input_getc (void) 
-{
-  enum intr_level old_level;
-  uint8_t key;
-
-  old_level = intr_disable ();
-  key = intq_getc (&buffer);
-  serial_notify ();
-  intr_set_level (old_level);
-  
-  return key;
-}
-
-/* Returns true if the input buffer is full,
-   false otherwise.
-   Interrupts must be off. */
-bool
-input_full (void) 
-{
-  ASSERT (intr_get_level () == INTR_OFF);
-  return intq_full (&buffer);
-}
diff --git a/src/devices/input.h b/src/devices/input.h
deleted file mode 100644
index a2f50e9..0000000
--- a/src/devices/input.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef DEVICES_INPUT_H
-#define DEVICES_INPUT_H
-
-#include <stdbool.h>
-#include <stdint.h>
-
-void input_init (void);
-void input_putc (uint8_t);
-uint8_t input_getc (void);
-bool input_full (void);
-
-#endif /* devices/input.h */
diff --git a/src/devices/intq.c b/src/devices/intq.c
deleted file mode 100644
index 028dca4..0000000
--- a/src/devices/intq.c
+++ /dev/null
@@ -1,116 +0,0 @@
-#include "devices/intq.h"
-#include <debug.h>
-#include "threads/thread.h"
-
-static int next (int pos);
-static void wait (struct intq *q, struct thread **waiter);
-static void signal (struct intq *q, struct thread **waiter);
-
-/* Initializes interrupt queue Q. */
-void
-intq_init (struct intq *q) 
-{
-  lock_init (&q->lock);
-  q->not_full = q->not_empty = NULL;
-  q->head = q->tail = 0;
-}
-
-/* Returns true if Q is empty, false otherwise. */
-bool
-intq_empty (const struct intq *q) 
-{
-  ASSERT (intr_get_level () == INTR_OFF);
-  return q->head == q->tail;
-}
-
-/* Returns true if Q is full, false otherwise. */
-bool
-intq_full (const struct intq *q) 
-{
-  ASSERT (intr_get_level () == INTR_OFF);
-  return next (q->head) == q->tail;
-}
-
-/* Removes a byte from Q and returns it.
-   Q must not be empty if called from an interrupt handler.
-   Otherwise, if Q is empty, first sleeps until a byte is
-   added. */
-uint8_t
-intq_getc (struct intq *q) 
-{
-  uint8_t byte;
-  
-  ASSERT (intr_get_level () == INTR_OFF);
-  while (intq_empty (q)) 
-    {
-      ASSERT (!intr_context ());
-      lock_acquire (&q->lock);
-      wait (q, &q->not_empty);
-      lock_release (&q->lock);
-    }
-  
-  byte = q->buf[q->tail];
-  q->tail = next (q->tail);
-  signal (q, &q->not_full);
-  return byte;
-}
-
-/* Adds BYTE to the end of Q.
-   Q must not be full if called from an interrupt handler.
-   Otherwise, if Q is full, first sleeps until a byte is
-   removed. */
-void
-intq_putc (struct intq *q, uint8_t byte) 
-{
-  ASSERT (intr_get_level () == INTR_OFF);
-  while (intq_full (q))
-    {
-      ASSERT (!intr_context ());
-      lock_acquire (&q->lock);
-      wait (q, &q->not_full);
-      lock_release (&q->lock);
-    }
-
-  q->buf[q->head] = byte;
-  q->head = next (q->head);
-  signal (q, &q->not_empty);
-}
-
-/* Returns the position after POS within an intq. */
-static int
-next (int pos) 
-{
-  return (pos + 1) % INTQ_BUFSIZE;
-}
-
-/* WAITER must be the address of Q's not_empty or not_full
-   member.  Waits until the given condition is true. */
-static void
-wait (struct intq *q UNUSED, struct thread **waiter) 
-{
-  ASSERT (!intr_context ());
-  ASSERT (intr_get_level () == INTR_OFF);
-  ASSERT ((waiter == &q->not_empty && intq_empty (q))
-          || (waiter == &q->not_full && intq_full (q)));
-
-  *waiter = thread_current ();
-  thread_block ();
-}
-
-/* WAITER must be the address of Q's not_empty or not_full
-   member, and the associated condition must be true.  If a
-   thread is waiting for the condition, wakes it up and resets
-   the waiting thread. */
-static void
-signal (struct intq *q UNUSED, struct thread **waiter) 
-{
-  ASSERT (intr_get_level () == INTR_OFF);
-  ASSERT ((waiter == &q->not_empty && !intq_empty (q))
-          || (waiter == &q->not_full && !intq_full (q)));
-
-  if (*waiter != NULL) 
-    {
-      thread_unblock (*waiter);
-      *waiter = NULL;
-    }
-}
diff --git a/src/devices/intq.h b/src/devices/intq.h
deleted file mode 100644
index 2312b12..0000000
--- a/src/devices/intq.h
+++ /dev/null
@@ -1,43 +0,0 @@
-#ifndef DEVICES_INTQ_H
-#define DEVICES_INTQ_H
-
-#include "threads/interrupt.h"
-#include "threads/synch.h"
-
-/* An "interrupt queue", a circular buffer shared between
-   kernel threads and external interrupt handlers.
-
-   Interrupt queue functions can be called from kernel threads or
-   from external interrupt handlers.  Except for intq_init(),
-   interrupts must be off in either case.
-
-   The interrupt queue has the structure of a "monitor".  Locks
-   and condition variables from threads/synch.h cannot be used in
-   this case, as they normally would, because they can only
-   protect kernel threads from one another, not from interrupt
-   handlers. */
-
-/* Queue buffer size, in bytes. */
-#define INTQ_BUFSIZE 64
-
-/* A circular queue of bytes. */
-struct intq
-  {
-    /* Waiting threads. */
-    struct lock lock;           /* Only one thread may wait at once. */
-    struct thread *not_full;    /* Thread waiting for not-full condition. */
-    struct thread *not_empty;   /* Thread waiting for not-empty condition. */
-
-    /* Queue. */
-    uint8_t buf[INTQ_BUFSIZE];  /* Buffer. */
-    int head;                   /* New data is written here. */
-    int tail;                   /* Old data is read here. */
-  };
-
-void intq_init (struct intq *);
-bool intq_empty (const struct intq *);
-bool intq_full (const struct intq *);
-uint8_t intq_getc (struct intq *);
-void intq_putc (struct intq *, uint8_t);
-
-#endif /* devices/intq.h */
diff --git a/src/devices/kbd.c b/src/devices/kbd.c
deleted file mode 100644
index 4d7dfdf..0000000
--- a/src/devices/kbd.c
+++ /dev/null
@@ -1,207 +0,0 @@
-#include "devices/kbd.h"
-#include <ctype.h>
-#include <debug.h>
-#include <stdio.h>
-#include <string.h>
-#include "devices/input.h"
-#include "threads/interrupt.h"
-#include "threads/io.h"
-
-/* Keyboard data register port. */
-#define DATA_REG 0x60
-
-/* Current state of shift keys.
-   True if depressed, false otherwise. */
-static bool left_shift, right_shift;    /* Left and right Shift keys. */
-static bool left_alt, right_alt;        /* Left and right Alt keys. */
-static bool left_ctrl, right_ctrl;      /* Left and right Ctl keys. */
-
-/* Status of Caps Lock.
-   True when on, false when off. */
-static bool caps_lock;
-
-/* Number of keys pressed. */
-static int64_t key_cnt;
-
-static intr_handler_func keyboard_interrupt;
-
-/* Initializes the keyboard. */
-void
-kbd_init (void) 
-{
-  intr_register_ext (0x21, keyboard_interrupt, "8042 Keyboard");
-}
-
-/* Prints keyboard statistics. */
-void
-kbd_print_stats (void) 
-{
-  printf ("Keyboard: %lld keys pressed\n", key_cnt);
-}
-
-/* Maps a set of contiguous scancodes into characters. */
-struct keymap
-  {
-    uint8_t first_scancode;     /* First scancode. */
-    const char *chars;          /* chars[0] has scancode first_scancode,
-                                   chars[1] has scancode first_scancode + 1,
-                                   and so on to the end of the string. */
-  };
-  
-/* Keys that produce the same characters regardless of whether
-   the Shift keys are down.  Case of letters is an exception
-   that we handle elsewhere.  */
-static const struct keymap invariant_keymap[] = 
-  {
-    {0x01, "\033"},
-    {0x0e, "\b"},
-    {0x0f, "\tQWERTYUIOP"},
-    {0x1c, "\r"},
-    {0x1e, "ASDFGHJKL"},
-    {0x2c, "ZXCVBNM"},
-    {0x37, "*"},
-    {0x39, " "},
-    {0, NULL},
-  };
-
-/* Characters for keys pressed without Shift, for those keys
-   where it matters. */
-static const struct keymap unshifted_keymap[] = 
-  {
-    {0x02, "1234567890-="},
-    {0x1a, "[]"},
-    {0x27, ";'`"},
-    {0x2b, "\\"},
-    {0x33, ",./"},
-    {0, NULL},
-  };
-  
-/* Characters for keys pressed with Shift, for those keys where
-   it matters. */
-static const struct keymap shifted_keymap[] = 
-  {
-    {0x02, "!@#$%^&*()_+"},
-    {0x1a, "{}"},
-    {0x27, ":\"~"},
-    {0x2b, "|"},
-    {0x33, "<>?"},
-    {0, NULL},
-  };
-
-static bool map_key (const struct keymap[], unsigned scancode, uint8_t *);
-
-static void
-keyboard_interrupt (struct intr_frame *args UNUSED) 
-{
-  /* Status of shift keys. */
-  bool shift = left_shift || right_shift;
-  bool alt = left_alt || right_alt;
-  bool ctrl = left_ctrl || right_ctrl;
-
-  /* Keyboard scancode. */
-  unsigned code;
-
-  /* False if key pressed, true if key released. */
-  bool release;
-
-  /* Character that corresponds to `code'. */
-  uint8_t c;
-
-  /* Read scancode, including second byte if prefix code. */
-  code = inb (DATA_REG);
-  if (code == 0xe0)
-    code = (code << 8) | inb (DATA_REG);
-
-  /* Bit 0x80 distinguishes key press from key release
-     (even if there's a prefix). */
-  release = (code & 0x80) != 0;
-  code &= ~0x80u;
-
-  /* Interpret key. */
-  if (code == 0x3a) 
-    {
-      /* Caps Lock. */
-      if (!release)
-        caps_lock = !caps_lock;
-    }
-  else if (map_key (invariant_keymap, code, &c)
-           || (!shift && map_key (unshifted_keymap, code, &c))
-           || (shift && map_key (shifted_keymap, code, &c)))
-    {
-      /* Ordinary character. */
-      if (!release) 
-        {
-          /* Handle Ctrl, Shift.
-             Note that Ctrl overrides Shift. */
-          if (ctrl && c >= 0x40 && c < 0x60) 
-            {
-              /* A is 0x41, Ctrl+A is 0x01, etc. */
-              c -= 0x40; 
-            }
-          else if (shift == caps_lock)
-            c = tolower (c);
-
-          /* Handle Alt by setting the high bit.
-             This 0x80 is unrelated to the one used to
-             distinguish key press from key release. */
-          if (alt)
-            c += 0x80;
-
-          /* Append to keyboard buffer. */
-          if (!input_full ())
-            {
-              key_cnt++;
-              input_putc (c);
-            }
-        }
-    }
-  else
-    {
-      /* Maps a keycode into a shift state variable. */
-      struct shift_key 
-        {
-          unsigned scancode;
-          bool *state_var;
-        };
-
-      /* Table of shift keys. */
-      static const struct shift_key shift_keys[] = 
-        {
-          {  0x2a, &left_shift},
-          {  0x36, &right_shift},
-          {  0x38, &left_alt},
-          {0xe038, &right_alt},
-          {  0x1d, &left_ctrl},
-          {0xe01d, &right_ctrl},
-          {0,      NULL},
-        };
-  
-      const struct shift_key *key;
-
-      /* Scan the table. */
-      for (key = shift_keys; key->scancode != 0; key++) 
-        if (key->scancode == code)
-          {
-            *key->state_var = !release;
-            break;
-          }
-    }
-}
-
-/* Scans the array of keymaps K for SCANCODE.
-   If found, sets *C to the corresponding character and returns
-   true.
-   If not found, returns false and C is ignored. */
-static bool
-map_key (const struct keymap k[], unsigned scancode, uint8_t *c) 
-{
-  for (; k->first_scancode != 0; k++)
-    if (scancode >= k->first_scancode
-        && scancode < k->first_scancode + strlen (k->chars)) 
-      {
-        *c = k->chars[scancode - k->first_scancode];
-        return true; 
-      }
-
-  return false;
-}
diff --git a/src/devices/kbd.h b/src/devices/kbd.h
deleted file mode 100644
index ed9c06b..0000000
--- a/src/devices/kbd.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef DEVICES_KBD_H
-#define DEVICES_KBD_H
-
-#include <stdint.h>
-
-void kbd_init (void);
-void kbd_print_stats (void);
-
-#endif /* devices/kbd.h */
diff --git a/src/devices/serial.c b/src/devices/serial.c
deleted file mode 100644
index f64074a..0000000
--- a/src/devices/serial.c
+++ /dev/null
@@ -1,228 +0,0 @@
-#include "devices/serial.h"
-#include <debug.h>
-#include "devices/input.h"
-#include "devices/intq.h"
-#include "devices/timer.h"
-#include "threads/io.h"
-#include "threads/interrupt.h"
-#include "threads/synch.h"
-#include "threads/thread.h"
-
-/* Register definitions for the 16550A UART used in PCs.
-   The 16550A has a lot more going on than shown here, but this
-   is all we need.
-
-   Refer to [PC16650D] for hardware information. */
-
-/* I/O port base address for the first serial port. */
-#define IO_BASE 0x3f8
-
-/* DLAB=0 registers. */
-#define RBR_REG (IO_BASE + 0)   /* Receiver Buffer Reg. (read-only). */
-#define THR_REG (IO_BASE + 0)   /* Transmitter Holding Reg. (write-only). */
-#define IER_REG (IO_BASE + 1)   /* Interrupt Enable Reg.. */
-
-/* DLAB=1 registers. */
-#define LS_REG (IO_BASE + 0)    /* Divisor Latch (LSB). */
-#define MS_REG (IO_BASE + 1)    /* Divisor Latch (MSB). */
-
-/* DLAB-insensitive registers. */
-#define IIR_REG (IO_BASE + 2)   /* Interrupt Identification Reg. (read-only) */
-#define FCR_REG (IO_BASE + 2)   /* FIFO Control Reg. (write-only). */
-#define LCR_REG (IO_BASE + 3)   /* Line Control Register. */
-#define MCR_REG (IO_BASE + 4)   /* MODEM Control Register. */
-#define LSR_REG (IO_BASE + 5)   /* Line Status Register (read-only). */
-
-/* Interrupt Enable Register bits. */
-#define IER_RECV 0x01           /* Interrupt when data received. */
-#define IER_XMIT 0x02           /* Interrupt when transmit finishes. */
-
-/* Line Control Register bits. */
-#define LCR_N81 0x03            /* No parity, 8 data bits, 1 stop bit. */
-#define LCR_DLAB 0x80           /* Divisor Latch Access Bit (DLAB). */
-
-/* MODEM Control Register. */
-#define MCR_OUT2 0x08           /* Output line 2. */
-
-/* Line Status Register. */
-#define LSR_DR 0x01             /* Data Ready: received data byte is in RBR. */
-#define LSR_THRE 0x20           /* THR Empty. */
-
-/* Transmission mode. */
-static enum { UNINIT, POLL, QUEUE } mode;
-
-/* Data to be transmitted. */
-static struct intq txq;
-
-static void set_serial (int bps);
-static void putc_poll (uint8_t);
-static void write_ier (void);
-static intr_handler_func serial_interrupt;
-
-/* Initializes the serial port device for polling mode.
-   Polling mode busy-waits for the serial port to become free
-   before writing to it.  It's slow, but until interrupts have
-   been initialized it's all we can do. */
-static void
-init_poll (void) 
-{
-  ASSERT (mode == UNINIT);
-  outb (IER_REG, 0);                    /* Turn off all interrupts. */
-  outb (FCR_REG, 0);                    /* Disable FIFO. */
-  set_serial (115200);                  /* 115.2 kbps, N-8-1. */
-  outb (MCR_REG, MCR_OUT2);             /* Required to enable interrupts. */
-  intq_init (&txq);
-  mode = POLL;
-} 
-
-/* Initializes the serial port device for queued interrupt-driven
-   I/O.  With interrupt-driven I/O we don't waste CPU time
-   waiting for the serial device to become ready. */
-void
-serial_init_queue (void) 
-{
-  enum intr_level old_level;
-
-  if (mode == UNINIT)
-    init_poll ();
-  ASSERT (mode == POLL);
-
-  intr_register_ext (0x20 + 4, serial_interrupt, "serial");
-  mode = QUEUE;
-  old_level = intr_disable ();
-  write_ier ();
-  intr_set_level (old_level);
-}
-
-/* Sends BYTE to the serial port. */
-void
-serial_putc (uint8_t byte) 
-{
-  enum intr_level old_level = intr_disable ();
-
-  if (mode != QUEUE)
-    {
-      /* If we're not set up for interrupt-driven I/O yet,
-         use dumb polling to transmit a byte. */
-      if (mode == UNINIT)
-        init_poll ();
-      putc_poll (byte); 
-    }
-  else 
-    {
-      /* Otherwise, queue a byte and update the interrupt enable
-         register. */
-      if (old_level == INTR_OFF && intq_full (&txq)) 
-        {
-          /* Interrupts are off and the transmit queue is full.
-             If we wanted to wait for the queue to empty,
-             we'd have to reenable interrupts.
-             That's impolite, so we'll send a character via
-             polling instead. */
-          putc_poll (intq_getc (&txq)); 
-        }
-
-      intq_putc (&txq, byte); 
-      write_ier ();
-    }
-  
-  intr_set_level (old_level);
-}
-
-/* Flushes anything in the serial buffer out the port in polling
-   mode. */
-void
-serial_flush (void) 
-{
-  enum intr_level old_level = intr_disable ();
-  while (!intq_empty (&txq))
-    putc_poll (intq_getc (&txq));
-  intr_set_level (old_level);
-}
-
-/* The fullness of the input buffer may have changed.  Reassess
-   whether we should block receive interrupts.
-   Called by the input buffer routines when characters are added
-   to or removed from the buffer. */
-void
-serial_notify (void) 
-{
-  ASSERT (intr_get_level () == INTR_OFF);
-  if (mode == QUEUE)
-    write_ier ();
-}
-
-/* Configures the serial port for BPS bits per second. */
-static void
-set_serial (int bps)
-{
-  int base_rate = 1843200 / 16;         /* Base rate of 16550A, in Hz. */
-  uint16_t divisor = base_rate / bps;   /* Clock rate divisor. */
-
-  ASSERT (bps >= 300 && bps <= 115200);
-
-  /* Enable DLAB. */
-  outb (LCR_REG, LCR_N81 | LCR_DLAB);
-
-  /* Set data rate. */
-  outb (LS_REG, divisor & 0xff);
-  outb (MS_REG, divisor >> 8);
-  
-  /* Reset DLAB. */
-  outb (LCR_REG, LCR_N81);
-}
-
-/* Update interrupt enable register. */
-static void
-write_ier (void) 
-{
-  uint8_t ier = 0;
-
-  ASSERT (intr_get_level () == INTR_OFF);
-
-  /* Enable transmit interrupt if we have any characters to
-     transmit. */
-  if (!intq_empty (&txq))
-    ier |= IER_XMIT;
-
-  /* Enable receive interrupt if we have room to store any
-     characters we receive. */
-  if (!input_full ())
-    ier |= IER_RECV;
-  
-  outb (IER_REG, ier);
-}
-
-/* Polls the serial port until it's ready,
-   and then transmits BYTE. */
-static void
-putc_poll (uint8_t byte) 
-{
-  ASSERT (intr_get_level () == INTR_OFF);
-
-  while ((inb (LSR_REG) & LSR_THRE) == 0)
-    continue;
-  outb (THR_REG, byte);
-}
-
-/* Serial interrupt handler. */
-static void
-serial_interrupt (struct intr_frame *f UNUSED) 
-{
-  /* Inquire about interrupt in UART.  Without this, we can
-     occasionally miss an interrupt running under QEMU. */
-  inb (IIR_REG);
-
-  /* As long as we have room to receive a byte, and the hardware
-     has a byte for us, receive a byte.  */
-  while (!input_full () && (inb (LSR_REG) & LSR_DR) != 0)
-    input_putc (inb (RBR_REG));
-
-  /* As long as we have a byte to transmit, and the hardware is
-     ready to accept a byte for transmission, transmit a byte. */
-  while (!intq_empty (&txq) && (inb (LSR_REG) & LSR_THRE) != 0) 
-    outb (THR_REG, intq_getc (&txq));
-
-  /* Update interrupt enable register based on queue status. */
-  write_ier ();
-}
diff --git a/src/devices/serial.h b/src/devices/serial.h
deleted file mode 100644
index 6e04778..0000000
--- a/src/devices/serial.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef DEVICES_SERIAL_H
-#define DEVICES_SERIAL_H
-
-#include <stdint.h>
-
-void serial_init_queue (void);
-void serial_putc (uint8_t);
-void serial_flush (void);
-void serial_notify (void);
-
-#endif /* devices/serial.h */
diff --git a/src/devices/timer.c b/src/devices/timer.c
deleted file mode 100644
index a4521de..0000000
--- a/src/devices/timer.c
+++ /dev/null
@@ -1,204 +0,0 @@
-#include "devices/timer.h"
-#include <debug.h>
-#include <inttypes.h>
-#include <round.h>
-#include <stdio.h>
-#include "threads/interrupt.h"
-#include "threads/io.h"
-#include "threads/synch.h"
-#include "threads/thread.h"
-  
-/* See [8254] for hardware details of the 8254 timer chip. */
-
-#if TIMER_FREQ < 19
-#error 8254 timer requires TIMER_FREQ >= 19
-#endif
-#if TIMER_FREQ > 1000
-#error TIMER_FREQ <= 1000 recommended
-#endif
-
-/* Number of timer ticks since OS booted. */
-static int64_t ticks;
-
-/* Number of loops per timer tick.
-   Initialized by timer_calibrate(). */
-static unsigned loops_per_tick;
-
-static intr_handler_func timer_interrupt;
-static bool too_many_loops (unsigned loops);
-static void busy_wait (int64_t loops);
-static void real_time_sleep (int64_t num, int32_t denom);
-
-/* Sets up the 8254 Programmable Interval Timer (PIT) to
-   interrupt PIT_FREQ times per second, and registers the
-   corresponding interrupt. */
-void
-timer_init (void) 
-{
-  /* 8254 input frequency divided by TIMER_FREQ, rounded to
-     nearest. */
-  uint16_t count = (1193180 + TIMER_FREQ / 2) / TIMER_FREQ;
-
-  outb (0x43, 0x34);    /* CW: counter 0, LSB then MSB, mode 2, binary. */
-  outb (0x40, count & 0xff);
-  outb (0x40, count >> 8);
-
-  intr_register_ext (0x20, timer_interrupt, "8254 Timer");
-}
-
-/* Calibrates loops_per_tick, used to implement brief delays. */
-void
-timer_calibrate (void) 
-{
-  unsigned high_bit, test_bit;
-
-  ASSERT (intr_get_level () == INTR_ON);
-  printf ("Calibrating timer...  ");
-
-  /* Approximate loops_per_tick as the largest power-of-two
-     still less than one timer tick. */
-  loops_per_tick = 1u << 10;
-  while (!too_many_loops (loops_per_tick << 1)) 
-    {
-      loops_per_tick <<= 1;
-      ASSERT (loops_per_tick != 0);
-    }
-
-  /* Refine the next 8 bits of loops_per_tick. */
-  high_bit = loops_per_tick;
-  for (test_bit = high_bit >> 1; test_bit != high_bit >> 10; test_bit >>= 1)
-    if (!too_many_loops (high_bit | test_bit))
-      loops_per_tick |= test_bit;
-
-  printf ("%'"PRIu64" loops/s.\n", (uint64_t) loops_per_tick * TIMER_FREQ);
-}
-
-/* Returns the number of timer ticks since the OS booted. */
-int64_t
-timer_ticks (void) 
-{
-  enum intr_level old_level = intr_disable ();
-  int64_t t = ticks;
-  intr_set_level (old_level);
-  barrier ();
-  return t;
-}
-
-/* Returns the number of timer ticks elapsed since THEN, which
-   should be a value once returned by timer_ticks(). */
-int64_t
-timer_elapsed (int64_t then) 
-{
-  return timer_ticks () - then;
-}
-
-/* Suspends execution for approximately TICKS timer ticks. */
-void
-timer_sleep (int64_t ticks) 
-{
-  int64_t start = timer_ticks ();
-
-  ASSERT (intr_get_level () == INTR_ON);
-  while (timer_elapsed (start) < ticks) 
-    thread_yield ();
-}
-
-/* Suspends execution for approximately MS milliseconds. */
-void
-timer_msleep (int64_t ms) 
-{
-  real_time_sleep (ms, 1000);
-}
-
-/* Suspends execution for approximately US microseconds. */
-void
-timer_usleep (int64_t us) 
-{
-  real_time_sleep (us, 1000 * 1000);
-}
-
-/* Suspends execution for approximately NS nanoseconds. */
-void
-timer_nsleep (int64_t ns) 
-{
-  real_time_sleep (ns, 1000 * 1000 * 1000);
-}
-
-/* Prints timer statistics. */
-void
-timer_print_stats (void) 
-{
-  printf ("Timer: %"PRId64" ticks\n", timer_ticks ());
-}
-
-/* Timer interrupt handler. */
-static void
-timer_interrupt (struct intr_frame *args UNUSED)
-{
-  ticks++;
-  thread_tick ();
-}
-
-/* Returns true if LOOPS iterations waits for more than one timer
-   tick, otherwise false. */
-static bool
-too_many_loops (unsigned loops) 
-{
-  /* Wait for a timer tick. */
-  int64_t start = ticks;
-  while (ticks == start)
-    barrier ();
-
-  /* Run LOOPS loops. */
-  start = ticks;
-  busy_wait (loops);
-
-  /* If the tick count changed, we iterated too long. */
-  barrier ();
-  return start != ticks;
-}
-
-/* Iterates through a simple loop LOOPS times, for implementing
-   brief delays.
-
-   Marked NO_INLINE because code alignment can significantly
-   affect timings, so that if this function was inlined
-   differently in different places the results would be difficult
-   to predict. */
-static void NO_INLINE
-busy_wait (int64_t loops) 
-{
-  while (loops-- > 0)
-    barrier ();
-}
-
-/* Sleep for approximately NUM/DENOM seconds. */
-static void
-real_time_sleep (int64_t num, int32_t denom) 
-{
-  /* Convert NUM/DENOM seconds into timer ticks, rounding down.
-          
-        (NUM / DENOM) s          
-     ---------------------- = NUM * TIMER_FREQ / DENOM ticks. 
-     1 s / TIMER_FREQ ticks
-  */
-  int64_t ticks = num * TIMER_FREQ / denom;
-
-  ASSERT (intr_get_level () == INTR_ON);
-  if (ticks > 0)
-    {
-      /* We're waiting for at least one full timer tick.  Use
-         timer_sleep() because it will yield the CPU to other
-         processes. */                
-      timer_sleep (ticks); 
-    }
-  else 
-    {
-      /* Otherwise, use a busy-wait loop for more accurate
-         sub-tick timing.  We scale the numerator and denominator
-         down by 1000 to avoid the possibility of overflow. */
-      ASSERT (denom % 1000 == 0);
-      busy_wait (loops_per_tick * num / 1000 * TIMER_FREQ / (denom / 1000)); 
-    }
-}
-
diff --git a/src/devices/timer.h b/src/devices/timer.h
deleted file mode 100644
index 45a3f72..0000000
--- a/src/devices/timer.h
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifndef DEVICES_TIMER_H
-#define DEVICES_TIMER_H
-
-#include <round.h>
-#include <stdint.h>
-
-/* Number of timer interrupts per second. */
-#define TIMER_FREQ 100
-
-void timer_init (void);
-void timer_calibrate (void);
-
-int64_t timer_ticks (void);
-int64_t timer_elapsed (int64_t);
-
-void timer_sleep (int64_t ticks);
-void timer_msleep (int64_t milliseconds);
-void timer_usleep (int64_t microseconds);
-void timer_nsleep (int64_t nanoseconds);
-
-void timer_print_stats (void);
-
-#endif /* devices/timer.h */
diff --git a/src/devices/vga.c b/src/devices/vga.c
deleted file mode 100644
index 8255747..0000000
--- a/src/devices/vga.c
+++ /dev/null
@@ -1,165 +0,0 @@
-#include "devices/vga.h"
-#include <round.h>
-#include <stdint.h>
-#include <stddef.h>
-#include <string.h>
-#include "threads/io.h"
-#include "threads/interrupt.h"
-#include "threads/vaddr.h"
-
-/* VGA text screen support.  See [FREEVGA] for more information. */
-
-/* Number of columns and rows on the text display. */
-#define COL_CNT 80
-#define ROW_CNT 25
-
-/* Current cursor position.  (0,0) is in the upper left corner of
-   the display. */
-static size_t cx, cy;
-
-/* Attribute value for gray text on a black background. */
-#define GRAY_ON_BLACK 0x07
-
-/* Framebuffer.  See [FREEVGA] under "VGA Text Mode Operation".
-   The character at (x,y) is fb[y][x][0].
-   The attribute at (x,y) is fb[y][x][1]. */
-static uint8_t (*fb)[COL_CNT][2];
-
-static void clear_row (size_t y);
-static void cls (void);
-static void newline (void);
-static void move_cursor (void);
-static void find_cursor (size_t *x, size_t *y);
-
-/* Initializes the VGA text display. */
-static void
-init (void)
-{
-  /* Already initialized? */
-  static bool inited;
-  if (!inited)
-    {
-      fb = ptov (0xb8000);
-      find_cursor (&cx, &cy);
-      inited = true; 
-    }
-}
-
-/* Writes C to the VGA text display, interpreting control
-   characters in the conventional ways.  */
-void
-vga_putc (int c)
-{
-  /* Disable interrupts to lock out interrupt handlers
-     that might write to the console. */
-  enum intr_level old_level = intr_disable ();
-
-  init ();
-  
-  switch (c) 
-    {
-    case '\n':
-      newline ();
-      break;
-
-    case '\f':
-      cls ();
-      break;
-
-    case '\b':
-      if (cx > 0)
-        cx--;
-      break;
-      
-    case '\r':
-      cx = 0;
-      break;
-
-    case '\t':
-      cx = ROUND_UP (cx + 1, 8);
-      if (cx >= COL_CNT)
-        newline ();
-      break;
-      
-    default:
-      fb[cy][cx][0] = c;
-      fb[cy][cx][1] = GRAY_ON_BLACK;
-      if (++cx >= COL_CNT)
-        newline ();
-      break;
-    }
-
-  /* Update cursor position. */
-  move_cursor ();
-
-  intr_set_level (old_level);
-}
-
-/* Clears the screen and moves the cursor to the upper left. */
-static void
-cls (void)
-{
-  size_t y;
-
-  for (y = 0; y < ROW_CNT; y++)
-    clear_row (y);
-
-  cx = cy = 0;
-  move_cursor ();
-}
-
-/* Clears row Y to spaces. */
-static void
-clear_row (size_t y) 
-{
-  size_t x;
-
-  for (x = 0; x < COL_CNT; x++)
-    {
-      fb[y][x][0] = ' ';
-      fb[y][x][1] = GRAY_ON_BLACK;
-    }
-}
-
-/* Advances the cursor to the first column in the next line on
-   the screen.  If the cursor is already on the last line on the
-   screen, scrolls the screen upward one line. */
-static void
-newline (void)
-{
-  cx = 0;
-  cy++;
-  if (cy >= ROW_CNT)
-    {
-      cy = ROW_CNT - 1;
-      memmove (&fb[0], &fb[1], sizeof fb[0] * (ROW_CNT - 1));
-      clear_row (ROW_CNT - 1);
-    }
-}
-
-/* Moves the hardware cursor to (cx,cy). */
-static void
-move_cursor (void) 
-{
-  /* See [FREEVGA] under "Manipulating the Text-mode Cursor". */
-  uint16_t cp = cx + COL_CNT * cy;
-  outw (0x3d4, 0x0e | (cp & 0xff00));
-  outw (0x3d4, 0x0f | (cp << 8));
-}
-
-/* Reads the current hardware cursor position into (*X,*Y). */
-static void
-find_cursor (size_t *x, size_t *y) 
-{
-  /* See [FREEVGA] under "Manipulating the Text-mode Cursor". */
-  uint16_t cp;
-
-  outb (0x3d4, 0x0e);
-  cp = inb (0x3d5) << 8;
-
-  outb (0x3d4, 0x0f);
-  cp |= inb (0x3d5);
-
-  *x = cp % COL_CNT;
-  *y = cp / COL_CNT;
-}
diff --git a/src/devices/vga.h b/src/devices/vga.h
deleted file mode 100644
index 59690fb..0000000
--- a/src/devices/vga.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef DEVICES_VGA_H
-#define DEVICES_VGA_H
-
-void vga_putc (int);
-
-#endif /* devices/vga.h */
diff --git a/src/examples/.gitignore b/src/examples/.gitignore
deleted file mode 100644
index b05754c..0000000
--- a/src/examples/.gitignore
+++ /dev/null
@@ -1,29 +0,0 @@
-cat
-cmp
-cp
-echo
-halt
-hex-dump
-ls
-mcat
-mcp
-mkdir
-pwd
-rm
-shell
-bubsort
-insult
-lineup
-matmult
-recursor
-lab2test
-pfs_writer
-pfs
-sumargv
-longrun
-pfs_reader
-child
-parent
-dummy
-create-bad
-*.d
diff --git a/src/examples/Makefile b/src/examples/Makefile
deleted file mode 100644
index aebbb17..0000000
--- a/src/examples/Makefile
+++ /dev/null
@@ -1,56 +0,0 @@
-SRCDIR = ..
-
-# Test programs to compile, and a list of sources for each.
-# To add a new test, put its name on the PROGS list
-# and then add a name_SRC line that lists its source files.
-PROGS = cat cmp cp echo halt hex-dump ls mcat mcp mkdir pwd rm shell \
-	bubsort insult lineup matmult recursor recursor_ng \
-	sumargv lab2test lab1test lab1test2 pfs pfs_reader pfs_writer dummy longrun \
-	child parent create-bad printf lab3test1 lab3test2 lab4test1 supertest \
-
-# Added test programs
-supertest_SRC = supertest.c
-printf_SRC = printf.c
-sumargv_SRC = sumargv.c
-lab2test_SRC = lab2test.c
-lab1test_SRC = lab1test.c
-lab1test2_SRC = lab1test2.c
-lab3test1_SRC = lab3test1.c
-lab3test2_SRC = lab3test2.c
-lab4test1_SRC = lab4test1.c
-pfs_SRC = pfs.c
-pfs_reader_SRC = pfs_reader.c
-pfs_writer_SRC = pfs_writer.c
-longrun_SRC = longrun.c
-dummy_SRC = dummy.c
-child_SRC = child.c
-parent_SRC = parent.c
-create-bad_SRC = create-bad.c
-
-# Should work from project 2 onward.
-cat_SRC = cat.c
-cmp_SRC = cmp.c
-cp_SRC = cp.c
-echo_SRC = echo.c
-halt_SRC = halt.c
-hex-dump_SRC = hex-dump.c
-insult_SRC = insult.c
-lineup_SRC = lineup.c
-ls_SRC = ls.c
-recursor_SRC = recursor.c
-recursor_ng_SRC = recursor_ng.c
-rm_SRC = rm.c
-
-# Should work in project 3; also in project 4 if VM is included.
-bubsort_SRC = bubsort.c
-matmult_SRC = matmult.c
-mcat_SRC = mcat.c
-mcp_SRC = mcp.c
-
-# Should work in project 4.
-mkdir_SRC = mkdir.c
-pwd_SRC = pwd.c
-shell_SRC = shell.c
-
-include $(SRCDIR)/Make.config
-include $(SRCDIR)/Makefile.userprog
diff --git a/src/examples/bubsort.c b/src/examples/bubsort.c
deleted file mode 100644
index 343219e..0000000
--- a/src/examples/bubsort.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* sort.c 
-
-   Test program to sort a large number of integers.
- 
-   Intention is to stress virtual memory system.
- 
-   Ideally, we could read the unsorted array off of the file
-   system, and store the result back to the file system! */
-#include <stdio.h>
-
-/* Size of array to sort. */
-#define SORT_SIZE 128
-
-int
-main (void)
-{
-  /* Array to sort.  Static to reduce stack usage. */
-  static int array[SORT_SIZE];
-
-  int i, j, tmp;
-
-  /* First initialize the array in descending order. */
-  for (i = 0; i < SORT_SIZE; i++)
-    array[i] = SORT_SIZE - i - 1;
-
-  /* Then sort in ascending order. */
-  for (i = 0; i < SORT_SIZE - 1; i++)
-    for (j = 0; j < SORT_SIZE - 1 - i; j++)
-      if (array[j] > array[j + 1])
-	{
-	  tmp = array[j];
-	  array[j] = array[j + 1];
-	  array[j + 1] = tmp;
-	}
-
-  printf ("sort exiting with code %d\n", array[0]);
-  return array[0];
-}
diff --git a/src/examples/bubsort.o b/src/examples/bubsort.o
deleted file mode 100644
index 595b9f8afd0c899ef210e1d489b41d69cc1430b1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3456
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
S(u1r{f|G&a0!RXiVd?;`+ru#c

diff --git a/src/examples/cat.c b/src/examples/cat.c
deleted file mode 100644
index c8d229d..0000000
--- a/src/examples/cat.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/* cat.c
-
-   Prints files specified on command line to the console. */
-
-#include <stdio.h>
-#include <syscall.h>
-
-int
-main (int argc, char *argv[]) 
-{
-  bool success = true;
-  int i;
-  
-  for (i = 1; i < argc; i++) 
-    {
-      int fd = open (argv[i]);
-      if (fd < 0) 
-        {
-          printf ("%s: open failed\n", argv[i]);
-          success = false;
-          continue;
-        }
-      for (;;) 
-        {
-          char buffer[1024];
-          int bytes_read = read (fd, buffer, sizeof buffer);
-          if (bytes_read == 0)
-            break;
-          write (STDOUT_FILENO, buffer, bytes_read);
-        }
-      close (fd);
-    }
-  return success ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/src/examples/cat.o b/src/examples/cat.o
deleted file mode 100644
index e95c543e002ee25cb5045bfffe6976a9aacc2c13..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4212
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

diff --git a/src/examples/child.c b/src/examples/child.c
deleted file mode 100644
index 0c1648d..0000000
--- a/src/examples/child.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/* child.c
- * See parent.c */
-#include <syscall.h>
-#include <stdio.h>
-
-int main (int argc, char* argv[])
-{
-  int i;
-  
-  if (argc != 2)
-    return 0;
-  
-  for(i = 0; i < 20000; i++)
-  {
-    int a = (i * i) + (i * i);
-    int b = i;
-    i = a; a = b; i = b;
-  }
-  printf("PASS Lab %s ON Time.\n", argv[1]);
-
-  return 0;
-}
diff --git a/src/examples/child.o b/src/examples/child.o
deleted file mode 100644
index 17ba6ffbfba4cbbc3c523fbc1857b5ce79283e28..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3044
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

diff --git a/src/examples/cmp.c b/src/examples/cmp.c
deleted file mode 100644
index 94b406d..0000000
--- a/src/examples/cmp.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* cat.c
-
-   Compares two files. */
-
-#include <stdio.h>
-#include <syscall.h>
-
-int
-main (int argc, char *argv[]) 
-{
-  int fd[2];
-
-  if (argc != 3) 
-    {
-      printf ("usage: cmp A B\n");
-      return EXIT_FAILURE;
-    }
-
-  /* Open files. */
-  fd[0] = open (argv[1]);
-  if (fd[0] < 0) 
-    {
-      printf ("%s: open failed\n", argv[1]);
-      return EXIT_FAILURE;
-    }
-  fd[1] = open (argv[2]);
-  if (fd[1] < 0) 
-    {
-      printf ("%s: open failed\n", argv[1]);
-      return EXIT_FAILURE;
-    }
-
-  /* Compare data. */
-  for (;;) 
-    {
-      int pos;
-      char buffer[2][1024];
-      int bytes_read[2];
-      int min_read;
-      int i;
-
-      pos = tell (fd[0]);
-      bytes_read[0] = read (fd[0], buffer[0], sizeof buffer[0]);
-      bytes_read[1] = read (fd[1], buffer[1], sizeof buffer[1]);
-      min_read = bytes_read[0] < bytes_read[1] ? bytes_read[0] : bytes_read[1];
-      if (min_read == 0)
-        break;
-
-      for (i = 0; i < min_read; i++)
-        if (buffer[0][i] != buffer[1][i]) 
-          {
-            printf ("Byte %d is %02hhx ('%c') in %s but %02hhx ('%c') in %s\n",
-                    pos + i,
-                    buffer[0][i], buffer[0][i], argv[1],
-                    buffer[1][i], buffer[1][i], argv[2]);
-            return EXIT_FAILURE;
-          }
-
-      if (min_read < bytes_read[1])
-        printf ("%s is shorter than %s\n", argv[1], argv[2]);
-      else if (min_read < bytes_read[0])
-        printf ("%s is shorter than %s\n", argv[2], argv[1]);
-    }
-
-  printf ("%s and %s are identical\n", argv[1], argv[2]);
-
-  return EXIT_SUCCESS;
-}
diff --git a/src/examples/cmp.o b/src/examples/cmp.o
deleted file mode 100644
index a8d381632f2c3c2dca375fbfc0f5d6ff80550b88..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5244
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
T{e!G-2|okFTaW}4!_)x)<N<#&

diff --git a/src/examples/cp.c b/src/examples/cp.c
deleted file mode 100644
index 86a5cd7..0000000
--- a/src/examples/cp.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* cat.c
-
-Copies one file to another. */
-
-#include <stdio.h>
-#include <syscall.h>
-
-int
-main (int argc, char *argv[]) 
-{
-  int in_fd, out_fd;
-
-  if (argc != 3) 
-    {
-      printf ("usage: cp OLD NEW\n");
-      return EXIT_FAILURE;
-    }
-
-  /* Open input file. */
-  in_fd = open (argv[1]);
-  if (in_fd < 0) 
-    {
-      printf ("%s: open failed\n", argv[1]);
-      return EXIT_FAILURE;
-    }
-
-  /* Create and open output file. */
-  if (!create (argv[2], filesize (in_fd))) 
-    {
-      printf ("%s: create failed\n", argv[2]);
-      return EXIT_FAILURE;
-    }
-  out_fd = open (argv[2]);
-  if (out_fd < 0) 
-    {
-      printf ("%s: open failed\n", argv[2]);
-      return EXIT_FAILURE;
-    }
-
-  /* Copy data. */
-  for (;;) 
-    {
-      char buffer[1024];
-      int bytes_read = read (in_fd, buffer, sizeof buffer);
-      if (bytes_read == 0)
-        break;
-      if (write (out_fd, buffer, bytes_read) != bytes_read) 
-        {
-          printf ("%s: write failed\n", argv[2]);
-          return EXIT_FAILURE;
-        }
-    }
-
-  return EXIT_SUCCESS;
-}
diff --git a/src/examples/cp.o b/src/examples/cp.o
deleted file mode 100644
index 0c95688323f35ab39fdacdbf9a06a9c132d0bc21..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4568
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
D5L?B{

diff --git a/src/examples/create-bad.c b/src/examples/create-bad.c
deleted file mode 100644
index 4a9688a..0000000
--- a/src/examples/create-bad.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* The following program should be killed by the kernel because the
-   string sent with create starts at one page (the BSS page) and ends
-   outside of it in a page that is not allocated.
-
-   If user memory accesses are not handled correctly by the kernel,
-   then pintos will crash with a page fault exception.
-   
-   Author: Mattias Eriksson
-*/
-
-#include <syscall.h>
-#include <stdio.h>
-#include <string.h>
-
-#define PGS 4096 /* page size */
-#define PMASK 0xfffff000
-
-static char inbss;
-
-int
-main (void)
-{
-  char * bss_page = (char*) ((int)(&inbss) & PMASK);
-  printf("inbss and bss_page: %p, %p\n", &inbss, bss_page);
-  printf("This program should be killed by the kernel.\n");
-
-  memset ( bss_page, 'a', PGS );
-  create (bss_page+PGS-5, 1024);
-  printf("ERROR: this point should not be reached\n");
-  
-  exit(0);
-}
diff --git a/src/examples/create-bad.o b/src/examples/create-bad.o
deleted file mode 100644
index 05f784faf7364fa3836533f4855ff71755324f6a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3496
zcmb<-^>JflWMqH=Mh0dE1doB?1t&zt1Wai#NHB;qeCC(?-Rq;m(){GZ|H40^olk=U
zcY~xGA2WRT|G)VSOK=8=3npIt`Tzg_aTXPj0GQo;geQYRfPo<^F&N6{$Y5Y$U}!x2
zo1cLJB6gfb#eji<0W6QKH#0A(xL6@EFGV4#xH!HbF+J5vLA5|fLA8JjWPV6SX0bv+
zQGR++Vy;4QMt*5dib7JVLUv|OPHKumQl&ykMyf(~YEfQljvh#ZYfzAXkd;CSSX+K(
zUI|Q7UVaHkV^L~iaz<(j7Xu$71IURC3=Axcz6=ZuJl%{8493u4ssvfhz`(%7!kU>^
z!obYPmd?n)z|6wV$G`yM)q{9UtaCvW2P;T1Gb2YNh{wd91EM(C%|IrDe9S1stHZ#+
zz{(6##tI5FMo~sp5Ql+*0b~*5oZAcx3~bU23=E9oTp%_JRF>V4fq~&60|NuQEsOzj
z>RXUVA_D`%PY@#)CIvE!732X97LbLUnhXpKAj~Ap%DJ48fdPb>h1ofS7#SEqm_?e6
za|R;=0|>K7urV+SGOF?kb2IZv^9eEvu?dJXFfgewaC6&nGjlL7FhiMq3=AwL49t91
z+}7Nd+@8Wr5)2HidW`mxFd=nGPhpUL2Z`xUl8nL(3~VUM#kV_&Gcd4sHZd{?G8zgq
zFmUiQaC3VKGca)KG1yDmNapduOoE1j90LPGG$?Qwf<Y9>n=A~)tqJp?@(ePdm;!TP
z0S5_Kun+?SLpLbW7@|N%F#hJ_WnhG44n_tBMm;_KoXjK!2&G?IoLa=dkX)3SSdyxn
zl$fHI3^Jm)BqcLnF9Vc?ic5+z^U|U0%Hrh2oE*Ij1}0GSGBU7&Xa;6cMpkAHeO4Vd
zMpkCFwH*3;KC_CmHL)_Mv8C@};$dK9%*oG7R{#^Bv{jl{oSB}NnxX*Wz_I{CZenI0
zLqSnyUP&4QIEOHRHGl~e9qxXi3eJ|63YL1tdIk!*xyD8cy1B*qX(hU8Ir)ht3c9%^
zrFp5g>8W|CMVZM8y19u($r-kpW)@}&y6NdDNea6D3cAH5DYof(rIwZox@md&y7{@8
zCAw)viMgq|1)waHTBM+xmR6LST3nKtmy(&64pEkwmy?;73Sk$3%m(Q#E=f$z)-5Q?
zFG)=<$p>jnEUwH;&M3;y%P%d~EzK*>%uCTNNleN~EmqJ?gD6kVNi5EQY0AvcQ_xLI
zPDA1|=x5~Trs`*>=9TCdWagFR7wZ=nCF`eFB<2?6q!vSCi~$}n$r*`73}B)-BfqFb
z0WJXwV`y-LrBR|fwIZ{G0ipq<E;lu|IJJa<!QI)}N<kwusWh*o6cWt3hUTSUu3?>#
zfu4bhCPWxqobZ6s0s{ksyI&|MT^s<VNKnof0i`5R3akoZV65R_l;&Y!>0o4F0F?)z
z^b3*(rECTd9!3Ut0am6`1{Z$j(h4>KW~R~_kSr<&<#U(_3&Y3%FgA!rE$tZ?m>EDW
z0LefwGuWjNHi%?q02g5(CKxj_urYuNIuHkB4<m+pc90YtGc!Od6sQO@1E?g1a=>|y
z8^HnddC~a%Xna95z7QH;7>zH$01IDG7z!~kGDsq+5MW?nP(b6Wqw)37_|P;3Ed?N1
z5IIvqQwJmgF@Tc}*bR&<3=GPkcxGW>&;Ze_3=F!U@=2J10aV{IvN14NLiwH`T7-ci
z7DS6OFr<LgvoSDag80G=45c7ijDdj-B+kje07_eoybKJW&;ik+AaPy>uwNOO7#I{m
zd>#e{eGtvdzyPX(K<Yr12Z(loihD!pASfLPr4yiZDwHk)(JTxM<sh1ufuRXRGchns
z1kt<<40Av<7X!lrD7_R!Gcho%gVNif^Z_V+5=vi!(vLtiF9X9fDE$sfe}dA#p!7c|
z%?2v5c^MeEpfosKI2b@J4+fC`LE#3XL2=ClDvb4tD|1T{lNj`hONt<L28>mdnxj{e
zT2aEFmy%eL$e@>0T+E<Xln>&7R2%9UqH;|b^gvotQj<#4<1_Qp@)`6X?8Ky`qSP`N
zFDE}4Sz%&PVqSVG$mG-<sCrPD2~%BMQpBK_oS&PUnpeW0mzQ6Xs^{((stYa@q5Sl`
zQoVwr{DRb?l1hllsTuL$vKcAC5@5=M!VlEMfT{zfLr^|}azPavm<eiufO4_}n8(0S
z!Op-C!N9-(PG_Lz3<CoL2Ll5GsPO_S7ht8zTBv#$1(E}?wV~>f)xqRI@-Q~ImBhfn
zU<49mU|;~52P+dnLLhY@Y!CGZOx+m<1_n^t1*rjHP+1F72Ts=@0Vq~wWMB{iNkI89
zrXK?Xxa5NQ_X0Zug9IbQzn~HhWFE-BaZr1q+8NB57#OC&I7o6iNNkYwX(mWmf!H7n
zv$q;e-3KPr@(HF6l<$z^;{`OWgW>~JqQczQhi0AtGXq0E$U-QFnb(Ep-ya;1_ym~;
zDv@F4&4QW-iWiU(^O+eK*1-&c%7M7x{La9@08{77%D@1MbC4bo2B`sIaCra{fZ__&
z>IR<v_JNwSpfV3h9dbGVxep|D73v0176<XCure^f;t<4#sk?~gUr=O&;uGXwPz?f7
z2jYX=2r~<${|YMuLjfZLgBSw?1E}T!sRPv^ptyjgWso`-b_NDx5Ce)q=75->@)=nj
P2PXr=eUJnc!_)x)e6;5f

diff --git a/src/examples/dummy.c b/src/examples/dummy.c
deleted file mode 100644
index deeca27..0000000
--- a/src/examples/dummy.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* A small dummy process that just uses up a process slot in the long
- * runtime test */
-
-#include <stdlib.h>
-
-int main(int argc, char* argv[])
-{
-  if (argc != 2)
-    return 0;
-  
-  return atoi(argv[1]);
-}
diff --git a/src/examples/dummy.o b/src/examples/dummy.o
deleted file mode 100644
index d7894d91b635ec3446a4cc232369d658ebe2c10d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2428
zcmb<-^>JflWMqH=Mh0dE1doBigbgBN0;V(=L>WXFKJ&}{?)6b&X@2tIf8n3d&ZmLR
zZ&<nmS$2TbG+Q#2aCH0rIoX@|=Wz2Ip8rKGFaG@h|G)W&!0Q(i85kH?K&lv67!4U1
z7<gnD85nrM0t^gRP@0K_H8Zb-ftiIJB*3D=$iTqJ#;OY9FhEo>&M9SJU|<yo%kY6@
zm?ko?>VdgZAStGaENrF>3=AD0P3$by3=9nHER75d49tvdnv4t#96AgP3?R(J&dR_j
z$f(LE%+1Uv%_qnx#3mrlz`&%!z|C#P&CJ2Tzzk*bF)*;`G1^Nq^I36Qb6aw&OL_`}
zlsiaFcamfjW?*1tWq`?f3NuMCFtBwtF)|1;8VWNou=6u;b9)LiFmUKG*h|_-=JCOl
zGB7a6FfcGMfgB1A8W0l}79e&!$lVN};9_L_&Bx2Y2#GI{Z}s%_b25_{7*a}eb1U_d
zL8^;OQgSkr^fJJ)$jZpT3N~7Tjggg^jiZ#6hfSE3Eu57xhLxGEk(G;$kx77ok+C$d
zI5RyjHAMjw@cJ3~xvBcusd**(1(|sz`NjIhMalZ96^Xe8IjO}Ai6!}&4DNoR3eJ|6
z3YL1tdIk!*xyD8cy1B*qX(hU8Ir)ht3c9%^rFp5g>8W|CMVZM8y19u($r-kpW)@}&
zy6NdDNea6D3cAH5DYof(rIwZox@md&y7{@8CAw)viMgq|1^JnIC8<RUx@l=esj0;!
ziFqlRdFc>knRz*xd8rU~0my8S-r|zP<ZRu7qWqH7<dS@l#>C>vyyT3c{Ji|qV%^fb
z^31#x-IBzloYZ0k-86{u<ebFf449_O{5%ESwB$4-K0{(rdNMq0a}zW37?Lv*i$KC<
z3=Hnh&Q=N<p-H8AC8dyX&^0tK1#=DSj12S)Of(_F;ArImC0GUqP{4sA`v52xFf%YP
zh=AgZfq{XsDu{uxhJ#U>hlQns5t2AT2?HbzP7EGAj12AqtW2d0&iu@!HEh9LJd6yE
zN1b_CSRA=Qs!%a<9%f<q_#asoHHR}WFf)K$f>6N>b}=%a6~O@~MsUuAi!n2Bz}X-M
zGXochf@5X|kniDK24)661P5#$KN?>EjnB)#2^9f_g%ATHiV0xVuq*(MCU6=BXBj4b
z1_n?O#>mD1b_F9R1A`zayg3;dM4_}Kh-PA7Pz2E&3=H}pnv;P6ROW%y+k^N_3=DoC
znv;Pc7E0%UXeI`R77)$Jz|aY$d!aPgURDMMkoy>!7#JKt;!F$-3ZM)R%9eV?mANH}
zNep_$B}EWA1I8*!&Cx4Kttes8OGzwAWY9}0E@sdJ38thbm8QpM=B4E`=t0<tNl8Vi
zWyrFLMTvRosVEvic?PDTxTJ_dFF8LqH#M(>K`$@ABvsGdFH{$tDWLrHyi&b_qWpr?
zqLNC8$*CFf;JgWq2Vy9BkbfB<;SW*|3Qth{f!H7nOQX^Z4B+?$g%3#l4hsV~MF~Om
zgYpU}g@FoskRDiS%>yY$!XP;iSDOK%pO89`dtiD%`atGQ1u>u)CTD==z9%dU3>6Fv
z3?TP`at6$OAos)cfQ(>fWMF6jF`yVG7X<YeRG6We5t1fge3&{=dIP0<khvha7-(7o
z*$WB}n7yfJ<}GGqU;x(zAWcYeiD>@FVTFVf$UIPvg_&0f)dTW3$Otwj1_oo8qo8si
zZVi+TQ)kJ{zyJz+kRA{QsR7|us5+1s2&cdz2E;*<1BE@PWC3LjkQ7KAtPBM4LGA<5
zYoK~y>Kd3C7(74{Pz+PI0?ofANd5)oNsu~FID*^=GYe$I36T3385o2a7{KKWNF7K$
mC@w%!AT=O-f(4=m#0FuIIUpKTz96fsVP#<029khcm^uKPm?S0u

diff --git a/src/examples/echo.c b/src/examples/echo.c
deleted file mode 100644
index 1b136f2..0000000
--- a/src/examples/echo.c
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <stdio.h>
-#include <syscall.h>
-
-int
-main (int argc, char **argv)
-{
-  int i;
-
-  for (i = 0; i < argc; i++)
-    printf ("%s ", argv[i]);
-  printf ("\n");
-
-  return EXIT_SUCCESS;
-}
diff --git a/src/examples/echo.o b/src/examples/echo.o
deleted file mode 100644
index dd269ddea2c6b95711d892b35401f5056461dcb7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3032
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
M7%qS$pctkO066x3WdHyG

diff --git a/src/examples/halt.c b/src/examples/halt.c
deleted file mode 100644
index bad7250..0000000
--- a/src/examples/halt.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/* halt.c
-
-   Simple program to test whether running a user program works.
- 	
-   Just invokes a system call that shuts down the OS. */
-
-#include <syscall.h>
-
-int
-main (void)
-{
-  halt ();
-  /* not reached */
-}
diff --git a/src/examples/halt.o b/src/examples/halt.o
deleted file mode 100644
index 10c509d7baec41a92af956dd7e297a8d502b1905..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2196
zcmb<-^>JflWMqH=Mh0dE1doBihZQ1Y0;V(=L>WXFKJ&}{4()u}{N%%nKmY&#k7QtA
zU;#_BFlsX}Fz~2=IS_&$LNPG0ux93!Ffa=;GB7Z5F{(m^LDGzK0zf8!m>>oNt2_e(
z0|+yTvoSCVGOF?kb2IZv^9eEvu?dJXFfgewaC6&nGjlL7FzYeeOEU9Waa(g+a;r;v
z3WL-*NKAK<WE5s#VCigPWDsOD6lP#x)nl-iw2{o?gDGZUV31*8U|<5f1LArR6XXaG
z4Z<MDFf*7jFfcGO{^sLlV1$Gd$OC$M`Z<|N`lZFGMGOoXi8&>D$sirYmBq=4IXQY6
z;2>mWWMBoG&&<Wh$~>Qmm4T5_KO;XkRX;m5uSCBfGp{7SSiiU^SwFQRF}ENmwHRy^
zn9xgRaQ6#UaJIBmu+%fwGf>dYH8xVv%`MJPE748M$xkd%(9JC=%}cdSPt8j$%1l<!
z%}p#y&allivoKT8O;1lrQqc8R&@C=Wu}#k_wX{^wP0P#I&Cks&(M>B#%uUrT$j{6x
zNi9;)O-n0EO)V}-%uC74ONS`S%*)BlONFotKxTvV7MCO@XX_Re<(H%;m*j&qCKgxb
zC1(`n=jE3c>z3w~XXd5omLw+Sq!ugara_b^=Oh+qz%*s%=PBr>C8r_r8FCXd^B5T1
zot>=|G(wX~^GZq~9@aH9F9mZA>x>Na3`{g3!r+9)!@$4*N|x?^p`Zvn0E#|l1_lNZ
zP#l1wt15_rv4(?Dnump@gOPzj0vg#MX>bI)@^Q2>Iq`zb0Er=E<h0Mi@bN#g9BR&B
zU|?nd*@{rX40atdAJqnC26lub14usy8lMY|5ArEOh?#*8!2#<B`vxw?%pd?~gBZ*V
zybLfKKq`e87#Vm$5>O0Q4Nbk^cmS~(7#O%g8H1mJfejRvYzzz_S1@uiFbIP9oD2-2
zP+Ag1GchnIf@lr~23-)%$-rO%qL~;N+@W+Jh~{Kq2!+yMb6FX{u4QCmU~mPAGchnI
zfb0e37`@`k+>*p32EF2vA_$!UV-=<5=#`{alrZR}B$gyH=p_{wGw6W?Q&N*k)8jMq
z(()PfAne4Xq@vU^WZA@`#Ju!W6b+z+4%1LvQpBK_oS&PUnpeW0mzQ6Xs^{((stZoZ
zP=0z|sa`=*enDzcNhQSO)Qos=hJuDEF_b*WzYLJ@1*r#>t)Tb;u|XJ?2BjGo7&sXi
z7#u)?p!Chc0FF-~sD4no2gNU_Fa_y>rAB9{dKd+g1F=DcGe|ulbs+b^^nmn%%!>sv
zpcp1+faX3K76yh01_lO@`#>ol=01@7VR}GDEMQ<@hz2pB7$z44^%qo_;Wq;$O~Cjt
zb$)2}mast563AYV|6ul}qM0Yn$iNT+GYm;C5zV|7q;Ll1NSJwrP(2`jgN(^%WMB}3
zISMKV;?_XfFm<g=3=E*K2k8M}kQxwfg{lLIf$#=U+6OV97^DWooXWreE;(S*Aa$V1
z3nT}^AoqdjHBj?l>dr7RFo5C`BnQGUbt};P+k@m^P?-Qy2MR}!{V=mY`oYB=BLjml
u0|U4u0;vP32c=P1ngXk1fusR28|o$y8&rNEtDC~Yz_1M@0mUHuKuiG2k@l$o

diff --git a/src/examples/hex-dump.c b/src/examples/hex-dump.c
deleted file mode 100644
index ee313f2..0000000
--- a/src/examples/hex-dump.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* hex-dump.c
-
-   Prints files specified on command line to the console in hex. */
-
-#include <stdio.h>
-#include <syscall.h>
-
-int
-main (int argc, char *argv[]) 
-{
-  bool success = true;
-  int i;
-  
-  for (i = 1; i < argc; i++) 
-    {
-      int fd = open (argv[i]);
-      if (fd < 0) 
-        {
-          printf ("%s: open failed\n", argv[i]);
-          success = false;
-          continue;
-        }
-      for (;;) 
-        {
-          char buffer[1024];
-          int pos = tell (fd);
-          int bytes_read = read (fd, buffer, sizeof buffer);
-          if (bytes_read == 0)
-            break;
-          hex_dump (pos, buffer, bytes_read, true);
-        }
-      close (fd);
-    }
-  return success ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/src/examples/hex-dump.o b/src/examples/hex-dump.o
deleted file mode 100644
index 5c64cce751e0cde41200b5e7b0cb8d0e445c74ff..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4440
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
MU1W7Tc(A7{0N!th4gdfE

diff --git a/src/examples/insult.c b/src/examples/insult.c
deleted file mode 100644
index 98c4e6a..0000000
--- a/src/examples/insult.c
+++ /dev/null
@@ -1,369 +0,0 @@
-/* Insult.c
-
-   This is a version of the famous CS 107 random sentence
-   generator.  I wrote a program that reads a grammar definition
-   file and writes a C file containing that grammar as hard code
-   static C strings.  Thus the majority of the code below in
-   machine generated and totally unreadable.  The arrays created
-   are specially designed to make generating the sentences as
-   easy as possible.
-
-   Originally by Greg Hutchins, March 1998.
-   Modified by Ben Pfaff for Pintos, Sept 2004. */
-char *start[] =
-  { "You", "1", "5", ".", "May", "13", ".", "With", "the", "19", "of", "18",
-",", "may", "13", "."
-};
-char startLoc[] = { 3, 0, 4, 7, 16 };
-char *adj[] = { "3", "4", "2", ",", "1" };
-char adjLoc[] = { 3, 0, 1, 2, 5 };
-char *adj3[] = { "3", "4" };
-char adj3Loc[] = { 2, 0, 1, 2 };
-char *adj1[] =
-  { "lame", "dried", "up", "par-broiled", "bloated", "half-baked", "spiteful",
-"egotistical", "ungrateful", "stupid", "moronic", "fat", "ugly", "puny", "pitiful",
-"insignificant", "blithering", "repulsive", "worthless", "blundering", "retarded",
-"useless", "obnoxious", "low-budget", "assinine", "neurotic", "subhuman", "crochety",
-"indescribable", "contemptible", "unspeakable", "sick", "lazy", "good-for-nothing",
-"slutty", "mentally-deficient", "creepy", "sloppy", "dismal", "pompous", "pathetic",
-"friendless", "revolting", "slovenly", "cantankerous", "uncultured", "insufferable",
-"gross", "unkempt", "defective", "crumby"
-};
-char adj1Loc[] =
-  { 50, 0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
-21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
-43, 44, 45, 46, 47, 48, 49, 50, 51 };
-char *adj2[] =
-  { "putrefied", "festering", "funky", "moldy", "leprous", "curdled", "fetid",
-"slimy", "crusty", "sweaty", "damp", "deranged", "smelly", "stenchy", "malignant",
-"noxious", "grimy", "reeky", "nasty", "mutilated", "sloppy", "gruesome", "grisly",
-"sloshy", "wormy", "mealy", "spoiled", "contaminated", "rancid", "musty",
-"fly-covered", "moth-eaten", "decaying", "decomposed", "freeze-dried", "defective",
-"petrified", "rotting", "scabrous", "hirsute"
-};
-char adj2Loc[] =
-  { 40, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
-20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 };
-char *name[] =
-  { "10", ",", "bad", "excuse", "for", "6", ",", "6", "for", "brains", ",",
-"4", "11", "8", "for", "brains", "offspring", "of", "a", "motherless", "10", "7", "6",
-"7", "4", "11", "8"
-};
-char nameLoc[] = { 7, 0, 1, 6, 10, 16, 21, 23, 27 };
-char *stuff[] =
-  { "shit", "toe", "jam", "filth", "puss", "earwax", "leaf", "clippings",
-"bat", "guano", "mucus", "fungus", "mung", "refuse", "earwax", "spittoon", "spittle",
-"phlegm"
-};
-char stuffLoc[] = { 14, 0, 1, 3, 4, 5, 6, 8, 10, 11, 12, 13, 14, 15, 17, 18 };
-char *noun_and_prep[] =
-  { "bit", "of", "piece", "of", "vat", "of", "lump", "of", "crock", "of",
-"ball", "of", "tub", "of", "load", "of", "bucket", "of", "mound", "of", "glob", "of", "bag",
-"of", "heap", "of", "mountain", "of", "load", "of", "barrel", "of", "sack", "of", "blob", "of",
-"pile", "of", "truckload", "of", "vat", "of"
-};
-char noun_and_prepLoc[] =
-  { 21, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36,
-38, 40, 42 };
-char *organics[] =
-  { "droppings", "mung", "zits", "puckies", "tumors", "cysts", "tumors",
-"livers", "froth", "parts", "scabs", "guts", "entrails", "blubber", "carcuses", "gizards",
-"9"
-};
-char organicsLoc[] =
-  { 17, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 };
-char *body_parts[] =
-  { "kidneys", "genitals", "buttocks", "earlobes", "innards", "feet"
-};
-char body_partsLoc[] = { 6, 0, 1, 2, 3, 4, 5, 6 };
-char *noun[] =
-  { "pop", "tart", "warthog", "twinkie", "barnacle", "fondue", "pot",
-"cretin", "fuckwad", "moron", "ass", "neanderthal", "nincompoop", "simpleton", "11"
-};
-char nounLoc[] = { 13, 0, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
-char *animal[] =
-  { "donkey", "llama", "dingo", "lizard", "gekko", "lemur", "moose", "camel",
-"goat", "eel"
-};
-char animalLoc[] = { 10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
-char *good_verb[] =
-  { "love", "cuddle", "fondle", "adore", "smooch", "hug", "caress", "worship",
-"look", "at", "touch"
-};
-char good_verbLoc[] = { 10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11 };
-char *curse[] =
-  { "14", "20", "23", "14", "17", "20", "23", "14", "find", "your", "9",
-"suddenly", "delectable", "14", "and", "14", "seek", "a", "battleground", "23"
-};
-char curseLoc[] = { 4, 0, 3, 7, 13, 20 };
-char *afflictors[] =
-  { "15", "21", "15", "21", "15", "21", "15", "21", "a", "22", "Rush",
-"Limbaugh", "the", "hosts", "of", "Hades"
-};
-char afflictorsLoc[] = { 6, 0, 2, 4, 6, 8, 12, 16 };
-char *quantity[] =
-  { "a", "4", "hoard", "of", "a", "4", "pack", "of", "a", "truckload", "of",
-"a", "swarm", "of", "many", "an", "army", "of", "a", "4", "heard", "of", "a", "4",
-"platoon", "of", "a", "4", "and", "4", "group", "of", "16"
-};
-char quantityLoc[] = { 10, 0, 4, 8, 11, 14, 15, 18, 22, 26, 32, 33 };
-char *numbers[] =
-  { "a", "thousand", "three", "million", "ninty-nine", "nine-hundred,",
-"ninty-nine", "forty-two", "a", "gazillion", "sixty-eight", "times", "thirty-three"
-};
-char numbersLoc[] = { 7, 0, 2, 4, 5, 7, 8, 10, 13 };
-char *adv[] =
-  { "viciously", "manicly", "merrily", "happily", ",", "with", "the", "19",
-"of", "18", ",", "gleefully", ",", "with", "much", "ritualistic", "celebration", ",",
-"franticly"
-};
-char advLoc[] = { 8, 0, 1, 2, 3, 4, 11, 12, 18, 19 };
-char *metaphor[] =
-  { "an", "irate", "manticore", "Thor's", "belch", "Alah's", "fist", "16",
-"titans", "a", "particularly", "vicious", "she-bear", "in", "the", "midst", "of", "her",
-"menstrual", "cycle", "a", "pissed-off", "Jabberwock"
-};
-char metaphorLoc[] = { 6, 0, 3, 5, 7, 9, 20, 23 };
-char *force[] = { "force", "fury", "power", "rage" };
-char forceLoc[] = { 4, 0, 1, 2, 3, 4 };
-char *bad_action[] =
-  { "spit", "shimmy", "slobber", "find", "refuge", "find", "shelter", "dance",
-"retch", "vomit", "defecate", "erect", "a", "strip", "mall", "build", "a", "26", "have", "a",
-"religious", "experience", "discharge", "bodily", "waste", "fart", "dance", "drool",
-"lambada", "spill", "16", "rusty", "tacks", "bite", "you", "sneeze", "sing", "16",
-"campfire", "songs", "smite", "you", "16", "times", "construct", "a", "new", "home", "throw",
-"a", "party", "procreate"
-};
-char bad_actionLoc[] =
-  { 25, 0, 1, 2, 3, 5, 7, 8, 9, 10, 11, 15, 18, 22, 25, 26, 27, 28, 29, 33,
-35, 36, 40, 44, 48, 51, 52 };
-char *beasties[] =
-  { "yaks", "22", "maggots", "22", "cockroaches", "stinging", "scorpions",
-"fleas", "22", "weasels", "22", "gnats", "South", "American", "killer", "bees", "spiders",
-"4", "monkeys", "22", "wiener-dogs", "22", "rats", "22", "wolverines", "4", ",", "22",
-"pit-fiends"
-};
-char beastiesLoc[] =
-  { 14, 0, 1, 3, 5, 7, 8, 10, 12, 16, 17, 19, 21, 23, 25, 29 };
-char *condition[] =
-  { "frothing", "manic", "crazed", "plague-ridden", "disease-carrying",
-"biting", "rabid", "blood-thirsty", "ravaging", "slavering"
-};
-char conditionLoc[] = { 10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
-char *place[] =
-  { "in", "24", "25", "upon", "your", "mother's", "grave", "on", "24", "best",
-"rug", "in", "the", "26", "you", "call", "home", "upon", "your", "heinie"
-};
-char placeLoc[] = { 5, 0, 3, 7, 11, 17, 20 };
-char *relation[] =
-  { "your", "your", "your", "your", "father's", "your", "mother's", "your",
-"grandma's"
-};
-char relationLoc[] = { 6, 0, 1, 2, 3, 5, 7, 9 };
-char *in_something[] =
-  { "entrails", "anal", "cavity", "shoes", "house", "pantry", "general",
-"direction", "pants", "bed"
-};
-char in_somethingLoc[] = { 8, 0, 1, 3, 4, 5, 6, 8, 9, 10 };
-char *bad_place[] =
-  { "rat", "hole", "sewer", "toxic", "dump", "oil", "refinery", "landfill",
-"porto-pottie"
-};
-char bad_placeLoc[] = { 6, 0, 2, 3, 5, 7, 8, 9 };
-char **daGrammar[27];
-char *daGLoc[27];
-
-static void
-init_grammar (void)
-{
-  daGrammar[0] = start;
-  daGLoc[0] = startLoc;
-  daGrammar[1] = adj;
-  daGLoc[1] = adjLoc;
-  daGrammar[2] = adj3;
-  daGLoc[2] = adj3Loc;
-  daGrammar[3] = adj1;
-  daGLoc[3] = adj1Loc;
-  daGrammar[4] = adj2;
-  daGLoc[4] = adj2Loc;
-  daGrammar[5] = name;
-  daGLoc[5] = nameLoc;
-  daGrammar[6] = stuff;
-  daGLoc[6] = stuffLoc;
-  daGrammar[7] = noun_and_prep;
-  daGLoc[7] = noun_and_prepLoc;
-  daGrammar[8] = organics;
-  daGLoc[8] = organicsLoc;
-  daGrammar[9] = body_parts;
-  daGLoc[9] = body_partsLoc;
-  daGrammar[10] = noun;
-  daGLoc[10] = nounLoc;
-  daGrammar[11] = animal;
-  daGLoc[11] = animalLoc;
-  daGrammar[12] = good_verb;
-  daGLoc[12] = good_verbLoc;
-  daGrammar[13] = curse;
-  daGLoc[13] = curseLoc;
-  daGrammar[14] = afflictors;
-  daGLoc[14] = afflictorsLoc;
-  daGrammar[15] = quantity;
-  daGLoc[15] = quantityLoc;
-  daGrammar[16] = numbers;
-  daGLoc[16] = numbersLoc;
-  daGrammar[17] = adv;
-  daGLoc[17] = advLoc;
-  daGrammar[18] = metaphor;
-  daGLoc[18] = metaphorLoc;
-  daGrammar[19] = force;
-  daGLoc[19] = forceLoc;
-  daGrammar[20] = bad_action;
-  daGLoc[20] = bad_actionLoc;
-  daGrammar[21] = beasties;
-  daGLoc[21] = beastiesLoc;
-  daGrammar[22] = condition;
-  daGLoc[22] = conditionLoc;
-  daGrammar[23] = place;
-  daGLoc[23] = placeLoc;
-  daGrammar[24] = relation;
-  daGLoc[24] = relationLoc;
-  daGrammar[25] = in_something;
-  daGLoc[25] = in_somethingLoc;
-  daGrammar[26] = bad_place;
-  daGLoc[26] = bad_placeLoc;
-}
-
-#include <ctype.h>
-#include <debug.h>
-#include <random.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <syscall.h>
-
-void expand (int num, char **grammar[], char *location[], int handle);
-
-static void
-usage (int ret_code, const char *message, ...) PRINTF_FORMAT (2, 3);
-
-static void
-usage (int ret_code, const char *message, ...)
-{
-  va_list args;
-
-  if (message != NULL) 
-    {
-      va_start (args, message);
-      vprintf (message, args);
-      va_end (args);
-    }
-  
-  printf ("\n"
-          "Usage: insult [OPTION]...\n"
-          "Prints random insults to screen.\n\n"
-          "  -h:               this help message\n"
-          "  -s <integer>:     set the random seed (default 4951)\n"
-          "  -n <integer>:     choose number of insults (default 4)\n"
-          "  -f <file>:        redirect output to <file>\n");
-
-  exit (ret_code);
-}
-
-int
-main (int argc, char *argv[])
-{
-  int sentence_cnt, new_seed, i, file_flag, sent_flag, seed_flag;
-  int handle;
-  
-  new_seed = 4951;
-  sentence_cnt = 4;
-  file_flag = 0;
-  seed_flag = 0;
-  sent_flag = 0;
-  handle = STDOUT_FILENO;
-
-  for (i = 1; i < argc; i++)
-    {
-      if (strcmp (argv[1], "-h") == 0)
-        usage (0, NULL);
-      else if (strcmp (argv[i], "-s") == 0)
-	{
-	  if (seed_flag++)
-	    usage (-1, "Can't have more than one seed");
-	  if (++i >= argc)
-	    usage (-1, "Missing value for -s");
-	  new_seed = atoi (argv[i]);
-	}
-      else if (strcmp (argv[i], "-n") == 0)
-	{
-	  if (sent_flag++)
-	    usage (-1, "Can't have more than one sentence option");
-	  if (++i >= argc)
-	    usage (-1, "Missing value for -n");
-	  sentence_cnt = atoi (argv[i]);
-	  if (sentence_cnt < 1)
-	    usage (-1, "Must have at least one sentence");
-	}
-      else if (strcmp (argv[i], "-f") == 0)
-	{
-	  if (file_flag++)
-	    usage (-1, "Can't have more than one output file");
-	  if (++i >= argc)
-	    usage (-1, "Missing value for -f");
-
-          /* Because files have fixed length in the basic Pintos
-             file system, the 0 argument means that this option
-             will not be useful until project 4 is
-             implemented. */
-	  create (argv[i], 0);
-	  handle = open (argv[i]);
-          if (handle < 0)
-            {
-              printf ("%s: open failed\n", argv[i]);
-              return EXIT_FAILURE;
-            }
-	}
-      else
-        usage (-1, "Unrecognized flag");
-    }
-
-  init_grammar ();
-
-  random_init (new_seed);
-  hprintf (handle, "\n");
-
-  for (i = 0; i < sentence_cnt; i++)
-    {
-      hprintf (handle, "\n");
-      expand (0, daGrammar, daGLoc, handle);
-      hprintf (handle, "\n\n");
-    }
-  
-  if (file_flag)
-    close (handle);
-
-  return EXIT_SUCCESS;
-}
-
-void
-expand (int num, char **grammar[], char *location[], int handle)
-{
-  char *word;
-  int i, which, listStart, listEnd;
-
-  which = random_ulong () % location[num][0] + 1;
-  listStart = location[num][which];
-  listEnd = location[num][which + 1];
-  for (i = listStart; i < listEnd; i++)
-    {
-      word = grammar[num][i];
-      if (!isdigit (*word))
-	{
-	  if (!ispunct (*word))
-            hprintf (handle, " ");
-          hprintf (handle, "%s", word);
-	}
-      else
-	expand (atoi (word), grammar, location, handle);
-    }
-
-}
diff --git a/src/examples/insult.o b/src/examples/insult.o
deleted file mode 100644
index 7e292029223a525a4baf6f6484e96fb4eb23b167..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 27636
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
BD7gRt

diff --git a/src/examples/lab1test b/src/examples/lab1test
deleted file mode 100755
index 347680a22573b40a3ab8ba69d56c8fe91138dd8b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 44164
zcmb<-^>JflWMqH=CI)5(5U;w0g~Nn_fnm!^h>Qt?0s|X^27?fTAXpwO+Q7oWP{6|R
zg@J(qgjqm>0t{ez5dTX93kL}AP-9>KVOAvhHS7!wYqqm+fG|iHWG5SlA;7=@GG~H1
z1H**nEF2&#!@$4*!XR-F4t`paf=@p1X-NvmD0B=mUx0yu;WNM7?_M7jmgXlP{ullU
z?R***9N7FO;+X3_#$&GcnU1+WU_R#hkmZ=`Bi3WCj~R}+K4CoO`jqLI>oewKuFqLA
zY8J9^ys#5xU}!$V69DFAF}|>rW?(qZqH+c#rv#G&@v<0S$U@|PfaKV~avT8}$xB%{
zUQCn%nIh0~pj4>&4NpcUNGy$mf#C%sNa77g1}HEx8o|OKkt1-W?I1C0kkV_C3=GXM
zrSrkUFs1x0{R|8YSqvFVm$GnV8TH1l34ZaBhk>C}M&*U46az!&;pQU(%|96HYO@$&
zYD(9Hy*LX}W1{jx6{O}ER81tvg$j#UI9@o3fLzTJkOAUlF}|<`+sBi|)$6(@AdBIJ
z2$(O>{DZ5+3Zy9oq^X~sf#HP~*sVMnVAt1zL?pl>93Y(;Ye0@q2Z=I)MR_u&fOK9K
zhFS;WWih@uCkYN}aByyi$$@ymFE)ep9Ra)KUO?E3B@mTQK&JG<RDyU}j4wJQA>nWc
zq6Qotrcmuhy`gJ@0$%ullpH?Jq5?Afg%8*O0m~aDiXcyc#Vo*LJi!4O9E({vUaV$g
zV0hss0g4Y6NN9w;U<aEC4h(P{`+yWSffULj6y6H}1;C5Nd?23+v_g|Z1xRT)Na-hW
zkeNJTFGL`&-2#%?Ed)}{6OaMoWih_k1~TsmPZo2=eo%CWzgP+r02!X~j+uesMI~5B
zp!vuD(rAz`6qc}XyeNVh1ma~ezQ~mT2k>D~bSS|zFxJ_CQkl;Z77lPa+Rq9JKU1jY
z;4H=$CK4e3L)@D20_4V-tROcEyq*lQ>?Fv*c2)+47fRxgY#7@4wE2y||5Bd+r5rC(
z{`~*n$)fT?2V}qtgXSNc{L>EbZ#!_f`GrFBk2oj?lzT%vp9Xiwa&)`$bO*5XdNFo-
zuviCh)N*zUfH)i-Qqi%8Lpz^_hXpskk?B0#d9Bm;$#Eu7dGMOGnUAsaa&Isr|2C)p
z%`X&e1j<$Tw;iziuhJ?rpM|5DkLmS;W<HkJx10GmUSDhG6L@{GnNQ*MnQpcfj3uni
z58ijOb+fHt0x^GgvK@B=6-W#XRsXe06!`a9cm8<c^#A|=)&nKV-EJ(sEDgOb?iV`U
zSeg$rzJAbM`=pz_*Mp^#znh`cjivK)w;N0AfeQWOZXEyr|Nq}$tyiLZ+>M8sfq?<+
zKIY~Z88$-v?b8?-7@$r}n9suT{RYTDKE~I_8>$(#N_d(NGah&20DDfQ`7l$r?~`uE
z-T;<PL69vRujRVkIN%Q9Xg<scapvrQAZM07YOdp8s9<eYd;hux>W-HcAjecQW|VLr
zcjEztTIc20qRoeyj=S-Iis{#!$K7~9-tN5Id87G=Omtj)?BRxL#vHJEP$A!W`SnwX
zdQg%3`sQ&r9(D!>hR(~c&mDK;0Xenv^6SH`mr8VDk;Kz^zBlSW|Gp2+Z#e#!a)kZA
z-u#*oRPOx#U;3su^$XYzc$C(39_zf`?aFc7wFl(wmXjso-M#|dg5M4?m1Nm4N*-u_
z@UQuRZl`Ncx2r%mL#Jy?^8=1f*M`oIoIgugS`U<_cmCr1#NXn<#K3UewF6`ZC@DFx
zbh=IfF&H{s7jzyx_*1^qcgaqWY;Wv}Zr7HBFIbx&Fm||3?u?z$dHQwvw?ix?{1EFt
zL#%t<58{5m(EI>o`RhiIVGbOft{t!Ece~E$be+@fI;S^)u`_hW|I#J@OBaNPy;ub<
zK?J%(r|@rMVe0ms)4>Rr%Y(=@A7->JT_9b%q(}$k@rK&T3?&;{Z`ZBq_T}lkG4p#R
z55(}+OQrLBJs3NE=Nx0uc|D~&b_U4%0UWKDc7WoI-{V5B>x$0%n#V1F)yem|KDRtv
zEYa(`qVrhuVa8+5{|!2CXr8dVP|ITZx#(?kZ39CIPq!;ivjqo#%X(0fEM1{_uiI6C
zxqzj+wxjj`4p7SAcR8+kthu&_fqyC}r)nPC0SYdDj}PBmTLk%ACNnTFbi4Mn9w^}j
zN32A^|4@<UBLZLpN@O8oSq5N1j{l_+oj>^Z9e}BE75K&=P+HLIy2A2snL_9B&e8?l
zr4pcY@rEOee;+eco#pS+*WINHx<SerOXFaP1+1-vtD*Y80e_3b|NsAwF&p$oGrlza
z|NnpU8=n8A65YNcou76nFfcH@DE#~XfAbN6mjP&!1|Z20sAMskBv_|8MDle9B&d61
zS3na~>m~lq-hco9_r|U~=DNb*<?4U`|HD$dOy_ZMk<=Z?V)?1g@f#y!iCpWqdK=A8
zV3+Z9`*J|sb@LC{U9bHxWcEX3TEEq^y;f}fR;RNY6!72x<>BAQA|LQS6qMJSj|f=a
ztAEk$`lLGmWEbl<2FB7EurPuarOj^ydR=(}Kt*t}2m`~(!*FqqURRO-rJ(W|EDOrp
z%|`^_3c%&7Pj@K?|2DRk1Es1kbHUCKfkdT1^AUm0&%MQr{M(!vTMm@mwoxs;-y6r+
zP{*iRqTTDu(;IrD^TrFmU;qDi9_HW1z`yT8^9xrSWB&Hz%<y7w4X9)Wl?)<Ts{cbl
zM!sI#T>FHBzulD)l)|2Xitm~QET9?zRP=@N@b6>jbUn~{{NR82&e|j0r3boek97Vz
z_)EU?yW#cD+8y1sM?mzR?$RCIwR<$LNnY>#(D@4-{2(9q*4_xuU|7h)(d~QW;7j?y
zouCZ#qUJX!Iuu^&{r~^J+m#1u(|%-|UV{n{hy<wMfxF;kB}@-TXDF!Fg2;v*d6@u{
zU;#-WoAuHaCWWp?2PT23M-W9y09<@^h92njJ+kZn|Nr&Y0^l6le1n0%_u0Sy|C@7<
zFuuI|@Bjadnk6h88AledaAe$JU|`6&3#zM)_!$@=;jD}Z=LIO?yp5sLb;EJjEuiGb
zzm3_Zl)uHCk%7Ucl)s+?L`U$q7=q}0{#G_d28JCU7O-%j1am+Z1K5$>t{b{Tx4e+}
z1qtI*f04s@JCZH0XTZb0n_(Bo-cHvIouOM^H-N>F!U`n%G94vAkTtyYfk~n3F@{ON
z!WZVlmy)P5NY=mnhZ>69jIdCA!^^;6Q&Gyb<G}(Jj+g&Ym5IQW9pz<U*a1p&FYo;O
z|9{5?km5`KkV2uGp~Lk$ByasM73lT7u?v(cdtI-;SPV{>0xzfjK~`?i`fbOxr7Rr$
zE|6;VLD&mRP6md~L(NAx{+EK2x$lk64=+-oy2DX)GaPrl0jjFOUPOtp43IydvGyY4
z2PD3v{`~(R1Ti(^4JhqwhnmWWB*C<dh2zCMsKkrk|Nlcvn&9R)BA~i5RG`~eq&t?Q
zGxp7K*AJkmZ9Pz;-u!~G)AdWQ>zja#O)V@OfkEJm*zNk}7`ScO?fRiR_Rq<~$6Z04
zP6lLkArPxx-+|iG{03B_1we{4P<dDL|Nno~;!KBso2y8N>;2|h0fy2jSc%qo@8xDt
z3+5iE8LJHP#Q{({JqB*0{Npcs0TR~(iLU^O9}xiY`<AnCyqNI|6eSNBT{#$Cd9-7n
zG#?RQj1?$Z)*Z{y{Fr|is6VQCtMdl4tAKT=z)ldC-|b+h>l4izovsg>->`JMax_2q
z0FH#9fDB2H6|N8~T5t2Wr2PN?e;+8EK=vtuBsD;iV0T%5E`8Z~&$9Fhe;Yp|1H*n$
zebxMreTOcnIq7=5`3*}zw=0k44gPH`1_2qWAkD9T{{P<$(OmkZ^io6ZeFpv(Lr}f<
zkH1_3ZpRV0vgUsRr3k;T0f`?G067fQFoQb`9ANz*Nr>5>OJ7>XKH+a$`|tn%&e$8>
zwKuv;c{J~J#$MsyCS%um;|2E@P~&um9>}FGH=5sY1ZQZ2+~*B4<2WeLEo+~YU+Rv%
z((QYr*O9S1^hs~gf6a52hrj{F@AQfBSo1%A{x;u#|Np;CfLc@fpt<$|L+ON<=Kucx
zhxjcNB(L%xo)E)=yGuE`LwUM=1zJz?PdU)~t(2wZK#6wiB{1#SE5q0Mq4i{mVDlly
z<^zoU+r0jFc>K4#QTo2~LvQMj=(yO!pioL%#=?<N4<b?)vT$VaWK09O{s||z6PK|J
zB!Q6Sg~%S`gm;O;g1cQgx_x=NV?kj#<xuN^QkIrWCAzIA!L+mGiQ?GS+a+SXA`;C9
zA?}F$-x2ZO@=)pf&I?%G5d(6EEX1Z540nKK<sh<loD2-TCKA2D|66aD2=Z@}5$uo=
zXnw`m{Of<|$JdKGKfIm?%}o$z!UO9t*qOIWw7`LNyTrZMgroIji6#Fw4*qRY7B@>n
znh!8GA7ZpTR{9293BC3Oh1Gs|XoP^=Xa#Y_4h~RZ$iTqxS_7o$8mb~|h@#0H3=9^h
zLCt-p<`;}me?uMD{D!037ZjDPCrgZ4FO~T4Zv!<y1TC0Kc|n18h!HGM`ksFq7pP|Z
zZ*j1kjepW1{%w~!FPsF&;#;_-J|LI*K`fQyfW+c=R9SzBECUAvczg-eLxtqt?pOi-
zZJ|7%z-hf*s@%&X(R#Z?)Iy+yr}+S*<-yXg;IIIfU|`nkFCY&yE{CNc7m(e_5Yrd2
z!%YYI&y|CJn=eo6ff5P+Z2}gdJSE00mrAt2=~BSrROzSJ${?d;;6~Yij4Fi~70wO~
zVASG|2bBJ6dB6?25<OU>64aCnf6)Xg2#yG}9w_AobtAX2$h90Oeb{*eR!D+XzkUym
zfG}_my_AQ4n{dme5{2eB9Q^w(1%<t^ftw->HbuDQQt6}DoDjb=flLEuBd95$oWQ>=
zmWO|vK+B~PNpMTS;xfO>35YLSE|q@lJP{px7%cJn3se`lVT#Wy+d)kqkXK5G@e0^D
z8PI@3DNpOS5+hLEP~zKqyCjQ$n|1RW4oJ5p>_sBXRQ{GuP;K#}<v>XxsOx_N6c5_)
zcraMV!jbVF)XD;v3ui!MByV^!>`)be>OV+at!4!^as|32T5p&3f{ZdjRrw8WR3k)X
zrvx}SVG+}LpMM*BhwF2292^J;d$9x3YiT`D%G!LK@%6)o+UE=<{KwcCnvXMfy9#t#
zbl!M<2*%h64OB>k`to#_3bfuXWoi9ZD$^@s+<Bw*TM1Y50Y*?cc%k$gJOV-PM3jRX
zATLXU+B#q_-(*2a$e|pqmrA%hFEm&&l&We%vmYYeDu6U=!ZpufVPI%Jz}R5HP;&Y8
zH>m5taijsN)0cn~7)$5j|D`-Hrh_>G;Ht>-aFJ2xam~Y>u}{EBweucxDM#}gmhk_j
zJYg@?A#DY4U-dAfb?lR}`(Rz5g8d74`~hlHcPK}L6+;PIb1e@;DLXizV-JHVkfUsv
z7)m}^y7H90e*FQe0qiuM?pjdDHP>=5lqj_RFR^WY!xR4E2PDOG9&Y_s>H`Woh)tld
z^M}W=1jzedaPQA$h7>^2s0zH{3Ti+K-Z5H!;CK7b{Dvhg926?jKSAvfj$<qa49!Ob
zUQb4Ln@o2t57=R*t^Z4czz&NCI}99%94~^v9D&Yb;Dpa=?J7{@+sk4MOJ1n16#%(5
z1MZmjOz5r!E69W^IL8D|+|4f-H9uG$=65^X{D!5|^+`Z@=Xd5>j_?;rKR^zDa*Tx?
z?C|#Q9}j~odE5X085qhr4n7b7H==C+|NqZW&enX0<KP1h5QiVcVLAAK1;nujahMK1
zV6tUkU}$K*#L#&GKANP{>3X9x^bV-X4dv-{eb5>Dr1cVi%Q8?7zR+EIqr3J_cjyDl
zYtpq(z@-d0?eI4p1C0$7{ReehyGuc1d!P<v=S}{lpDsW6c37c=sq;|h#ctOd-Jy5*
z*IZz{_zFBSxKo~ifkE@;<rkd?!RB<jUg(Uy(tPlL^X31YxA@mz>-@pL{$Q^SQ|F2A
zsSg-`LG0H&2I-$dEVBI2c|r0=kw>@hh3?oZuN@$2I)8NgJ^+Wz_m7>B^w?Q?<G3rR
zH^;#2dP6w$&Wi(}me9e@Tj10Rwx98!;N{K}owu5g=z!BWY=}an^Dv|)2oHO484~^c
z>pyhf(EI?4b(l&SNRUBPcOLA#+<K|P2ox5r|0|4}-*5y4fXsi<2Qj4E_sRE*2Vcr}
z{yz9x-r{D76wJ8qH=8dre82tr==U4Vml(d^dVK`OxC^rh*-dqje2wNNXrcxWDTDeq
zkT`u22vH2L>Cok8L*!@TRB#beUgDHL2Jsv?^pO;Cz&jcl3qa%SJ@5Yi?{$@EKEe_3
zzf|PKH_-4Siwd}#Q26fu{}+<X;Bj|QukM99bfOA8Le7!JaMqyt2n(c>UIMDdT{6-^
z-HQo`wkx=2$dSbeQpo{PnFCVk4N;kfQ2D=<BZ~>FEEYD_0}^6J7XppSXR&}pd0G$f
zPd$L5niV9@fho=g7DrLajxGcmQ3Bb>0g@0vQVWydM3(?Ng$pFggQT1ziyI`wfg;3%
zE(F%g3lc@u%Lfud)yoeS!t|5?R&lVwf*>g@;UfeR#}YomU~%yLL@=nRJKXKyV0ojQ
zqchq8+z4!b!=ia3Aozc=$BU<sWcB(9G+l$#cgON{J3D{|k%Jw&LpeGGdYv6CogIp~
znw?!3n~$(W#~$vy@nZh}|NmdVMQD@gj^*fx{hr0x>-s$)i}6J_s35ojwhy65pgWc$
z_(dwXL(dZcn$Jo3_y7NK78Nc~QMdm8|Nr1}15H;*Z|oXGf4$q4qto?EaK^H^EYQ^d
z;{5CX|2uEI-~o@EK)UKsJHew0;6P-2u^PE2-u#BA*Hs_@IxhrD<M3P+-26r$qZX9(
z?Lg+f22B!JGn7bzQhzZ^Mkh!{<@Nvn-O|mVo@nVKQ0>$U66Jdh8mSOyum#UKm#~8U
zaf}tjV+1KW0m`B;Ux5|9e#F4QAlk~pp$WxOP#VTpLE{TR`JY-4dgNPKI3(IwIPBV3
zI833m2b2bhVZ*67<O|wZIDGq9IMVtMG>A<uR_cM6MU4K%y(}ENx*+y~+yKHLeIPLq
zjf_EZAhQLaZUxC*>V?<^5(n`?7{uo6Vc|I6#lm6P&B77X&BBq}&BD>v&BC#;n}uUn
zHw(wrZWa#zUKS4X9u|(dJuDnsdssNm_ONg~>tW$w>}BDQ>Sf_D>1E-Fk1s1I%FHWC
zV_;wa4WJk-W8sKkfUF|`@g0}3a8y9~pb@R0Wh@|y0W{GDO4`v#{Nj?LoaDq31~6Sv
z38qu?7#MO>bBj|;7(o1z{OtH5(3necNl|h}5m*jPgZQ}x5I&U7%`Zy@=}j)EWMD|G
z$SeWr%Sg-t(;*p|#R{3l3MHw<B?<*a`RPT8xe8?ldWH%m8Hpue;bMi#{L&(Y%-n*U
z)ZEm(lEjkC{5*xE#Ny0kh2qNMlGI#<<iwnuVvsi&LNZbn(lU#RAzHyE=PM)^r6!i7
zDwJdtrGjL0Qj7IKibFtl7MB!d=A}by%PdwXFUl+_NzGFz$yZ2JNXyJg)#GAtPc2bM
zNi0cJNGr<ERY=ayE6&eJ)l&$_Nlh$H)d6csRVdESO)bd)8Kq%pppcxASd^Gtl3G-(
z3AT#CB{M}KFTX^gC^a!f0Yw4C)RK%;xXB>5`Q?`@<fN8B90V~P;)arZ1&~^h(~9*J
z!izFXpt4Dsd5J}pa77^ZfIWcZ*OGjQ{Yi<**${<bA3@CGVsOqc%|UV{SQS_SC~^!G
zG*nA9brcj-OObpBF)uT(xFj_(MUjgEs~N~HgPUi_#oz)8Q*eNwT4kt^lAl@(4zAq9
zlH?49a!^tzPlN<UNopP!0|PkjVEzFcnwXaYjf#?dg`~t3u;&#r67y1E@g138s!*H(
z_GB{HTyPTeR46IROicmBIM^*<!$3izU}#`q28s)qUHJv6dC*h=NiT3`rdDJYmw+SM
zJ--CmVukXI)I0@{Mo`Mg%g@sVD+O^tR&X(-R-`7EmZYXAB<3lU<`tzTCTAoj<)kVU
zmn4>eQ#%6#Luheo5h!mYrxq70I6C<Ug(xJJD5w@&sir7o<|(KaYiL@51~x%yKLHe!
zB}IwJsp=pt;Ovx~n5U4Nn4JpFCLoiOvx^l<i&N7|bM&}^KnYUGDKR-4tgBcFWF#ns
zDY>L3m8PeIoEnm!pHr*^iuQt%)FQ6@G;k6O$jmFrFIGs&PcB7d%e4F=h1~q2RE5mE
zwEUu6a9-8pVgRQgq{IQsk*UQc1`t_8?6QUsStGCsswqf{K!K{DTFk|ek($MjmQtLS
z2uTzLiN(dKDO?O1d8Iiynhbh+`Z<|N`o$$FnfZFj3^q1-`3kD4s>vX4W~UbArRLb#
zA&DmE=ar=v6=&w>+1W9u8dzjiC@3%}C@3(f8W?3{RH!C1)G!zr8X23InweWzIyyPK
zxVj+;Bqk-Nq^7|I;0y~(hLqwG1w~s0zfd0^g_;_L;>@a41zTGM0|t<Li@;@Cf@-n4
zLRw;GPHKuC!r`FuNiUh9xF{Kie(b_Y*o6~e!VGW)3`sfp$=NV*RL4P!N2tRYQc`m=
zb2CBZ8caDuabj6&d_hSOTmZ?V$c~12sI)k>NWZwU7*uBKB{MiD=Hx)qq!ojLY5{{D
z7ihT`0}lfO18Az%-7l1ZiGkq&XsrdPu5x#Fwo=dtO)AYRDOIr4GuAWEH8d{;a}Dc^
z4D<|4G$F#^)pDTec}N||zyMl>*A6lQRQ*6#(=jm^v%us*tNmo5av%z{+K!3g5?p>p
z3kyd9$XOssxc)lmT0I5^j)^QBtJtBEaQO?8F!MLfVBuH<aS&J$#C#(;n0&}=77kCa
z41|El*UH1>=gwx~xC`nQL8PJno1zAjubRukVSpijToWe0Y90$mK2$G=(uezug)xwU
zfq}=3fq}t|5jCKg7}+Wr85o#ZSTplV7?@btEg2XXm>AiL7#SFtm{?DMC=O6OF)%T5
z6o7b4?2ADZ2fIF~wV}$uz`)4Pssmab*}%d93V+5qEzArItdbxZPEHV;jTy9>a6apF
zMg|5(E~pS_+2DNExga5Ks1RuB+k93&kVYP;5NH9~eAaCsRlHCk(9*W~tf?R&KBy3A
zZP<L)Js=@|s1Rt?-h9?WARz&m&=MAo`K&iVLV_G!%nS@nrE#p;Ag&O{EM^7<=F&Cw
zY&{^pF#9TI1_pM}9515?JIHgOCKf1AIWid-MZ`fOpvG1K0|Nu6Z6gcEE@lP>PTxir
zj$<H3Bupd|CQ=F$X>MfUxCBx&y^)3E9*8lgk%i+Gh_MbPbqFSP942)WCiSh6h2tAY
z@xMkE4ki``22QCasEAS%RK&6g>K@M~n0uO7IQT${^O~TR7B@jHZGefi!bGOQL}tT8
zR=^D00W<IjOyn|5<PnVV4kq;vCc@Ut!XX8+U8ouALd9mNd-R*3PIZPcf|{W&3~z?I
zFb$@-8Ya~MlbY1b!l4E-c^OP<HB4#?%+doelP@$wL*pTg@daiwXA9IBk}Xg*sx45b
z+O<I4;|5a`1XB~<0(D^uOidY#0V--hamv8O0?HuVAOe)ac#J^_h5^h6r7$qxkbxVN
zo<K<m%x7ZYy~N1C0K!Zn9K4{hG!SN1VCAi2WMBYcW@$EFQ1%947GYLiEd~Y#5M~x<
z<Bex#U;tqj5msIi1_lNYW|n2;b!22<0AXf%R^Ew>3=AO5tjxyS%E-U~!c1JO46{L5
zn&BjfgcKQH86iam$V1?=lZk<W2~t)tKLO<wc1D;K<D6oUz7JqgUXYKOCNi*aGJ(nm
zNstuNL>ATwEi4>uppqX{*iHgvC^nW#1_lN;mU;#T26jkc!~xO_!i>zU9IqJ}7(kdw
zf{kGXH>j+0XJlZ2mS}gGAkG7s1}eJ4K+c1dOwbaIWdkT<vrF59EM-~7%)kIDf}y1z
z8;H$f#>BwD!X*ysSh0nIN<VCcAd4Oo0|TpoTsuesq(EfJ1qq3W&j-1`4<wFKLb8C?
zII>EKfy`ym1u2zP0C|d~0mN1jS_=v-8&FB9E?5m>TZ7ozLZIPS_Or|k3_MJn95Rdy
z3>*avOx)Zc76T_JwKMT>g3=2MrxFVT0~0Tp!@<DC0`d$uI}6A@rX==IMg|5RTNVZe
zMxGm>P~idf1X*}M>y0>gl9?D71bF0_7#I{7U|LGqr+~EV1w|MS7uaY|zYqpyo@!<W
z1{R(kkn4Clm>C$@c;0{tN1jVe3=A9$>;fzd3<6AX9M>2b7&zHLrD_(d5~!NuTne%`
z7wkS3PG^vbg<uW`X9h^7o)zpy1~!nr>~BC$Vrt@$W@2FA`~s410V`(UJPqQs3Mzo2
ziKBvnsSPa7!D$N;ZwGUD7}#zzGB9wl1TZi#@NEN0bSZ&MVr2%cHQ_S>Ijb8g0$QBI
z7Y-8Xfr@~Zdhq=O>FR}wfYzn(XMofMGBL9Dvv4qjf@RJgW(Ed<{Ip^Qra&gqqYMlT
zpcO$I7#J7?{Xx0|nbbfkt}!q$TmcDcKm?6Jsp=C01H&r@1_mKLh^cmmLG(l(;iS?u
z2Bu&pp;OEZ44_3s`iu+=B7Pvr5GH{{P;Xz<gMooT>?x?$jbP#f8RpN(zyMklCY+j=
z!oU>4BnlFo!^pq@3QFNTkdPEe2vpZyW@KOx&SYSUglGi^BNGFIxNScR$3#vB2JuiB
zBNfKj0b^W+F@z>S6<fj>fiOlMlp!%|0t<&OHv_{)W(EdH#sH>b1_tp>P)ShS9Aai*
zkYZwFn#c^|%>pfZ&;=z5M<zzmE*1_&P_;kDoP~iw$P6MZ4st8gL<S*d5Z{SO$P+|Q
zWRXrRtzcksVlr?C^EqV1G(o}T!o&?KUQaPGFdPGU(6EbzV-~2rCJRz02g)9DAQpo>
z3l|H>9)+(UZH7#Yxt%N=6TsGUvNA9T{(%U~fUN()#K7>1iGe{7obwEsG(cG|jG2KU
z0F)Gx8JLWiv_P8rm>C$Fm>HmMHD(frxRn9oR%0epkj+dJSwJyi$^>pwJY;5IxXsMK
zAhD>Eg@d1!f#D+yB;Ys{BpCylCo-@xDDHtufx;6Z%)rG0ifDyWQ2J75Vytds;V=Tb
zzm%1MK_EGUfk~Z72;^ZA76t~;GG>8fQ0q>eNfwkUf>{_Cyjd6+1i|5|&ZG%)>tq%N
zhHe%HsDss++#wETU{H_(1;;f;#<guM90$PJ;2j$SgCNMaOxGBt?=mnj++ks0I0Z6s
zFGQ_6C~;S?GBA{|GB5}o0y*;<qd7>BX(EGk5(Cq9MjenLOcPn8lNp$9FdBYgV_;yK
z$N`D!n~V}5CoxUrfdt=8Ml*<O1eCzJ<u)V7FE$1S=7|gHg_8>ym~Jx)fr`hStPBjG
zrTD@X3`}<z!C~CP#=y|V#=s!91LUx~5W)Ry3=G>rg5Wag9z^gr8w0~nkYEVNwf7-{
zV(bhIeC!MiVuc{>4<Le(><kQn><kPNT+ql_&xVM%Af_?~aP0B0F-WLG6<mNRFpy+K
zR-ottRRD`#WJv}t7ElSs#R4i=l|hlo#m>N>0xI6^8B{?Dhbe@S5tK%6wXkq31Xa6p
zrm!<G2!eA@2%|hmY8yKP!vuCvnqXiGVRQtg)Y%*i44^e7g5XRO$|wWUbcch1;SvV}
zgW774?@Jh&KtsS1VXZ72QQQm+&Fl~lmNPIY{)LKxoLtTT%E_Qir``q9H<!_@i-iLe
zb&PXrI2jl;z)qPf0dk2RCj)~VNDOT4Tn&&eQ1R2x$-tlqPKfh_K{}Zxa%h3`_dG*L
zobzbAGBYsra56BkGJ{rbih^1VI>`)7ixfbafN5fYt^@-ELm&qOgC00d?iIVpz`(GP
zlYwC=Cj*0oVK)m0C|kI5fIJb%XviQA8kcS7W?*2@1+9Hv2G{vY9F&+PxfmGOxfmGq
zlNgv@Yk-pJVlD=T`CJSP5>tC1W`V*_k};6cfI&Q?mxTjlmUusu!C(LyN(Rkr-Q!?j
zPy%H}IYw}1WSZ!&c&e9$!ylT@C;Ce=1~D2+G6phD3}9d|01Y9VF+hSzxR`-SjZqR5
za!0rr7!GkUFo=KdW#O32&A_0@(T6YuoZKM#LBr9e3=9k&oD2*~1q@84jKZKGWDHPr
z?Sr@*;${Yko-P&+P-@EH1ceExs0Jm>i2-1zurP?n^|5eVU}j(tFNZQ17?eR(D<~Gg
zDUg$a4HUtKpav+DKO?A6{M*UG0g4F5Id4Hx3XXbzQIH3iCNjwAfulVTTteUGVqmz=
z#lWB!14=YO;Eej0i-F-c$dkfdEFAMeabpN-#4_1|&3@j;!XXDP;L^Dm7&PaDa-*Ff
zD9<xZWYAOr8DpmaD%zMPvS@;Bwljm+%mKC80c^7fHv@wJH_T>7u+3)N3=AgR3=HDT
z{VW_?LBoMYQ$PmlF@n}%YJhEB&&9x?1&T>M2~b7^St<&0gPsy7fSD$;=!282fh0(w
zH#Y-=C&&j}EH4=t7!2b;Dy6{wsPALp$N-xNswg4;kOG%oAS1#4kWxhPhm<+gADZ9*
zlyV2<8>WdoI$#TBB|tVXO-vEr)d#8U#2-N!493%$85kIagh6q$w1tI(7i=#mJDVgk
zFbXMv#8bH$7~(-rH5LOE?CfC0pvE*rF(_Sw6tjaB&*Wxc03|;LQ)eay1`uWwU^C@o
zVqgGab}0_i9wr6`5atkNW$@z!wbeU8V-S$8#3~j@TOBrx63m0>N`RW+OkCm?pk^?n
z_09SO)O1Z@1P9yC=`0+eW-;R&&_ZIil;RQw#uP>Y5Qk|Z16y%XGKjCJ25KQqWMKz2
zyBJd#bwNI4n#jRX05U3#kqg8>%gw-WoST7xqZc9w_VGV%28M6k3=Ev0lE#J+RMLRf
zZ*aBEVBr910<B`=uw-RmV9aOa0|}V%FfbVLFfed0o58}d6g1DmEi;3K!;^`Dfm;*C
zNS(pL;mXOtzzs46#9-iIkplN!z(X#)AT|$+A|nF>ABX_i%MS_xb_QM@kQ<yp7P>(~
zAa*(n#~g43{$ONafP{b>S_rr?qK1GQS_pVRLLi=pfgzL!#j~KbH(WQSvv7d=nRh^4
z4shrMKs>vEhk;=p$g^*!!#vwO9qQTb)1iI@=?43e6_gkljUmp~na;vt2zE9oXxKpw
zD@J2RF-Sx)u-Ag(z?e}L6r@ZOA$@s9Q;0Kn@-Q%L293tCf;z&Cst^OKr?GIjgAH83
z#J~VCP?b>>YM?*?1EV@4KZy5=hk@Y<%$FNLJuYU@0xRwv(;yCpggHn89Oi5cydVQv
zr-EE0&d6xN%)p>BjfEo|Y!`?pxC<i158_DkGB619GBB`%DjY^}MoCb|j%gx`AUNrX
zGpd7p6wAxN5Xj5GAOKFUl8i!D%nS^dc^Mea@<Kx&WIZc0Xw?`u$YbE}6Jp_EaRBwW
zAe~8G5L-A3WcO=EP=c46%EAHKW577)J~IP@NHGKBYeA4WFCPQLUtR_VQP8S0#@7m<
zKwz54BH9AhY7A1$G?7D08kDHsa)NY#Q#+^$%*qT}tH&KUm4)LyD+2>}$5codaj%3i
zF2fkVplTR+SU^UA6E4UIa3FFp@IGZ`U=Y>>*|7uc+C$S=II_TDIE{sYLDT>&1B))v
z#UQus(1toyoDU?s3!F_$`4|`q`4||)&w-Te28&JSV_=xf$H2h#X&MWMHUk4gGYbQQ
zL?#2{esG@L$;ZI3m5+gen{PS`M>eS4&wYIwG?_kuG8lyagUnk6E>+G?Vd3xxyX_6g
zZQ#VY3hp*vutH6k+d$2K#x-Df+~Z?lxB;^0_Y_EgF$gPyTs{Zv<C#-fI6##+;~ZaB
z1_nv6sdK<7o}ZtAfs>zsK`J?(fpLx!G|5OLGceBM0F?#S{0t11{0s~d1q_Vy!HGDO
zpMk-jpMilvm<?pXM6d<HQ&>1aBe{%oKy6)!1rxy*wD2=9H1IPpNLGN{K2Zzg_Lck$
z42$_07`V&ejy(pFZ3YJc3p@xw5ibgMY%|y_ril!qU}KuW#xPA}5eElBD>w*l@iQ=7
z0hww5H#HMvY9ZK#n<lex1c3uK4Ak%in_37CSY81J237%R5ELpR1wk=52s{NC7@P%A
zatCNRFZbWckQB)v3|bb+7zfUuA(L4+;=tBCVq;(s-4Aj=oG6IRG?76nIU}BdF%D*h
zBsgQnfvbdO0S1O*0R{%~WRQ*oiI;2)3<81-3~Yi73=+v142+3_piCDm$iNUNh~gH|
zDrIhv@4z{ghvfwu1A{aVi#sUMgVGSACnLy9mnN}rG=UukN`_L2@eGWfVDE$6l?39c
zf})0LB8x;K1EV+C0fmAL4Cx>TBr!1hfJOEQGB9jHwI8%Xo7)T;7Th5JgB>Ca8opyR
z1>0>piG^b>*lt!11_lw3-KO9$;TB?G_$$c3AOdoLsVXR#@`M-|QiK>7Ac13Q04lT&
z2r)2h5Mp2exy&5w4o6`I27O@$28kpFMhmdW9$^NC4Z<iP6S9zngL}>-NGx$5gfbX}
zgFrzn0gkS|i7Xt;!7c+;n3CY)R6+n$nu?1sFmQ@6Fi3s|t5yQJtww}_p#UTXjyMT@
zklQYT_U(x<Fi3z4R4H(Iswm39z%9zaAOUU!NQ2#XN0fo#h$z&3plX$s8MOAF`^QA6
z`^4bx`vJ0%9qc|(y96{e$v6iTs1WzDgG>7!F$RVXF_`<<6+!OXD#pOD8YBjGAG;pN
zeazwv4By3I?&AczFIt>|AygdZJ}$8P`o$R-TE(I6gVX__9TeOJF!zCi3gid|8Bi+=
zgqa1{7~()}DF#P2_~>ULE2Kr00O}DjFfg1DVqjo`jDDid;4t%onxH%)pkjjsI(iEl
z&twviiv*2ZLdG*uCwQ1a!<S4_VpSjokTw~!E~s4$8O3Cc1eHj;z-dl@HVb&jmT}H$
z&`@X|1LH1vP(A>)%~BW`cbP&s9PD1RSvWvLv<$30Al;k6y7_0baDXPa8Ru|<nl^b1
zjGK{lZ-(pEn$5zo0yMwI8UWJ0h7siUce7w4N1$P0wmb&LHKHJKsNHLnARG>M&e<#+
zpnSr>ngP<i6s-H)ESTLODUj}^$hw!pb-$d&!f_omsL8Pyq<cD}6$1mql36Sqpiy_m
zIUp&{JO;+;g1!t43|GY&7%qx~nrRG-(`7&+OcNQn_CSr`W(%0i5;U2G^)vHV22}<I
zj#VHNdl*6LtY*QgOHeR@OzZ)h$ST3W@E2-g56na!FObGQo<>mbSAv1TSAv0oXCp|g
zA1qca!N34I34v!CNNfUFY`O#k!(<5t2KL-p(7@!F1CniF%ma-y!aW2EXOQ(RLLk!*
zOE56(mw<SvMGhna@{k792n-Lkf=u*d1gZNygM~vBJT$QyG;5W|z~~1y@x25C!)vIC
zelQbxkIZD@aA06y@MdOU;7ej)%n|^ZAt}kgATG(kz?Wypz?dxna;T*w0|V$73%)!9
z2F4t)P^2USLpVrPiU9*-E?B5Ql7S&d64YRr37M(k1`Vr4urV<3+s%Z`L-3^-GB8$(
zfXtjM$-vMLGN71&v5Fs*RkleoFl+*e6f!VYi-4R0I)&tlBm;wh^Gp^FkdGEHGca&7
z1~5-#VPjw~fLg=AAefg^#lWb=2r^~s3|M^)ni1lxU|`hZ2if;Yl7ZnJ$n-o0MniUx
zN--%01_3G17;!Qv1f{@n0-99@O=>gF0mX+DI7D2f7#JL-An_q312T*;5F9!(JRnZK
z6az!96ez$97#L;2LM>7Z3{4=RLIy@Tu*gg)28QWU3=G0W42*JM2Qe^!vJeYHCp)}^
z0Udt<nlTQU4Vk+BEW*IR1e#G{WtRrE>zTnbD%PNG8)WK+6~tzP6frE2QiBCDnal#2
zOlE<UH7t<UEem8anFUg4v4cuFMlME}ZIJFB2Y5!7OA6H9WSYpp5d`Yia;boN0iZs^
zWl&IYnL%VZIJSeh+)%|loLrz@Gb1l}!fk^T1H&3A1_tiJ*(~7J26w}377kEN%-sVM
znK+w;!-$cAfg3a#ZwJcoJS<KO3=HtuHYQ<KUQibogqcKHdGD|?Fn}<#5F0OOnhJzj
zB-j{)L4nBN!T}0OPBsPx9!GXaVGS}EG|OKj%D}+%i5*m8^Fo3WG6VksB*X(2Vqs?i
z6{yT?%pi*OBB)Kvn#az-z{vUsG+fFm!_L6K%xVU*ighMC0|P7T5_Sd#HdaXv1_pLk
zkP|pqRoNLBI9YeHGca(mcCj-saI@ZGXJFuA{ldz?z{?8SAjQYZ%)!9G&#K13z#zc-
z7c>ISdYqksL5OuNI|G9-0~;hB+24SIb}J*uvFUSJIE2A<xg;Y414mj41LIackOb32
z2F|>>EF7R=6fV&44&!z%koYAj28Iiuq|Lz2%fZ0FxSlbAk%7T~E^NpM!~+|%o(H5H
zWK0-}F&n|gJeOi%cnUU#4Kk0wZU8cECD=5Rxhx#gU`OqRIcg=$QQWUV!M0KyB*Qe3
zh0}U2WIzPs#?@fM|41<~`~n-!!*Uo@6+x0TFNn=946<i2*d7_UtHnVxU@4hJ42+9K
zKx~k+l~J6%6l}7fGy?-a$Y~5bET<S57})=UTr(GJ8VlUCRJdt#;ihq;m^L45nwm5N
zg9_L*K7Eim(-}X`fknqc&<Mn2u&5wtECJ-AA9En_!4Hm)narR7W?*2?1gV<H2vT)>
z4hx4EIOM*A+yIKsiQFJ%OcNQnS;6W=K{B9_do%|*<R*h%WG&6W06H3qfkA+U4>YgL
z*v)tX?k3RW8#r#e;c<H&#Yw#|C;b3f)yfD;?OWm6LDP?5?X55;aqfX?hs0hx*bM>F
z3=DpdP&ouLrk-&=+*e1Lp^3B}W(0RRSd9e8Dv+<1L45@Yqehs6K;t2dmEa`bHiv}+
zyrgB077Nt0N|=ARK?9PEl`<e1rim=v;5K2UF2ryS&fYmJ9H8|h5a(8dotrAnz>o}f
zE)R<VXy$|+G&j#!47Mv5ZWpN64EB66+~r`qied2qv8z}OW>*P{U8P{Vs-zhhD!_KJ
zg9d#WbHSEG!9(~i%tN{S&`9S@L<!-1urdA83=F*xV?b*P7}LSVxWkQ61&tkm3+r@Y
zSZ?q`F((sj&Jt+`hD8u_l0dPL2+jxkb6{mbF5H|%QJ6VqDCQ)C&Dkl<z_1-+4romT
zV>H+tkvXtZ;0WBDXqY+N@7Wj_7^77np~b=}4UKk4%*29?Jtxh;a0X&*1IT%yU~e+Q
zy~)D{nv%~<VPFh}t#aVxKyh9;*qq1G3=9t;=Cp#$@dvkd-_3?))etrY25xY0`NM<j
z>ug9?g}5hB2oxPZq!}2#fz1&DRW6Jkj7Mg}+MR1aW;_9z?g2|5!k{tCJ#3&cOwh&{
zk#kTZ7lE2R;1a+KlDb7fP64F{1~E{X1kxf73KtdzUXZau;Fhf;BdERtO=d980jWhY
z9kfA5Wch3s4p6nkz|Oz`$ve(a(?N~|>0pom)#@P3BEZI=4;tBGSOOXwhKve_azLs@
z*y1)<ahkR;3ON`Ud>9Qm_A@XraDe6#8I8F>YzB@321XO^^9&3O4xH_vvfh*v)WUG#
z^aOFtz#I<-E>QCZq=?&(fq}uEfrkYoz?%(H6Uhkj1E?Pe>B;bcM(7zMWkJ0fVHpMn
zZW#s!{)KZ{IQT%#IUewW7v4IMPCrJ_MiO&y0i4DNo~&c^69AdaG?76NG||B5Ckc{Z
zn#dvqHZ?#3WNLs61A~_g1B3AGxhx!4K}&rgv+fL{EMgWQgB=(_ez2Iw!eIwC9JCxj
z5bPlbevk~vc+hMKqk}R?3N(NTZZA0)LwjuEVB4I;L5p*kCoZYyPoKxa0h$jM&YOp7
zC8U`o<_NM@6Kw6>xv*X#Xq|~bG6SO~AJkIuWFrPfZ4QVJ^Z9?n0!1tUq+K4YooOCy
z94!&FGNhP+QC=A0NCtkfc`O`ipo4Ri=0Sp!UvC}@$9+(9P0SKxgaFux{&}#X;0$O6
zAM9}fm>a;;q>KVe5HndMB*8ux0=E?FWEdE#WEdDE!TCj)9pvl<G7Jp!KvB429t#I(
z=O=?$4`|MW6Kqx4JXq}jid~4=oMI5O8Nf5GjGStaKxN_Yg_$4)s$W2uNr6=gG=mDl
z%yMi}pdoJ%W)b0F08L4<FsOo-K0&g~ENGU2t@oTJ0ba35(K1d@6PA&e5oRRg9MIwx
z)(N1n<mU&onL%5K*j9o>1h~#HFfeSFVPM!S!@$74e;x}5Xt@jfO&H@nj3F`~BE<k*
z_QAn&iGhKElZ6X3ZwSIn!mJF8f{dzs!raV!(tLu9LTmz{5<rE4o7;|?nU8^i8Oj8;
zr1co>C7JoGxUIP@xz!~-g+a<4B&It_G72*=u$nNy<UEC$Kz&PO0R{$kWG<8Vb|-NL
z1`ZPjW)6sXp2AQu&dw%A20=zcVFm^+eg<xCPhn6OkI_>YWC@QVgQu`QHv<E&9)rE4
zjbt7l%uY}S!|f3c1_owS*Q2<dg%!>1tO!T2!5qO34GBI51`g6}M+-(VB+D2WSV879
z^MSm{rp5rG*o7IH`M9|u;R5nC2QN}ES%4<Wc#(_%2_Qm>h0%^16le(DJQ@tld@`Ug
z(_moc05SMbqC$d!fgc_=te}`h2^#@ch~=!7-0(OOgoYQgm=KDX1OtOGG;)y@i9l@z
zi-DXX%FPHGo)beBhb9DZL>x$THZd}S(gY|pB)ggz8JHv{I!Q1vNU1R}Fi4}gP=bL$
z1~d;YE6S)2PMC76;82wZg);+#f*vC{$sl=j8YBTL!YpB6P(pFK1OtOIBQyc3z!IP;
zvN>p3L5&L%J*<}8f{Y9d>hRD7=Nm}qLM_#Rh8j0g=xU;fNiZ;IK|KgjB*DO-4GJz#
zVG~JEKGT6Z7A~s`3R6%>>4B6%5&}Hx^ifnpvY`PtBgj!8ErzIWMe~>u)YC}*faZQ<
zWEnJFCMeE_SZPXH4g%$0)NI3o$c?OUH-jS;&2~1Z?cgK_3NLnO@WKT^r4Xo8g9t#}
z#|a8LSO{|=!iO7?D0x5$3Y1@YA=#D>mPYttX+!`T*2o59%{m~H7#M`%{s4zBnm<IK
z{(wX?#Fe5@uRz2k7#Lvr2rR(BAP({cS^|)OItr`=n$;vx%z>CKg<_us1A{auugTz#
zw@`6GM)V2<d%STlFd*U$n}1>P25~27%oGvy9C%V2CyKive&Ir7ZEmE}g9l6S@FL<G
zR7|4RPW%vQ1_l9`k)T{7sK*Ga$1v(eAslW+6p&ya;;6q+1CJS$P#|>$a{7m)KQ?HN
z01ZB&rlfX8Nl^ZVSJfOS(JjHizzHfaxv+!=*5r;q34m+@Cjm64BV5OVSx2$L>L{2e
z_!t=2Q9Xf{9YB6SL=MOgu$aN>4|E@6WL{LuK%RgH7e8{qFfa&!A_24_6*N+estrA$
zK~*3htP~M}I1rRxL=j0@3|4B0!%7Va^1>J7Dq@lb8I22=6S-kdM1&r4;zkKHJ}lXg
zAK`6Ss{)+%L8UURT!ae<VJWACVVRDBK?Erui-P>lz#xVi8E6RxR2HHn7zt3Kmqd<R
zXlW=#WCTD{G+OHp)e$IRg1?CjwVfRiNE{%4fod2|5QBk%3yZ`4fOd~DfOeuYGXCb{
zWnhFHv=5r|f$Ypg-WJHfkdv5X2-+*EmkgS;gls<4%K)9G58E-A0oo1-+06+SXJBPy
zU}XYr?vrF?=13Pt01;L}Hbz!vHg77?J{%J{*0OT2F|x98OkibYD?Q1|90lboVBv4#
zP-Nw2V`ODzo6pJ)rkhzs`B?cFSy_eAr5Ko4nAn<GML{$lD<6nrWMu|X%-oD1ieopc
z2#5yx2uy!wWd+lWY|ST`b0bc&vNLl=a0s(9Gjm6<onZUSG5;CI+GbW>kOsEhtRi5V
zLzq<-<dR)%rL2h{#tF8ktjy6+*{7_mY#`%6-ePBCY+_}d2l3=2j<p=ZP(>X2AXTi)
zY;7F7;iiN2aR_tRGFL>fonU2VW9E)H$;8UQ$QZ=Hz`)D^9=yOF|N5Z)pbQMDc_l@a
zdda9U4eGIjqZhP^ND}OW`AotLjEp}yL8g|0DkbcuGB6~UR2HN{lMZz6FC*yaf|SIf
zbhvOzY8srKnO6c~r-1f7LzpND5NrxG%_%dmGJzICO0cRjvYN6n+N7~M*{~|JF>@<`
zL`=XU4mK=Itc+~TvI=0QUl(EJVq;_#vSDRQV`XKFWaVUIWaZIg<&R)x)MsN}#AE|j
z_Jx&)jggg`tpgn3+-$b2Vr+b@%xpTW>>{jUY>YOn+-w|iFi8Vq7{aW~VvvNY$I8m)
z&B_P1C=ydB8f-T+TPZ6W8zVRwGP32evNJHTFtW{K<pd`<Z&q0_&B&?)qSIIvK@?jt
zt2&qlr&b$Qb~a66Rv}O#67XUbV~()_B?@glh?O8tAgch_6%ebK*_cHmSh=AhLLgtV
zvoWV|G=a=uWoL^7t7d157Y2tRZz?M{n+vN1IG{?ItMtHG928bkY>ccDyI6U_Zi!>n
z1k;SH79cu}RTV_B6|-uCX+~Bdu+MB*xxw^2R(3XDu=&hvnXIhB;Bew(3k8KbD?1xA
z*DkOmCtD8KIw9ur5>{?De=rARw=f$cD?8hCaHeNxD`gd8V=iK3Wn|XSE71e#&s0Fu
zp9#{>EbN8PgcL?rc4iqpHbZ1%6F}t}v$`JGJVrL=y9|1)%)+dkjBJdojGnBlH`r`g
zIs3uclhcNkvBgV4L641jeLW;0eg>D3;=-&PY=W$8rL631KA?EFVdc_e<z$Owl?O)y
zGuH`l3KeW(l}ZDbMQm(~8JJkuguw(jHLx+VYOyg_&SMo|<}P7Xn!w7%QN$s{%EQK-
zrw4W~%s3vlr>uNz!mL^hOf1ZIz@{;?O$Bj4rh%LeVuR8SGaD$ZvcNu*pKyXz!iJT%
z1e^juMHxHWXK+g3WMi(fVdZ6OXJuz|XO&}PWVHcB={#0_5cPzWlg%6CC072l2vEY~
zwgKs~VO6mKTg}2YAMAV<MsPx5VPj;KXJBGsDPiSZ!zypX%F3n>PN>{Atek9~;9!*Z
zVr6D)0cQ&-P-01AWoFyQD#OOeDrUo~)5NNLg4I%wm6>fmn;u&mSQ#_h0x%5<Vdj%y
zCOcc%T2^KbB`}ARt%a5KDJY`YR<klg)H1esfrE&NIl~K_W|>RC)dwhJaM*wx#>^SP
z%*nBfV;?Ic8%HU~Z>f49zp=707o@RjnX{@ei-PpDAbWt3Svvw8r=LM_&dADU!zu~#
zgcmD6TNEoZs3KtV1xGup9xEe9Br7YMCX_oNf|Z{w60C-wZ338PbOTpC%xtl&(x6zo
z$|?h**ce&)!89a{nb{cG%D|3bOM}_Q7!{$w#yq7)5A2xv!XmcdNMdH2D8kCfCd|hC
ziWw>;V*3;#a;*mHa#k)-nzvzPWM0eY1u80-Z`IkHWQ$;xW@D~kWL0EiWaVN56)aw$
z^ehTaKkRJ&;K*ZVvxo9?!C}SD_8gQtK_w}31xM3bR$gY_2oY964qsMvHbz$Q39N!_
z*IDJ6B^g<HMOh8l7+HClG=x~W*_f0?Sp}Jso50pVlo_ysDkd=dWE8778zZYA8;5Na
z5uylv;4)m8jl&zH3sf3Jv+^?YaWn}-+@uL}(@9o&W+||nMA;ZwrJ0mPSk>5KSb0U+
zI7*sWx!FWm1(~CoShe8lksW71l;Z^1CV|v}3e*KCo?zo>VwDbLm0(-ID$T~EEI5yq
zmyMa55u}(^XaXxQTO=ztM++-&JID{LyliV(1=)mIdD#|&6B6$=P_1Ra%G<#TDkXW@
z*0F-Tz{^(3%FU!K%FNZoA>7I#%*x1ov9<}EIymfv!Nm_VTRONL231O+m;hBej9%bu
z%*d7rO2uEn$&pbQoTWh}AP-0sloT?+vCnABD#Tm{DhJBHvhjl|WEn`BLP~&7p$V{y
z1(E<cY=uQwIT=BU)zet{nA4kBm6^Fpz{Ld<n+dA|sF*npt@<GK2ooEm9${i*WNTq%
z|8fdkow2i}LuqhY2NfvH(Tr?qtn6$C!lGdJv9qNMgOVdFFQ_Qy&<A-NR0i6!rLl3?
zvI>JL6-HLRHDLcSvqiGXfwI|gaFGSdyTTwYn+>>{2Jz)fSozotz)eohiEI(9B5Y4t
zIm21S*&c%{Og@lOHb%BqaF!5aTL5++q{56O=&_Tm;-JO}BdgFFaA1JkqXcrmaaLsz
z1xk8g8WI>F_Xx3-fvr&P1GRk=9awq8*=$%vL8)Ukt27%&F}N5N0tFwadBnz~DhgIF
z#CDlYfR#G~6jscY5g_L>@iQ<o7J~NnF@O%S#MPx>fVSHp&B>A!cry>FX$R>yfL3*a
z@*y)DhoZ2^304(Ga6Q@ratNq~;WPm^n1t9ESvhT3`D|EuyjVHetidVN7gR#&fm0$A
z8*?S-cnl_vlc0pb#&Lp`k&S_s3A9p^nFo|6Q7mWz+am(526)+gK!&rGf?FB9HlQ#P
z@M7f!S>g>U-?{Wa_Q0&khgt(_?sJ>~hZ8%StuQMuBe<o+3rb+#U?#*6Fq7AYmAeRJ
z3^PA8d4oNx1okW!$g|9#y2Trm@>uz8SUGH1#n?Q-SzE>iTC6g%a`{HUTu}vTd2pPA
z@ikf5InJ<3voU(HGG?$bbC!U^=d-Yg7po}P4o)9X?16$1)Wcx}7t!Flft}43OmnhX
z!c;J`1%PvdxJ?AOVgVVN4zsw-3lzR+p$uB-%q##6Wnp1(Yl@l8hZWgppl%z;Ptx#u
zf{~TWkCic!l`9<P4dyC6km>N)11;rd=7*Sj66{QnsZw67%p#!HA*lJz0ScZdXg2l*
z(~zc#lmMzKa9@rsnU#-?;~XnvG@A)Hh&c2`SVb6FL5)^s8&-ZVc(;J#6Qp&`=E-UV
zb`vAC`)9)nYJM<*bc4jbSQ-6T`Dd{*vqgi$kCDv`B*pd=R$YRc`(THDVwGm|1lL<!
z;A+x_l`FG^l~Lb|%?Ydn(z9h|^A>?=<@aD^Ws3&;TbeB#MJuD99xFd6e}EbRpiT`V
zn<>~78hD7=8k%PHMZ8$$K*=eMRfZANqXG3%INAKc%|9+1R!$BDR(7^_a5%8D<$xRx
zX^JqhF=vBgmg6%kE5~<m$;iwW$-u<I<i*O(%*F8uTp4k*MS^n+BePIM6DubhbD18*
z=rmT&PvByJ4b(4TX43~}Tz0k$s8zNg?Vt=a8Jut#*``CnLQ#a36O_4xELb^>zy^R~
zf(MjEkxLLrWyS<<(K0e~b9@5pJ}JT~0?9SZdTdePb`qmLG#hBLvT}T7RS*Qni3m74
z!BtgXJtXIy1lPgLY$rikxQUgS&5o6ejhT~?m5sSPf>oF;i&d44Q4ds{f!gPMY!R$H
zpID7S;lbv~Y67MiS%twgq*?)`H?CM##z;2iw+!>Z?wb!zx!Rys-x^kCwkU8R#jg!c
z!S;fzu565~AeVs@FtRZVoB(U$&=*MqRUn`~k2oVJhkzRO%xu@eA<D?i=>_R&FtITg
zLvs3OR(6i>;06FYn{Cuda7zi)vW6r&Sb6ptm$AH{9w?}e0;LsZwk?ndw)Ikgh9q+l
zxZl75vgQZK8c@$QGKy80t%;RAf-N1?cwypUU}RKh0*yF;ckbXCaY!u6EXl}CEy+xV
zj$@Rhz{eCIwGDW&t`sN<3k!=FfkKQ;jg?tKn3WyW5sPGHXDb6YdaS|u8RTSkwlZ*`
z3@Rr<i3b#wq>Br)GPdZksj)F~D6lfKO#}xvI~%j=Ja7UQxX#KomzA3>OBmEP12wJn
zSv5i7rvHgmLXXv!Lx|O^gjGb3m7A>;l&~hS%Gt1raM-ZwUE_!V^=tDOg+U38m7T3w
z7}~zJ1J&sztYUhsd=VU8tOk0ld?l<p5nil}po01UBr$*o2ufIaY*-mf**YL%-r&|N
zsI+8ZYX<j)SlB?_LKa9x%fglpE(oE5pvsV?1RR$vY_{O;Jg74V>IAZ!U}f|M8^Blx
zY7b6?bPXqgQZ=Y5tcKW!;s$0ONZWHhI9wPxY}t&#s$hI?G(Ng~GZPa7BV#Lg$P2XV
z0!RA<GUNpv{$zl(NnlNt%zV8J&<H0)6wE}7d?F8Efp<E9hCV^dp_#cMwbXnO4g=fW
zyG5eFY4#|1>=nGf4tttKb_kfQuLnDKj)4JYEyQJ&kn`HW!(UJt-Mk`Hw=#nc(E&LL
zv?z@EAOj;S^L$3e5@A+Gj#x-IGBVCX@Jd;Q7#Zh*bAb_9x|Ed*ivXx870HIC0z*I;
zT?LB3Cv;m-1Q;1XcA#iLaTX3o!8Kr!2kFOfBZ>gXN)!RCT7<zV$`>4wpdoRhQWWfj
zQY<kC9m8Y-jf8^F6@;X)66mNXJW+wxsxjYWfTXI4;OqddW*{{Zqb;bm(_z(Ovtb2|
z7_c!HKLN+!bx={p$jW8I$_pAGi3GQ7z#5~#1p}iusEMP)%E%l(0ipp^OS3Yw*`5T)
z5OWcv0=v$kxCbI21F3D+g3Co#P-hS}YzP^|Oy>|Tg{X8y$-5_ESrswJup8XR0|#gq
zIE#W#cfb*#4A`<IBP@M`)<H4zGO{wS6&9Hf_8147J}WbuAgh=yD=S+RE5}DrUBb%2
zrVA2ft2hNNav2YTY8Op#`xG=j$jJ5$?3$eXymSRH0Xk%_B(=E2m;rRUB|}PTadHs@
z=t$aBhTO!=JO=QoxnPxGqBO5KGd(XAbP8w*^3;jDU#Nn!r6uGbL<QYkV<QFK+~WMS
z65X_%{KOIk-Q1GWyj0ut)V$Q9%wz@K+{B{f4BJdI3o`}X^z@V@1zmpy-QtoI+w{Cr
zOG^daw7h)X{M^hE-L#^_+*I9y{LH+P)FK7lw6vns)Z&uFyp+tmbcnLdyqwIuR0z8O
zWHv}|aY<rwwr)XDeo1O_Nj^wpVsT|&az;^pUVdq@ZfRb5W?qVJ3FzR{Vg=nai1Or|
z#NrH?CeVq$x@pO2NPLF8(%kr@%97OLc+k164Eh=QxvBcusd**(1>loO^^1#=^;0Vn
zLFWb+gU=5&Whe$M>VyXy=#*Xt$Wf%=1B!DC7(l18G9>5Z7pH=C7=lS7hT@F;q7ntT
zMp!(VfThjAq&ZX(NDg#za%vt!68K17(9yvR@x>*HMJ15qj}wd1laZ&r^kI`9iACvU
zpuTHfPHG-QW^qbpdS(fOdys!<07Ft~T0H2;P=?aXyb?2$_!0&XFTR8!y(qu50Fqkc
z3lj4(lfg<E3KCP|L5KPjrIwT><}gIL2Kh69W<<dHE#gZU@=Hq!N=xEXN(;b31tmrC
zB@BpDq|1u)Am>TPXQbv7q!uxhXQq^7Fy!Tz#3#n5<s_yvBqbK7#-}hidpHI$<fW!3
zmSmQtGJu_2%n<Au<r=~e;1e1Q^Cx7+E|~$8a?(?a;z7D0Mno_K2RJ&rGJp&%2D`=B
zD87Utv9uzd0dj<FJX8}yVo`cALt=4qW+p^yK3I8fVg=agX{C9|@$n1=sYUUiGzd{r
z!2tIOLq=*vd`f9<0mPNy;PLbe@pX(~C`-&KO=a-$_j3nfhIps^{2YeNVsHq6!ZR(k
zh#@{csWdaEBr`9*EHOSOvltWu>7Zzehh##A0RK=w7ld{3pvAETiABY!@rXlZ83ICr
zTs+;}LSSBlj8s5lgCW?%KPZF&Y;78{E|3><QuESFG8p3HA<|F-7<@hbLW3C!ic*s^
zL8sO-6lZ4^fD$wK)a~MuBFIVI;1ga!NegsHcX3g2JSc?~m*f{P<R(^t+0av5LC4gB
zC839X=ceX@wB)6xrsSj|A`@J9B!d-0PLGWT8(v(H#{f|ZHUn{5EJzl1rg(C00q9)V
zc#tcTA;*h@^c9yB6(kj9Gh`%If(rn!2_^a2sd*sH;8VtnONxq1ir^|3lJg5H!O;lH
zZy=-c;uDjK8RFw}^HWkXjTz$OOQEck%(5JY`1q8}GLSf=>7|d-U@uL{EHg6!X@M##
z1e*miz|4f9I5$59L_rj#fTeO%i;EM};ei60$JB>3+mabTX%Td!FEnGq4`pV^%qz`J
zN-bgtjtq|X^>qvYGlE<lU0gha7^q%ulU+XJD)6aMZfE9YmSiU8K#DU^IJic*Ix{4u
zq!fWmUr@OQ4;3&Y+|e@x!U*yVab?IY&C5+J01G$=xjKfp!jdI82B3{oy=1Tg-%vkL
zAQz>AvqLUSpKF9?2tz@BaV9v9$`dm|C37l7ONgtF4?}KZL1qfrgdkU6|1eiD(?7t~
z56tlN3-xt!4Fa=+U0uByic?dw!934kP&|S><>BZ9akR6Kf3Pb<aY<rHX)!}yVlJpE
zFUU-ZFJUN2&B<X%&H(KY1L<(~0O<u4`$Y`7*)UNzPajuMaSArx*Bhh+RNaB3%QB!v
zK|yH=xGIAjcFs^xT2hP>CWr=MT25(k1_MkZxQI$jNr?yR1`*)glv+`clbD&8ngTNf
zo~l9BKWJeF3I-ju3tC;y$Plock%3_|Xl(~WfIbrggB556JVOA8DgrZuK~x)<830-y
z4?0PSks$zd_9O>r-zGyqGBX21K7<Lkgo%j>)G!6z1qR;7$zU)aL|cH)^I<TY52EYA
zY@_)g2Y?P4W@0b`ox2G)BA1JS;W8Hk0~5nUFkJvTU5H^KT%Lgeq@o?70(90ik_?I*
zM?V(>!%c`f4iJ4GbQ~DNL=LuM2BrBR4%BGSsXt&t7#SM57#N_U7)CQNfDD|$#lXPG
z5DcO~u4H4F$iQYVHUBvm1H*T2uoQ?2fH*n;M1#y@WC#Y^046|<Q;1;?A+C!7>1N~x
z`PpGUh-L<x6ab<?x|tXz#(;Ig36M*mnj_e_85npV8bB0O185x&Tsg>HU=Ab1ZZMkx
z;)ZEpHyF$Z(I8(zJqI$Kks(Zhn}NXq>@tJ-AR2TW79&F#hzbYW84RL!f|+3;>LgS#
zh<*SO22pRo%wSO1IPrj-6Aq$4!NbT92BH$dA!aZiM1#D55@HODU91cYGeFx`83I5Q
z=)e?ahKW2VDF@~&28OFF3=CgE2SP9efGE(BjEoH7AW9x$28hxHGs8iYA($BeqQD!r
z8NxwSDl6#VtIv!9Xtsb%e*rc<2t*};HHU#Hn2sPc9T1m+^nski$PfskK+XZhEQpo@
zn-K`2K<)tvgJ_V07#RXV6v$|hFvKVr2|8#JWEK;H!F&}~1_m=$P$Dvz52F3RW+J6K
zh^EJk3=E*7rx+OmK$IXji-&<I5zx7;3?To4SfXGF&{=U1eaxUS0|o|=b`WM{2m(={
zV}+R+it6Ws7y@7|!7$xmafoIF3DN|zmysb5L<xblgo7xMHWr4@jDhn(EQs}>)6QXf
zK@I?6C?BLim5G6YjRA5B1Be|D=7W!8m=9tv0rSHqvxHA(0kO}6`4D*!8+0-T8v{fh
z#FhpfiVHOl#C8VrA@U%$CzubhZzBsNox$`&odu>qZZih^ED%J2A|B#1uq<dT6qtdU
z89{|HOa$ckiQwp%xS)PMhy^;2o{=FKM1g$5%rJ36J;)0e;i^Ea>)^4^i4*EUj0X_T
zlzI>YbSf_+LlB6v10AFc(hp*Qyv4{62%<oTp@Pi?F~A27GXy)bFff3Reqjg(Q4uVl
zvDIS6`5*=;1Q;2DK@{i=7#0SQTR|+4e^K)<0|NudO9h}~M;Hv|!yL}Y5CGB*QV&YO
z;6MSL9t~xHqSPI#1w=zV-ck=@9D_=LXpjNS3=>;GyW608L4L>u*G`~yZBRi7wT+p9
z0d$He8$%gG0fWqZ5L*(QpTj_uA=r--XVk~CFfdGqh(k1j@)oFigLnqy2#~8`o&m8z
zao`5F6&x%ecY%aq+MzUbWhE#bz#<$f1ExU76hwg}83I65JeU~-qLRSOU=RhW5E&VQ
zKon@p79&G2h<XZE5Co!_K<SAg7({_CvSefk0#T|EQ4pmE9;zy4oDX7v56EW-22oZp
zaS)>cq8>zn&gf)h2m(>yv;G-^LDVv^f}jnI3=BsgOb~Sz%nSxmpbXE*fDs7@PX>WJ
zxfZM;3`Bv90_B#V`5+cVdl)!iPzaC#phKG(83I8R$oEVPr70j9bcY}#Lm-G+4{mLg
zrhsUWQ7A<yT5ULwm4RU$xB#69rgwo0(6GI%3=HQXOb~Sm%nSxm55deZ5cLhr3<gm@
z!OQ><^_&w_)gcwZAS<>)tiaN~U|{fLV_;Yao;07hqkab)1H&#D2Xyl6RTzf_bQA>W
z$OwjsJL)ai85nF~oM3hahC&zzCA?5LTR~?`fVRRgOk7bf&B4GR3*#7bFff?HI4K+q
z44E)aHwOblF9+zP@B#+5?>gUA=Yx3DL7M~^3K+lwAkG|^`b``R4BKIx3mgm#+~B34
z6IUSRQU->*><kQFLHnK=0zlLs(4iR&B}jqe&&j}00S-sxM8H(U%D_+s326{j%?c`*
zCbA$^yda@khzcaXGsSQ*Fl2!naRDGIn+vQFxg`M-0<|$g&0VNYMg|QA1_n@)V`7+y
z<T#Kt=!8wsp#Y2w0U!!=`~ovWfx>(c19S)lC@rHmAwc>-^(iCx^l1i8@E~V_!F&({
zWF9s>lI#o&3XqTjQJ`pNWC*TfXJ7!`Wr9)OGBBvIGcXuJG=L~eFf$CKp%Kgs08tRV
z$U)1{#?HVn7oq}0fmEPm8<69{xPgs<p#`)LpCJH5b%B||AgT|{3;-qCClDrx`Uqws
zWrxdb3=9xKxC21t6$67F8v}zK=wuWIgZU0@3=FPNHi!-dn}TSVfSuC9%D~VKj_e>1
z)eB|@Y+z+zfaGE{<qQlmtPBjEkempn{lPkdK~xY_7(^FCgu!-z2uP6uCP5~E+F48t
z6FES%Ju9d&GLeJLP-Z@e4LbFchoOK$VIl*Y(nJn6rTHKcSI}7opiV;pgA7;@Bmi;<
zs#1jA@Q{I26?&`;3?S1%-6Ig~4R&AvLOoLOf*g#%Vk`^{pu^HZIze<ixM~XqQOiKb
zuQN<!0MVd2i;*E1bd<z>hzbzJ1-2#}L<xhlT6z6^5Caqlj0~W|HQ^RrVP#;r4OSii
zqQHmEAa{Ql81Az&Fn~_2VPpsZQBvRtMKR+QR0XK=L@0rK4N?i;VrF1?209Oo!C*d!
zW`#JHpM`+|<X4bhxTC-f(0TQ1z#1kpfN0Pe=Zp*i2SE3jf-7yLR028=3UtK+a(;)z
z07wR;8)QC+-VN3o2r~sF47LqQfR4aQgjx!sLFdb3WLA)(Mu;L75ZwVbGYmw59F6P<
zh~N2{85lq<RFG{T8gwElBSWwYGvv%IkTBGKIJJt2fnh(m(KHcEgPMqp3;`hOD^wUn
z{{pvLkwOAwz-}f62GCUwj0}Mw3ZxF?CJ_AxtRA_c4$d765R$=%iGd*#Vmt?k24O~q
zU=Rgr4Kgzn*Utwr%0cJdz;X+ygANh^VJ>K9fr)`G-QY%6*a|(X7;F@1r~>3sP^JVq
z9E2g!24clBF))DiGcp8#bb&VMGcp8#D3Cr-#sJYP!9EHAQBb2mdZ8F}h5=L*UJoEF
zxW&l8@E6>a2?TY9K*#JcG6aGs@F{%^6B$6XH`sze5CsYzkiAgTLG#H_CdeqzU<xBc
z5W=V+B%{C=nSjh-WC#LLP@~|kf|>)RbQu{K%D|1GiC}s%*p&ew3e=(lxdBAagb0JE
z*-+IWdIv-pM1hVN0jY+Xi$oz=!2+@hWHuv15QqX94N5Q|8e|9~LlB69nuTyOG||8e
z1(_HEaRvv72ARqR8o@D?nGa%vjAmpA1W_Q9L6HukK`v%yD6F3kVu0*nWC#RNJE2B_
zXwX?uFr#4BA>t7xV$aCH5Dn1<rb{5<fUuj400h|%3P2DII>id9nE}b$5X+IQW&t??
z<VpOY2{I5A$RHXNvRGQ(5TikdV}g!v0J#E0gHFX}WC#FJppiR}Fo@=bcoszQLBjw<
zYeR%V6exZ`sv*Xrl1P?-&x!z<&d3l5qCkd&915aArZX}Gf+&#TAYl*<GMSM9QK~=_
z2FTEjpmQu4CUSsi&@nf#SOob5G}y?<5DcOqCcyh0XmJZQZw3Pc1L&4ukS9Pi$aTbr
z1ZYb>BSQd)k^l!v7>EL49)>bdGL<P}P*P@`4-x@gq{GEf#!$qdG?9Z%W<H3o3A&~S
zA*ReYA0z^CIK0|NP7~ll71QY~Ag6<Zf{`H*6bcYu5F6AW=QA<{f+&zf*%%5LKxHk6
z4Z<7@g&;>Gc>|=Ph(QVN1%wKi^Fb;=W}v1B1_m!k)PZSGR5CKay@{$6s*nXlr$hR*
zAPRKiJ}8BNXwcdnMus2|1u_aG3^xNBL@>TO#99sz?Fc&96cjgxGV>9p2O^mcKGz>)
zEF(i8h=Q7qG)fFISBQau0kkRslyX3{GuV{@AR|E<kbH)SKqNgZAUz;U85x2=6v#&)
zFMw!}rMP^?06DC5_be6;*uWQv4LbgmjR7*S1#%rSwwlGl5s9Q8#O?(1A?iWwNnk!?
zU<<?s9f*p}yzp5p964aMfs<K+C$oUm&PL)R?2Vtr!jT4+ftZSrVPGhj#lq2uBnL8K
zE)pMEt-vf64s|3s5F6wpY_0>HQOY|L5i%e)NI$w-CI-;?q%5;QM|8~t$17Utz;I?J
z3&*vYEF6ps0U!#b6seWV2$qKkq9ow+Gg&x3g0%&LD3A&!hKcZ@c#tii^Gcn-N&-L>
z$RVJ3NA|MoOcoAbh!POh0A|A5z6=Z?fljbDA(4Qr7j#DHkr`lzgQ#B+CQJnrIAeg+
z9Gt<z0cs?I=#yZ!!+a3^1FQjFYJxO^mO^fsfe2L)8)O7#sKQhtRXofL2tlMaCCm(@
zx({R(==5OFdGL%30U!!=LkBa%L;<8uJ?L^U(4m_s8bNhA=zdES!PSfm44?rd6u}9M
z3=C7jMKzLRDi|3UYS9IQ7#SEqO%4?8pz;k=@1Y2SHo}5>ttf)e85kHqH+rB5o?~EO
zxBw|9K)!|G-3$y2d(j0KGcYi$Ko{(0U|;}WZpDD)_)-Q22GH$2C>DVR2vg9tL#zXl
zpvxE-89=ix44^>@MuuPz1=_?88Fv7&z{j5<x^1AO%fJ9SD;boU85x2>6lmZMlz2fj
zc*z?=J*dP5RdJBYEC57-h8dX|CUPLfCP)Z$5h{w~85qPF7#Kpp&JPA<uY3p-<Z=*(
zjmO<$Wncgeuz|!tSc#2+VJ39^40Jv!NDPEQY|t^CpkvfQLr@?w5C+Ymfu;pPGhLt=
zCy*EjgAy!gr6!1t3xhVXgXEY&kq^2-c0TNmc1URtx+N7N4;tlRU`SpHlZUi*CoG5Y
zSwYGeKu2<c7|aZ8APSC|LC5jId7zOhaB&3}VFnK!!MO~~450H`k@?&R4tS6W6!!=r
zW(Lq`6EdF<>LZ943&Y3%$T~oL(2<c4S<v*@$N!+)Z$TTZK_)RVFfynxFfhQbsR8jp
zDG7D~4~P%i4g|aC3d9E;zz4hc48#YW^Su^&Lm7w<suE%Mx`Fthz2u;~06~Loj0{W+
zwG0dlpzEYSJ_qqZ*#vYmAWR-~Ipu=|kb^rx@-soX5Q)D4<{8l8#|$6;uVi3g0G;B_
z4o-GV4BHtP7(l1agF+spA9RQs=#+ez{AC6P2GDu_F#baZ1_sdm0x&+PH3qu-0LK3d
zYB?-q;Q)>Gfz0D(WMI%(2swQb#0MS33%cP1re2+qfdO={3(S5~(7}QWSvX*PXGq=z
z`vMd{0gMdbLKl?sK;Z?tn-NrAgAS$!@go@-7(g{8=rnH-A9P|bsFnmB6A9v{GcquM
zYFN-}WDq}(5z^*>$(N$p2P!(jmP5m@osoe7bfhFGWrO?!3O~>RmM}i3{6$tjpOJw9
zw1^dyPC)i8Wn^H09is^1quaNRkpY}vK+a%fU}FIFq3%MDC=_B~WB{$D2DOJkl?jM{
zj*)=@b}b=@4?5yq4tn<rh<^dpXNO*S1>!$oWMBa823rm~m4$(k0d!#`?Aj`j{0l|~
z2G}{hApU#M8O0MJr;vmA-#~pO=$VHg{%=MG2H2UXAU>#554%1J#OGmRV1S)?4B~@k
zKVio*gZMH`3=FV?`9XX&Cd7HmAifS00|V@2ND$wYiGcxj4lsys#l*k>JDMNFcL9y%
zG(gH90fvwN!<iTuV7I-2<Uu1Gu<L$6e9%x0>@E}#zmSQ60aQMMYG)9?mWhD@cBU?f
z-^|3o06UTv#E)cRV1S*f2;zf=SYT%*gZPt}7#LuO1cUg~nHU&ACz^ter3Ufmfb4_b
z5CY;a292IT4{-(YK|><210q5E044?o&?yw4TW&%86-*2au-j`u{Pj!>46t)~LHsRD
z3=FVanLzwKpgV@37lnfON0}HHU}w>S_@E;wVV84&_?MXwHw=OJx1iw*THFHS-)CZA
z04+lXRbwFjdnN`3*gaSvKIlAV*a^oVK4?G<cJT;^51R9aUGD<ob2BqAfR^opdNUxt
z05byv=!{lS{si$s$Be=*QvmVhm>C#gH{^i$s>}=wpi7ECXJLZ)I?N0Vu(N+bd_!gi
z2GD*wP$Lk;2VLv|J1HB)2hAFvKnj1*m?P{e8<0Hm@@Cj_S@@b#=t^1Gf=&2}PuSX3
zj8&LOi(k=}m_oVGWtpH=s_`id@$sPbeDU#mhDK(_kaeZ`5UK(~MSzwlX6B{qB_pXd
zFf~KwnVBQ=EDVu(mdHFq10y6kLqilfGZdaVXu%@PZH5-e`ixLaF)}n{Kw0hxUJwbo
zh5)+m5w^||vcM6#+!40!3$dmS5fTPwh79QI%HT`M;48@V3=It|Knv19i^~uTFyV_>
z;R{rAQ*$9p^dO7-K+8@GDnS~H8K8^z;IYa8TmJ@IONm(K30XV`Ti(V1Uhfwl5Aq^t
z*=KxwYDH>tDR`YZbUij=!E<p*Q66|9Y)KJ#ttr^=&=u8?75Jc~;o!xIkR^NI)q5ZV
z!RuHviWtDl2%$?<K~4mvi5$?XRQS4M)TQRI6}F&-{Sey_%S6EoS`$kk3k!=&iok1T
zONx>~3uVEZ08%S5LCdwF%UeOV7J%2ug1i9UI{?y@0b582S<nt!VauRbT$x*vn8ct5
z3Vtx10b`Y<R+KR473G5$twU*$GDAHRm@tHE$e@>(Uy`bqo>!_@P?TSgT2xZWpqEr!
z%%GQ?pPQSSSHhqN@l|3`VqSV`F^rp;mzED>CnhBorIx{X;8ojDO`vtYP-aekGE4>3
zBv?gH1PwYF8&s!*TEL+8^%n*P2362qkx;!LIS><ky)dYM0d057$TKj22KGU6APi|?
zGcag^+iwgEp!;+|?eQ8#28QRLMiEF6xUB-3oM&LLKvD;4rzfj2Fo5b5s4{SS7-To7
zyact$KrMVw`+b5s0|Th-3sVQP7t|X9waq|Qf!g(J)FJl3)Pc+bu|W$uKy1)R5Qq;_
z2P(rsY!C*?fiS533!*_{Abd@ofk6RD0LFy$0zoPu_?rd;!wMt=Vd|Qp{)MPwV3-%o
zz_1Ugn*dV>T3P~QgVe^vGcc%t4$cR0kjwyIQUz+$Ld6>@7#P-r0szVfnE}F({w!3G
zfq_B4k%8eVQUHR~fMho#nGNEz%wu3E05PB#rVd1d;sPqnP%@8!!2onaE(4^a3W^U<
q9{|+O2E_$T-IApY3_eH#Aag)+g5drUhy}qPRxmIegfPJ*OdSBFJ$Q`(

diff --git a/src/examples/lab1test.c b/src/examples/lab1test.c
deleted file mode 100644
index 1b5aa2b..0000000
--- a/src/examples/lab1test.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/* I cleaned this file up a bit, but it is still not pretty. -- ME */
-#include <stdio.h>
-#include <string.h>
-#include <syscall.h>
-#include <stdarg.h>
-
-int main(void)
-{  
-  char *descr = "This is test program v0.1 that tests your implementation basic system calls\n";
-  char *test1 = "The first test is to create three files.\n";
-  char *test2 = "Now lets write some data to the files. Write some binary data to some files.\n";
-  char *test3 = "Test string that is written to a file.\n";
-  char *test4 = "Test to read back data from files.\n";
-  char *test5 = "Test to read from and write to bad file handles.\n";
-  char *test6 = "Get data from console. Please, write something (10 characters).\n";
-  char *test7 = "Test to open a file that does not exist.\n";
-  char binarydata[10];
-  char sbuf[50];
-  int file[3];
-  int num_bytes_read, i;
-
-  binarydata[0] = 1;
-  binarydata[1] = 2;
-  binarydata[2] = 3;
-  binarydata[3] = 4;
-  binarydata[4] = 5;
-  binarydata[5] = 0;
-  binarydata[6] = 1;
-  binarydata[7] = 2;
-  binarydata[8] = 3;
-  binarydata[9] = 4;
-
-  write(STDOUT_FILENO, descr, strlen(descr));
-  write(STDOUT_FILENO, test1, strlen(test1));
-  if (!create("test0", strlen(test3))) {
-    printf("Could not create test0\n");
-    halt();
-  }
-  if (!create("test1", 1024)){
-    printf("Could not create test1\n");
-    halt();
-  }
-  if (!create("test2", 1024)){
-    printf("Could not create test1\n");
-    halt();
-  }
-	
-  for(i = 0; i < 2; i++){
-    snprintf(sbuf, 50, "test%d", i);
-    file[i] = open(sbuf);
-    if(file[i] > 1){
-    }
-    else{
-      printf("Could not open %s\n", sbuf);
-      halt();
-    }
-  }
-	
-  write(STDOUT_FILENO, test6, strlen(test6));
-  num_bytes_read = read(STDIN_FILENO, sbuf, 10);
-  if(num_bytes_read != 10){
-    printf("Did not read 10 characters from the console.\n");
-    halt();
-  }
-	
-  write(STDOUT_FILENO, test2, strlen(test2));
-  write(file[0], test3, strlen(test3));
-  write(file[1], binarydata, 10);
-	
-  write(STDOUT_FILENO, test4, strlen(test4));
-  close(file[0]);
-  file[0] = open("test0");
-  num_bytes_read = read(file[0], sbuf, 50);
-  if(num_bytes_read != (int)strlen(test3)){
-    printf("Could not read back from test0 (%u),  %u characters read instead!\n", (unsigned int)strlen(test3), num_bytes_read);
-    halt();
-  }
-  
-  num_bytes_read = read(file[1], sbuf, 10);
-  if(num_bytes_read != 10){
-    printf("Could not read back binary data from test1\n");
-    halt();
-  }
-  if(!memcmp(sbuf, binarydata, 10)) {
-    printf("Data read back from test1 does not match what was written\n");
-    halt();
-  }
-  close(file[1]);
-	
-  write(STDOUT_FILENO, test5, strlen(test5));
-  write(87, "hej", 3);
-  num_bytes_read = read(1006, sbuf, 3);
-  if(num_bytes_read != -1){
-    printf("You should catch that I tried to read from file 1006\n");
-  }
-	
-  write(STDOUT_FILENO, test7, strlen(test7));
-  file[2] = open("fdsfa");
-  if(file[2] > 1){
-    printf(sbuf, "Got file handle when opening non-existing file\n");
-    write(STDOUT_FILENO, sbuf, strlen(sbuf));
-    halt();
-  }
-
-  printf("Test passed\n");
-  halt();
-}
diff --git a/src/examples/lab1test.o b/src/examples/lab1test.o
deleted file mode 100644
index 156d565b470d0a1952d96d5e71ce6d6eab75ed87..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7996
zcmb<-^>JflWMqH=Mh0dE1doBCMj9ex0;V(=BpAdQKJ&}{?)6b&X@2tIf8n3d&Zl9)
zfz59sj=A1rJmz|z>6q&S=3}l8S&q3rVm;>inBkb~6UJk%PnnLnK4U)S`kW;LWYmj4
z|NsAQKEe|K=4CO0`NvsQ0vH$=z-+J_h=-7?LCA4H^g&e$v>YfEYJS6$!3I+Sk$A(A
z!N9`6kRb;XZaxB6ssa;3RcZqh1}o)n>1SYI$YRKF0#Qc2v1@|C$~$FLAoStpBLdAo
z80%`Y7-4Ek*MvdjOrUCxLDfWpT(|^bK2JafhzIpw^AVmbu3pzQ0a-Br3pD@WDzO4-
zdI8e}HW(y=;d+qH3{MPo5{$^f3F1MmJI<nl6r4N(86Y0Sb5NJu3xN3JIEzXKiYXu-
z)D&1a9A^PJ2<C8}ETi7gH9-Mj*LEI8wMxM9Mu{TG3m^-@Dw>b*1P5gF!0dpCy<vfb
z2E+~E5acQW$MFSh3hxDg0sx}*h(IeeIs8FW$^$X&IE#t}6LPqKcu*gKJkOjF1B&i&
zsBt`5%pk)v-Z8`V2sHorUm6Ya#S#>QKs=~H$5~VoV9^0~K4YCt^Bazg3rq|Q80iR<
z*n^=OA-2BZ$;d$%E%16W$g(t;fnYTZAsLy)3Yo<UC8@<F3I#>^=|zdT3S|a*h6*Ja
zi6vm+Vui~5(jtY-+=86c+|<01#FEVXJcXph;>=`);>zNZ)Lez+#GIUBE>NBf$w*a5
z%PcB}Xa$>`uaI1nnpl#mP?AxU3X;u9E!G1m4guL&TvC*omkzNlvsj_LD6^y_HBX@=
zUm;N;Ei)%okBh-QwL~E$u_RF;ttdZNAvr&<I6o&<Paz;DHL*BV2dpJkp*TM`wIl;%
zl!l>!LUKl8QDSmQYEiK!*eV8>%oK&Z{1Szt)Wj486a^4dOEOa7CWGAOmtU@slUf3C
z5X5wd8%pvOKx#owE7ns8FUl-|$|hyzB^Fh}6@lCX_5hM!OY$N1CnY9lLllC21Tl+?
z!8yM)2g#LSRbU06$T3jRP%YKeQBY7VMe-fQyv)4flGMZ$MJ@)cW+1x^Zk{0*g9|83
z!2yD5m7zjPerho|xN;Lqk~0*_K}n%J5fT_Bsd-!s4B)tf`3G!hVqOX~DoXMdk`hzE
zo>$07%u9jAcVvF4LU9JzlgVIn!AZ<hp`<7?H3byoV7Gt`0|kkKp@D%JC@x@j<rk#p
zK~n`Jy}+HBT9H{?0*+|+{1Rk~70NSG^AtcDK`A3IKTj8|6vP2p!NmX$TBJ~eCDqj8
z5(9{=A$D0qh^!IV1l1HIMIhT0RExP7GE%b`(o%}k5+R{gkXT%tn!?4P&%ywzQ5YB)
zSQt|o7#Mh>7#J9$pcQ62Gbk4^FfcK)En;L~U}j;>%qwAFVquqL01Mt=WME)oV*Li9
zI9NeynHV{GK|Ch*qaccd-5F%E5d#AQBRi`ONCg7}1ISp$IW5c#46JG(8BR_Rn+<H)
zeAb<e3=E81P$5u#IiGbuNQfIM1S<3Av+{v7@<4?^CGULJCm>b4P$5v6KA*J-B*X_5
z0u_q$Szm#K_@P3e>S{jg2au2eOo)krVLmGl69WUIAV(K70|QfO9BT(ig%HOqW(Ef4
z(lzyL>p*;A_EpRb4D8+@wg@}Oa{^Ega%3_viim?mDi|0T3K$p|I6*bpE@lP>&PWCZ
zhGQTGD73*Mr7)331_lPO2&j&}1X8n@fq~&3h_Ql!f#DU1v5SF$0W5V6CUqGm^%N$>
z#K^$#4WyV06bCE}44i5(5j~iQD<jmdP)3-07#SG&K#Hpvp_bM&LM;VVWngDago%KX
z16X7^Ok@kpz#}jNLG>EgJNIEC?_i8yFvVO<P}_x=7#O5Lw#zXwFff4_x=c{_STjML
z>JMYYF+p9J%mj5|5lnGAOsWSaHIIpbK@DW!CYaQAnA8E7rDtF!-+{U3EsVjy40VPm
zGt?QX%uqKQf>H;_WG`l@dxBtU;$Ui$nV~K$fT?MMF+kY>6sHVaEUF9)4BQ|Bl)`w7
zK?w%J2c<AD-;jYDl%7E03Fb2~@G>xgav=i)lL!YdNDhRV6<B#^GcquMFtaopuQ>w)
z0|>JSv+~+8Fff2Hvp5@XB_jg^2(yT=@`^ApFn}<#EGsWN69WSXGt0B`Zf0a)0AXfj
zHeOIPgD?{pD+8k-qbi>;H#46!pCF?Un}9e21Ct5^H@6)(Gamy3GnC1}z`&x%XfMgk
zXT@#JZON@J=_w3S?jSMUNs>{Rfq~V80Vd}u%p}3Uz=kZqz`%~oWfI@+B+kIVVZy-7
z0Wr^07%Ilu*~G{o$Y?0cz`(`Nz|HL`%)r3S$ml5yvV=#G!BbeDn}LB>kHKEjMlz2N
zW+ybOB2%f*Kw)GE0QnW<cSeQ)eI^D5D^PL35CEb;DUFdK7(}%}L_sNS3WNztEF8=X
z42%o`poq_hFyVGEF)@MS>;ovkK^c+3V7>?=1A_&aZ8#r9gYp~`gVB7D13(D`#D?jY
zfy6hcM1=`~%TgEz)H-Blhyaz0jKBGK85kMC{UA{Jq^GB!lbOT-q4Z0OQ;QfFauSma
zK{bwEGROc((?>4@)LAO7ECw~A^fEw6thgj4Gan+(z{<$L3i1JiBr7vVx-bHWunMv<
zvNE%IQ;GKBn8>k~m4l6um5pNpD=S;+Nmk}4C|>~!e-noyD?b|}D=XW4R(3Gm%qq&q
z%E!pcDvU10z{JAD*32pjqWM_)Kolb@Gl*j5W&}|jyIDm*G{{F_`ZFslm}X>aKFORL
zagvptnKObzn3b8CJA&;5+h>mX&p6gLv+{y8u<d3Q0n;49tg;}N>|!frO$0GcusvmE
zj)uxUWo2ap83*zfI~!vYE9*RnCns^N<q(D{;?M`FVr6D)<Jb*19juQ-n8TL2B7*G%
zD>EB2cf?61Rt84Kocz3W1uy}srb|+bON<#n^*=*tUU6o6UTTU0NIWIAIJt-c)U-`y
z$W6@5V<;%f%qvM_$Vkj7VF2p}6DWF+l8U=usDiVlrGllNv7Ui~ZmzMBf^Kecep-oc
zT26jqiGpr!NoiiHZF*{6YEfpgf^KeNQF4ZDrkRDAf^K?xN|J)Ezk+UYNs4WHUa6&}
zf^J$~zHWYQW{GZEQDSbYZb5!#UP)?^f^J$`QEF;&Nn&0KsC@)hmYJ86nU@ODQUEd=
zq_?;vF*#eepeVm2HMt}oq%pC$GA}u!C_gX1v{<(^uRJp^MYkj|DJQj9K{pMeJUJ(^
zI0L2$)Pc}VOHM=LGvt-##wS&lq!!16nt=@Z8Tq-X`q`;@CHe)Kc_sP9`o%@b`l%I(
zpl(PpLvbE73_)RT%21qCnuZ8-Q0t!o(vo8UvvX5(lXD9gKutb|<edECRB)@!5KI~|
z6ldfYl_;QuJ~Z;cnn5<0fR&noNpq+MP|OyW6y>DmF@Rm11nvNUIw}kd?#|9u3L2qF
zrFkW#ka*KIG%p2n4eN{y^bAZiA;O??fCbbDWME(bHRs&@LO~_K0gxD|bq1;>Kx!DP
zf*2TUI2fgQSXe+!BMk-y22kMyk^>c53?4j;4DJG~Or;F2{LG~#Yyxadr8NS~Or@aq
z5J(jQLz|jl0Tzaj|G^9>fjV--z`zVDU!ig!iW%B;1+hVx8SH8h3xb&$K;tJ6Hi%?q
zU<Xlf%*?<EXM-5b44@W1hy}sS4BQX~lw@Y$g|Z+NGXp<_0VSCk1feVl#mpcCVL(Y{
z24N@*LNPN4Fz`T_;DTI;ff2<7P<v7WDi5MSe9+Jjhz-IZKB(3Qu|XKb2el$VY!C+V
zwLlCg2Ju0S3n-TX#J7NP7#P5OTQokX0S^-bsYk9hz{LkN)j<jrXgUX%CGcDUE`z|S
z5|Z4Z8GwPo0aR77GBCJ;DmEbo20ti26vP*1U;vF;FtRc*B!c)tpm8e(1`xjx#202@
z0Hr1nzZS$7Vqj<k>1ShL=mzmc7#L<j`SU@1Q3eK3bDv3!fng(5d>cqygn{8Glz$4u
z7iC~L52D2w816vDAA<NI3=E&4{C^<6I0FM4sN$AjU=RmYv1|+sN+7;C1A`WbmSAA8
z0g1CRFgSwvLJSOEP<|kYFU-J@2%;q!7z&}{WgxyN14A{47Gq#&28pvVFo5zHlPCiN
zxN9ZGz%UakJ`bc$l!0L}h!$gDSPc?qWnkC<;tMe_fV)zx3=9WAd|?KL<52lCAifX-
z!&NB%Hi$3GzyRtSF$ps;e1wXFJ9a`04F92gHc;DKn1O*0L`yL+h=N)@Yzz!iAie|x
zgC>ZUWMD7?iL){=n1lF23=D2izBiN~3gt(E_@WF9@gQ1^fguk>OENIjLFJo4d{G95
z4iGKIz%UC$OEWO6gvzf2@kJRJHiKv}28KN#T8e?;FjW2oh%dyza1qMC0pbfYFgybB
z*%%mJLiv9{v?K!q52(Gy%D^B9YS;@gFi1i9iXgr)1A_*L&&I%@3*t*KFxZ0ltPBip
zAigLAgCB?%Vqk~@(ZUQ2@gQ1^fgv5LE(gRHWnicT@!1#{>Y)5)5G}?4F0B|j7{Fx$
zBM$?(ECA7>pmfK>zyRuYGcqwSD1!Lh3=E)h7bI^6;`1;tfbuSg?*ip}L+KzW4eEP>
z<U!+jAR5#K1<{}$D#+Y=sJb2y&C0+q2}JWSFo5z8D4#8b@;8BKRtAP0Aesl7e^?n9
zPDA-OKr|}@!#xnq!@%$wM6)t5d<4-v3=E+B12T^Vl&(Pj1ktR}e8j`R0P3!S++_w5
z=V4%Qg3`Vqnv;P6lz$jG85rWB{A4H%>hy#B0nSfM3=E*2EQk-zM@$S1pnfcfKNX~&
ziGcx>e?WXtV;e++@(qXv=Nl#lhC@(wr=j!}D18@7KZDZmq4W<Z4Kf3SLA_fLEeuL;
zObiS%P+ApA>p^KyJ^`t7fbu<|bP$w|hSDieIu}ZpLFsxZ4az4Vb0$Lhp!@>jFNX5h
zK<TYedLNWN4y8duxghm7p?q*YVPar-4ds7<(tn{eXvhYno*$H+nHU%(pfo7IfW)<+
zd}AnW1EpP|G$_A-)P+O&2~au{N*6)tYAC%MMDs8(?1$3Fq4a4eeHlt$htl_<^kXRf
z8cM&1(%+%<Zz#>o!oUDZckED_A4&^DX=x}e52e+iv^JCmwKf>pA@wN8U+JLq&cwi=
z0IDxQ{U*KQ%G{E~BnG|Wk|GG50b>=V=IE8AR+KR4fg5dlNyWtsdPVsl4oJ13o(U?~
zkU<ZmB_%bfG(A2uFD;)z55i7NN-9b%gYk0mlaUoB7A5ATr-DpQ&4H>1wW(pMi%W_a
z^pf*)K_lx7dU^RJse0~yp}OEkGnAj6SE^S~lwXiqR8k2sIW;35+;)ex5(v}spm1S;
zly@N2pt(43yAi~J%7K`msX9;#4b)Bm@z)45FbFU+Fo4TLXg8RHfq?<k<^i=ML2Xo!
zI#4<R(J%~>1F^Lk7#Kk638^!Hx&bt93DUO*qydCM9H_k@GwspUu`w_dL)CyNkQxvM
zm%ktZDAs3ZU@!(Xs-b+48W0oI{z3Nd9x(=n15p2hTCN~1Aos^X?FH!p;UsPbhLa!$
z6vNERK~tyA!@#fsss=>C)K#OYyUhbhvmiAf3{zLmzyNMB!{Vbx3X;}A@d0Wn!`#=0
zX5Md5BNvqZL53m8b)lKpBL#^cka?h%Hq1P5JC1>Y0TeGFBYyKSFo>g>2XZ60enL_w
zB*?%3igS=25C*9M;dMxE0Eye8Hrqi%ARu9eeGClX9s|rO2SG$X2c!VxJ`jBsY935o
zj35I8s163nfiO(nMKu3TLGmxCX8=+MieHc$VP=8!FA#*Z;lvmqZ32)wP+J_7R*;e<
gLxL~^gBM5x6obqGF+tu#RyRkAf#E(#0*Ybk09FIaa{vGU

diff --git a/src/examples/lab1test2 b/src/examples/lab1test2
deleted file mode 100755
index a5e4757d688c3e6b40bbc01b5d0fddc63cb34149..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 45652
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

diff --git a/src/examples/lab1test2.c b/src/examples/lab1test2.c
deleted file mode 100644
index 00ad849..0000000
--- a/src/examples/lab1test2.c
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
-  Complete test suite for most system calls implemented in lab 1.
-
-   This program tests the minimum file limit and verifies all
-   returned data.
-
-   Tested requirements:
-     - write must return number of bytes written
-     - create must return whether the file was created
-     - a user program must be able to have 128 files open
-       at the same time
-     - opening a file must return a valid file descriptor
-     - opening a file mulitiple times must return unique
-       file descriptors
-     - reading from a closed file must fail
-     - reading from an invalid file descriptor must fail
-     - attempting to open missing files must fail
-     - read must return number of bytes read
-     - read after write must return written data
-     - reading from console be implemented
-     - exit must terminate the user program
-
-   Untested requirements:
-     - halt must shut down the system
-     - file descriptors must be closed on process exit
-*/
-#include <stdio.h>
-#include <string.h>
-#include <syscall.h>
-#include <stdarg.h>
-
-#define FD_TEST_COUNT 128
-#define READ_SIZE 50
-#define READ_CONSOLE_COUNT 10
-
-#define RED   "\x1B[31m"
-#define GRN   "\x1B[32m"
-#define YEL   "\x1B[33m"
-#define BLU   "\x1B[34m"
-#define MAG   "\x1B[35m"
-#define CYN   "\x1B[36m"
-#define WHT   "\x1B[37m"
-#define RESET "\x1B[0m"
-
-#define TITLE(x) printf(WHT x RESET)
-#define ERROR(x, ...) printf(RED "ERR: " x RESET, ##__VA_ARGS__); halt()
-#define SUCCESS(x) printf(GRN x RESET)
-
-int main(void)
-{
-  char *dummyprint = "Hello, world!\n";
-  char *testdata = "sample file content";
-  bool created;
-  int fd;
-  int bytes_written;
-  int bytes_read;
-  char sbuf[READ_SIZE];
-
-
-
-  TITLE("TEST 1: Printing text\n");
-  bytes_written = write(STDOUT_FILENO, dummyprint, strlen(dummyprint));
-  if (bytes_written < 0 || (size_t)bytes_written != strlen(dummyprint))
-  {
-    ERROR("Incorrect number of written bytes returned from SYS_WRITE.\n");
-  }
-  else
-  {
-    SUCCESS("TEST 1: Passed\n");
-  }
-
-
-
-  TITLE("TEST 2: Creating file\n");
-  created = create("test0", strlen(testdata));
-  if (!created)
-  {
-    ERROR("Could not create file \"test0\", does it already exist?\n");
-  }
-
-  created = create("test0", strlen(testdata));
-  if (created)
-  {
-    ERROR("Succeeded in creating already existing file.\n");
-  }
-
-  SUCCESS("TEST 2: Passed\n");
-
-
-
-  TITLE("TEST 3: Opening files\n");
-  int file_descriptors[FD_TEST_COUNT];
-  int i;
-
-  printf("Opening %d files", FD_TEST_COUNT);
-  for (i = 0; i < FD_TEST_COUNT; ++i)
-  {
-    fd = open("test0");
-    if (fd == -1)
-    {
-      printf("\n");
-      ERROR("Failed to open file, iteration %d.\n", i + 1);
-    }
-
-    if (fd == STDIN_FILENO || fd == STDOUT_FILENO)
-    {
-      printf("\n");
-      ERROR("Opened file with invalid file descriptor.\n");
-    }
-
-    int j;
-    for (j = 0; j < i; ++j)
-    {
-      if (file_descriptors[j] == fd)
-      {
-	printf("\n");
-        ERROR("Opened file with reoccuring file descriptor.\n");
-      }
-    }
-
-    file_descriptors[i] = fd;
-    printf(".");
-  }
-
-  printf("\nDone!\n");
-  printf("Closing files");
-
-  for (i = 0; i < FD_TEST_COUNT; ++i)
-  {
-    close(file_descriptors[i]);
-    bytes_read = read(file_descriptors[i], sbuf, READ_SIZE);
-    if (bytes_read != -1)
-    {
-      printf("\n");
-      ERROR("Successfully read from closed file.\n");
-    }
-
-    printf(".");
-  }
-
-  printf("\nDone!\n");
-
-  bytes_read = read(STDOUT_FILENO, sbuf, READ_SIZE);
-  if (bytes_read != -1)
-  {
-    ERROR("Successfully read from missing file descriptor.\n");
-  }
-
-  fd = open("foobar");
-  if (fd != -1)
-  {
-    ERROR("Successfully opened missing file.\n");
-  }
-
-  SUCCESS("TEST 3: Passed\n");
-
-
-
-  TITLE("TEST 4: Writing to file\n");
-  fd = open("test0");
-  bytes_written = write(fd, testdata, strlen(testdata));
-  if (bytes_written < 0 || (size_t)bytes_written != strlen(testdata))
-  {
-    ERROR("Failed to write %d bytes to file, wrote %d.\n", strlen(testdata), bytes_written);
-  }
-  close(fd);
-
-  SUCCESS("TEST 4: Passed\n");
-
-
-
-  TITLE("TEST 5: Reading from file\n");
-  fd = open("test0");
-  bytes_read = read(fd, sbuf, READ_SIZE);
-  if (bytes_read < 0 || (size_t)bytes_read != strlen(testdata))
-  {
-    ERROR("Failed to read %d bytes from file, read %d.\n", strlen(testdata), bytes_read);
-  }
-
-  if (memcmp(sbuf, testdata, strlen(testdata)) != 0)
-  {
-    ERROR("Read content does not match what was written to file.\n");
-  }
-  close(fd);
-
-  SUCCESS("TEST 5: Passed\n");
-
-
-
-  TITLE("TEST 6: Reading from console\n");
-  printf("Type 10 characters: ");
-  bytes_read = read(STDIN_FILENO, sbuf, READ_CONSOLE_COUNT);
-  printf("\n");
-  if (bytes_read != READ_CONSOLE_COUNT)
-  {
-    ERROR("Failed to read %d characters from console, read %d.\n", READ_CONSOLE_COUNT, bytes_read);
-  }
-  printf("You have typed: %.*s\n", READ_CONSOLE_COUNT, sbuf);
-
-  SUCCESS("TEST 6: Passed\n");
-
-
-
-  TITLE("The test suite should now exit. Since SYS_WAIT is not implemented yet, the program should hang. ");
-  TITLE("If it does, it means that all tests were successful.\n");
-  exit(0);
-
-  ERROR("ERR: Thread did not exit.\n");
-}
diff --git a/src/examples/lab1test2.o b/src/examples/lab1test2.o
deleted file mode 100644
index 5d3a9254062ce7300c22502d1636b2819337a35c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 9980
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

diff --git a/src/examples/lab2test.c b/src/examples/lab2test.c
deleted file mode 100644
index 1b5aa2b..0000000
--- a/src/examples/lab2test.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/* I cleaned this file up a bit, but it is still not pretty. -- ME */
-#include <stdio.h>
-#include <string.h>
-#include <syscall.h>
-#include <stdarg.h>
-
-int main(void)
-{  
-  char *descr = "This is test program v0.1 that tests your implementation basic system calls\n";
-  char *test1 = "The first test is to create three files.\n";
-  char *test2 = "Now lets write some data to the files. Write some binary data to some files.\n";
-  char *test3 = "Test string that is written to a file.\n";
-  char *test4 = "Test to read back data from files.\n";
-  char *test5 = "Test to read from and write to bad file handles.\n";
-  char *test6 = "Get data from console. Please, write something (10 characters).\n";
-  char *test7 = "Test to open a file that does not exist.\n";
-  char binarydata[10];
-  char sbuf[50];
-  int file[3];
-  int num_bytes_read, i;
-
-  binarydata[0] = 1;
-  binarydata[1] = 2;
-  binarydata[2] = 3;
-  binarydata[3] = 4;
-  binarydata[4] = 5;
-  binarydata[5] = 0;
-  binarydata[6] = 1;
-  binarydata[7] = 2;
-  binarydata[8] = 3;
-  binarydata[9] = 4;
-
-  write(STDOUT_FILENO, descr, strlen(descr));
-  write(STDOUT_FILENO, test1, strlen(test1));
-  if (!create("test0", strlen(test3))) {
-    printf("Could not create test0\n");
-    halt();
-  }
-  if (!create("test1", 1024)){
-    printf("Could not create test1\n");
-    halt();
-  }
-  if (!create("test2", 1024)){
-    printf("Could not create test1\n");
-    halt();
-  }
-	
-  for(i = 0; i < 2; i++){
-    snprintf(sbuf, 50, "test%d", i);
-    file[i] = open(sbuf);
-    if(file[i] > 1){
-    }
-    else{
-      printf("Could not open %s\n", sbuf);
-      halt();
-    }
-  }
-	
-  write(STDOUT_FILENO, test6, strlen(test6));
-  num_bytes_read = read(STDIN_FILENO, sbuf, 10);
-  if(num_bytes_read != 10){
-    printf("Did not read 10 characters from the console.\n");
-    halt();
-  }
-	
-  write(STDOUT_FILENO, test2, strlen(test2));
-  write(file[0], test3, strlen(test3));
-  write(file[1], binarydata, 10);
-	
-  write(STDOUT_FILENO, test4, strlen(test4));
-  close(file[0]);
-  file[0] = open("test0");
-  num_bytes_read = read(file[0], sbuf, 50);
-  if(num_bytes_read != (int)strlen(test3)){
-    printf("Could not read back from test0 (%u),  %u characters read instead!\n", (unsigned int)strlen(test3), num_bytes_read);
-    halt();
-  }
-  
-  num_bytes_read = read(file[1], sbuf, 10);
-  if(num_bytes_read != 10){
-    printf("Could not read back binary data from test1\n");
-    halt();
-  }
-  if(!memcmp(sbuf, binarydata, 10)) {
-    printf("Data read back from test1 does not match what was written\n");
-    halt();
-  }
-  close(file[1]);
-	
-  write(STDOUT_FILENO, test5, strlen(test5));
-  write(87, "hej", 3);
-  num_bytes_read = read(1006, sbuf, 3);
-  if(num_bytes_read != -1){
-    printf("You should catch that I tried to read from file 1006\n");
-  }
-	
-  write(STDOUT_FILENO, test7, strlen(test7));
-  file[2] = open("fdsfa");
-  if(file[2] > 1){
-    printf(sbuf, "Got file handle when opening non-existing file\n");
-    write(STDOUT_FILENO, sbuf, strlen(sbuf));
-    halt();
-  }
-
-  printf("Test passed\n");
-  halt();
-}
diff --git a/src/examples/lab2test.o b/src/examples/lab2test.o
deleted file mode 100644
index 04c14aeeea4ebce6a3afbf1537b44440f6269681..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7996
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

diff --git a/src/examples/lab2test_beta.c b/src/examples/lab2test_beta.c
deleted file mode 100644
index c786de8..0000000
--- a/src/examples/lab2test_beta.c
+++ /dev/null
@@ -1,112 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <syscall.h>
-#include <stdarg.h>
-#include "debug.h"
-
-void fail(void);
-
-int main(int argc UNUSED, char ** argv UNUSED)
-{  
-  char *test_string = "This is a string that is written to a file.\n";
-  char byte_array[10] = {0,1,2,3,4,0,1,2,3,4};
-  char sbuf[50];
-  int file[3];
-  int num_bytes_read, num_bytes_written;
-
-  printf("\n");
-  printf("*****************************************************************\n");
-  printf("* This program tests your implementation of basic system calls. *\n");
-  printf("*****************************************************************\n\n");
-
-  printf("The first test is to create three files.\n");
-  printf("(Make sure that you have deleted any test files from previous test runs.)\n");
-  if (!create("test0", (int)strlen(test_string)) || !create("test1", 256) || !create("test2", 256)) {
-    printf("Could not create the testfiles.\n");
-    fail();
-  }
-	
-  file[0] = open("test0");
-  file[1] = open("test1");
-  file[2] = open("test2");
-
-  printf("Got file descriptors: %d, %d and %d\n", file[0], file[1], file[2]);
-
-  if (file[0] < 0 || file[1] < 0 || file[2] < 0) {
-    printf("Could not open the test files.\n");
-    fail();
-  }
-	
-  printf("\nTesting to read from console. Type 10 characters, please.\n");
-  num_bytes_read = read(STDIN_FILENO, sbuf, 10);
-  if (num_bytes_read != 10) {
-    printf("Did not read 10 characters from the console.\n");
-    fail();
-  }
-  printf("This is what you wrote: \"%s\"\n", sbuf);
-	
-  printf("\nTesting to write data to files.\n");
-  write(file[0], test_string, strlen(test_string));
-  write(file[1], byte_array, 10);
-	
-  printf("\nTesting to read data back from files.\n");
-  /* Reopening to reset seek position. */
-  close(file[0]);
-  file[0] = open("test0");
-  num_bytes_read = read(file[0], sbuf, 50);
-  if (num_bytes_read != (int)strlen(test_string)) {
-    printf("Could not read back from test0 (%d),  %d characters read instead!\n", (int)strlen(test_string), num_bytes_read);
-    fail();
-  }
-  
-  close(file[1]);
-  file[1] = open("test1");
-  num_bytes_read = read(file[1], sbuf, 10);
-  if (num_bytes_read != 10) {
-    printf("Could not read back binary data from test1\n");
-    fail();
-  }
-  if (memcmp(sbuf, byte_array, 10) != 0) { /* memcmp returns 0 if the data are identical */
-    printf("Data read back from test1 does not match what was written.\n");
-    fail();
-  }
-  close(file[1]);
-	
-  printf("\nTesting write with a bad file descriptor.\n");
-  num_bytes_written = write(file[1], "FOO", 3);
-  if (num_bytes_written != -1) {
-    printf("Writing to a closed file should not be possible.\n");
-    fail();
-  }
-
-  printf("\nTesting read with a bad file descriptor.\n");
-  /* Assuming here that 424242 is a bad file descriptor. */
-  num_bytes_read = read(424242, sbuf, 3);
-  if (num_bytes_read != -1) {
-    printf("Writing to a bad fd should not work.\n");
-    fail();
-  }
-	
-  printf("\nTesting to open a non-existing file.\n");
-  file[2] = open("this.file.does.not.exist!");
-  if (file[2] > 1) {
-    printf("Got file handle when opening non-existing file.\n");
-    fail();
-  }
-
-  printf("\n");
-  printf("*****************************************************************\n");
-  printf("*                 Tests passed; halting machine.                *\n");
-  printf("*****************************************************************\n\n");
-  halt();
-  return -1;
-}
-
-void fail(void)
-{
-  printf("\n");
-  printf("*****************************************************************\n");
-  printf("*                          TEST FAILED                          *\n");
-  printf("*****************************************************************\n\n");
-  halt();
-}
diff --git a/src/examples/lab3test1 b/src/examples/lab3test1
deleted file mode 100755
index 3ec42a97857684d64e99c8b4e3bc14882dd3a7b0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 40952
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

diff --git a/src/examples/lab3test1.c b/src/examples/lab3test1.c
deleted file mode 100755
index a0070c3..0000000
--- a/src/examples/lab3test1.c
+++ /dev/null
@@ -1,17 +0,0 @@
-#include <stdio.h>
-#include <syscall.h>
-
-//compile it, copy to the pintos virtual disk an call this program with arguments using the command
-// pintos --qemu -- run lab3test1
-//if lab 3 is correctly implemented this program should call itself in an infinite loop and spawn itself as a child process indefinetly
-//the PID of each child process created should be printed to the screen
-// In order to see if your implementation works check if the PID of each new  child process is incremented as it should
-
-int
-main (int argc, char *argv[])
-{
-  int pid=exec("lab3test1");
-  printf("Child process ID: %d",pid);
-
-  return EXIT_SUCCESS;
-}
diff --git a/src/examples/lab3test1.o b/src/examples/lab3test1.o
deleted file mode 100644
index f4d5df2cf038a0123ba9759c8eaf93432924c07e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2984
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

diff --git a/src/examples/lab3test2 b/src/examples/lab3test2
deleted file mode 100755
index 3654b8b1514631c722b891afd53f575c8381b163..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 41176
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

diff --git a/src/examples/lab3test2.c b/src/examples/lab3test2.c
deleted file mode 100755
index 255deae..0000000
--- a/src/examples/lab3test2.c
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <stdio.h>
-#include <syscall.h>
-
-//compile it, copy to the pintos virtual disk an call this program with arguments using the command
-// pintos --qemu -- run lab3test2
-//if lab 3 is correctly implemented this program should call printf 5 times, and spawn a child process for each of these calls
-//the PID of each child process created should be printed to the console.
-// In order to see if your implementation works check if the string "You got it, use your debugging skills during the labs!" is printed 5 times and if the PID of each new child process is incremented as it should
-
-
-int
-main (int argc, char *argv[])
-{
-
-  int pid=-1;
-  for(int i=0;i<5;i++)
-	{
-	pid=exec("printf");
-  	printf("Child %d process ID: %d\n",i,pid);
-	}
-
-  return EXIT_SUCCESS;
-}
diff --git a/src/examples/lab3test2.o b/src/examples/lab3test2.o
deleted file mode 100644
index 7ce15490fe46274e5016fef035323599e1fc50d1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3272
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
BmFWNg

diff --git a/src/examples/lab4test1 b/src/examples/lab4test1
deleted file mode 100755
index 651a2325bf666a24bdded4ea0a75c3a31f036dfc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 41056
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
P**Odh2O&%_2~!6EaEw#!

diff --git a/src/examples/lab4test1.c b/src/examples/lab4test1.c
deleted file mode 100755
index 0feedd6..0000000
--- a/src/examples/lab4test1.c
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <stdio.h>
-#include <syscall.h>
-
-//compile it, copy to the pintos virtual disk an call this program with arguments using the command
-// pintos --qemu -- run 'lab4test1 arg1 arg2 arg3'
-//if lab 4 is correctly implemented the arguments should be printed to the console
-// try it wih different arguments and different number of arguments
-
-int
-main (int argc, char *argv[])
-{
-
-  for(int i=0;i<argc;i++)
-	{
-	  printf("Parameter: %d: %s \n",i,argv[i]);
-	}
-
-  return EXIT_SUCCESS;
-}
-
-
diff --git a/src/examples/lab4test1.o b/src/examples/lab4test1.o
deleted file mode 100644
index e5f6b193fa7af081474e3475f5ad86c1b32468b8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3088
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
bA&3paAag)8sI*2_w}PF4;Q~kkiec&i6pDo&

diff --git a/src/examples/lib/.gitignore b/src/examples/lib/.gitignore
deleted file mode 100644
index a438335..0000000
--- a/src/examples/lib/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.d
diff --git a/src/examples/lib/arithmetic.o b/src/examples/lib/arithmetic.o
deleted file mode 100644
index 2ef0fa1cf12d8a106e2942b2f6d06fb09f899260..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7572
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

diff --git a/src/examples/lib/debug.o b/src/examples/lib/debug.o
deleted file mode 100644
index 1f8424106ee5161b24a98bb831cfdf4f29de67f0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3380
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

diff --git a/src/examples/lib/random.o b/src/examples/lib/random.o
deleted file mode 100644
index c78cf8ef35da68c20aec2144d05c7a209ca37c0f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5152
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

diff --git a/src/examples/lib/stdio.o b/src/examples/lib/stdio.o
deleted file mode 100644
index db5d947b01e3d1ca6b78bccf12a28943ac47dc2a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20632
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
Ug8E*_>QcNJ7=D5zpctkO06-53KmY&$

diff --git a/src/examples/lib/stdlib.o b/src/examples/lib/stdlib.o
deleted file mode 100644
index b0f82af1ca63339f92b041d2412d41aab370f071..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 10572
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

diff --git a/src/examples/lib/string.o b/src/examples/lib/string.o
deleted file mode 100644
index 294e16473c4d033d26ae98880be4ea716b8a8878..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 16504
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
A82|tP

diff --git a/src/examples/lib/user/.dummy b/src/examples/lib/user/.dummy
deleted file mode 100644
index e69de29..0000000
diff --git a/src/examples/lib/user/.gitignore b/src/examples/lib/user/.gitignore
deleted file mode 100644
index a438335..0000000
--- a/src/examples/lib/user/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.d
diff --git a/src/examples/lib/user/console.o b/src/examples/lib/user/console.o
deleted file mode 100644
index d838b3470d6e9c262d0f3ebc70d975e489a116d3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5228
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
RgRIU%fPvv4NCJvs>Hz(R`Op9W

diff --git a/src/examples/lib/user/debug.o b/src/examples/lib/user/debug.o
deleted file mode 100644
index e686a57337920fb156199591096f092a6e6a0117..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3492
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

diff --git a/src/examples/lib/user/entry.o b/src/examples/lib/user/entry.o
deleted file mode 100644
index f4b9e2bbb18e45b95f4061dc9e3459aa71f71bc2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2428
zcmb<-^>JflWMqH=Mh0dE1doBigbgBN0;V(=L>WXFKJ&}{4()u}{6^q^DbN2>ju(Ia
z|Nq~~q5`I8GcYi)fEBYaYBMk}@F*}cFz|o{7#L)sG!qMJW?l&cGl<K`4z>>@#W<%J
zq+5`Yfq{{oSCxT*foUQGiwT%336f%($igbhz`)SPz`(!?(lH5S0vk&u0|NsaOFaVv
z13M#|G$R88hZrLR0|+xRvvRP5#6gBhurV+SGOF?kb2IZv^9eEvu?dJXFfgewaC6&n
zGjlL7FzYeeOEU9Waa(g+a;r;%R5(aXcamfjW?*1pWq`?e3NuMCFtBzuF)|1;8VWNo
zu<<i+b9)LiFt9_-;$vXo&||Qdw2{o?gXv;mV2}a10_0?95P_H=Z-8hJ4q{+nU}i99
zU|?Wm{LRP9zzB&NPyp!Z>E~o7>6aF#7BMiS=9Lsx>Lr6>s<^T^IWZ?kF9XD3U}a=r
zWdfNb$;Qaa%r>7%n1PWozPKc@sDvT4BC~`+KO;XkRX;m5uSCBfGp{7SSiiU^SwFQR
zF}ENmwV1)(FI2(V(o(@v&sfhuK{wafNI^HZI6tjKH!UYWu|z>Px1=;L)iymfFSRH$
zSwS~9u_!siHq*?)OhGq2Jtav&*Iz-mxFp3kJ+IW#Qb9K@FJCu5H?u@Httc@!Rkt8N
zGp{7INI^F(ttd6MxFj(zB{MG_qAW8nCo?Y<!Y%-r4bod&l9-&WTTql=lA2tS57L-e
zT$z`gQIwyTUs|kNnpd8gm!eyen3R)Rte~3)QJ$QWSeyaVl$oEWpqrMQhQwz`EJ{yi
z$W6@5V@S?OEMh<kT76i^CKjcaF)+A0J6kDegeH~dm6SrlMAy)~6wEcOGcwRKFwukv
zgX0sF%2^p0K!M1>#K3R>lnp>hTm%#$pg64xVqmP{V3g)zVd-FGV32^O2#_>56}a+o
zv@$vIg3JJkA!BeJfeNrNeEbh(f+^G-3rayCTftIbf*I^OFcVBLGoaeQ%mB(EU@0)c
z%)kMrVFWV+7mNv}nc?{v%w=F^;Da!rBr^j)lm(%f83Z5<D9Oyg%fJa`gZwSTz=)y(
zq#BgVp-Lcfu!w;sW^n9*Q#1pEAShSyGcZVkXaNQWP?5#R1}SwIIU({O8e}Gj2B~9Y
zVqj1N#R&%kgD!~XWMBZ5aUgMLC?Av?LFyAhd?p5lEGXRsqB$8D+M#qel%5Qwr$cG5
zJ6IXO?gyFc1`=mtU{C<L6O>E!iYs$V5|bG8ic5+hbOwx7l$xVgl3G#1pqG+ZlE|Q!
zR9wuU2NFz4O)5=~&&*59XV8PN6O)pPQp=EK6N?h_(o<11fbtehLvcwFgI;oeZf<H`
z34>l<eo3mHyI-g-IP*aH>3OAk1x5J<sYNA~5R+3g;=y?s7AZu~@*w|$N@l29Q22u4
z8_ES2SRl4E0|PicIDj||3=BtDAYmp1)ep)?pcDzJ5J33=mbwF>>R}W}4#WmkJ0SIh
z)PdXs(*x26GH*VJ0mU#m12p$tVPRnCU|?VXxet_+VD1CCAEpOn#0LfjhB^=fieYl#
zbOjXyQF)AzGy!6RFif2vn!Pd5v;?vj<Ug3bsnBo&=>_3FMh1p35Ce)~=7G{NDBpqH
z36jcTWdP@Nka?gS4l}P1Y97enAazd|85k^KhCt;&+!`nwrcRcbfdLfuAUz-qQUk)R
zP<0?N5cYsY42XjyHx*V-L&ZVrKs6?m3opgiK=pvK5J)bC8IpHFY!C+d14OSt3%?R1
z|ANXGkUCH}g4_r*3#4xbGXsMFBLjml0|U5Z1E~Y42ZbH7(^s%CFi3$kKrzT15EE1$
RA*-ulWnkC_l7M2EIsi!W8*u;t

diff --git a/src/examples/lib/user/syscall.o b/src/examples/lib/user/syscall.o
deleted file mode 100644
index e78cea01127cef18fd06b2ebbb6b2dfd736b3bba..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 8644
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

diff --git a/src/examples/libc.a b/src/examples/libc.a
deleted file mode 100644
index fd19a0f43f04f626806d0184a4b454aab8b8b00e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 82520
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

diff --git a/src/examples/lineup.c b/src/examples/lineup.c
deleted file mode 100644
index 60402d0..0000000
--- a/src/examples/lineup.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* lineup.c
-
-   Converts a file to uppercase in-place.
-
-   Incidentally, another way to do this while avoiding the seeks
-   would be to open the input file, then remove() it and reopen
-   it under another handle.  Because of Unix deletion semantics
-   this works fine. */
-
-#include <ctype.h>
-#include <stdio.h>
-#include <syscall.h>
-
-int
-main (int argc, char *argv[])
-{
-  char buf[1024];
-  int handle;
-
-  if (argc != 2)
-    exit (1);
-
-  handle = open (argv[1]);
-  if (handle < 0)
-    exit (2);
-
-  for (;;) 
-    {
-      int n, i;
-
-      n = read (handle, buf, sizeof buf);
-      if (n <= 0)
-        break;
-
-      for (i = 0; i < n; i++)
-        buf[i] = toupper ((unsigned char) buf[i]);
-
-      seek (handle, tell (handle) - n);
-      if (write (handle, buf, n) != n)
-        printf ("write failed\n");
-    }
-
-  close (handle);
-
-  return EXIT_SUCCESS;
-}
diff --git a/src/examples/lineup.o b/src/examples/lineup.o
deleted file mode 100644
index d3178e42f7786e50ff86f5a265bf3d39b305c795..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4964
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

diff --git a/src/examples/longrun.c b/src/examples/longrun.c
deleted file mode 100644
index e3399f0..0000000
--- a/src/examples/longrun.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/* Start a lot of processes and let them finish to test if we
- * eventually run out of process slots.
- * To run the test effectively, if you have a limit on number of
- * processes, lower the limit to 5 processes and run this test like
- *
- *  'longrun 5 400'
- *
- * It will fill (and if it works empty) your process table 400 times
- * :-)
- *
- * Note that some pintos tests requires at least 16 simultaneous
- * processes to work, so be sure to increase the limit before running
- * pintos tests.
- */
-
-#include <syscall.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-#define MAX_SIMULTANEOUS 50
-#define MAX_REPEAT 1000
-
-int main(int argc, char* argv[])
-{
-  char cmd[15];
-  int pid[MAX_SIMULTANEOUS];
-  unsigned i = 0;
-  unsigned j = 0;
-  unsigned simul = 0;
-  unsigned repeat = 0;
-
-  if (argc != 3)
-  {
-    printf("Usage: %s simultaneous repeat\n"
-           "Where 'simultaneous' is the number of simultaneous processes to \n"
-           "start and wait for, and 'repeat' how many times this should be \n"
-           "repeated.\n", argv[0]
-      );
-    return -1;
-  }
-
-  simul = atoi(argv[1]);
-  repeat = atoi(argv[2]);
-
-  if (simul > MAX_SIMULTANEOUS)
-  {
-    printf("This test program is compiled with a limitation to max %d \n"
-           "simultaneos processes.\n", MAX_SIMULTANEOUS);
-    return -1;
-  }
-  
-  if (repeat > MAX_REPEAT)
-  {
-    printf("This test program is compiled with a limitation to max %d \n"
-           "repetitions.\n", MAX_REPEAT);
-    return -1;
-  }
-  
-  printf("Will try to start a total of %d processes in groups of %d\n",
-         simul * repeat, simul);
-  
-  for (j = 0; j < repeat; ++j)
-  {
-    for (i = 0; i < simul; ++i)
-    {
-      snprintf(cmd, 15, "dummy %i", j * simul + i);
-      pid[i] = exec(cmd);
-    }
-    
-    /* There will never be more than 'simul' processes running
-     * simultaneously, but in total there will be a lot of processes
-     * (repeat * simul). Just as you can expect in a real system.
-     */
-    for (i = 0; i < simul; ++i)
-    {
-      /* probably nothing left to wait for */
-      if (pid[i] == -1)
-      {
-        printf("ERROR: Aborting test. Some execution(s) failed\n");
-        return j+1;
-      }
-      wait(pid[i]);      
-    }
-  }
-  return 0;
-}
diff --git a/src/examples/longrun.o b/src/examples/longrun.o
deleted file mode 100644
index f7ac4ca79093df27b9a033e630d701c6ff782512..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5344
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

diff --git a/src/examples/ls.c b/src/examples/ls.c
deleted file mode 100644
index fbe27a1..0000000
--- a/src/examples/ls.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/* ls.c
-  
-   Lists the contents of the directory or directories named on
-   the command line, or of the current directory if none are
-   named.
-
-   By default, only the name of each file is printed.  If "-l" is
-   given as the first argument, the type, size, and inumber of
-   each file is also printed.  This won't work until project 4. */
-
-#include <syscall.h>
-#include <stdio.h>
-#include <string.h>
-
-static bool
-list_dir (const char *dir, bool verbose) 
-{
-  int dir_fd = open (dir);
-  if (dir_fd == -1) 
-    {
-      printf ("%s: not found\n", dir);
-      return false;
-    }
-
-  if (isdir (dir_fd))
-    {
-      char name[READDIR_MAX_LEN];
-
-      printf ("%s", dir);
-      if (verbose)
-        printf (" (inumber %d)", inumber (dir_fd));
-      printf (":\n");
-
-      while (readdir (dir_fd, name)) 
-        {
-          printf ("%s", name); 
-          if (verbose) 
-            {
-              char full_name[128];
-              int entry_fd;
-
-              snprintf (full_name, sizeof full_name, "%s/%s", dir, name);
-              entry_fd = open (full_name);
-
-              printf (": ");
-              if (entry_fd != -1)
-                {
-                  if (isdir (entry_fd))
-                    printf ("directory");
-                  else
-                    printf ("%d-byte file", filesize (entry_fd));
-                  printf (", inumber %d", inumber (entry_fd));
-                }
-              else
-                printf ("open failed");
-              close (entry_fd);
-            }
-          printf ("\n");
-        }
-    }
-  else 
-    printf ("%s: not a directory\n", dir);
-  close (dir_fd);
-  return true;
-}
-
-int
-main (int argc, char *argv[]) 
-{
-  bool success = true;
-  bool verbose = false;
-  
-  if (argc > 1 && !strcmp (argv[1], "-l")) 
-    {
-      verbose = true;
-      argv++;
-      argc--;
-    }
-  
-  if (argc <= 1)
-    success = list_dir (".", verbose);
-  else 
-    {
-      int i;
-      for (i = 1; i < argc; i++)
-        if (!list_dir (argv[i], verbose))
-          success = false;
-    }
-  return success ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/src/examples/ls.o b/src/examples/ls.o
deleted file mode 100644
index 83c559dd2705d5f59f93cfb887d95f832a4ad650..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6644
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

diff --git a/src/examples/matmult.c b/src/examples/matmult.c
deleted file mode 100644
index 4f0615f..0000000
--- a/src/examples/matmult.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* matmult.c 
-
-   Test program to do matrix multiplication on large arrays.
- 
-   Intended to stress virtual memory system.
-   
-   Ideally, we could read the matrices off of the file system,
-   and store the result back to the file system!
- */
-
-#include <stdio.h>
-#include <syscall.h>
-
-/* You should define DIM to be large enough that the arrays
-   don't fit in physical memory.
-
-    Dim       Memory
- ------     --------
-     16         3 kB
-     64        48 kB
-    128       192 kB
-    256       768 kB
-    512     3,072 kB
-  1,024    12,288 kB
-  2,048    49,152 kB
-  4,096   196,608 kB
-  8,192   786,432 kB
- 16,384 3,145,728 kB */
-#define DIM 128
-
-int A[DIM][DIM];
-int B[DIM][DIM];
-int C[DIM][DIM];
-
-int
-main (void)
-{
-  int i, j, k;
-
-  /* Initialize the matrices. */
-  for (i = 0; i < DIM; i++)
-    for (j = 0; j < DIM; j++)
-      {
-	A[i][j] = i;
-	B[i][j] = j;
-	C[i][j] = 0;
-      }
-
-  /* Multiply matrices. */
-  for (i = 0; i < DIM; i++)	
-    for (j = 0; j < DIM; j++)
-      for (k = 0; k < DIM; k++)
-	C[i][j] += A[i][k] * B[k][j];
-
-  /* Done. */
-  exit (C[DIM - 1][DIM - 1]);
-}
diff --git a/src/examples/matmult.o b/src/examples/matmult.o
deleted file mode 100644
index 469c6b39df5f1a15abf5cd212440892d8eb75243..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3480
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
QT?!`y!$FV)6vNa30Iy%SzW@LL

diff --git a/src/examples/mcat.c b/src/examples/mcat.c
deleted file mode 100644
index 7b39760..0000000
--- a/src/examples/mcat.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* mcat.c
-
-   Prints files specified on command line to the console, using
-   mmap. */
-
-#include <stdio.h>
-#include <syscall.h>
-
-int
-main (int argc, char *argv[]) 
-{
-  int i;
-  
-  for (i = 1; i < argc; i++) 
-    {
-      int fd;
-      mapid_t map;
-      void *data = (void *) 0x10000000;
-      int size;
-
-      /* Open input file. */
-      fd = open (argv[i]);
-      if (fd < 0) 
-        {
-          printf ("%s: open failed\n", argv[i]);
-          return EXIT_FAILURE;
-        }
-      size = filesize (fd);
-
-      /* Map files. */
-      map = mmap (fd, data);
-      if (map == MAP_FAILED) 
-        {
-          printf ("%s: mmap failed\n", argv[i]);
-          return EXIT_FAILURE;
-        }
-
-      /* Write file to console. */
-      write (STDOUT_FILENO, data, size);
-
-      /* Unmap files (optional). */
-      munmap (map);
-    }
-  return EXIT_SUCCESS;
-}
diff --git a/src/examples/mcat.o b/src/examples/mcat.o
deleted file mode 100644
index 13d51a7e0135bc3fcfbc9e51ab41dcf982d50d22..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4364
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
C22%L|

diff --git a/src/examples/mcp.c b/src/examples/mcp.c
deleted file mode 100644
index 6091dc8..0000000
--- a/src/examples/mcp.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* mcp.c
-
-   Copies one file to another, using mmap. */
-
-#include <stdio.h>
-#include <string.h>
-#include <syscall.h>
-
-int
-main (int argc, char *argv[]) 
-{
-  int in_fd, out_fd;
-  mapid_t in_map, out_map;
-  void *in_data = (void *) 0x10000000;
-  void *out_data = (void *) 0x20000000;
-  int size;
-
-  if (argc != 3) 
-    {
-      printf ("usage: cp OLD NEW\n");
-      return EXIT_FAILURE;
-    }
-
-  /* Open input file. */
-  in_fd = open (argv[1]);
-  if (in_fd < 0) 
-    {
-      printf ("%s: open failed\n", argv[1]);
-      return EXIT_FAILURE;
-    }
-  size = filesize (in_fd);
-
-  /* Create and open output file. */
-  if (!create (argv[2], size)) 
-    {
-      printf ("%s: create failed\n", argv[2]);
-      return EXIT_FAILURE;
-    }
-  out_fd = open (argv[2]);
-  if (out_fd < 0) 
-    {
-      printf ("%s: open failed\n", argv[2]);
-      return EXIT_FAILURE;
-    }
-
-  /* Map files. */
-  in_map = mmap (in_fd, in_data);
-  if (in_map == MAP_FAILED) 
-    {
-      printf ("%s: mmap failed\n", argv[1]);
-      return EXIT_FAILURE;
-    }
-  out_map = mmap (out_fd, out_data);
-  if (out_map == MAP_FAILED)
-    {
-      printf ("%s: mmap failed\n", argv[2]);
-      return EXIT_FAILURE;
-    }
-
-  /* Copy files. */
-  memcpy (out_data, in_data, size);
-
-  /* Unmap files (optional). */
-  munmap (in_map);
-  munmap (out_map);
-
-  return EXIT_SUCCESS;
-}
diff --git a/src/examples/mcp.o b/src/examples/mcp.o
deleted file mode 100644
index bba8518f68bbd93dc25be1c4dbbdb98079144710..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4756
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

diff --git a/src/examples/mkdir.c b/src/examples/mkdir.c
deleted file mode 100644
index 7ddbc3f..0000000
--- a/src/examples/mkdir.c
+++ /dev/null
@@ -1,24 +0,0 @@
-/* mkdir.c
-
-   Creates a directory. */
-
-#include <stdio.h>
-#include <syscall.h>
-
-int
-main (int argc, char *argv[]) 
-{
-  if (argc != 2) 
-    {
-      printf ("usage: %s DIRECTORY\n", argv[0]);
-      return EXIT_FAILURE;
-    }
-
-  if (!mkdir (argv[1])) 
-    {
-      printf ("%s: mkdir failed\n", argv[1]);
-      return EXIT_FAILURE;
-    }
-  
-  return EXIT_SUCCESS;
-}
diff --git a/src/examples/mkdir.o b/src/examples/mkdir.o
deleted file mode 100644
index 353ef90eedd826f4e0943be81a51d4e99b057341..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2964
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
MP#FV~17Vmt0F6tP#{d8T

diff --git a/src/examples/parent.c b/src/examples/parent.c
deleted file mode 100644
index 7555b2b..0000000
--- a/src/examples/parent.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* parent.c
- * A test program that calls itself recursively.
- * In the last step of the recursion child.c is started.
- * Do not use with large CHILDREN or DEPTH.
- */
-#include <syscall.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-#define CHILDREN 4
-#define DEPTH 3
-
-int main(int argc, char* argv[])
-{
-  int i;
-  int pid[CHILDREN];
-  int depth = DEPTH - 1;
-  char cmd[10];
-
-  if (argc == 2)
-    depth = atoi(argv[1]) - 1;
-  
-  for(i = 0; i < CHILDREN; i++)
-  {
-    if (depth)
-      snprintf(cmd, 10, "parent %i", depth);
-    else
-      snprintf(cmd, 10, "child %i", i);
-
-    printf("%s\n", cmd);
-    pid[i] = exec(cmd);
-  }
-//  if (depth <= 1)
-  {
-    for(i = 0; i < CHILDREN; i++)
-    {
-      wait(pid[i]);
-    }
-  }
-  exit(0);
-}
diff --git a/src/examples/parent.o b/src/examples/parent.o
deleted file mode 100644
index ab58a33df37d0b374af68b7ff1fe943017f4f37f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3924
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
IpctkO02);Zy#N3J

diff --git a/src/examples/pfs.c b/src/examples/pfs.c
deleted file mode 100644
index a42ddfc..0000000
--- a/src/examples/pfs.c
+++ /dev/null
@@ -1,110 +0,0 @@
-#include "syscall.h"
-#include "pfs.h"
-
-#include <random.h>
-#include <stdio.h>
-#include <string.h>
-
-int main(void)
-{
-	int i;
-	int pid[N_PROC];
-	char seed[R_BYTES];
-	int ret;
-	int len;
-	char pfswriter[50] = "pfs_writer a z ";
-	int fail = 0;
-
-	ret = open("random");
-	if (!ret) {
-		printf("Failed to open random.\n");
-		exit(-1);
-	}
-
-	read(ret, &seed[0], R_BYTES);
-	close(ret);
-
-	random_init((int)seed[0]);
-	len = strlen(pfswriter);
-
-	ret = create("file.1", BIG * TIMES);
-
-	if (!ret)  {
-		printf("Failed to create file.1\n");
-		exit(-1);
-	}
-
-	for (i = 0; i < N_PROC; i++) {
-		if(random_ulong() % 2 == 0)	 {
-			pfswriter[len] = seed[i];
-			pfswriter[len + 1] = 0;
-			pid[i] = exec(pfswriter);
-			if (pid[i] < 0) {
-				printf("ERROR: Child creation returned %d\n", pid[i]);
-				fail = 1;
-			}
-		}
-		else  {
-			pid[i] = exec("pfs_reader");
-			if (pid[i] < 0) {
-				printf("ERROR: Child creation returned %d\n", pid[i]);
-				fail = 1;
-			}
-		}
-	}
-
-	for (i = 0; i < N_PROC; i++)
-	{
-		ret = wait(pid[i]);
-		if (ret < 0) {
-			printf("ERROR: Child wait returned %d\n", ret);
-			fail = 1;
-		}
-	}
-
-
-	printf("Testing concurrent writers\n");
-
-	for (i =0; i < N_PROC; i++) {
-		pfswriter[len] = seed[i];
-		pfswriter[len + 1] = 0;
-		pid[i] = exec(pfswriter);
-		if (pid[i] < 0) {
-			printf("ERROR: Child creation returned %d\n", pid[i]);
-			fail = 1;
-		}
-	}
-
-	for (i = 0; i < N_PROC; i++)
-	{
-		ret = wait(pid[i]);
-		if (ret < 0) {
-			printf("ERROR: Child wait returned %d\n", ret);
-			fail = 1;
-		}
-	}
-
-	printf("Testing concurrent readers\n");
-
-	for (i =0; i < N_PROC; i++) {
-		pid[i] = exec("pfs_reader");
-		if (pid[i] < 0) {
-			printf("ERROR: Child creation returned %d\n", pid[i]);
-			fail = 1;
-		}
-	}
-
-	for (i = 0; i < N_PROC; i++)
-	{
-		ret = wait(pid[i]);
-		if (ret < 0) {
-			printf("ERROR: Child wait returned %d\n", ret);
-			fail = 1;
-		}
-	}
-
-	if (fail)
-		printf("Test failed!\n");
-
-	exit(0);
-}
diff --git a/src/examples/pfs.h b/src/examples/pfs.h
deleted file mode 100644
index dc13303..0000000
--- a/src/examples/pfs.h
+++ /dev/null
@@ -1,4 +0,0 @@
-#define BIG 100
-#define TIMES 500
-#define N_PROC 10
-#define R_BYTES 100
diff --git a/src/examples/pfs.o b/src/examples/pfs.o
deleted file mode 100644
index b6d4857e6cbb6bfb423b877a682c869454008ad0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6684
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
Gm^uIr|G+;0

diff --git a/src/examples/pfs_reader.c b/src/examples/pfs_reader.c
deleted file mode 100644
index 546b1eb..0000000
--- a/src/examples/pfs_reader.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Reads from the file and checks consistency.
- * The buffer should all contain the same character!!
- */
-
-#include <syscall.h>
-#include <stdio.h>
-#include "pfs.h"
-
-char buffer[BIG];
-
-int main(void)
-{
-	int bytes, j;
-	int id;
-	int fsize;
-
-	printf("-\n");
-	id = open("file.1");
-
-	fsize = filesize(id);
-	if (fsize < BIG * TIMES) {
-		printf("Invalid filesize\n");
-		close(id);
-		exit(-1);
-	}
-	while (tell(id) <= (fsize-BIG))
-	{
-		bytes = read(id, buffer, BIG);
-
-		if (bytes != BIG)
-		{
-			printf("Buffer not filled, read %d\n", bytes);
-			close(id);
-			exit(-1);
-		}
-		/* now check for consistency */
-		for (j = 1; j < BIG; ++j)
-		{
-			if (buffer[0] != buffer[j])
-			{
-				/* Ooops, inconsistency */
-				printf("INCONSISTENCY\n");
-				close(id);
-				exit(-1);
-			}
-		}
-	}
-	printf("*-\n");
-	close(id);
-	exit(0);
-}
diff --git a/src/examples/pfs_reader.o b/src/examples/pfs_reader.o
deleted file mode 100644
index 14e6fc28796478dedc8eead89de1e3f8fde680e2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4380
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
KAUP0*sRICZor+Qb

diff --git a/src/examples/pfs_writer.c b/src/examples/pfs_writer.c
deleted file mode 100644
index 80f0826..0000000
--- a/src/examples/pfs_writer.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Write on the disk.
- * Each time the buffer is filled with same character.
- * Different character every time!
- */
-
-#include <syscall.h>
-#include <stdio.h>
-#include <string.h>
-#include <random.h>
-
-#include "pfs.h"
-
-
-char buffer[BIG];
-
-int main(int argc, char* argv[])
-{
-	int i;
-	char c;
-	int id;
-	int write_count;
-	char start;
-	char end;
-
-	random_init((int)argv[3][0]);
-	printf("+\n");
-
-	if (argc != 4 || strlen(argv[1]) != 1 || strlen(argv[2]) != 1)
-		exit(1);
-
-	start = argv[1][0];
-	end   = argv[2][0];
-
-	for (i = 0; i < TIMES / (end - start + 1) + 1; ++i)
-	{
-		for (c = start; c <= end; ++c)
-		{
-			memset(buffer, (int)c, BIG);
-
-			id = open("file.1");
-
-			seek(id,(random_ulong() % (TIMES-1)) * BIG);
-			write_count = write(id, buffer, BIG);
-
-			if ( write_count != BIG )
-			{
-				printf("TEST ERROR: write() wrote only %d bytes out of %d bytes\n",
-						write_count, BIG);
-				close(id);
-				exit(-1);
-			}
-			close(id);
-		}
-	}
-	printf("*+\n");
-	exit(0);
-}
diff --git a/src/examples/pfs_writer.o b/src/examples/pfs_writer.o
deleted file mode 100644
index 998156bd82c6342c3b8879abcec9ac8a11495afa..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5180
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
b1cS^0u|TaIWOZ}+85lsFPLLc3!_)x)=j8mI

diff --git a/src/examples/printf b/src/examples/printf
deleted file mode 100755
index 6d6e925cd587ae2cac02abda2cc38760e17649f7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 40844
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
F0|5O%UfTcw

diff --git a/src/examples/printf.c b/src/examples/printf.c
deleted file mode 100644
index 2072e8e..0000000
--- a/src/examples/printf.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <stdio.h>
-#include <syscall.h>
-
-int
-main (int argc, char **argv)
-{
-  printf ("You got it, use your debugging skills during the labs!\n");
-
-  return EXIT_SUCCESS;
-}
diff --git a/src/examples/printf.o b/src/examples/printf.o
deleted file mode 100644
index 011271524aa042e95d79e55835c75e5c3d19dde8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2724
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
LqaX<=hN%MpvP)oD

diff --git a/src/examples/pwd.c b/src/examples/pwd.c
deleted file mode 100644
index d2305cf..0000000
--- a/src/examples/pwd.c
+++ /dev/null
@@ -1,152 +0,0 @@
-/* pwd.c
-   
-   Prints the absolute name of the present working directory. */
-
-#include <syscall.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <string.h>
-
-static bool getcwd (char *cwd, size_t cwd_size);
-
-int
-main (void) 
-{
-  char cwd[128];
-  if (getcwd (cwd, sizeof cwd)) 
-    {
-      printf ("%s\n", cwd);
-      return EXIT_SUCCESS;
-    }
-  else 
-    {
-      printf ("error\n");
-      return EXIT_FAILURE; 
-    }
-}
-
-/* Stores the inode number for FILE_NAME in *INUM.
-   Returns true if successful, false if the file could not be
-   opened. */
-static bool
-get_inumber (const char *file_name, int *inum) 
-{
-  int fd = open (file_name);
-  if (fd >= 0) 
-    {
-      *inum = inumber (fd);
-      close (fd);
-      return true;
-    }
-  else
-    return false;
-}
-
-/* Prepends PREFIX to the characters stored in the final *DST_LEN
-   bytes of the DST_SIZE-byte buffer that starts at DST.
-   Returns true if successful, false if adding that many
-   characters, plus a null terminator, would overflow the buffer.
-   (No null terminator is actually added or depended upon, but
-   its space is accounted for.) */
-static bool
-prepend (const char *prefix,
-         char *dst, size_t *dst_len, size_t dst_size) 
-{
-  size_t prefix_len = strlen (prefix);
-  if (prefix_len + *dst_len + 1 <= dst_size) 
-    {
-      *dst_len += prefix_len;
-      memcpy ((dst + dst_size) - *dst_len, prefix, prefix_len);
-      return true;
-    }
-  else
-    return false;
-}
-
-/* Stores the current working directory, as a null-terminated
-   string, in the CWD_SIZE bytes in CWD.
-   Returns true if successful, false on error.  Errors include
-   system errors, directory trees deeper than MAX_LEVEL levels,
-   and insufficient space in CWD. */
-static bool
-getcwd (char *cwd, size_t cwd_size) 
-{
-  size_t cwd_len = 0;   
-  
-#define MAX_LEVEL 20
-  char name[MAX_LEVEL * 3 + 1 + READDIR_MAX_LEN + 1];
-  char *namep;
-
-  int child_inum;
-
-  /* Make sure there's enough space for at least "/". */
-  if (cwd_size < 2)
-    return false;
-
-  /* Get inumber for current directory. */
-  if (!get_inumber (".", &child_inum))
-    return false;
-
-  namep = name;
-  for (;;)
-    {
-      int parent_inum, parent_fd;
-
-      /* Compose "../../../..", etc., in NAME. */
-      if ((namep - name) > MAX_LEVEL * 3)
-        return false;
-      *namep++ = '.';
-      *namep++ = '.';
-      *namep = '\0';
-
-      /* Open directory. */
-      parent_fd = open (name);
-      if (parent_fd < 0)
-        return false;
-      *namep++ = '/';
-
-      /* If parent and child have the same inumber,
-         then we've arrived at the root. */
-      parent_inum = inumber (parent_fd);
-      if (parent_inum == child_inum)
-        break;
-
-      /* Find name of file in parent directory with the child's
-         inumber. */
-      for (;;)
-        {
-          int test_inum;
-          if (!readdir (parent_fd, namep) || !get_inumber (name, &test_inum)) 
-            {
-              close (parent_fd);
-              return false; 
-            }
-          if (test_inum == child_inum)
-            break;
-        }
-      close (parent_fd);
-
-      /* Prepend "/name" to CWD. */
-      if (!prepend (namep - 1, cwd, &cwd_len, cwd_size))
-        return false;
-
-      /* Move up. */
-      child_inum = parent_inum;
-    }
-
-  /* Finalize CWD. */
-  if (cwd_len > 0) 
-    {
-      /* Move the string to the beginning of CWD,
-         and null-terminate it. */
-      memmove (cwd, (cwd + cwd_size) - cwd_len, cwd_len);
-      cwd[cwd_len] = '\0';
-    }
-  else 
-    {
-      /* Special case for the root. */
-      strlcpy (cwd, "/", cwd_size); 
-    }
-  
-  return true;
-}
diff --git a/src/examples/pwd.o b/src/examples/pwd.o
deleted file mode 100644
index 20505d921b527a0f8fd0a81d815217187bc932c0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7096
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

diff --git a/src/examples/recursor.c b/src/examples/recursor.c
deleted file mode 100644
index 79c784a..0000000
--- a/src/examples/recursor.c
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <syscall.h>
-
-int
-main (int argc, char *argv[])
-{
-  char buffer[128];
-  pid_t pid;
-  int retval = 0;
-
-  if (argc != 4) 
-    {
-      printf ("usage: recursor <string> <depth> <waitp>\n");
-      exit (1);
-    }
-
-  /* Print args. */
-  printf ("%s %s %s %s\n", argv[0], argv[1], argv[2], argv[3]);
-
-  /* Execute child and wait for it to finish if requested. */
-  if (atoi (argv[2]) != 0) 
-    {
-      snprintf (buffer, sizeof buffer,
-                "recursor %s %d %s", argv[1], atoi (argv[2]) - 1, argv[3]);
-      pid = exec (buffer);
-      if (atoi (argv[3]))
-        retval = wait (pid);
-    }
-  
-  /* Done. */
-  printf ("%s %s: dying, retval=%d\n", argv[1], argv[2], retval);
-  exit (retval);
-}
diff --git a/src/examples/recursor.o b/src/examples/recursor.o
deleted file mode 100644
index fce2eef8dbebf11892a9c41549b070a4c57dff04..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4204
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

diff --git a/src/examples/recursor_ng b/src/examples/recursor_ng
deleted file mode 100755
index 0ab028cb70f027b083733a7f0b128ddc708affab..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 48764
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

diff --git a/src/examples/recursor_ng.c b/src/examples/recursor_ng.c
deleted file mode 100644
index fcf6b3c..0000000
--- a/src/examples/recursor_ng.c
+++ /dev/null
@@ -1,52 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <syscall.h>
-
-#define MAX_SPAWN 100
-
-int main (int argc, char *argv[])
-{
-	char buffer[128];
-	pid_t pid[MAX_SPAWN];
-	int retval = 0;
-	int i, spawn;
-	int ret = 0;
-
-	if (argc != 4) 
-	{
-		printf ("usage: recursor_ng <string> <depth> <waitp>\n");
-		exit (1);
-	}
-
-	/* Print args. */
-	//printf ("%s %s %s %s\n", argv[0], argv[1], argv[2], argv[3]);
-	printf("+");
-	/* Execute child and wait for it to finish if requested. */
-	spawn = atoi (argv[2]);
-
-	if (spawn > MAX_SPAWN) {
-		printf("Greater than MAX_SPAWN\n");
-		exit(-1);
-	}
-
-	if (spawn != 0) 
-	{
-		for (i = 0; i < spawn;i++) {
-			snprintf (buffer, sizeof buffer,
-					"recursor_ng %s %d %s", argv[1], atoi (argv[2]) - 1, argv[3]);
-			pid[i] = exec (buffer);
-		}
-		if (atoi (argv[3])) {
-			for (i = 0; i < spawn;i++) {
-				retval = wait (pid[i]);
-				if (retval < 0)
-					ret = 1;
-			}
-		}
-
-		/* Done. */
-		if (ret)
-			printf("YOU HAVE FAILED\n");
-	}
-	exit (ret);
-}
diff --git a/src/examples/recursor_ng.o b/src/examples/recursor_ng.o
deleted file mode 100644
index 621e878a3616510cc902fcf52af0dbec8fcaa4b3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4808
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
CE8<rG

diff --git a/src/examples/rm.c b/src/examples/rm.c
deleted file mode 100644
index 0db7f7b..0000000
--- a/src/examples/rm.c
+++ /dev/null
@@ -1,21 +0,0 @@
-/* rm.c
-
-   Removes files specified on command line. */
-
-#include <stdio.h>
-#include <syscall.h>
-
-int
-main (int argc, char *argv[]) 
-{
-  bool success = true;
-  int i;
-  
-  for (i = 1; i < argc; i++)
-    if (!remove (argv[i])) 
-      {
-        printf ("%s: remove failed\n", argv[i]);
-        success = false; 
-      }
-  return success ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/src/examples/rm.o b/src/examples/rm.o
deleted file mode 100644
index 966087a034effe1bc81288c75a06c5b18d527ff7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3384
zcmb<-^>JflWMqH=Mh0dE1doAX0VhPp1Wai#h%<;WeCC(?-Rq;m(){GZ|H40^olnEV
zf&-i1NOUuH2eLH(V63z6jbiDwX*%Zmobk0>^Ba!;#u*^(FaG@h|G)W&K<9@J*XPZL
zSuB5-NH)LW`ELxC=sebZM4;tB>9f~oK^pnDxjt|Hz{tPtKyT`Y$mqEE*xtlHhgFNM
z6pB)F^UG2d(h@UsQd77X*cllZSU|=zurS6lFfi~qGcqu!g9R8Es-ZL!BU>yZ0|PS)
zYi3>v0}~579|Hpe6C+y(BLf2y6YES6#lZ?v%*4py0pc;Smx3q`b~gqF1{P@s1_nk>
zMjem}28gkYbM7-RFt8Rdf@HWsG7wiVFtAPmi;08eH5eEeR2Uc-*pfhE+#IhN7#IQ=
z7#KVl7#P?y85nukK{|UF7#KPj7#KKg85kHoff!*73=IE3wsEpNWnf_7WKjh>m??{q
zfq_ebfq?;pnS@!n!WbDCK$uyEje${+QI$`ao0(6VPmocFO+cK1fk}mdo7;|?nU8^i
z8Or2fU|`W>w3lS&v*Nbqw&Yfq^b`gucaWIwB*`euz`)AN0F(0+W)k1-B+kIVW`Zfk
zZo<IK0Wkxvj-#`QkwK8rP?&*%lb?Z`+f$f<flH6UUeZP~j}K-l$X`&b2l5ufM218L
z28L898!82-plVo<)WCw8ff1ToWf>S4AnFX~g96bNY?i@%5FH3+m!>218_tIr&dk8T
zfUFmr8X2&DkPf)D@Pq{tUCqG2z{~(jCyb20`FI%^AsGr3;d*-dIhjce5K6zaIJJm@
zp(s}`8KkYaBqcLnF9YO(;>zOW#GD+x3<f4pnqp*N1<?%5oQ!OYtjug2yM;wq`9Um3
zR*sddoNPHy*#ubyZCNE5m{^$DLRk4hG$SiBh+?y0Wo7eb<zi!uVC5+3VP$4x=JaA!
zWMgDyoX^C=z{r@BpO>xxCO~<iG_N=_Jufvy0mR8o%*<mbD9X$$Nn_B@$j?pH&rZ!N
z(J#o%E6Fd`FD^>fPpwGIEyzhNW&j%iCQwXp_X|~UwzO2R)HBvIP|(daHd4^dEzVCX
z(M`+APb^W;%`GX-OSMf;%}XuHOjgj%O)N^zu+22HFjLS?Pftlw(Dhf)EiOs1P0uT}
zv{cYd%gfiz&&@2+O)E;wP1P;P&&(@HEmF`;ODjrEEiOsSOUcYjhbYU;%gM}3g|G`i
zW`pz=mn0@<>lPH{m!u|_<byOO7FXsaXB6e<<(C%gmgbdb=B4PCBqrsg7AxqcL6j%w
zBo=4DG-c-JDd?spry=nnQ3&^Uaz<hi1Ef@90JDorlao`6iy7jb^7C^T5{uH48HzLV
zi%JyWT0nsf4R^4P#G>>vs2Y$IgS)e{m4ZfSQfXdEDI_d)4b4lzT*Epe13d#1O^7fk
zA%RjQ4=CL*Ffh3Lg@V%10gxCdZHs^ufC{gwAO^-74n}Dn78X#U=fJ?g07};&X>cLw
z!NbVlF2KrE%HYP&Tw1^;z|K@!Bf!Q~S|Py9R9eCmcaVpX!SS%;F~{SMN1b_CKo)>B
zBVpuvgN5Pae<UfiS_PC}K(0fmV1}0AFcD@3aA^$VGB7i+!Py`NGXn>Rf@5X|Xhj7T
zVP@chvLF;Q11N+bY!J!J0IC5%EC^<15P&eCBr}5`lm(%f8H6AVD9Oyg4|fqL{Dc@7
z8MvWxAPQs}vJMa*l5CLk7&Or^Fff4XS4LI_21`&`BgnuI1fqo)z;-aQGk{&s$jtzD
z6^IrE#VI!fgCvM%Vqj1N(Oe7+p!x<RZwBIXGcbV4LJ;2t%J+uSAoD@ukx+gDlm?Z-
zAn^hapNWB?9z=69Fm!=v4hDukC_NcOb2Bi^1JN7|42z)jauChUz_1BKb1*P$gVIN!
z^a&_^7DO{KFkFMu??5y+1H)%1{T)h!5)sHf%%IYg8yX&L4B*&eWMW_l1*v0#R)?TM
zQ?Ix(w<Ix%L9e)^2tsGTSVgHhdL^k9B@B8gi6w~)dP&8_40=WRAPz{ip`Iaw9!O0}
zYEo%>d}dx+K7$^FotTtVlv)Pk<>V(LD@-g(%u7!N8I_s?RSznNV5*BtiWu~g^K)}k
z^GX=>^72bk_1yhJb-^VKl%Jkgs#j2yUyxc<QVB6RH6tEe;DM47QCJ=n4xn}hR5d6)
zfzl<E3#w$mOi)7xlv6<YA0*Jh&cGnSz`y`1CqVfZl&wKI3)I{I@nN}iJxDPU2FZcA
z+Mvb?xc&q27#MJ=Gl06!2%-$EP8iAtQ6Td`*cqx0BnHBV7#JA1K@uPilAJxLQN+N&
z0Q1KJb_NCkMu<N^B?ZhM{z!U2Mx142U;x$EAT|iYj0UwFVQi3i1rr0q8W01DVRAWW
z=BY44(jHV9Je)xdUgU7zzyV3Kpl}A2OfdI>^A}7r0|SE#Gin&Z>;=UovUvwM7{DbU
z$UIQV1~ac4>ON3-gN*&m%)qc1W(ZUc#GM9Z!_-Y<WncisB}fklgVca9sG$U+L1G|$
z5Vcr_`xg}N?4U9Wq=<om;Rq|DegO%A+y|nMLG1-)RS^FHD+5Cehylegb)a}h_U{QK
z|ANX@kUCI01-T7o7RU%2HU<U*Mg|5@`3Nd=LFzy>$Shb|2C2(ohm@TlHVA{v0nwmR
SA6eZ64hDt`APFdjsRIDc(#9A7

diff --git a/src/examples/shell.c b/src/examples/shell.c
deleted file mode 100644
index 93641b4..0000000
--- a/src/examples/shell.c
+++ /dev/null
@@ -1,104 +0,0 @@
-#include <stdbool.h>
-#include <stdio.h>
-#include <string.h>
-#include <syscall.h>
-
-static void read_line (char line[], size_t);
-static bool backspace (char **pos, char line[]);
-
-int
-main (void)
-{
-  printf ("Shell starting...\n");
-  for (;;) 
-    {
-      char command[80];
-
-      /* Read command. */
-      printf ("--");
-      read_line (command, sizeof command);
-      
-      /* Execute command. */
-      if (!strcmp (command, "exit"))
-        break;
-      else if (!memcmp (command, "cd ", 3)) 
-        {
-          if (!chdir (command + 3))
-            printf ("\"%s\": chdir failed\n", command + 3);
-        }
-      else if (command[0] == '\0') 
-        {
-          /* Empty command. */
-        }
-      else
-        {
-          pid_t pid = exec (command);
-          if (pid != PID_ERROR)
-            printf ("\"%s\": exit code %d\n", command, wait (pid));
-          else
-            printf ("exec failed\n");
-        }
-    }
-
-  printf ("Shell exiting.");
-  return EXIT_SUCCESS;
-}
-
-/* Reads a line of input from the user into LINE, which has room
-   for SIZE bytes.  Handles backspace and Ctrl+U in the ways
-   expected by Unix users.  On return, LINE will always be
-   null-terminated and will not end in a new-line character. */
-static void
-read_line (char line[], size_t size) 
-{
-  char *pos = line;
-  for (;;)
-    {
-      char c;
-      read (STDIN_FILENO, &c, 1);
-
-      switch (c) 
-        {
-        case '\r':
-          *pos = '\0';
-          putchar ('\n');
-          return;
-
-        case '\b':
-          backspace (&pos, line);
-          break;
-
-        case ('U' - 'A') + 1:       /* Ctrl+U. */
-          while (backspace (&pos, line))
-            continue;
-          break;
-
-        default:
-          /* Add character to line. */
-          if (pos < line + size - 1) 
-            {
-              putchar (c);
-              *pos++ = c;
-            }
-          break;
-        }
-    }
-}
-
-/* If *POS is past the beginning of LINE, backs up one character
-   position.  Returns true if successful, false if nothing was
-   done. */
-static bool
-backspace (char **pos, char line[]) 
-{
-  if (*pos > line)
-    {
-      /* Back up cursor, overwrite character, back up
-         again. */
-      printf ("\b \b");
-      (*pos)--;
-      return true;
-    }
-  else
-    return false;
-}
diff --git a/src/examples/shell.o b/src/examples/shell.o
deleted file mode 100644
index 2c5894566fd671fbdd7451457ee1b8137f54a7b0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5680
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

diff --git a/src/examples/sumargv.c b/src/examples/sumargv.c
deleted file mode 100644
index 06962f9..0000000
--- a/src/examples/sumargv.c
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <stdlib.h>
-
-int
-main (int argc, char **argv)
-{
-  int i;
-  int sum = 0;
-  char* argv_me = "sumargv";
-  char* p;
-
-  for (p = argv_me, i = 0; *p; ++p, ++i)
-    sum += (*p - 'a') * i;
-
-  for (p = argv[0], i = 0; *p; ++p, ++i)
-    sum -= (*p - 'a') * i;
-
-  /* if program name is correctly set up sum should now be zero */
-  
-  for (i = 1; i < argc; i++)
-    sum += atoi(argv[i]);
-
-  /* if argv ends correctly with a null pointer this has no effect */
-  sum += argv[argc];
-  
-  return sum;
-}
diff --git a/src/examples/sumargv.o b/src/examples/sumargv.o
deleted file mode 100644
index 8a43c71a6515f3b3c29f232aeb2df74f5933c2e9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3604
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

diff --git a/src/examples/supertest b/src/examples/supertest
deleted file mode 100755
index 3f758380e1ee08f64c3afe96c9c5940d9f5557ef..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 40676
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%0AV%(Hd7u}&~Q5g1G^N5DX5zR!W^Qk
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

diff --git a/src/examples/supertest.c b/src/examples/supertest.c
deleted file mode 100644
index f5723ac..0000000
--- a/src/examples/supertest.c
+++ /dev/null
@@ -1,15 +0,0 @@
-/* halt.c
-
-   Simple program to test whether running a user program works.
- 	
-   Just invokes a system call that shuts down the OS. */
-
-#include <syscall.h>
-
-int
-main (void)
-{
-
-  create("testboi",10);
-  /* not reached */
-}
diff --git a/src/examples/supertest.o b/src/examples/supertest.o
deleted file mode 100644
index b10e0434bfbd8e7ab68171b36eef372008bf5be5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2356
zcmb<-^>JflWMqH=Mh0dE1doB?2rER!1Wai#h%tyVeCC(?-Rq;m(){GZ|H40^olgUs
z-|%E{Wq_2t`1Ak&|K=kC-M)WL_9p&0T#{N`l9Zpx5Xr#6zyeahz`|(6z`($x2IfEr
z9SFt1#KM}HSHi$7!N|bC$i=7%6$VK&&ItgSpvb_$0Aet($}=!9fH0FZ8v~;tqbi>;
zH#46!pCF?Un}9e21Ct5^H@6)(GY10$vmT?pBr~5Cw>7sVx4NXKFi4Gq#B?V~Mqvg9
zmd++d20=zcVFm_PJqCM88_7IAm|_M71{nqh1}3mOAg%{7LGA(3ARNWOz`)F4&A`CG
z$oQL&mw^!ym>>`6>FMWWCh3<Jrxr0V6qgpH7J&joFBzn*xUx7oF(*ea102|_j0~(`
zOPIMBS(!O}SQ**&FmW?5GU{jK=cejsr{<OD7i8v@<QMA~7bWYbRwU*Y<fIleBp0P7
zmZYMX?d}(<;B0BBV5w)UXP}^)Yiy*Tn_HZpR-&7hlb=|kpqpD#nwM&uo|>0hl$orc
zo10jaoMD@3W?`nFo1UJMq@e4spj%v$Vw;{<YH6vUo0gZao1dFmqMKHfn479wke``X
zl3Jvoo0e9Tnp#|vn3s~7mkv>unU|B9mkMDQfXoKzEiOq+&ekm`$}dSxF3AUJOf0U<
zOU@|D&&w|@)-BB|&&*5FElEtuNi9~;O@k;;&PgoJfN9Fi&r{G%OHM=LGvp>_<}on1
zJ3Ct`XoMz}=9QE}JgjSIUJB+K))^V-8JK87gh43>l;#*17(mI{-7gdrrw2eW%FMvP
zAOeaJPz+WDF)-F}FiP{VuyimoFla#IA0!Qqa}ORy26q8grcwrHe&*5|woo2M2FIh$
zJS-rSK&lWJIS;WgeEg4)0i_pYSr8xO3WN$~XikBNFoRtU<AKz(Avoal$AQM@MB{U#
z@p;ks{AhduG`=7jpN|1%0w`RB7#JCZkW_$mBPV!pbU_m<0|SEuD6Cl-7-T_tOMrm^
z<QqnI1_mCGI2Qv0$TmhU1_n_mUlK$!F))BKKO-jtgD!~A#lT<zqL~;N+@W+Jh~{Eo
z2!+yMbJ-XeK<;5=VqowBi8C=UD1ht*<u|?J%G{E~BnG|Wk|GG50b>=V=IE8AR+KR4
zr6iUlGUz207c=M;<%2jN)rNY840<3nDXB@N>G7F)Y55F#5O!ixQc-FdvTR~eVqSVG
zNPlV$R1qkrz%&$>6fx)}=jZ08=9Mt$<>i;8>bd)c>VmTZl%Jkgs#j2y4=O?`AttA0
z#DjArQm_+b%7gsR010o9Vo;e5ia!t=gkh;tnt_1<l!6>Uf(#4{B`lCI6o%>trFKw?
z1C`GpJ+Rc9096m8Kyo0qHUk3#NIfBS22k@s^#e#B$UKlf5F3O+=7F#?R2@hRgh3Tg
zEQkTcAT=PSJ(@pSSQr>07#J8p{s5&7m_Pi{%sa}!zz_{G0E%JeC8DWQV1%S4s4{R-
z4q}7cf*gK#kirin4zsre%{&K228KA00Z<IHw*bu_Z&)DV3GxRhXT!{EfSLyiN01To
z7#SF3VTM5EK-_L98>VhI69WS%jzD@q7^DV-r$E(##6b8ND9?ZxPz+K7VlH7|U|<L3
zDG-N&f#C%cq~3&b;icJbsCh7BSeO|YTwsczWi*Jp9nHUAko*fO8({tg*$*=dq|bwy
zfkA)~Ql5iKG>|$_-Uo#_EbW2RMX)e1fXWmQ8-zjTfM}4}$m;&EFff490!R*oVd?+@
C#vP;p

diff --git a/src/filesys/.gitignore b/src/filesys/.gitignore
deleted file mode 100644
index 6d5357c..0000000
--- a/src/filesys/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-build
-bochsrc.txt
-bochsout.txt
diff --git a/src/filesys/Make.vars b/src/filesys/Make.vars
deleted file mode 100644
index d8050cd..0000000
--- a/src/filesys/Make.vars
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- makefile -*-
-
-os.dsk: DEFINES = -DUSERPROG -DFILESYS
-KERNEL_SUBDIRS = threads devices lib lib/kernel userprog filesys
-TEST_SUBDIRS = tests/userprog tests/filesys/base tests/filesys/extended
-GRADING_FILE = $(SRCDIR)/tests/filesys/Grading.no-vm
-SIMULATOR = --qemu
-
-# Uncomment the lines below to enable VM.
-#os.dsk: DEFINES += -DVM
-#KERNEL_SUBDIRS += vm
-#TEST_SUBDIRS += tests/vm
-#GRADING_FILE = $(SRCDIR)/tests/filesys/Grading.with-vm
diff --git a/src/filesys/Makefile b/src/filesys/Makefile
deleted file mode 100644
index 34c10aa..0000000
--- a/src/filesys/Makefile
+++ /dev/null
@@ -1 +0,0 @@
-include ../Makefile.kernel
diff --git a/src/filesys/directory.c b/src/filesys/directory.c
deleted file mode 100644
index 0d265d5..0000000
--- a/src/filesys/directory.c
+++ /dev/null
@@ -1,236 +0,0 @@
-#include "filesys/directory.h"
-#include <stdio.h>
-#include <string.h>
-#include <list.h>
-#include "filesys/filesys.h"
-#include "filesys/inode.h"
-#include "threads/malloc.h"
-
-/* A directory. */
-struct dir 
-  {
-    struct inode *inode;                /* Backing store. */
-    off_t pos;                          /* Current position. */
-  };
-
-/* A single directory entry. */
-struct dir_entry 
-  {
-    disk_sector_t inode_sector;         /* Sector number of header. */
-    char name[NAME_MAX + 1];            /* Null terminated file name. */
-    bool in_use;                        /* In use or free? */
-  };
-
-/* Creates a directory with space for ENTRY_CNT entries in the
-   given SECTOR.  Returns true if successful, false on failure. */
-bool
-dir_create (disk_sector_t sector, size_t entry_cnt) 
-{
-  return inode_create (sector, entry_cnt * sizeof (struct dir_entry));
-}
-
-/* Opens and returns the directory for the given INODE, of which
-   it takes ownership.  Returns a null pointer on failure. */
-struct dir *
-dir_open (struct inode *inode) 
-{
-  struct dir *dir = calloc (1, sizeof *dir);
-  if (inode != NULL && dir != NULL)
-    {
-      dir->inode = inode;
-      dir->pos = 0;
-      return dir;
-    }
-  else
-    {
-      inode_close (inode);
-      free (dir);
-      return NULL; 
-    }
-}
-
-/* Opens the root directory and returns a directory for it.
-   Return true if successful, false on failure. */
-struct dir *
-dir_open_root (void)
-{
-  return dir_open (inode_open (ROOT_DIR_SECTOR));
-}
-
-/* Opens and returns a new directory for the same inode as DIR.
-   Returns a null pointer on failure. */
-struct dir *
-dir_reopen (struct dir *dir) 
-{
-  return dir_open (inode_reopen (dir->inode));
-}
-
-/* Destroys DIR and frees associated resources. */
-void
-dir_close (struct dir *dir) 
-{
-  if (dir != NULL)
-    {
-      inode_close (dir->inode);
-      free (dir);
-    }
-}
-
-/* Returns the inode encapsulated by DIR. */
-struct inode *
-dir_get_inode (struct dir *dir) 
-{
-  return dir->inode;
-}
-
-/* Searches DIR for a file with the given NAME.
-   If successful, returns true, sets *EP to the directory entry
-   if EP is non-null, and sets *OFSP to the byte offset of the
-   directory entry if OFSP is non-null.
-   otherwise, returns false and ignores EP and OFSP. */
-static bool
-lookup (const struct dir *dir, const char *name,
-        struct dir_entry *ep, off_t *ofsp) 
-{
-  struct dir_entry e;
-  size_t ofs;
-  
-  ASSERT (dir != NULL);
-  ASSERT (name != NULL);
-
-  for (ofs = 0; inode_read_at (dir->inode, &e, sizeof e, ofs) == sizeof e;
-       ofs += sizeof e) 
-    if (e.in_use && !strcmp (name, e.name)) 
-      {
-        if (ep != NULL)
-          *ep = e;
-        if (ofsp != NULL)
-          *ofsp = ofs;
-        return true;
-      }
-  return false;
-}
-
-/* Searches DIR for a file with the given NAME
-   and returns true if one exists, false otherwise.
-   On success, sets *INODE to an inode for the file, otherwise to
-   a null pointer.  The caller must close *INODE. */
-bool
-dir_lookup (const struct dir *dir, const char *name,
-            struct inode **inode) 
-{
-  struct dir_entry e;
-
-  ASSERT (dir != NULL);
-  ASSERT (name != NULL);
-
-  if (lookup (dir, name, &e, NULL))
-    *inode = inode_open (e.inode_sector);
-  else
-    *inode = NULL;
-
-  return *inode != NULL;
-}
-
-/* Adds a file named NAME to DIR, which must not already contain a
-   file by that name.  The file's inode is in sector
-   INODE_SECTOR.
-   Returns true if successful, false on failure.
-   Fails if NAME is invalid (i.e. too long) or a disk or memory
-   error occurs. */
-bool
-dir_add (struct dir *dir, const char *name, disk_sector_t inode_sector) 
-{
-  struct dir_entry e;
-  off_t ofs;
-  bool success = false;
-  
-  ASSERT (dir != NULL);
-  ASSERT (name != NULL);
-
-  /* Check NAME for validity. */
-  if (*name == '\0' || strlen (name) > NAME_MAX)
-    return false;
-
-  /* Check that NAME is not in use. */
-  if (lookup (dir, name, NULL, NULL))
-    goto done;
-
-  /* Set OFS to offset of free slot.
-     If there are no free slots, then it will be set to the
-     current end-of-file.
-     
-     inode_read_at() will only return a short read at end of file.
-     Otherwise, we'd need to verify that we didn't get a short
-     read due to something intermittent such as low memory. */
-  for (ofs = 0; inode_read_at (dir->inode, &e, sizeof e, ofs) == sizeof e;
-       ofs += sizeof e) 
-    if (!e.in_use)
-      break;
-
-  /* Write slot. */
-  e.in_use = true;
-  strlcpy (e.name, name, sizeof e.name);
-  e.inode_sector = inode_sector;
-  success = inode_write_at (dir->inode, &e, sizeof e, ofs) == sizeof e;
-
- done:
-  return success;
-}
-
-/* Removes any entry for NAME in DIR.
-   Returns true if successful, false on failure,
-   which occurs only if there is no file with the given NAME. */
-bool
-dir_remove (struct dir *dir, const char *name) 
-{
-  struct dir_entry e;
-  struct inode *inode = NULL;
-  bool success = false;
-  off_t ofs;
-
-  ASSERT (dir != NULL);
-  ASSERT (name != NULL);
-
-  /* Find directory entry. */
-  if (!lookup (dir, name, &e, &ofs))
-    goto done;
-
-  /* Open inode. */
-  inode = inode_open (e.inode_sector);
-  if (inode == NULL)
-    goto done;
-
-  /* Erase directory entry. */
-  e.in_use = false;
-  if (inode_write_at (dir->inode, &e, sizeof e, ofs) != sizeof e) 
-    goto done;
-
-  /* Remove inode. */
-  inode_remove (inode);
-  success = true;
-
- done:
-  inode_close (inode);
-  return success;
-}
-
-/* Reads the next directory entry in DIR and stores the name in
-   NAME.  Returns true if successful, false if the directory
-   contains no more entries. */
-bool
-dir_readdir (struct dir *dir, char name[NAME_MAX + 1])
-{
-  struct dir_entry e;
-
-  while (inode_read_at (dir->inode, &e, sizeof e, dir->pos) == sizeof e) 
-    {
-      dir->pos += sizeof e;
-      if (e.in_use)
-        {
-          strlcpy (name, e.name, NAME_MAX + 1);
-          return true;
-        } 
-    }
-  return false;
-}
diff --git a/src/filesys/directory.h b/src/filesys/directory.h
deleted file mode 100644
index 7955937..0000000
--- a/src/filesys/directory.h
+++ /dev/null
@@ -1,30 +0,0 @@
-#ifndef FILESYS_DIRECTORY_H
-#define FILESYS_DIRECTORY_H
-
-#include <stdbool.h>
-#include <stddef.h>
-#include "devices/disk.h"
-
-/* Maximum length of a file name component.
-   This is the traditional UNIX maximum length.
-   After directories are implemented, this maximum length may be
-   retained, but much longer full path names must be allowed. */
-#define NAME_MAX 14
-
-struct inode;
-
-/* Opening and closing directories. */
-bool dir_create (disk_sector_t sector, size_t entry_cnt);
-struct dir *dir_open (struct inode *);
-struct dir *dir_open_root (void);
-struct dir *dir_reopen (struct dir *);
-void dir_close (struct dir *);
-struct inode *dir_get_inode (struct dir *);
-
-/* Reading and writing. */
-bool dir_lookup (const struct dir *, const char *name, struct inode **);
-bool dir_add (struct dir *, const char *name, disk_sector_t);
-bool dir_remove (struct dir *, const char *name);
-bool dir_readdir (struct dir *, char name[NAME_MAX + 1]);
-
-#endif /* filesys/directory.h */
diff --git a/src/filesys/file.c b/src/filesys/file.c
deleted file mode 100644
index d5fc10d..0000000
--- a/src/filesys/file.c
+++ /dev/null
@@ -1,168 +0,0 @@
-#include "filesys/file.h"
-#include <debug.h>
-#include "filesys/inode.h"
-#include "threads/malloc.h"
-
-/* An open file. */
-struct file 
-  {
-    struct inode *inode;        /* File's inode. */
-    off_t pos;                  /* Current position. */
-    bool deny_write;            /* Has file_deny_write() been called? */
-  };
-
-/* Opens a file for the given INODE, of which it takes ownership,
-   and returns the new file.  Returns a null pointer if an
-   allocation fails or if INODE is null. */
-struct file *
-file_open (struct inode *inode) 
-{
-  struct file *file = calloc (1, sizeof *file);
-  if (inode != NULL && file != NULL)
-    {
-      file->inode = inode;
-      file->pos = 0;
-      file->deny_write = false;
-      return file;
-    }
-  else
-    {
-      inode_close (inode);
-      free (file);
-      return NULL; 
-    }
-}
-
-/* Opens and returns a new file for the same inode as FILE.
-   Returns a null pointer if unsuccessful. */
-struct file *
-file_reopen (struct file *file) 
-{
-  return file_open (inode_reopen (file->inode));
-}
-
-/* Closes FILE. */
-void
-file_close (struct file *file) 
-{
-  if (file != NULL)
-    {
-      file_allow_write (file);
-      inode_close (file->inode);
-      free (file); 
-    }
-}
-
-/* Returns the inode encapsulated by FILE. */
-struct inode *
-file_get_inode (struct file *file) 
-{
-  return file->inode;
-}
-
-/* Reads SIZE bytes from FILE into BUFFER,
-   starting at the file's current position.
-   Returns the number of bytes actually read,
-   which may be less than SIZE if end of file is reached.
-   Advances FILE's position by the number of bytes read. */
-off_t
-file_read (struct file *file, void *buffer, off_t size) 
-{
-  off_t bytes_read = inode_read_at (file->inode, buffer, size, file->pos);
-  file->pos += bytes_read;
-  return bytes_read;
-}
-
-/* Reads SIZE bytes from FILE into BUFFER,
-   starting at offset FILE_OFS in the file.
-   Returns the number of bytes actually read,
-   which may be less than SIZE if end of file is reached.
-   The file's current position is unaffected. */
-off_t
-file_read_at (struct file *file, void *buffer, off_t size, off_t file_ofs) 
-{
-  return inode_read_at (file->inode, buffer, size, file_ofs);
-}
-
-/* Writes SIZE bytes from BUFFER into FILE,
-   starting at the file's current position.
-   Returns the number of bytes actually written,
-   which may be less than SIZE if end of file is reached.
-   (Normally we'd grow the file in that case, but file growth is
-   not yet implemented.)
-   Advances FILE's position by the number of bytes read. */
-off_t
-file_write (struct file *file, const void *buffer, off_t size) 
-{
-  off_t bytes_written = inode_write_at (file->inode, buffer, size, file->pos);
-  file->pos += bytes_written;
-  return bytes_written;
-}
-
-/* Writes SIZE bytes from BUFFER into FILE,
-   starting at offset FILE_OFS in the file.
-   Returns the number of bytes actually written,
-   which may be less than SIZE if end of file is reached.
-   (Normally we'd grow the file in that case, but file growth is
-   not yet implemented.)
-   The file's current position is unaffected. */
-off_t
-file_write_at (struct file *file, const void *buffer, off_t size,
-               off_t file_ofs) 
-{
-  return inode_write_at (file->inode, buffer, size, file_ofs);
-}
-
-/* Prevents write operations on FILE's underlying inode
-   until file_allow_write() is called or FILE is closed. */
-void
-file_deny_write (struct file *file) 
-{
-  ASSERT (file != NULL);
-  if (!file->deny_write) 
-    {
-      file->deny_write = true;
-      inode_deny_write (file->inode);
-    }
-}
-
-/* Re-enables write operations on FILE's underlying inode.
-   (Writes might still be denied by some other file that has the
-   same inode open.) */
-void
-file_allow_write (struct file *file) 
-{
-  ASSERT (file != NULL);
-  if (file->deny_write) 
-    {
-      file->deny_write = false;
-      inode_allow_write (file->inode);
-    }
-}
-
-/* Returns the size of FILE in bytes. */
-off_t
-file_length (struct file *file) 
-{
-  ASSERT (file != NULL);
-  return inode_length (file->inode);
-}
-
-/* Sets the current position in FILE to NEW_POS bytes from the
-   start of the file. */
-void
-file_seek (struct file *file, off_t new_pos)
-{
-  ASSERT (file != NULL);
-  ASSERT (new_pos >= 0);
-  file->pos = new_pos;
-}
-
-/* Returns the current position in FILE as a byte offset from the
-   start of the file. */
-off_t
-file_tell (struct file *file) 
-{
-  ASSERT (file != NULL);
-  return file->pos;
-}
diff --git a/src/filesys/file.h b/src/filesys/file.h
deleted file mode 100644
index a33c5af..0000000
--- a/src/filesys/file.h
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef FILESYS_FILE_H
-#define FILESYS_FILE_H
-
-#include "filesys/off_t.h"
-
-struct inode;
-
-/* Opening and closing files. */
-struct file *file_open (struct inode *);
-struct file *file_reopen (struct file *);
-void file_close (struct file *);
-struct inode *file_get_inode (struct file *);
-
-/* Reading and writing. */
-off_t file_read (struct file *, void *, off_t);
-off_t file_read_at (struct file *, void *, off_t size, off_t start);
-off_t file_write (struct file *, const void *, off_t);
-off_t file_write_at (struct file *, const void *, off_t size, off_t start);
-
-/* Preventing writes. */
-void file_deny_write (struct file *);
-void file_allow_write (struct file *);
-
-/* File position. */
-void file_seek (struct file *, off_t);
-off_t file_tell (struct file *);
-off_t file_length (struct file *);
-
-#endif /* filesys/file.h */
diff --git a/src/filesys/filesys.c b/src/filesys/filesys.c
deleted file mode 100644
index fedda08..0000000
--- a/src/filesys/filesys.c
+++ /dev/null
@@ -1,104 +0,0 @@
-#include "filesys/filesys.h"
-#include <debug.h>
-#include <stdio.h>
-#include <string.h>
-#include "filesys/file.h"
-#include "filesys/free-map.h"
-#include "filesys/inode.h"
-#include "filesys/directory.h"
-#include "devices/disk.h"
-
-/* The disk that contains the file system. */
-struct disk *filesys_disk;
-
-static void do_format (void);
-
-/* Initializes the file system module.
-   If FORMAT is true, reformats the file system. */
-void
-filesys_init (bool format) 
-{
-  filesys_disk = disk_get (0, 1);
-  if (filesys_disk == NULL)
-    PANIC ("hd0:1 (hdb) not present, file system initialization failed");
-
-  inode_init ();
-  free_map_init ();
-
-  if (format) 
-    do_format ();
-
-  free_map_open ();
-}
-
-/* Shuts down the file system module, writing any unwritten data
-   to disk. */
-void
-filesys_done (void) 
-{
-  free_map_close ();
-}
-
-/* Creates a file named NAME with the given INITIAL_SIZE.
-   Returns true if successful, false otherwise.
-   Fails if a file named NAME already exists,
-   or if internal memory allocation fails. */
-bool
-filesys_create (const char *name, off_t initial_size) 
-{
-  disk_sector_t inode_sector = 0;
-  struct dir *dir = dir_open_root ();
-  bool success = (dir != NULL
-                  && free_map_allocate (1, &inode_sector)
-                  && inode_create (inode_sector, initial_size)
-                  && dir_add (dir, name, inode_sector));
-  if (!success && inode_sector != 0) 
-    free_map_release (inode_sector, 1);
-  dir_close (dir);
-
-  return success;
-}
-
-/* Opens the file with the given NAME.
-   Returns the new file if successful or a null pointer
-   otherwise.
-   Fails if no file named NAME exists,
-   or if an internal memory allocation fails. */
-struct file *
-filesys_open (const char *name)
-{
-  struct dir *dir = dir_open_root ();
-  struct inode *inode = NULL;
-
-  if (dir != NULL)
-    dir_lookup (dir, name, &inode);
-  dir_close (dir);
-
-  return file_open (inode);
-}
-
-/* Deletes the file named NAME.
-   Returns true if successful, false on failure.
-   Fails if no file named NAME exists,
-   or if an internal memory allocation fails. */
-bool
-filesys_remove (const char *name) 
-{
-  struct dir *dir = dir_open_root ();
-  bool success = dir != NULL && dir_remove (dir, name);
-  dir_close (dir); 
-
-  return success;
-}
-
-/* Formats the file system. */
-static void
-do_format (void)
-{
-  printf ("Formatting file system...");
-  free_map_create ();
-  if (!dir_create (ROOT_DIR_SECTOR, 16))
-    PANIC ("root directory creation failed");
-  free_map_close ();
-  printf ("done.\n");
-}
diff --git a/src/filesys/filesys.h b/src/filesys/filesys.h
deleted file mode 100644
index caef83c..0000000
--- a/src/filesys/filesys.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef FILESYS_FILESYS_H
-#define FILESYS_FILESYS_H
-
-#include <stdbool.h>
-#include "filesys/off_t.h"
-
-/* Sectors of system file inodes. */
-#define FREE_MAP_SECTOR 0       /* Free map file inode sector. */
-#define ROOT_DIR_SECTOR 1       /* Root directory file inode sector. */
-
-/* Disk used for file system. */
-extern struct disk *filesys_disk;
-
-void filesys_init (bool format);
-void filesys_done (void);
-bool filesys_create (const char *name, off_t initial_size);
-struct file *filesys_open (const char *name);
-bool filesys_remove (const char *name);
-
-#endif /* filesys/filesys.h */
diff --git a/src/filesys/free-map.c b/src/filesys/free-map.c
deleted file mode 100644
index 1cd9175..0000000
--- a/src/filesys/free-map.c
+++ /dev/null
@@ -1,84 +0,0 @@
-#include "filesys/free-map.h"
-#include <bitmap.h>
-#include <debug.h>
-#include "filesys/file.h"
-#include "filesys/filesys.h"
-#include "filesys/inode.h"
-
-static struct file *free_map_file;   /* Free map file. */
-static struct bitmap *free_map;      /* Free map, one bit per disk sector. */
-
-/* Initializes the free map. */
-void
-free_map_init (void) 
-{
-  free_map = bitmap_create (disk_size (filesys_disk));
-  if (free_map == NULL)
-    PANIC ("bitmap creation failed--disk is too large");
-  bitmap_mark (free_map, FREE_MAP_SECTOR);
-  bitmap_mark (free_map, ROOT_DIR_SECTOR);
-}
-
-/* Allocates CNT consecutive sectors from the free map and stores
-   the first into *SECTORP.
-   Returns true if successful, false if all sectors were
-   available. */
-bool
-free_map_allocate (size_t cnt, disk_sector_t *sectorp) 
-{
-  disk_sector_t sector = bitmap_scan_and_flip (free_map, 0, cnt, false);
-  if (sector != BITMAP_ERROR
-      && free_map_file != NULL
-      && !bitmap_write (free_map, free_map_file))
-    {
-      bitmap_set_multiple (free_map, sector, cnt, false); 
-      sector = BITMAP_ERROR;
-    }
-  if (sector != BITMAP_ERROR)
-    *sectorp = sector;
-  return sector != BITMAP_ERROR;
-}
-
-/* Makes CNT sectors starting at SECTOR available for use. */
-void
-free_map_release (disk_sector_t sector, size_t cnt)
-{
-  ASSERT (bitmap_all (free_map, sector, cnt));
-  bitmap_set_multiple (free_map, sector, cnt, false);
-  bitmap_write (free_map, free_map_file);
-}
-
-/* Opens the free map file and reads it from disk. */
-void
-free_map_open (void) 
-{
-  free_map_file = file_open (inode_open (FREE_MAP_SECTOR));
-  if (free_map_file == NULL)
-    PANIC ("can't open free map");
-  if (!bitmap_read (free_map, free_map_file))
-    PANIC ("can't read free map");
-}
-
-/* Writes the free map to disk and closes the free map file. */
-void
-free_map_close (void) 
-{
-  file_close (free_map_file);
-}
-
-/* Creates a new free map file on disk and writes the free map to
-   it. */
-void
-free_map_create (void) 
-{
-  /* Create inode. */
-  if (!inode_create (FREE_MAP_SECTOR, bitmap_file_size (free_map)))
-    PANIC ("free map creation failed");
-
-  /* Write bitmap to file. */
-  free_map_file = file_open (inode_open (FREE_MAP_SECTOR));
-  if (free_map_file == NULL)
-    PANIC ("can't open free map");
-  if (!bitmap_write (free_map, free_map_file))
-    PANIC ("can't write free map");
-}
diff --git a/src/filesys/free-map.h b/src/filesys/free-map.h
deleted file mode 100644
index ce08f5c..0000000
--- a/src/filesys/free-map.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef FILESYS_FREE_MAP_H
-#define FILESYS_FREE_MAP_H
-
-#include <stdbool.h>
-#include <stddef.h>
-#include "devices/disk.h"
-
-void free_map_init (void);
-void free_map_read (void);
-void free_map_create (void);
-void free_map_open (void);
-void free_map_close (void);
-
-bool free_map_allocate (size_t, disk_sector_t *);
-void free_map_release (disk_sector_t, size_t);
-
-#endif /* filesys/free-map.h */
diff --git a/src/filesys/fsutil.c b/src/filesys/fsutil.c
deleted file mode 100644
index 14a4507..0000000
--- a/src/filesys/fsutil.c
+++ /dev/null
@@ -1,197 +0,0 @@
-#include "filesys/fsutil.h"
-#include <debug.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "filesys/directory.h"
-#include "filesys/file.h"
-#include "filesys/filesys.h"
-#include "devices/disk.h"
-#include "threads/malloc.h"
-#include "threads/palloc.h"
-#include "threads/vaddr.h"
-
-/* List files in the root directory. */
-void
-fsutil_ls (char **argv UNUSED) 
-{
-  struct dir *dir;
-  char name[NAME_MAX + 1];
-  
-  printf ("Files in the root directory:\n");
-  dir = dir_open_root ();
-  if (dir == NULL)
-    PANIC ("root dir open failed");
-  while (dir_readdir (dir, name))
-    printf ("%s\n", name);
-  printf ("End of listing.\n");
-}
-
-/* Prints the contents of file ARGV[1] to the system console as
-   hex and ASCII. */
-void
-fsutil_cat (char **argv)
-{
-  const char *file_name = argv[1];
-  
-  struct file *file;
-  char *buffer;
-
-  printf ("Printing '%s' to the console...\n", file_name);
-  file = filesys_open (file_name);
-  if (file == NULL)
-    PANIC ("%s: open failed", file_name);
-  buffer = palloc_get_page (PAL_ASSERT);
-  for (;;) 
-    {
-      off_t pos = file_tell (file);
-      off_t n = file_read (file, buffer, PGSIZE);
-      if (n == 0)
-        break;
-
-      hex_dump (pos, buffer, n, true); 
-    }
-  palloc_free_page (buffer);
-  file_close (file);
-}
-
-/* Deletes file ARGV[1]. */
-void
-fsutil_rm (char **argv) 
-{
-  const char *file_name = argv[1];
-  
-  printf ("Deleting '%s'...\n", file_name);
-  if (!filesys_remove (file_name))
-    PANIC ("%s: delete failed\n", file_name);
-}
-
-/* Copies from the "scratch" disk, hdc or hd1:0 to file ARGV[1]
-   in the file system.
-
-   The current sector on the scratch disk must begin with the
-   string "PUT\0" followed by a 32-bit little-endian integer
-   indicating the file size in bytes.  Subsequent sectors hold
-   the file content.
-
-   The first call to this function will read starting at the
-   beginning of the scratch disk.  Later calls advance across the
-   disk.  This disk position is independent of that used for
-   fsutil_get(), so all `put's should precede all `get's. */
-void
-fsutil_put (char **argv) 
-{
-  static disk_sector_t sector = 0;
-
-  const char *file_name = argv[1];
-  struct disk *src;
-  struct file *dst;
-  off_t size;
-  void *buffer;
-
-  printf ("Putting '%s' into the file system...\n", file_name);
-
-  /* Allocate buffer. */
-  buffer = malloc (DISK_SECTOR_SIZE);
-  if (buffer == NULL)
-    PANIC ("couldn't allocate buffer");
-
-  /* Open source disk and read file size. */
-  src = disk_get (1, 0);
-  if (src == NULL)
-    PANIC ("couldn't open source disk (hdc or hd1:0)");
-
-  /* Read file size. */
-  disk_read (src, sector++, buffer);
-  if (memcmp (buffer, "PUT", 4))
-    PANIC ("%s: missing PUT signature on scratch disk", file_name);
-  size = ((int32_t *) buffer)[1];
-  if (size < 0)
-    PANIC ("%s: invalid file size %d", file_name, size);
-  
-  /* Create destination file. */
-  if (!filesys_create (file_name, size))
-    PANIC ("%s: create failed", file_name);
-  dst = filesys_open (file_name);
-  if (dst == NULL)
-    PANIC ("%s: open failed", file_name);
-
-  /* Do copy. */
-  while (size > 0)
-    {
-      int chunk_size = size > DISK_SECTOR_SIZE ? DISK_SECTOR_SIZE : size;
-      disk_read (src, sector++, buffer);
-      if (file_write (dst, buffer, chunk_size) != chunk_size)
-        PANIC ("%s: write failed with %"PROTd" bytes unwritten",
-               file_name, size);
-      size -= chunk_size;
-    }
-
-  /* Finish up. */
-  file_close (dst);
-  free (buffer);
-}
-
-/* Copies file FILE_NAME from the file system to the scratch disk.
-
-   The current sector on the scratch disk will receive "GET\0"
-   followed by the file's size in bytes as a 32-bit,
-   little-endian integer.  Subsequent sectors receive the file's
-   data.
-
-   The first call to this function will write starting at the
-   beginning of the scratch disk.  Later calls advance across the
-   disk.  This disk position is independent of that used for
-   fsutil_put(), so all `put's should precede all `get's. */
-void
-fsutil_get (char **argv)
-{
-  static disk_sector_t sector = 0;
-
-  const char *file_name = argv[1];
-  void *buffer;
-  struct file *src;
-  struct disk *dst;
-  off_t size;
-
-  printf ("Getting '%s' from the file system...\n", file_name);
-
-  /* Allocate buffer. */
-  buffer = malloc (DISK_SECTOR_SIZE);
-  if (buffer == NULL)
-    PANIC ("couldn't allocate buffer");
-
-  /* Open source file. */
-  src = filesys_open (file_name);
-  if (src == NULL)
-    PANIC ("%s: open failed", file_name);
-  size = file_length (src);
-
-  /* Open target disk. */
-  dst = disk_get (1, 0);
-  if (dst == NULL)
-    PANIC ("couldn't open target disk (hdc or hd1:0)");
-  
-  /* Write size to sector 0. */
-  memset (buffer, 0, DISK_SECTOR_SIZE);
-  memcpy (buffer, "GET", 4);
-  ((int32_t *) buffer)[1] = size;
-  disk_write (dst, sector++, buffer);
-  
-  /* Do copy. */
-  while (size > 0) 
-    {
-      int chunk_size = size > DISK_SECTOR_SIZE ? DISK_SECTOR_SIZE : size;
-      if (sector >= disk_size (dst))
-        PANIC ("%s: out of space on scratch disk", file_name);
-      if (file_read (src, buffer, chunk_size) != chunk_size)
-        PANIC ("%s: read failed with %"PROTd" bytes unread", file_name, size);
-      memset (buffer + chunk_size, 0, DISK_SECTOR_SIZE - chunk_size);
-      disk_write (dst, sector++, buffer);
-      size -= chunk_size;
-    }
-
-  /* Finish up. */
-  file_close (src);
-  free (buffer);
-}
diff --git a/src/filesys/fsutil.h b/src/filesys/fsutil.h
deleted file mode 100644
index abebfe2..0000000
--- a/src/filesys/fsutil.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef FILESYS_FSUTIL_H
-#define FILESYS_FSUTIL_H
-
-void fsutil_ls (char **argv);
-void fsutil_cat (char **argv);
-void fsutil_rm (char **argv);
-void fsutil_put (char **argv);
-void fsutil_get (char **argv);
-
-#endif /* filesys/fsutil.h */
diff --git a/src/filesys/inode.c b/src/filesys/inode.c
deleted file mode 100644
index cfdcb7b..0000000
--- a/src/filesys/inode.c
+++ /dev/null
@@ -1,348 +0,0 @@
-#include "filesys/inode.h"
-#include <list.h>
-#include <debug.h>
-#include <round.h>
-#include <string.h>
-#include "filesys/filesys.h"
-#include "filesys/free-map.h"
-#include "threads/malloc.h"
-
-/* Identifies an inode. */
-#define INODE_MAGIC 0x494e4f44
-
-/* On-disk inode.
-   Must be exactly DISK_SECTOR_SIZE bytes long. */
-struct inode_disk
-  {
-    disk_sector_t start;                /* First data sector. */
-    off_t length;                       /* File size in bytes. */
-    unsigned magic;                     /* Magic number. */
-    uint32_t unused[125];               /* Not used. */
-  };
-
-/* Returns the number of sectors to allocate for an inode SIZE
-   bytes long. */
-static inline size_t
-bytes_to_sectors (off_t size)
-{
-  return DIV_ROUND_UP (size, DISK_SECTOR_SIZE);
-}
-
-/* In-memory inode. */
-struct inode 
-  {
-    struct list_elem elem;              /* Element in inode list. */
-    disk_sector_t sector;               /* Sector number of disk location. */
-    int open_cnt;                       /* Number of openers. */
-    bool removed;                       /* True if deleted, false otherwise. */
-    int deny_write_cnt;                 /* 0: writes ok, >0: deny writes. */
-    struct inode_disk data;             /* Inode content. */
-  };
-
-/* Returns the disk sector that contains byte offset POS within
-   INODE.
-   Returns -1 if INODE does not contain data for a byte at offset
-   POS. */
-static disk_sector_t
-byte_to_sector (const struct inode *inode, off_t pos) 
-{
-  ASSERT (inode != NULL);
-  if (pos < inode->data.length)
-    return inode->data.start + pos / DISK_SECTOR_SIZE;
-  else
-    return -1;
-}
-
-/* List of open inodes, so that opening a single inode twice
-   returns the same `struct inode'. */
-static struct list open_inodes;
-
-/* Initializes the inode module. */
-void
-inode_init (void) 
-{
-  list_init (&open_inodes);
-}
-
-/* Initializes an inode with LENGTH bytes of data and
-   writes the new inode to sector SECTOR on the file system
-   disk.
-   Returns true if successful.
-   Returns false if memory or disk allocation fails. */
-bool
-inode_create (disk_sector_t sector, off_t length)
-{
-  struct inode_disk *disk_inode = NULL;
-  bool success = false;
-
-  ASSERT (length >= 0);
-
-  /* If this assertion fails, the inode structure is not exactly
-     one sector in size, and you should fix that. */
-  ASSERT (sizeof *disk_inode == DISK_SECTOR_SIZE);
-
-  disk_inode = calloc (1, sizeof *disk_inode);
-  if (disk_inode != NULL)
-    {
-      size_t sectors = bytes_to_sectors (length);
-      disk_inode->length = length;
-      disk_inode->magic = INODE_MAGIC;
-      if (free_map_allocate (sectors, &disk_inode->start))
-        {
-          disk_write (filesys_disk, sector, disk_inode);
-          if (sectors > 0) 
-            {
-              static char zeros[DISK_SECTOR_SIZE];
-              size_t i;
-              
-              for (i = 0; i < sectors; i++) 
-                disk_write (filesys_disk, disk_inode->start + i, zeros); 
-            }
-          success = true; 
-        } 
-      free (disk_inode);
-    }
-  return success;
-}
-
-/* Reads an inode from SECTOR
-   and returns a `struct inode' that contains it.
-   Returns a null pointer if memory allocation fails. */
-struct inode *
-inode_open (disk_sector_t sector) 
-{
-  struct list_elem *e;
-  struct inode *inode;
-
-  /* Check whether this inode is already open. */
-  for (e = list_begin (&open_inodes); e != list_end (&open_inodes);
-       e = list_next (e)) 
-    {
-      inode = list_entry (e, struct inode, elem);
-      if (inode->sector == sector) 
-        {
-          inode_reopen (inode);
-          return inode; 
-        }
-    }
-
-  /* Allocate memory. */
-  inode = malloc (sizeof *inode);
-  if (inode == NULL)
-    return NULL;
-
-  /* Initialize. */
-  list_push_front (&open_inodes, &inode->elem);
-  inode->sector = sector;
-  inode->open_cnt = 1;
-  inode->deny_write_cnt = 0;
-  inode->removed = false;
-  disk_read (filesys_disk, inode->sector, &inode->data);
-  return inode;
-}
-
-/* Reopens and returns INODE. */
-struct inode *
-inode_reopen (struct inode *inode)
-{
-  if (inode != NULL) 
-    {
-      ASSERT(inode->open_cnt != 0);
-      inode->open_cnt++;
-    }
-  return inode;
-}
-
-/* Returns INODE's inode number. */
-disk_sector_t
-inode_get_inumber (const struct inode *inode)
-{
-  return inode->sector;
-}
-
-/* Closes INODE and writes it to disk.
-   If this was the last reference to INODE, frees its memory.
-   If INODE was also a removed inode, frees its blocks. */
-void
-inode_close (struct inode *inode) 
-{
-  /* Ignore null pointer. */
-  if (inode == NULL)
-    return;
-
-  /* Release resources if this was the last opener. */
-  if (--inode->open_cnt == 0)
-    {
-      /* Remove from inode list and release lock. */
-      list_remove (&inode->elem);
- 
-      /* Deallocate blocks if removed. */
-      if (inode->removed) 
-        {
-          free_map_release (inode->sector, 1);
-          free_map_release (inode->data.start,
-                            bytes_to_sectors (inode->data.length)); 
-        }
-
-      free (inode); 
-    }
-}
-
-/* Marks INODE to be deleted when it is closed by the last caller who
-   has it open. */
-void
-inode_remove (struct inode *inode) 
-{
-  ASSERT (inode != NULL);
-  inode->removed = true;
-}
-
-/* Reads SIZE bytes from INODE into BUFFER, starting at position OFFSET.
-   Returns the number of bytes actually read, which may be less
-   than SIZE if an error occurs or end of file is reached. */
-off_t
-inode_read_at (struct inode *inode, void *buffer_, off_t size, off_t offset) 
-{
-  uint8_t *buffer = buffer_;
-  off_t bytes_read = 0;
-  uint8_t *bounce = NULL;
-
-  while (size > 0) 
-    {
-      /* Disk sector to read, starting byte offset within sector. */
-      disk_sector_t sector_idx = byte_to_sector (inode, offset);
-      int sector_ofs = offset % DISK_SECTOR_SIZE;
-
-      /* Bytes left in inode, bytes left in sector, lesser of the two. */
-      off_t inode_left = inode_length (inode) - offset;
-      int sector_left = DISK_SECTOR_SIZE - sector_ofs;
-      int min_left = inode_left < sector_left ? inode_left : sector_left;
-
-      /* Number of bytes to actually copy out of this sector. */
-      int chunk_size = size < min_left ? size : min_left;
-      if (chunk_size <= 0)
-        break;
-
-      if (sector_ofs == 0 && chunk_size == DISK_SECTOR_SIZE) 
-        {
-          /* Read full sector directly into caller's buffer. */
-          disk_read (filesys_disk, sector_idx, buffer + bytes_read); 
-        }
-      else 
-        {
-          /* Read sector into bounce buffer, then partially copy
-             into caller's buffer. */
-          if (bounce == NULL) 
-            {
-              bounce = malloc (DISK_SECTOR_SIZE);
-              if (bounce == NULL)
-                break;
-            }
-          disk_read (filesys_disk, sector_idx, bounce);
-          memcpy (buffer + bytes_read, bounce + sector_ofs, chunk_size);
-        }
-      
-      /* Advance. */
-      size -= chunk_size;
-      offset += chunk_size;
-      bytes_read += chunk_size;
-    }
-  free (bounce);
-
-  return bytes_read;
-}
-
-/* Writes SIZE bytes from BUFFER into INODE, starting at OFFSET.
-   Returns the number of bytes actually written, which may be
-   less than SIZE if end of file is reached or an error occurs.
-   (Normally a write at end of file would extend the inode, but
-   growth is not yet implemented.) */
-off_t
-inode_write_at (struct inode *inode, const void *buffer_, off_t size,
-                off_t offset) 
-{
-  const uint8_t *buffer = buffer_;
-  off_t bytes_written = 0;
-  uint8_t *bounce = NULL;
-
-  if (inode->deny_write_cnt)
-    return 0;
-
-  while (size > 0) 
-    {
-      /* Sector to write, starting byte offset within sector. */
-      disk_sector_t sector_idx = byte_to_sector (inode, offset);
-      int sector_ofs = offset % DISK_SECTOR_SIZE;
-
-      /* Bytes left in inode, bytes left in sector, lesser of the two. */
-      off_t inode_left = inode_length (inode) - offset;
-      int sector_left = DISK_SECTOR_SIZE - sector_ofs;
-      int min_left = inode_left < sector_left ? inode_left : sector_left;
-
-      /* Number of bytes to actually write into this sector. */
-      int chunk_size = size < min_left ? size : min_left;
-      if (chunk_size <= 0)
-        break;
-
-      if (sector_ofs == 0 && chunk_size == DISK_SECTOR_SIZE) 
-        {
-          /* Write full sector directly to disk. */
-          disk_write (filesys_disk, sector_idx, buffer + bytes_written); 
-        }
-      else 
-        {
-          /* We need a bounce buffer. */
-          if (bounce == NULL) 
-            {
-              bounce = malloc (DISK_SECTOR_SIZE);
-              if (bounce == NULL)
-                break;
-            }
-
-          /* If the sector contains data before or after the chunk
-             we're writing, then we need to read in the sector
-             first.  Otherwise we start with a sector of all zeros. */
-          if (sector_ofs > 0 || chunk_size < sector_left) 
-            disk_read (filesys_disk, sector_idx, bounce);
-          else
-            memset (bounce, 0, DISK_SECTOR_SIZE);
-          memcpy (bounce + sector_ofs, buffer + bytes_written, chunk_size);
-          disk_write (filesys_disk, sector_idx, bounce); 
-        }
-
-      /* Advance. */
-      size -= chunk_size;
-      offset += chunk_size;
-      bytes_written += chunk_size;
-    }
-  free (bounce);
-
-  return bytes_written;
-}
-
-/* Disables writes to INODE.
-   May be called at most once per inode opener. */
-void
-inode_deny_write (struct inode *inode) 
-{
-  inode->deny_write_cnt++;
-  ASSERT (inode->deny_write_cnt <= inode->open_cnt);
-}
-
-/* Re-enables writes to INODE.
-   Must be called once by each inode opener who has called
-   inode_deny_write() on the inode, before closing the inode. */
-void
-inode_allow_write (struct inode *inode) 
-{
-  ASSERT (inode->deny_write_cnt > 0);
-  ASSERT (inode->deny_write_cnt <= inode->open_cnt);
-  inode->deny_write_cnt--;
-}
-
-/* Returns the length, in bytes, of INODE's data. */
-off_t
-inode_length (const struct inode *inode)
-{
-  return inode->data.length;
-}
diff --git a/src/filesys/inode.h b/src/filesys/inode.h
deleted file mode 100644
index be7df63..0000000
--- a/src/filesys/inode.h
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifndef FILESYS_INODE_H
-#define FILESYS_INODE_H
-
-#include <stdbool.h>
-#include "filesys/off_t.h"
-#include "devices/disk.h"
-
-struct bitmap;
-
-void inode_init (void);
-bool inode_create (disk_sector_t, off_t);
-struct inode *inode_open (disk_sector_t);
-struct inode *inode_reopen (struct inode *);
-disk_sector_t inode_get_inumber (const struct inode *);
-void inode_close (struct inode *);
-void inode_remove (struct inode *);
-off_t inode_read_at (struct inode *, void *, off_t size, off_t offset);
-off_t inode_write_at (struct inode *, const void *, off_t size, off_t offset);
-void inode_deny_write (struct inode *);
-void inode_allow_write (struct inode *);
-off_t inode_length (const struct inode *);
-
-#endif /* filesys/inode.h */
diff --git a/src/filesys/off_t.h b/src/filesys/off_t.h
deleted file mode 100644
index 9caff4d..0000000
--- a/src/filesys/off_t.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef FILESYS_OFF_T_H
-#define FILESYS_OFF_T_H
-
-#include <stdint.h>
-
-/* An offset within a file.
-   This is a separate header because multiple headers want this
-   definition but not any others. */
-typedef int32_t off_t;
-
-/* Format specifier for printf(), e.g.:
-   printf ("offset=%"PROTd"\n", offset); */
-#define PROTd PRId32
-
-#endif /* filesys/off_t.h */
diff --git a/src/lib/arithmetic.c b/src/lib/arithmetic.c
deleted file mode 100644
index bfc9b5a..0000000
--- a/src/lib/arithmetic.c
+++ /dev/null
@@ -1,189 +0,0 @@
-#include <stdint.h>
-
-/* On x86, division of one 64-bit integer by another cannot be
-   done with a single instruction or a short sequence.  Thus, GCC
-   implements 64-bit division and remainder operations through
-   function calls.  These functions are normally obtained from
-   libgcc, which is automatically included by GCC in any link
-   that it does.
-
-   Some x86-64 machines, however, have a compiler and utilities
-   that can generate 32-bit x86 code without having any of the
-   necessary libraries, including libgcc.  Thus, we can make
-   Pintos work on these machines by simply implementing our own
-   64-bit division routines, which are the only routines from
-   libgcc that Pintos requires.
-
-   Completeness is another reason to include these routines.  If
-   Pintos is completely self-contained, then that makes it that
-   much less mysterious. */
-
-/* Uses x86 DIVL instruction to divide 64-bit N by 32-bit D to
-   yield a 32-bit quotient.  Returns the quotient.
-   Traps with a divide error (#DE) if the quotient does not fit
-   in 32 bits. */
-static inline uint32_t
-divl (uint64_t n, uint32_t d)
-{
-  uint32_t n1 = n >> 32;
-  uint32_t n0 = n;
-  uint32_t q, r;
-
-  asm ("divl %4"
-       : "=d" (r), "=a" (q)
-       : "0" (n1), "1" (n0), "rm" (d));
-
-  return q;
-}
-
-/* Returns the number of leading zero bits in X,
-   which must be nonzero. */
-static int
-nlz (uint32_t x) 
-{
-  /* This technique is portable, but there are better ways to do
-     it on particular systems.  With sufficiently new enough GCC,
-     you can use __builtin_clz() to take advantage of GCC's
-     knowledge of how to do it.  Or you can use the x86 BSR
-     instruction directly. */
-  int n = 0;
-  if (x <= 0x0000FFFF)
-    {
-      n += 16;
-      x <<= 16; 
-    }
-  if (x <= 0x00FFFFFF)
-    {
-      n += 8;
-      x <<= 8; 
-    }
-  if (x <= 0x0FFFFFFF)
-    {
-      n += 4;
-      x <<= 4;
-    }
-  if (x <= 0x3FFFFFFF)
-    {
-      n += 2;
-      x <<= 2; 
-    }
-  if (x <= 0x7FFFFFFF)
-    n++;
-  return n;
-}
-
-/* Divides unsigned 64-bit N by unsigned 64-bit D and returns the
-   quotient. */
-static uint64_t
-udiv64 (uint64_t n, uint64_t d)
-{
-  if ((d >> 32) == 0) 
-    {
-      /* Proof of correctness:
-
-         Let n, d, b, n1, and n0 be defined as in this function.
-         Let [x] be the "floor" of x.  Let T = b[n1/d].  Assume d
-         nonzero.  Then:
-             [n/d] = [n/d] - T + T
-                   = [n/d - T] + T                         by (1) below
-                   = [(b*n1 + n0)/d - T] + T               by definition of n
-                   = [(b*n1 + n0)/d - dT/d] + T
-                   = [(b(n1 - d[n1/d]) + n0)/d] + T
-                   = [(b[n1 % d] + n0)/d] + T,             by definition of %
-         which is the expression calculated below.
-
-         (1) Note that for any real x, integer i: [x] + i = [x + i].
-
-         To prevent divl() from trapping, [(b[n1 % d] + n0)/d] must
-         be less than b.  Assume that [n1 % d] and n0 take their
-         respective maximum values of d - 1 and b - 1:
-                 [(b(d - 1) + (b - 1))/d] < b
-             <=> [(bd - 1)/d] < b
-             <=> [b - 1/d] < b
-         which is a tautology.
-
-         Therefore, this code is correct and will not trap. */
-      uint64_t b = 1ULL << 32;
-      uint32_t n1 = n >> 32;
-      uint32_t n0 = n; 
-      uint32_t d0 = d;
-
-      return divl (b * (n1 % d0) + n0, d0) + b * (n1 / d0); 
-    }
-  else 
-    {
-      /* Based on the algorithm and proof available from
-         http://www.hackersdelight.org/revisions.pdf. */
-      if (n < d)
-        return 0;
-      else 
-        {
-          uint32_t d1 = d >> 32;
-          int s = nlz (d1);
-          uint64_t q = divl (n >> 1, (d << s) >> 32) >> (31 - s);
-          return n - (q - 1) * d < d ? q - 1 : q; 
-        }
-    }
-}
-
-/* Divides unsigned 64-bit N by unsigned 64-bit D and returns the
-   remainder. */
-static uint32_t
-umod64 (uint64_t n, uint64_t d)
-{
-  return n - d * udiv64 (n, d);
-}
-
-/* Divides signed 64-bit N by signed 64-bit D and returns the
-   quotient. */
-static int64_t
-sdiv64 (int64_t n, int64_t d)
-{
-  uint64_t n_abs = n >= 0 ? (uint64_t) n : -(uint64_t) n;
-  uint64_t d_abs = d >= 0 ? (uint64_t) d : -(uint64_t) d;
-  uint64_t q_abs = udiv64 (n_abs, d_abs);
-  return (n < 0) == (d < 0) ? (int64_t) q_abs : -(int64_t) q_abs;
-}
-
-/* Divides signed 64-bit N by signed 64-bit D and returns the
-   remainder. */
-static int32_t
-smod64 (int64_t n, int64_t d)
-{
-  return n - d * sdiv64 (n, d);
-}
-
-/* These are the routines that GCC calls. */
-
-long long __divdi3 (long long n, long long d);
-long long __moddi3 (long long n, long long d);
-unsigned long long __udivdi3 (unsigned long long n, unsigned long long d);
-unsigned long long __umoddi3 (unsigned long long n, unsigned long long d);
-
-/* Signed 64-bit division. */
-long long
-__divdi3 (long long n, long long d) 
-{
-  return sdiv64 (n, d);
-}
-
-/* Signed 64-bit remainder. */
-long long
-__moddi3 (long long n, long long d) 
-{
-  return smod64 (n, d);
-}
-
-/* Unsigned 64-bit division. */
-unsigned long long
-__udivdi3 (unsigned long long n, unsigned long long d) 
-{
-  return udiv64 (n, d);
-}
-
-/* Unsigned 64-bit remainder. */
-unsigned long long
-__umoddi3 (unsigned long long n, unsigned long long d) 
-{
-  return umod64 (n, d);
-}
diff --git a/src/lib/ctype.h b/src/lib/ctype.h
deleted file mode 100644
index 9096aca..0000000
--- a/src/lib/ctype.h
+++ /dev/null
@@ -1,28 +0,0 @@
-#ifndef __LIB_CTYPE_H
-#define __LIB_CTYPE_H
-
-static inline int islower (int c) { return c >= 'a' && c <= 'z'; }
-static inline int isupper (int c) { return c >= 'A' && c <= 'Z'; }
-static inline int isalpha (int c) { return islower (c) || isupper (c); }
-static inline int isdigit (int c) { return c >= '0' && c <= '9'; }
-static inline int isalnum (int c) { return isalpha (c) || isdigit (c); }
-static inline int isxdigit (int c) {
-  return isdigit (c) || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F');
-}
-static inline int isspace (int c) {
-  return (c == ' ' || c == '\f' || c == '\n'
-          || c == '\r' || c == '\t' || c == '\v');
-}
-static inline int isblank (int c) { return c == ' ' || c == '\t'; }
-static inline int isgraph (int c) { return c > 32 && c < 127; }
-static inline int isprint (int c) { return c >= 32 && c < 127; }
-static inline int iscntrl (int c) { return (c >= 0 && c < 32) || c == 127; }
-static inline int isascii (int c) { return c >= 0 && c < 128; }
-static inline int ispunct (int c) {
-  return isprint (c) && !isalnum (c) && !isspace (c);
-}
-
-static inline int tolower (int c) { return isupper (c) ? c - 'A' + 'a' : c; }
-static inline int toupper (int c) { return islower (c) ? c - 'a' + 'A' : c; }
-
-#endif /* lib/ctype.h */
diff --git a/src/lib/debug.c b/src/lib/debug.c
deleted file mode 100644
index 6d7c9e1..0000000
--- a/src/lib/debug.c
+++ /dev/null
@@ -1,32 +0,0 @@
-#include <debug.h>
-#include <stdarg.h>
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-/* Prints the call stack, that is, a list of addresses, one in
-   each of the functions we are nested within.  gdb or addr2line
-   may be applied to kernel.o to translate these into file names,
-   line numbers, and function names.  */
-void
-debug_backtrace (void) 
-{
-  static bool explained;
-  void **frame;
-  
-  printf ("Call stack:");
-  for (frame = __builtin_frame_address (0);
-       frame != NULL && frame[0] != NULL;
-       frame = frame[0]) 
-    printf (" %p", frame[1]);
-  printf (".\n");
-
-  if (!explained) 
-    {
-      explained = true;
-      printf ("The `backtrace' program can make call stacks useful.\n"
-              "Read \"Backtraces\" in the \"Debugging Tools\" chapter\n"
-              "of the Pintos documentation for more information.\n");
-    }
-}
diff --git a/src/lib/debug.h b/src/lib/debug.h
deleted file mode 100644
index 3218ab6..0000000
--- a/src/lib/debug.h
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef __LIB_DEBUG_H
-#define __LIB_DEBUG_H
-
-/* GCC lets us add "attributes" to functions, function
-   parameters, etc. to indicate their properties.
-   See the GCC manual for details. */
-#define UNUSED __attribute__ ((unused))
-#define NO_RETURN __attribute__ ((noreturn))
-#define NO_INLINE __attribute__ ((noinline))
-#define PRINTF_FORMAT(FMT, FIRST) __attribute__ ((format (printf, FMT, FIRST)))
-
-/* Halts the OS, printing the source file name, line number, and
-   function name, plus a user-specific message. */
-#define PANIC(...) debug_panic (__FILE__, __LINE__, __func__, __VA_ARGS__)
-
-void debug_panic (const char *file, int line, const char *function,
-                  const char *message, ...) PRINTF_FORMAT (4, 5) NO_RETURN;
-void debug_backtrace (void);
-
-#endif
-
-
-
-/* This is outside the header guard so that debug.h may be
-   included multiple times with different settings of NDEBUG. */
-#undef ASSERT
-#undef NOT_REACHED
-
-#ifndef NDEBUG
-#define ASSERT(CONDITION)                                       \
-        if (CONDITION) { } else {                               \
-                PANIC ("assertion `%s' failed.", #CONDITION);   \
-        }
-#define NOT_REACHED() PANIC ("executed an unreachable statement");
-#else
-#define ASSERT(CONDITION) ((void) 0)
-#define NOT_REACHED() for (;;)
-#endif /* lib/debug.h */
diff --git a/src/lib/inttypes.h b/src/lib/inttypes.h
deleted file mode 100644
index f703725..0000000
--- a/src/lib/inttypes.h
+++ /dev/null
@@ -1,48 +0,0 @@
-#ifndef __LIB_INTTYPES_H
-#define __LIB_INTTYPES_H
-
-#include <stdint.h>
-
-#define PRId8 "hhd"
-#define PRIi8 "hhi"
-#define PRIo8 "hho"
-#define PRIu8 "hhu"
-#define PRIx8 "hhx"
-#define PRIX8 "hhX"
-
-#define PRId16 "hd"
-#define PRIi16 "hi"
-#define PRIo16 "ho"
-#define PRIu16 "hu"
-#define PRIx16 "hx"
-#define PRIX16 "hX"
-
-#define PRId32 "d"
-#define PRIi32 "i"
-#define PRIo32 "o"
-#define PRIu32 "u"
-#define PRIx32 "x"
-#define PRIX32 "X"
-
-#define PRId64 "lld"
-#define PRIi64 "lli"
-#define PRIo64 "llo"
-#define PRIu64 "llu"
-#define PRIx64 "llx"
-#define PRIX64 "llX"
-
-#define PRIdMAX "jd"
-#define PRIiMAX "ji"
-#define PRIoMAX "jo"
-#define PRIuMAX "ju"
-#define PRIxMAX "jx"
-#define PRIXMAX "jX"
-
-#define PRIdPTR "td"
-#define PRIiPTR "ti"
-#define PRIoPTR "to"
-#define PRIuPTR "tu"
-#define PRIxPTR "tx"
-#define PRIXPTR "tX"
-
-#endif /* lib/inttypes.h */
diff --git a/src/lib/kernel/bitmap.c b/src/lib/kernel/bitmap.c
deleted file mode 100644
index d323b89..0000000
--- a/src/lib/kernel/bitmap.c
+++ /dev/null
@@ -1,372 +0,0 @@
-#include "bitmap.h"
-#include <debug.h>
-#include <limits.h>
-#include <round.h>
-#include <stdio.h>
-#include "threads/malloc.h"
-#ifdef FILESYS
-#include "filesys/file.h"
-#endif
-
-/* Element type.
-
-   This must be an unsigned integer type at least as wide as int.
-
-   Each bit represents one bit in the bitmap.
-   If bit 0 in an element represents bit K in the bitmap,
-   then bit 1 in the element represents bit K+1 in the bitmap,
-   and so on. */
-typedef unsigned long elem_type;
-
-/* Number of bits in an element. */
-#define ELEM_BITS (sizeof (elem_type) * CHAR_BIT)
-
-/* From the outside, a bitmap is an array of bits.  From the
-   inside, it's an array of elem_type (defined above) that
-   simulates an array of bits. */
-struct bitmap
-  {
-    size_t bit_cnt;     /* Number of bits. */
-    elem_type *bits;    /* Elements that represent bits. */
-  };
-
-/* Returns the index of the element that contains the bit
-   numbered BIT_IDX. */
-static inline size_t
-elem_idx (size_t bit_idx) 
-{
-  return bit_idx / ELEM_BITS;
-}
-
-/* Returns an elem_type where only the bit corresponding to
-   BIT_IDX is turned on. */
-static inline elem_type
-bit_mask (size_t bit_idx) 
-{
-  return (elem_type) 1 << (bit_idx % ELEM_BITS);
-}
-
-/* Returns the number of elements required for BIT_CNT bits. */
-static inline size_t
-elem_cnt (size_t bit_cnt)
-{
-  return DIV_ROUND_UP (bit_cnt, ELEM_BITS);
-}
-
-/* Returns the number of bytes required for BIT_CNT bits. */
-static inline size_t
-byte_cnt (size_t bit_cnt)
-{
-  return sizeof (elem_type) * elem_cnt (bit_cnt);
-}
-
-/* Returns a bit mask in which the bits actually used in the last
-   element of B's bits are set to 1 and the rest are set to 0. */
-static inline elem_type
-last_mask (const struct bitmap *b) 
-{
-  int last_bits = b->bit_cnt % ELEM_BITS;
-  return last_bits ? ((elem_type) 1 << last_bits) - 1 : (elem_type) -1;
-}
-
-/* Creation and destruction. */
-
-/* Initializes B to be a bitmap of BIT_CNT bits
-   and sets all of its bits to false.
-   Returns true if success, false if memory allocation
-   failed. */
-struct bitmap *
-bitmap_create (size_t bit_cnt) 
-{
-  struct bitmap *b = malloc (sizeof *b);
-  if (b != NULL)
-    {
-      b->bit_cnt = bit_cnt;
-      b->bits = malloc (byte_cnt (bit_cnt));
-      if (b->bits != NULL || bit_cnt == 0)
-        {
-          bitmap_set_all (b, false);
-          return b;
-        }
-      free (b);
-    }
-  return NULL;
-}
-
-/* Creates and returns a bitmap with BIT_CNT bits in the
-   BLOCK_SIZE bytes of storage preallocated at BLOCK.
-   BLOCK_SIZE must be at least bitmap_needed_bytes(BIT_CNT). */
-struct bitmap *
-bitmap_create_in_buf (size_t bit_cnt, void *block, size_t block_size UNUSED)
-{
-  struct bitmap *b = block;
-  
-  ASSERT (block_size >= bitmap_buf_size (bit_cnt));
-
-  b->bit_cnt = bit_cnt;
-  b->bits = (elem_type *) (b + 1);
-  bitmap_set_all (b, false);
-  return b;
-}
-
-/* Returns the number of bytes required to accomodate a bitmap
-   with BIT_CNT bits (for use with bitmap_create_in_buf()). */
-size_t
-bitmap_buf_size (size_t bit_cnt) 
-{
-  return sizeof (struct bitmap) + byte_cnt (bit_cnt);
-}
-
-/* Destroys bitmap B, freeing its storage.
-   Not for use on bitmaps created by
-   bitmap_create_preallocated(). */
-void
-bitmap_destroy (struct bitmap *b) 
-{
-  if (b != NULL) 
-    {
-      free (b->bits);
-      free (b);
-    }
-}
-
-/* Bitmap size. */
-
-/* Returns the number of bits in B. */
-size_t
-bitmap_size (const struct bitmap *b)
-{
-  return b->bit_cnt;
-}
-
-/* Setting and testing single bits. */
-
-/* Atomically sets the bit numbered IDX in B to VALUE. */
-void
-bitmap_set (struct bitmap *b, size_t idx, bool value) 
-{
-  ASSERT (b != NULL);
-  ASSERT (idx < b->bit_cnt);
-  if (value)
-    bitmap_mark (b, idx);
-  else
-    bitmap_reset (b, idx);
-}
-
-/* Atomically sets the bit numbered BIT_IDX in B to true. */
-void
-bitmap_mark (struct bitmap *b, size_t bit_idx) 
-{
-  size_t idx = elem_idx (bit_idx);
-  elem_type mask = bit_mask (bit_idx);
-
-  /* This is equivalent to `b->bits[idx] |= mask' except that it
-     is guaranteed to be atomic on a uniprocessor machine.  See
-     the description of the OR instruction in [IA32-v2b]. */
-  asm ("orl %1, %0" : "=m" (b->bits[idx]) : "r" (mask) : "cc");
-}
-
-/* Atomically sets the bit numbered BIT_IDX in B to false. */
-void
-bitmap_reset (struct bitmap *b, size_t bit_idx) 
-{
-  size_t idx = elem_idx (bit_idx);
-  elem_type mask = bit_mask (bit_idx);
-
-  /* This is equivalent to `b->bits[idx] &= ~mask' except that it
-     is guaranteed to be atomic on a uniprocessor machine.  See
-     the description of the AND instruction in [IA32-v2a]. */
-  asm ("andl %1, %0" : "=m" (b->bits[idx]) : "r" (~mask) : "cc");
-}
-
-/* Atomically toggles the bit numbered IDX in B;
-   that is, if it is true, makes it false,
-   and if it is false, makes it true. */
-void
-bitmap_flip (struct bitmap *b, size_t bit_idx) 
-{
-  size_t idx = elem_idx (bit_idx);
-  elem_type mask = bit_mask (bit_idx);
-
-  /* This is equivalent to `b->bits[idx] ^= mask' except that it
-     is guaranteed to be atomic on a uniprocessor machine.  See
-     the description of the XOR instruction in [IA32-v2b]. */
-  asm ("xorl %1, %0" : "=m" (b->bits[idx]) : "r" (mask) : "cc");
-}
-
-/* Returns the value of the bit numbered IDX in B. */
-bool
-bitmap_test (const struct bitmap *b, size_t idx) 
-{
-  ASSERT (b != NULL);
-  ASSERT (idx < b->bit_cnt);
-  return (b->bits[elem_idx (idx)] & bit_mask (idx)) != 0;
-}
-
-/* Setting and testing multiple bits. */
-
-/* Sets all bits in B to VALUE. */
-void
-bitmap_set_all (struct bitmap *b, bool value) 
-{
-  ASSERT (b != NULL);
-
-  bitmap_set_multiple (b, 0, bitmap_size (b), value);
-}
-
-/* Sets the CNT bits starting at START in B to VALUE. */
-void
-bitmap_set_multiple (struct bitmap *b, size_t start, size_t cnt, bool value) 
-{
-  size_t i;
-  
-  ASSERT (b != NULL);
-  ASSERT (start <= b->bit_cnt);
-  ASSERT (start + cnt <= b->bit_cnt);
-
-  for (i = 0; i < cnt; i++)
-    bitmap_set (b, start + i, value);
-}
-
-/* Returns the number of bits in B between START and START + CNT,
-   exclusive, that are set to VALUE. */
-size_t
-bitmap_count (const struct bitmap *b, size_t start, size_t cnt, bool value) 
-{
-  size_t i, value_cnt;
-
-  ASSERT (b != NULL);
-  ASSERT (start <= b->bit_cnt);
-  ASSERT (start + cnt <= b->bit_cnt);
-
-  value_cnt = 0;
-  for (i = 0; i < cnt; i++)
-    if (bitmap_test (b, start + i) == value)
-      value_cnt++;
-  return value_cnt;
-}
-
-/* Returns true if any bits in B between START and START + CNT,
-   exclusive, are set to VALUE, and false otherwise. */
-bool
-bitmap_contains (const struct bitmap *b, size_t start, size_t cnt, bool value) 
-{
-  size_t i;
-  
-  ASSERT (b != NULL);
-  ASSERT (start <= b->bit_cnt);
-  ASSERT (start + cnt <= b->bit_cnt);
-
-  for (i = 0; i < cnt; i++)
-    if (bitmap_test (b, start + i) == value)
-      return true;
-  return false;
-}
-
-/* Returns true if any bits in B between START and START + CNT,
-   exclusive, are set to true, and false otherwise.*/
-bool
-bitmap_any (const struct bitmap *b, size_t start, size_t cnt) 
-{
-  return bitmap_contains (b, start, cnt, true);
-}
-
-/* Returns true if no bits in B between START and START + CNT,
-   exclusive, are set to true, and false otherwise.*/
-bool
-bitmap_none (const struct bitmap *b, size_t start, size_t cnt) 
-{
-  return !bitmap_contains (b, start, cnt, true);
-}
-
-/* Returns true if every bit in B between START and START + CNT,
-   exclusive, is set to true, and false otherwise. */
-bool
-bitmap_all (const struct bitmap *b, size_t start, size_t cnt) 
-{
-  return !bitmap_contains (b, start, cnt, false);
-}
-
-/* Finding set or unset bits. */
-
-/* Finds and returns the starting index of the first group of CNT
-   consecutive bits in B at or after START that are all set to
-   VALUE.
-   If there is no such group, returns BITMAP_ERROR. */
-size_t
-bitmap_scan (const struct bitmap *b, size_t start, size_t cnt, bool value) 
-{
-  ASSERT (b != NULL);
-  ASSERT (start <= b->bit_cnt);
-
-  if (cnt <= b->bit_cnt) 
-    {
-      size_t last = b->bit_cnt - cnt;
-      size_t i;
-      for (i = start; i <= last; i++)
-        if (!bitmap_contains (b, i, cnt, !value))
-          return i; 
-    }
-  return BITMAP_ERROR;
-}
-
-/* Finds the first group of CNT consecutive bits in B at or after
-   START that are all set to VALUE, flips them all to !VALUE,
-   and returns the index of the first bit in the group.
-   If there is no such group, returns BITMAP_ERROR.
-   If CNT is zero, returns 0.
-   Bits are set atomically, but testing bits is not atomic with
-   setting them. */
-size_t
-bitmap_scan_and_flip (struct bitmap *b, size_t start, size_t cnt, bool value)
-{
-  size_t idx = bitmap_scan (b, start, cnt, value);
-  if (idx != BITMAP_ERROR) 
-    bitmap_set_multiple (b, idx, cnt, !value);
-  return idx;
-}
-
-/* File input and output. */
-
-#ifdef FILESYS
-/* Returns the number of bytes needed to store B in a file. */
-size_t
-bitmap_file_size (const struct bitmap *b) 
-{
-  return byte_cnt (b->bit_cnt);
-}
-
-/* Reads B from FILE.  Returns true if successful, false
-   otherwise. */
-bool
-bitmap_read (struct bitmap *b, struct file *file) 
-{
-  bool success = true;
-  if (b->bit_cnt > 0) 
-    {
-      off_t size = byte_cnt (b->bit_cnt);
-      success = file_read_at (file, b->bits, size, 0) == size;
-      b->bits[elem_cnt (b->bit_cnt) - 1] &= last_mask (b);
-    }
-  return success;
-}
-
-/* Writes B to FILE.  Return true if successful, false
-   otherwise. */
-bool
-bitmap_write (const struct bitmap *b, struct file *file)
-{
-  off_t size = byte_cnt (b->bit_cnt);
-  return file_write_at (file, b->bits, size, 0) == size;
-}
-#endif /* FILESYS */
-
-/* Debugging. */
-
-/* Dumps the contents of B to the console as hexadecimal. */
-void
-bitmap_dump (const struct bitmap *b) 
-{
-  hex_dump (0, b->bits, byte_cnt (b->bit_cnt), false);
-}
-
diff --git a/src/lib/kernel/bitmap.h b/src/lib/kernel/bitmap.h
deleted file mode 100644
index a50593c..0000000
--- a/src/lib/kernel/bitmap.h
+++ /dev/null
@@ -1,51 +0,0 @@
-#ifndef __LIB_KERNEL_BITMAP_H
-#define __LIB_KERNEL_BITMAP_H
-
-#include <stdbool.h>
-#include <stddef.h>
-#include <inttypes.h>
-
-/* Bitmap abstract data type. */
-
-/* Creation and destruction. */
-struct bitmap *bitmap_create (size_t bit_cnt);
-struct bitmap *bitmap_create_in_buf (size_t bit_cnt, void *, size_t byte_cnt);
-size_t bitmap_buf_size (size_t bit_cnt);
-void bitmap_destroy (struct bitmap *);
-
-/* Bitmap size. */
-size_t bitmap_size (const struct bitmap *);
-
-/* Setting and testing single bits. */
-void bitmap_set (struct bitmap *, size_t idx, bool);
-void bitmap_mark (struct bitmap *, size_t idx);
-void bitmap_reset (struct bitmap *, size_t idx);
-void bitmap_flip (struct bitmap *, size_t idx);
-bool bitmap_test (const struct bitmap *, size_t idx);
-
-/* Setting and testing multiple bits. */
-void bitmap_set_all (struct bitmap *, bool);
-void bitmap_set_multiple (struct bitmap *, size_t start, size_t cnt, bool);
-size_t bitmap_count (const struct bitmap *, size_t start, size_t cnt, bool);
-bool bitmap_contains (const struct bitmap *, size_t start, size_t cnt, bool);
-bool bitmap_any (const struct bitmap *, size_t start, size_t cnt);
-bool bitmap_none (const struct bitmap *, size_t start, size_t cnt);
-bool bitmap_all (const struct bitmap *, size_t start, size_t cnt);
-
-/* Finding set or unset bits. */
-#define BITMAP_ERROR SIZE_MAX
-size_t bitmap_scan (const struct bitmap *, size_t start, size_t cnt, bool);
-size_t bitmap_scan_and_flip (struct bitmap *, size_t start, size_t cnt, bool);
-
-/* File input and output. */
-#ifdef FILESYS
-struct file;
-size_t bitmap_file_size (const struct bitmap *);
-bool bitmap_read (struct bitmap *, struct file *);
-bool bitmap_write (const struct bitmap *, struct file *);
-#endif
-
-/* Debugging. */
-void bitmap_dump (const struct bitmap *);
-
-#endif /* lib/kernel/bitmap.h */
diff --git a/src/lib/kernel/console.c b/src/lib/kernel/console.c
deleted file mode 100644
index 0d031b5..0000000
--- a/src/lib/kernel/console.c
+++ /dev/null
@@ -1,191 +0,0 @@
-#include <console.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include "devices/serial.h"
-#include "devices/vga.h"
-#include "threads/init.h"
-#include "threads/interrupt.h"
-#include "threads/synch.h"
-
-static void vprintf_helper (char, void *);
-static void putchar_have_lock (uint8_t c);
-
-/* The console lock.
-   Both the vga and serial layers do their own locking, so it's
-   safe to call them at any time.
-   But this lock is useful to prevent simultaneous printf() calls
-   from mixing their output, which looks confusing. */
-static struct lock console_lock;
-
-/* True in ordinary circumstances: we want to use the console
-   lock to avoid mixing output between threads, as explained
-   above.
-
-   False in early boot before the point that locks are functional
-   or the console lock has been initialized, or after a kernel
-   panics.  In the former case, taking the lock would cause an
-   assertion failure, which in turn would cause a panic, turning
-   it into the latter case.  In the latter case, if it is a buggy
-   lock_acquire() implementation that caused the panic, we'll
-   likely just recurse. */
-static bool use_console_lock;
-
-/* It's possible, if you add enough debug output to Pintos, to
-   try to recursively grab console_lock from a single thread.  As
-   a real example, I added a printf() call to palloc_free().
-   Here's a real backtrace that resulted:
-
-   lock_console()
-   vprintf()
-   printf()             - palloc() tries to grab the lock again
-   palloc_free()        
-   schedule_tail()      - another thread dying as we switch threads
-   schedule()
-   thread_yield()
-   intr_handler()       - timer interrupt
-   intr_set_level()
-   serial_putc()
-   putchar_have_lock()
-   putbuf()
-   sys_write()          - one process writing to the console
-   syscall_handler()
-   intr_handler()
-
-   This kind of thing is very difficult to debug, so we avoid the
-   problem by simulating a recursive lock with a depth
-   counter. */
-static int console_lock_depth;
-
-/* Number of characters written to console. */
-static int64_t write_cnt;
-
-/* Enable console locking. */
-void
-console_init (void) 
-{
-  lock_init (&console_lock);
-  use_console_lock = true;
-}
-
-/* Notifies the console that a kernel panic is underway,
-   which warns it to avoid trying to take the console lock from
-   now on. */
-void
-console_panic (void) 
-{
-  use_console_lock = false;
-}
-
-/* Prints console statistics. */
-void
-console_print_stats (void) 
-{
-  printf ("Console: %lld characters output\n", write_cnt);
-}
-
-/* Acquires the console lock. */
-static void
-acquire_console (void) 
-{
-  if (!intr_context () && use_console_lock) 
-    {
-      if (lock_held_by_current_thread (&console_lock)) 
-        console_lock_depth++; 
-      else
-        lock_acquire (&console_lock); 
-    }
-}
-
-/* Releases the console lock. */
-static void
-release_console (void) 
-{
-  if (!intr_context () && use_console_lock) 
-    {
-      if (console_lock_depth > 0)
-        console_lock_depth--;
-      else
-        lock_release (&console_lock); 
-    }
-}
-
-/* Returns true if the current thread has the console lock,
-   false otherwise. */
-static bool
-console_locked_by_current_thread (void) 
-{
-  return (intr_context ()
-          || !use_console_lock
-          || lock_held_by_current_thread (&console_lock));
-}
-
-/* The standard vprintf() function,
-   which is like printf() but uses a va_list.
-   Writes its output to both vga display and serial port. */
-int
-vprintf (const char *format, va_list args) 
-{
-  int char_cnt = 0;
-
-  acquire_console ();
-  __vprintf (format, args, vprintf_helper, &char_cnt);
-  release_console ();
-
-  return char_cnt;
-}
-
-/* Writes string S to the console, followed by a new-line
-   character. */
-int
-puts (const char *s) 
-{
-  acquire_console ();
-  while (*s != '\0')
-    putchar_have_lock (*s++);
-  putchar_have_lock ('\n');
-  release_console ();
-
-  return 0;
-}
-
-/* Writes the N characters in BUFFER to the console. */
-void
-putbuf (const char *buffer, size_t n) 
-{
-  acquire_console ();
-  while (n-- > 0)
-    putchar_have_lock (*buffer++);
-  release_console ();
-}
-
-/* Writes C to the vga display and serial port. */
-int
-putchar (int c) 
-{
-  acquire_console ();
-  putchar_have_lock (c);
-  release_console ();
-  
-  return c;
-}
-
-/* Helper function for vprintf(). */
-static void
-vprintf_helper (char c, void *char_cnt_) 
-{
-  int *char_cnt = char_cnt_;
-  (*char_cnt)++;
-  putchar_have_lock (c);
-}
-
-/* Writes C to the vga display and serial port.
-   The caller has already acquired the console lock if
-   appropriate. */
-static void
-putchar_have_lock (uint8_t c) 
-{
-  ASSERT (console_locked_by_current_thread ());
-  write_cnt++;
-  serial_putc (c);
-  vga_putc (c);
-}
diff --git a/src/lib/kernel/console.h b/src/lib/kernel/console.h
deleted file mode 100644
index ab99249..0000000
--- a/src/lib/kernel/console.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef __LIB_KERNEL_CONSOLE_H
-#define __LIB_KERNEL_CONSOLE_H
-
-void console_init (void);
-void console_panic (void);
-void console_print_stats (void);
-
-#endif /* lib/kernel/console.h */
diff --git a/src/lib/kernel/debug.c b/src/lib/kernel/debug.c
deleted file mode 100644
index 93c3952..0000000
--- a/src/lib/kernel/debug.c
+++ /dev/null
@@ -1,48 +0,0 @@
-#include <debug.h>
-#include <console.h>
-#include <stdarg.h>
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-#include "threads/init.h"
-#include "threads/interrupt.h"
-#include "devices/serial.h"
-
-/* Halts the OS, printing the source file name, line number, and
-   function name, plus a user-specific message. */
-void
-debug_panic (const char *file, int line, const char *function,
-             const char *message, ...)
-{
-  static int level;
-  va_list args;
-
-  intr_disable ();
-  console_panic ();
-
-  level++;
-  if (level == 1) 
-    {
-      printf ("Kernel PANIC at %s:%d in %s(): ", file, line, function);
-
-      va_start (args, message);
-      vprintf (message, args);
-      printf ("\n");
-      va_end (args);
-
-      debug_backtrace ();
-    }
-  else if (level == 2)
-    printf ("Kernel PANIC recursion at %s:%d in %s().\n",
-            file, line, function);
-  else 
-    {
-      /* Don't print anything: that's probably why we recursed. */
-    }
-
-  serial_flush ();
-  if (power_off_when_done)
-    power_off ();
-  for (;;);
-}
diff --git a/src/lib/kernel/hash.c b/src/lib/kernel/hash.c
deleted file mode 100644
index 57eed45..0000000
--- a/src/lib/kernel/hash.c
+++ /dev/null
@@ -1,430 +0,0 @@
-/* Hash table.
-
-   This data structure is thoroughly documented in the Tour of
-   Pintos for Project 3.
-
-   See hash.h for basic information. */
-
-#include "hash.h"
-#include "../debug.h"
-#include "threads/malloc.h"
-
-#define list_elem_to_hash_elem(LIST_ELEM)                       \
-        list_entry(LIST_ELEM, struct hash_elem, list_elem)
-
-static struct list *find_bucket (struct hash *, struct hash_elem *);
-static struct hash_elem *find_elem (struct hash *, struct list *,
-                                    struct hash_elem *);
-static void insert_elem (struct hash *, struct list *, struct hash_elem *);
-static void remove_elem (struct hash *, struct hash_elem *);
-static void rehash (struct hash *);
-
-/* Initializes hash table H to compute hash values using HASH and
-   compare hash elements using LESS, given auxiliary data AUX. */
-bool
-hash_init (struct hash *h,
-           hash_hash_func *hash, hash_less_func *less, void *aux) 
-{
-  h->elem_cnt = 0;
-  h->bucket_cnt = 4;
-  h->buckets = malloc (sizeof *h->buckets * h->bucket_cnt);
-  h->hash = hash;
-  h->less = less;
-  h->aux = aux;
-
-  if (h->buckets != NULL) 
-    {
-      hash_clear (h, NULL);
-      return true;
-    }
-  else
-    return false;
-}
-
-/* Removes all the elements from H.
-   
-   If DESTRUCTOR is non-null, then it is called for each element
-   in the hash.  DESTRUCTOR may, if appropriate, deallocate the
-   memory used by the hash element.  However, modifying hash
-   table H while hash_clear() is running, using any of the
-   functions hash_clear(), hash_destroy(), hash_insert(),
-   hash_replace(), or hash_delete(), yields undefined behavior,
-   whether done in DESTRUCTOR or elsewhere. */
-void
-hash_clear (struct hash *h, hash_action_func *destructor) 
-{
-  size_t i;
-
-  for (i = 0; i < h->bucket_cnt; i++) 
-    {
-      struct list *bucket = &h->buckets[i];
-
-      if (destructor != NULL) 
-        while (!list_empty (bucket)) 
-          {
-            struct list_elem *list_elem = list_pop_front (bucket);
-            struct hash_elem *hash_elem = list_elem_to_hash_elem (list_elem);
-            destructor (hash_elem, h->aux);
-          }
-
-      list_init (bucket); 
-    }    
-
-  h->elem_cnt = 0;
-}
-
-/* Destroys hash table H.
-
-   If DESTRUCTOR is non-null, then it is first called for each
-   element in the hash.  DESTRUCTOR may, if appropriate,
-   deallocate the memory used by the hash element.  However,
-   modifying hash table H while hash_clear() is running, using
-   any of the functions hash_clear(), hash_destroy(),
-   hash_insert(), hash_replace(), or hash_delete(), yields
-   undefined behavior, whether done in DESTRUCTOR or
-   elsewhere. */
-void
-hash_destroy (struct hash *h, hash_action_func *destructor) 
-{
-  if (destructor != NULL)
-    hash_clear (h, destructor);
-  free (h->buckets);
-}
-
-/* Inserts NEW into hash table H and returns a null pointer, if
-   no equal element is already in the table.
-   If an equal element is already in the table, returns it
-   without inserting NEW. */   
-struct hash_elem *
-hash_insert (struct hash *h, struct hash_elem *new)
-{
-  struct list *bucket = find_bucket (h, new);
-  struct hash_elem *old = find_elem (h, bucket, new);
-
-  if (old == NULL) 
-    insert_elem (h, bucket, new);
-
-  rehash (h);
-
-  return old; 
-}
-
-/* Inserts NEW into hash table H, replacing any equal element
-   already in the table, which is returned. */
-struct hash_elem *
-hash_replace (struct hash *h, struct hash_elem *new) 
-{
-  struct list *bucket = find_bucket (h, new);
-  struct hash_elem *old = find_elem (h, bucket, new);
-
-  if (old != NULL)
-    remove_elem (h, old);
-  insert_elem (h, bucket, new);
-
-  rehash (h);
-
-  return old;
-}
-
-/* Finds and returns an element equal to E in hash table H, or a
-   null pointer if no equal element exists in the table. */
-struct hash_elem *
-hash_find (struct hash *h, struct hash_elem *e) 
-{
-  return find_elem (h, find_bucket (h, e), e);
-}
-
-/* Finds, removes, and returns an element equal to E in hash
-   table H.  Returns a null pointer if no equal element existed
-   in the table.
-
-   If the elements of the hash table are dynamically allocated,
-   or own resources that are, then it is the caller's
-   responsibility to deallocate them. */
-struct hash_elem *
-hash_delete (struct hash *h, struct hash_elem *e)
-{
-  struct hash_elem *found = find_elem (h, find_bucket (h, e), e);
-  if (found != NULL) 
-    {
-      remove_elem (h, found);
-      rehash (h); 
-    }
-  return found;
-}
-
-/* Calls ACTION for each element in hash table H in arbitrary
-   order. 
-   Modifying hash table H while hash_apply() is running, using
-   any of the functions hash_clear(), hash_destroy(),
-   hash_insert(), hash_replace(), or hash_delete(), yields
-   undefined behavior, whether done from ACTION or elsewhere. */
-void
-hash_apply (struct hash *h, hash_action_func *action) 
-{
-  size_t i;
-  
-  ASSERT (action != NULL);
-
-  for (i = 0; i < h->bucket_cnt; i++) 
-    {
-      struct list *bucket = &h->buckets[i];
-      struct list_elem *elem, *next;
-
-      for (elem = list_begin (bucket); elem != list_end (bucket); elem = next) 
-        {
-          next = list_next (elem);
-          action (list_elem_to_hash_elem (elem), h->aux);
-        }
-    }
-}
-
-/* Initializes I for iterating hash table H.
-
-   Iteration idiom:
-
-      struct hash_iterator i;
-
-      hash_first (&i, h);
-      while (hash_next (&i))
-        {
-          struct foo *f = hash_entry (hash_cur (&i), struct foo, elem);
-          ...do something with f...
-        }
-
-   Modifying hash table H during iteration, using any of the
-   functions hash_clear(), hash_destroy(), hash_insert(),
-   hash_replace(), or hash_delete(), invalidates all
-   iterators. */
-void
-hash_first (struct hash_iterator *i, struct hash *h) 
-{
-  ASSERT (i != NULL);
-  ASSERT (h != NULL);
-
-  i->hash = h;
-  i->bucket = i->hash->buckets;
-  i->elem = list_elem_to_hash_elem (list_head (i->bucket));
-}
-
-/* Advances I to the next element in the hash table and returns
-   it.  Returns a null pointer if no elements are left.  Elements
-   are returned in arbitrary order.
-
-   Modifying a hash table H during iteration, using any of the
-   functions hash_clear(), hash_destroy(), hash_insert(),
-   hash_replace(), or hash_delete(), invalidates all
-   iterators. */
-struct hash_elem *
-hash_next (struct hash_iterator *i)
-{
-  ASSERT (i != NULL);
-
-  i->elem = list_elem_to_hash_elem (list_next (&i->elem->list_elem));
-  while (i->elem == list_elem_to_hash_elem (list_end (i->bucket)))
-    {
-      if (++i->bucket >= i->hash->buckets + i->hash->bucket_cnt)
-        {
-          i->elem = NULL;
-          break;
-        }
-      i->elem = list_elem_to_hash_elem (list_begin (i->bucket));
-    }
-  
-  return i->elem;
-}
-
-/* Returns the current element in the hash table iteration, or a
-   null pointer at the end of the table.  Undefined behavior
-   after calling hash_first() but before hash_next(). */
-struct hash_elem *
-hash_cur (struct hash_iterator *i) 
-{
-  return i->elem;
-}
-
-/* Returns the number of elements in H. */
-size_t
-hash_size (struct hash *h) 
-{
-  return h->elem_cnt;
-}
-
-/* Returns true if H contains no elements, false otherwise. */
-bool
-hash_empty (struct hash *h) 
-{
-  return h->elem_cnt == 0;
-}
-
-/* Fowler-Noll-Vo hash constants, for 32-bit word sizes. */
-#define FNV_32_PRIME 16777619u
-#define FNV_32_BASIS 2166136261u
-
-/* Returns a hash of the SIZE bytes in BUF. */
-unsigned
-hash_bytes (const void *buf_, size_t size)
-{
-  /* Fowler-Noll-Vo 32-bit hash, for bytes. */
-  const unsigned char *buf = buf_;
-  unsigned hash;
-
-  ASSERT (buf != NULL);
-
-  hash = FNV_32_BASIS;
-  while (size-- > 0)
-    hash = (hash * FNV_32_PRIME) ^ *buf++;
-
-  return hash;
-} 
-
-/* Returns a hash of string S. */
-unsigned
-hash_string (const char *s_) 
-{
-  const unsigned char *s = (const unsigned char *) s_;
-  unsigned hash;
-
-  ASSERT (s != NULL);
-
-  hash = FNV_32_BASIS;
-  while (*s != '\0')
-    hash = (hash * FNV_32_PRIME) ^ *s++;
-
-  return hash;
-}
-
-/* Returns a hash of integer I. */
-unsigned
-hash_int (int i) 
-{
-  return hash_bytes (&i, sizeof i);
-}
-
-/* Returns the bucket in H that E belongs in. */
-static struct list *
-find_bucket (struct hash *h, struct hash_elem *e) 
-{
-  size_t bucket_idx = h->hash (e, h->aux) & (h->bucket_cnt - 1);
-  return &h->buckets[bucket_idx];
-}
-
-/* Searches BUCKET in H for a hash element equal to E.  Returns
-   it if found or a null pointer otherwise. */
-static struct hash_elem *
-find_elem (struct hash *h, struct list *bucket, struct hash_elem *e) 
-{
-  struct list_elem *i;
-
-  for (i = list_begin (bucket); i != list_end (bucket); i = list_next (i)) 
-    {
-      struct hash_elem *hi = list_elem_to_hash_elem (i);
-      if (!h->less (hi, e, h->aux) && !h->less (e, hi, h->aux))
-        return hi; 
-    }
-  return NULL;
-}
-
-/* Returns X with its lowest-order bit set to 1 turned off. */
-static inline size_t
-turn_off_least_1bit (size_t x) 
-{
-  return x & (x - 1);
-}
-
-/* Returns true if X is a power of 2, otherwise false. */
-static inline size_t
-is_power_of_2 (size_t x) 
-{
-  return x != 0 && turn_off_least_1bit (x) == 0;
-}
-
-/* Element per bucket ratios. */
-#define MIN_ELEMS_PER_BUCKET  1 /* Elems/bucket < 1: reduce # of buckets. */
-#define BEST_ELEMS_PER_BUCKET 2 /* Ideal elems/bucket. */
-#define MAX_ELEMS_PER_BUCKET  4 /* Elems/bucket > 4: increase # of buckets. */
-
-/* Changes the number of buckets in hash table H to match the
-   ideal.  This function can fail because of an out-of-memory
-   condition, but that'll just make hash accesses less efficient;
-   we can still continue. */
-static void
-rehash (struct hash *h) 
-{
-  size_t old_bucket_cnt, new_bucket_cnt;
-  struct list *new_buckets, *old_buckets;
-  size_t i;
-
-  ASSERT (h != NULL);
-
-  /* Save old bucket info for later use. */
-  old_buckets = h->buckets;
-  old_bucket_cnt = h->bucket_cnt;
-
-  /* Calculate the number of buckets to use now.
-     We want one bucket for about every BEST_ELEMS_PER_BUCKET.
-     We must have at least four buckets, and the number of
-     buckets must be a power of 2. */
-  new_bucket_cnt = h->elem_cnt / BEST_ELEMS_PER_BUCKET;
-  if (new_bucket_cnt < 4)
-    new_bucket_cnt = 4;
-  while (!is_power_of_2 (new_bucket_cnt))
-    new_bucket_cnt = turn_off_least_1bit (new_bucket_cnt);
-
-  /* Don't do anything if the bucket count wouldn't change. */
-  if (new_bucket_cnt == old_bucket_cnt)
-    return;
-
-  /* Allocate new buckets and initialize them as empty. */
-  new_buckets = malloc (sizeof *new_buckets * new_bucket_cnt);
-  if (new_buckets == NULL) 
-    {
-      /* Allocation failed.  This means that use of the hash table will
-         be less efficient.  However, it is still usable, so
-         there's no reason for it to be an error. */
-      return;
-    }
-  for (i = 0; i < new_bucket_cnt; i++) 
-    list_init (&new_buckets[i]);
-
-  /* Install new bucket info. */
-  h->buckets = new_buckets;
-  h->bucket_cnt = new_bucket_cnt;
-
-  /* Move each old element into the appropriate new bucket. */
-  for (i = 0; i < old_bucket_cnt; i++) 
-    {
-      struct list *old_bucket;
-      struct list_elem *elem, *next;
-
-      old_bucket = &old_buckets[i];
-      for (elem = list_begin (old_bucket);
-           elem != list_end (old_bucket); elem = next) 
-        {
-          struct list *new_bucket
-            = find_bucket (h, list_elem_to_hash_elem (elem));
-          next = list_next (elem);
-          list_remove (elem);
-          list_push_front (new_bucket, elem);
-        }
-    }
-
-  free (old_buckets);
-}
-
-/* Inserts E into BUCKET (in hash table H). */
-static void
-insert_elem (struct hash *h, struct list *bucket, struct hash_elem *e) 
-{
-  h->elem_cnt++;
-  list_push_front (bucket, &e->list_elem);
-}
-
-/* Removes E from hash table H. */
-static void
-remove_elem (struct hash *h, struct hash_elem *e) 
-{
-  h->elem_cnt--;
-  list_remove (&e->list_elem);
-}
-
diff --git a/src/lib/kernel/hash.h b/src/lib/kernel/hash.h
deleted file mode 100644
index db9f674..0000000
--- a/src/lib/kernel/hash.h
+++ /dev/null
@@ -1,103 +0,0 @@
-#ifndef __LIB_KERNEL_HASH_H
-#define __LIB_KERNEL_HASH_H
-
-/* Hash table.
-
-   This data structure is thoroughly documented in the Tour of
-   Pintos for Project 3.
-
-   This is a standard hash table with chaining.  To locate an
-   element in the table, we compute a hash function over the
-   element's data and use that as an index into an array of
-   doubly linked lists, then linearly search the list.
-
-   The chain lists do not use dynamic allocation.  Instead, each
-   structure that can potentially be in a hash must embed a
-   struct hash_elem member.  All of the hash functions operate on
-   these `struct hash_elem's.  The hash_entry macro allows
-   conversion from a struct hash_elem back to a structure object
-   that contains it.  This is the same technique used in the
-   linked list implementation.  Refer to lib/kernel/list.h for a
-   detailed explanation. */
-
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdint.h>
-#include "list.h"
-
-/* Hash element. */
-struct hash_elem 
-  {
-    struct list_elem list_elem;
-  };
-
-/* Converts pointer to hash element HASH_ELEM into a pointer to
-   the structure that HASH_ELEM is embedded inside.  Supply the
-   name of the outer structure STRUCT and the member name MEMBER
-   of the hash element.  See the big comment at the top of the
-   file for an example. */
-#define hash_entry(HASH_ELEM, STRUCT, MEMBER)                   \
-        ((STRUCT *) ((uint8_t *) &(HASH_ELEM)->list_elem        \
-                     - offsetof (STRUCT, MEMBER.list_elem)))
-
-/* Computes and returns the hash value for hash element E, given
-   auxiliary data AUX. */
-typedef unsigned hash_hash_func (const struct hash_elem *e, void *aux);
-
-/* Compares the value of two hash elements A and B, given
-   auxiliary data AUX.  Returns true if A is less than B, or
-   false if A is greater than or equal to B. */
-typedef bool hash_less_func (const struct hash_elem *a,
-                             const struct hash_elem *b,
-                             void *aux);
-
-/* Performs some operation on hash element E, given auxiliary
-   data AUX. */
-typedef void hash_action_func (struct hash_elem *e, void *aux);
-
-/* Hash table. */
-struct hash 
-  {
-    size_t elem_cnt;            /* Number of elements in table. */
-    size_t bucket_cnt;          /* Number of buckets, a power of 2. */
-    struct list *buckets;       /* Array of `bucket_cnt' lists. */
-    hash_hash_func *hash;       /* Hash function. */
-    hash_less_func *less;       /* Comparison function. */
-    void *aux;                  /* Auxiliary data for `hash' and `less'. */
-  };
-
-/* A hash table iterator. */
-struct hash_iterator 
-  {
-    struct hash *hash;          /* The hash table. */
-    struct list *bucket;        /* Current bucket. */
-    struct hash_elem *elem;     /* Current hash element in current bucket. */
-  };
-
-/* Basic life cycle. */
-bool hash_init (struct hash *, hash_hash_func *, hash_less_func *, void *aux);
-void hash_clear (struct hash *, hash_action_func *);
-void hash_destroy (struct hash *, hash_action_func *);
-
-/* Search, insertion, deletion. */
-struct hash_elem *hash_insert (struct hash *, struct hash_elem *);
-struct hash_elem *hash_replace (struct hash *, struct hash_elem *);
-struct hash_elem *hash_find (struct hash *, struct hash_elem *);
-struct hash_elem *hash_delete (struct hash *, struct hash_elem *);
-
-/* Iteration. */
-void hash_apply (struct hash *, hash_action_func *);
-void hash_first (struct hash_iterator *, struct hash *);
-struct hash_elem *hash_next (struct hash_iterator *);
-struct hash_elem *hash_cur (struct hash_iterator *);
-
-/* Information. */
-size_t hash_size (struct hash *);
-bool hash_empty (struct hash *);
-
-/* Sample hash functions. */
-unsigned hash_bytes (const void *, size_t);
-unsigned hash_string (const char *);
-unsigned hash_int (int);
-
-#endif /* lib/kernel/hash.h */
diff --git a/src/lib/kernel/list.c b/src/lib/kernel/list.c
deleted file mode 100644
index e9993cb..0000000
--- a/src/lib/kernel/list.c
+++ /dev/null
@@ -1,532 +0,0 @@
-#include "list.h"
-#include "../debug.h"
-
-/* Our doubly linked lists have two header elements: the "head"
-   just before the first element and the "tail" just after the
-   last element.  The `prev' link of the front header is null, as
-   is the `next' link of the back header.  Their other two links
-   point toward each other via the interior elements of the list.
-
-   An empty list looks like this:
-
-                      +------+     +------+
-                  <---| head |<--->| tail |--->
-                      +------+     +------+
-
-   A list with two elements in it looks like this:
-
-        +------+     +-------+     +-------+     +------+
-    <---| head |<--->|   1   |<--->|   2   |<--->| tail |<--->
-        +------+     +-------+     +-------+     +------+
-
-   The symmetry of this arrangement eliminates lots of special
-   cases in list processing.  For example, take a look at
-   list_remove(): it takes only two pointer assignments and no
-   conditionals.  That's a lot simpler than the code would be
-   without header elements.
-
-   (Because only one of the pointers in each header element is used,
-   we could in fact combine them into a single header element
-   without sacrificing this simplicity.  But using two separate
-   elements allows us to do a little bit of checking on some
-   operations, which can be valuable.) */
-
-static bool is_sorted (struct list_elem *a, struct list_elem *b,
-                       list_less_func *less, void *aux) UNUSED;
-
-/* Returns true if ELEM is a head, false otherwise. */
-static inline bool
-is_head (struct list_elem *elem)
-{
-  return elem != NULL && elem->prev == NULL && elem->next != NULL;
-}
-
-/* Returns true if ELEM is an interior element,
-   false otherwise. */
-static inline bool
-is_interior (struct list_elem *elem)
-{
-  return elem != NULL && elem->prev != NULL && elem->next != NULL;
-}
-
-/* Returns true if ELEM is a tail, false otherwise. */
-static inline bool
-is_tail (struct list_elem *elem)
-{
-  return elem != NULL && elem->prev != NULL && elem->next == NULL;
-}
-
-/* Initializes LIST as an empty list. */
-void
-list_init (struct list *list)
-{
-  ASSERT (list != NULL);
-  list->head.prev = NULL;
-  list->head.next = &list->tail;
-  list->tail.prev = &list->head;
-  list->tail.next = NULL;
-}
-
-/* Returns the beginning of LIST.  */
-struct list_elem *
-list_begin (struct list *list)
-{
-  ASSERT (list != NULL);
-  return list->head.next;
-}
-
-/* Returns the element after ELEM in its list.  If ELEM is the
-   last element in its list, returns the list tail.  Results are
-   undefined if ELEM is itself a list tail. */
-struct list_elem *
-list_next (struct list_elem *elem)
-{
-  ASSERT (is_head (elem) || is_interior (elem));
-  return elem->next;
-}
-
-/* Returns LIST's tail.
-
-   list_end() is often used in iterating through a list from
-   front to back.  See the big comment at the top of list.h for
-   an example. */
-struct list_elem *
-list_end (struct list *list)
-{
-  ASSERT (list != NULL);
-  return &list->tail;
-}
-
-/* Returns the LIST's reverse beginning, for iterating through
-   LIST in reverse order, from back to front. */
-struct list_elem *
-list_rbegin (struct list *list) 
-{
-  ASSERT (list != NULL);
-  return list->tail.prev;
-}
-
-/* Returns the element before ELEM in its list.  If ELEM is the
-   first element in its list, returns the list head.  Results are
-   undefined if ELEM is itself a list head. */
-struct list_elem *
-list_prev (struct list_elem *elem)
-{
-  ASSERT (is_interior (elem) || is_tail (elem));
-  return elem->prev;
-}
-
-/* Returns LIST's head.
-
-   list_rend() is often used in iterating through a list in
-   reverse order, from back to front.  Here's typical usage,
-   following the example from the top of list.h:
-
-      for (e = list_rbegin (&foo_list); e != list_rend (&foo_list);
-           e = list_prev (e))
-        {
-          struct foo *f = list_entry (e, struct foo, elem);
-          ...do something with f...
-        }
-*/
-struct list_elem *
-list_rend (struct list *list) 
-{
-  ASSERT (list != NULL);
-  return &list->head;
-}
-
-/* Return's LIST's head.
-
-   list_head() can be used for an alternate style of iterating
-   through a list, e.g.:
-
-      e = list_head (&list);
-      while ((e = list_next (e)) != list_end (&list)) 
-        {
-          ...
-        }
-*/
-struct list_elem *
-list_head (struct list *list) 
-{
-  ASSERT (list != NULL);
-  return &list->head;
-}
-
-/* Return's LIST's tail. */
-struct list_elem *
-list_tail (struct list *list) 
-{
-  ASSERT (list != NULL);
-  return &list->tail;
-}
-
-/* Inserts ELEM just before BEFORE, which may be either an
-   interior element or a tail.  The latter case is equivalent to
-   list_push_back(). */
-void
-list_insert (struct list_elem *before, struct list_elem *elem)
-{
-  ASSERT (is_interior (before) || is_tail (before));
-  ASSERT (elem != NULL);
-
-  elem->prev = before->prev;
-  elem->next = before;
-  before->prev->next = elem;
-  before->prev = elem;
-}
-
-/* Removes elements FIRST though LAST (exclusive) from their
-   current list, then inserts them just before BEFORE, which may
-   be either an interior element or a tail. */
-void
-list_splice (struct list_elem *before,
-             struct list_elem *first, struct list_elem *last)
-{
-  ASSERT (is_interior (before) || is_tail (before));
-  if (first == last)
-    return;
-  last = list_prev (last);
-
-  ASSERT (is_interior (first));
-  ASSERT (is_interior (last));
-
-  /* Cleanly remove FIRST...LAST from its current list. */
-  first->prev->next = last->next;
-  last->next->prev = first->prev;
-
-  /* Splice FIRST...LAST into new list. */
-  first->prev = before->prev;
-  last->next = before;
-  before->prev->next = first;
-  before->prev = last;
-}
-
-/* Inserts ELEM at the beginning of LIST, so that it becomes the
-   front in LIST. */
-void
-list_push_front (struct list *list, struct list_elem *elem)
-{
-  list_insert (list_begin (list), elem);
-}
-
-/* Inserts ELEM at the end of LIST, so that it becomes the
-   back in LIST. */
-void
-list_push_back (struct list *list, struct list_elem *elem)
-{
-  list_insert (list_end (list), elem);
-}
-
-/* Removes ELEM from its list and returns the element that
-   followed it.  Undefined behavior if ELEM is not in a list.
-
-   It's not safe to treat ELEM as an element in a list after
-   removing it.  In particular, using list_next() or list_prev()
-   on ELEM after removal yields undefined behavior.  This means
-   that a naive loop to remove the elements in a list will fail:
-
-   ** DON'T DO THIS **
-   for (e = list_begin (&list); e != list_end (&list); e = list_next (e))
-     {
-       ...do something with e...
-       list_remove (e);
-     }
-   ** DON'T DO THIS **
-
-   Here is one correct way to iterate and remove elements from a
-   list:
-
-   for (e = list_begin (&list); e != list_end (&list); e = list_remove (e))
-     {
-       ...do something with e...
-     }
-
-   If you need to free() elements of the list then you need to be
-   more conservative.  Here's an alternate strategy that works
-   even in that case:
-
-   while (!list_empty (&list))
-     {
-       struct list_elem *e = list_pop_front (&list);
-       ...do something with e...
-     }
-*/
-struct list_elem *
-list_remove (struct list_elem *elem)
-{
-  ASSERT (is_interior (elem));
-  elem->prev->next = elem->next;
-  elem->next->prev = elem->prev;
-  return elem->next;
-}
-
-/* Removes the front element from LIST and returns it.
-   Undefined behavior if LIST is empty before removal. */
-struct list_elem *
-list_pop_front (struct list *list)
-{
-  struct list_elem *front = list_front (list);
-  list_remove (front);
-  return front;
-}
-
-/* Removes the back element from LIST and returns it.
-   Undefined behavior if LIST is empty before removal. */
-struct list_elem *
-list_pop_back (struct list *list)
-{
-  struct list_elem *back = list_back (list);
-  list_remove (back);
-  return back;
-}
-
-/* Returns the front element in LIST.
-   Undefined behavior if LIST is empty. */
-struct list_elem *
-list_front (struct list *list)
-{
-  ASSERT (!list_empty (list));
-  return list->head.next;
-}
-
-/* Returns the back element in LIST.
-   Undefined behavior if LIST is empty. */
-struct list_elem *
-list_back (struct list *list)
-{
-  ASSERT (!list_empty (list));
-  return list->tail.prev;
-}
-
-/* Returns the number of elements in LIST.
-   Runs in O(n) in the number of elements. */
-size_t
-list_size (struct list *list)
-{
-  struct list_elem *e;
-  size_t cnt = 0;
-
-  for (e = list_begin (list); e != list_end (list); e = list_next (e))
-    cnt++;
-  return cnt;
-}
-
-/* Returns true if LIST is empty, false otherwise. */
-bool
-list_empty (struct list *list)
-{
-  return list_begin (list) == list_end (list);
-}
-
-/* Swaps the `struct list_elem *'s that A and B point to. */
-static void
-swap (struct list_elem **a, struct list_elem **b) 
-{
-  struct list_elem *t = *a;
-  *a = *b;
-  *b = t;
-}
-
-/* Reverses the order of LIST. */
-void
-list_reverse (struct list *list)
-{
-  if (!list_empty (list)) 
-    {
-      struct list_elem *e;
-
-      for (e = list_begin (list); e != list_end (list); e = e->prev)
-        swap (&e->prev, &e->next);
-      swap (&list->head.next, &list->tail.prev);
-      swap (&list->head.next->prev, &list->tail.prev->next);
-    }
-}
-
-/* Returns true only if the list elements A through B (exclusive)
-   are in order according to LESS given auxiliary data AUX. */
-static bool
-is_sorted (struct list_elem *a, struct list_elem *b,
-           list_less_func *less, void *aux)
-{
-  if (a != b)
-    while ((a = list_next (a)) != b) 
-      if (less (a, list_prev (a), aux))
-        return false;
-  return true;
-}
-
-/* Finds a run, starting at A and ending not after B, of list
-   elements that are in nondecreasing order according to LESS
-   given auxiliary data AUX.  Returns the (exclusive) end of the
-   run.
-   A through B (exclusive) must form a non-empty range. */
-static struct list_elem *
-find_end_of_run (struct list_elem *a, struct list_elem *b,
-                 list_less_func *less, void *aux)
-{
-  ASSERT (a != NULL);
-  ASSERT (b != NULL);
-  ASSERT (less != NULL);
-  ASSERT (a != b);
-  
-  do 
-    {
-      a = list_next (a);
-    }
-  while (a != b && !less (a, list_prev (a), aux));
-  return a;
-}
-
-/* Merges A0 through A1B0 (exclusive) with A1B0 through B1
-   (exclusive) to form a combined range also ending at B1
-   (exclusive).  Both input ranges must be nonempty and sorted in
-   nondecreasing order according to LESS given auxiliary data
-   AUX.  The output range will be sorted the same way. */
-static void
-inplace_merge (struct list_elem *a0, struct list_elem *a1b0,
-               struct list_elem *b1,
-               list_less_func *less, void *aux)
-{
-  ASSERT (a0 != NULL);
-  ASSERT (a1b0 != NULL);
-  ASSERT (b1 != NULL);
-  ASSERT (less != NULL);
-  ASSERT (is_sorted (a0, a1b0, less, aux));
-  ASSERT (is_sorted (a1b0, b1, less, aux));
-
-  while (a0 != a1b0 && a1b0 != b1)
-    if (!less (a1b0, a0, aux)) 
-      a0 = list_next (a0);
-    else 
-      {
-        a1b0 = list_next (a1b0);
-        list_splice (a0, list_prev (a1b0), a1b0);
-      }
-}
-
-/* Sorts LIST according to LESS given auxiliary data AUX, using a
-   natural iterative merge sort that runs in O(n lg n) time and
-   O(1) space in the number of elements in LIST. */
-void
-list_sort (struct list *list, list_less_func *less, void *aux)
-{
-  size_t output_run_cnt;        /* Number of runs output in current pass. */
-
-  ASSERT (list != NULL);
-  ASSERT (less != NULL);
-
-  /* Pass over the list repeatedly, merging adjacent runs of
-     nondecreasing elements, until only one run is left. */
-  do
-    {
-      struct list_elem *a0;     /* Start of first run. */
-      struct list_elem *a1b0;   /* End of first run, start of second. */
-      struct list_elem *b1;     /* End of second run. */
-
-      output_run_cnt = 0;
-      for (a0 = list_begin (list); a0 != list_end (list); a0 = b1)
-        {
-          /* Each iteration produces one output run. */
-          output_run_cnt++;
-
-          /* Locate two adjacent runs of nondecreasing elements
-             A0...A1B0 and A1B0...B1. */
-          a1b0 = find_end_of_run (a0, list_end (list), less, aux);
-          if (a1b0 == list_end (list))
-            break;
-          b1 = find_end_of_run (a1b0, list_end (list), less, aux);
-
-          /* Merge the runs. */
-          inplace_merge (a0, a1b0, b1, less, aux);
-        }
-    }
-  while (output_run_cnt > 1);
-
-  ASSERT (is_sorted (list_begin (list), list_end (list), less, aux));
-}
-
-/* Inserts ELEM in the proper position in LIST, which must be
-   sorted according to LESS given auxiliary data AUX.
-   Runs in O(n) average case in the number of elements in LIST. */
-void
-list_insert_ordered (struct list *list, struct list_elem *elem,
-                     list_less_func *less, void *aux)
-{
-  struct list_elem *e;
-
-  ASSERT (list != NULL);
-  ASSERT (elem != NULL);
-  ASSERT (less != NULL);
-
-  for (e = list_begin (list); e != list_end (list); e = list_next (e))
-    if (less (elem, e, aux))
-      break;
-  return list_insert (e, elem);
-}
-
-/* Iterates through LIST and removes all but the first in each
-   set of adjacent elements that are equal according to LESS
-   given auxiliary data AUX.  If DUPLICATES is non-null, then the
-   elements from LIST are appended to DUPLICATES. */
-void
-list_unique (struct list *list, struct list *duplicates,
-             list_less_func *less, void *aux)
-{
-  struct list_elem *elem, *next;
-
-  ASSERT (list != NULL);
-  ASSERT (less != NULL);
-  if (list_empty (list))
-    return;
-
-  elem = list_begin (list);
-  while ((next = list_next (elem)) != list_end (list))
-    if (!less (elem, next, aux) && !less (next, elem, aux)) 
-      {
-        list_remove (next);
-        if (duplicates != NULL)
-          list_push_back (duplicates, next);
-      }
-    else
-      elem = next;
-}
-
-/* Returns the element in LIST with the largest value according
-   to LESS given auxiliary data AUX.  If there is more than one
-   maximum, returns the one that appears earlier in the list.  If
-   the list is empty, returns its tail. */
-struct list_elem *
-list_max (struct list *list, list_less_func *less, void *aux)
-{
-  struct list_elem *max = list_begin (list);
-  if (max != list_end (list)) 
-    {
-      struct list_elem *e;
-      
-      for (e = list_next (max); e != list_end (list); e = list_next (e))
-        if (less (max, e, aux))
-          max = e; 
-    }
-  return max;
-}
-
-/* Returns the element in LIST with the smallest value according
-   to LESS given auxiliary data AUX.  If there is more than one
-   minimum, returns the one that appears earlier in the list.  If
-   the list is empty, returns its tail. */
-struct list_elem *
-list_min (struct list *list, list_less_func *less, void *aux)
-{
-  struct list_elem *min = list_begin (list);
-  if (min != list_end (list)) 
-    {
-      struct list_elem *e;
-      
-      for (e = list_next (min); e != list_end (list); e = list_next (e))
-        if (less (e, min, aux))
-          min = e; 
-    }
-  return min;
-}
diff --git a/src/lib/kernel/list.h b/src/lib/kernel/list.h
deleted file mode 100644
index 2388f9a..0000000
--- a/src/lib/kernel/list.h
+++ /dev/null
@@ -1,168 +0,0 @@
-#ifndef __LIB_KERNEL_LIST_H
-#define __LIB_KERNEL_LIST_H
-
-/* Doubly linked list.
-
-   This implementation of a doubly linked list does not require
-   use of dynamically allocated memory.  Instead, each structure
-   that is a potential list element must embed a struct list_elem
-   member.  All of the list functions operate on these `struct
-   list_elem's.  The list_entry macro allows conversion from a
-   struct list_elem back to a structure object that contains it.
-
-   For example, suppose there is a needed for a list of `struct
-   foo'.  `struct foo' should contain a `struct list_elem'
-   member, like so:
-
-      struct foo
-        {
-          struct list_elem elem;
-          int bar;
-          ...other members...
-        };
-
-   Then a list of `struct foo' can be be declared and initialized
-   like so:
-
-      struct list foo_list;
-
-      list_init (&foo_list);
-
-   Iteration is a typical situation where it is necessary to
-   convert from a struct list_elem back to its enclosing
-   structure.  Here's an example using foo_list:
-
-      struct list_elem *e;
-
-      for (e = list_begin (&foo_list); e != list_end (&foo_list);
-           e = list_next (e))
-        {
-          struct foo *f = list_entry (e, struct foo, elem);
-          ...do something with f...
-        }
-
-   You can find real examples of list usage throughout the
-   source; for example, malloc.c, palloc.c, and thread.c in the
-   threads directory all use lists.
-
-   The interface for this list is inspired by the list<> template
-   in the C++ STL.  If you're familiar with list<>, you should
-   find this easy to use.  However, it should be emphasized that
-   these lists do *no* type checking and can't do much other
-   correctness checking.  If you screw up, it will bite you.
-
-   Glossary of list terms:
-
-     - "front": The first element in a list.  Undefined in an
-       empty list.  Returned by list_front().
-
-     - "back": The last element in a list.  Undefined in an empty
-       list.  Returned by list_back().
-
-     - "tail": The element figuratively just after the last
-       element of a list.  Well defined even in an empty list.
-       Returned by list_end().  Used as the end sentinel for an
-       iteration from front to back.
-
-     - "beginning": In a non-empty list, the front.  In an empty
-       list, the tail.  Returned by list_begin().  Used as the
-       starting point for an iteration from front to back.
-
-     - "head": The element figuratively just before the first
-       element of a list.  Well defined even in an empty list.
-       Returned by list_rend().  Used as the end sentinel for an
-       iteration from back to front.
-
-     - "reverse beginning": In a non-empty list, the back.  In an
-       empty list, the head.  Returned by list_rbegin().  Used as
-       the starting point for an iteration from back to front.
-
-     - "interior element": An element that is not the head or
-       tail, that is, a real list element.  An empty list does
-       not have any interior elements.
-*/
-
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdint.h>
-
-/* List element. */
-struct list_elem 
-  {
-    struct list_elem *prev;     /* Previous list element. */
-    struct list_elem *next;     /* Next list element. */
-  };
-
-/* List. */
-struct list 
-  {
-    struct list_elem head;      /* List head. */
-    struct list_elem tail;      /* List tail. */
-  };
-
-/* Converts pointer to list element LIST_ELEM into a pointer to
-   the structure that LIST_ELEM is embedded inside.  Supply the
-   name of the outer structure STRUCT and the member name MEMBER
-   of the list element.  See the big comment at the top of the
-   file for an example. */
-#define list_entry(LIST_ELEM, STRUCT, MEMBER)           \
-        ((STRUCT *) ((uint8_t *) &(LIST_ELEM)->next     \
-                     - offsetof (STRUCT, MEMBER.next)))
-
-void list_init (struct list *);
-
-/* List traversal. */
-struct list_elem *list_begin (struct list *);
-struct list_elem *list_next (struct list_elem *);
-struct list_elem *list_end (struct list *);
-
-struct list_elem *list_rbegin (struct list *);
-struct list_elem *list_prev (struct list_elem *);
-struct list_elem *list_rend (struct list *);
-
-struct list_elem *list_head (struct list *);
-struct list_elem *list_tail (struct list *);
-
-/* List insertion. */
-void list_insert (struct list_elem *, struct list_elem *);
-void list_splice (struct list_elem *before,
-                  struct list_elem *first, struct list_elem *last);
-void list_push_front (struct list *, struct list_elem *);
-void list_push_back (struct list *, struct list_elem *);
-
-/* List removal. */
-struct list_elem *list_remove (struct list_elem *);
-struct list_elem *list_pop_front (struct list *);
-struct list_elem *list_pop_back (struct list *);
-
-/* List elements. */
-struct list_elem *list_front (struct list *);
-struct list_elem *list_back (struct list *);
-
-/* List properties. */
-size_t list_size (struct list *);
-bool list_empty (struct list *);
-
-/* Miscellaneous. */
-void list_reverse (struct list *);
-
-/* Compares the value of two list elements A and B, given
-   auxiliary data AUX.  Returns true if A is less than B, or
-   false if A is greater than or equal to B. */
-typedef bool list_less_func (const struct list_elem *a,
-                             const struct list_elem *b,
-                             void *aux);
-
-/* Operations on lists with ordered elements. */
-void list_sort (struct list *,
-                list_less_func *, void *aux);
-void list_insert_ordered (struct list *, struct list_elem *,
-                          list_less_func *, void *aux);
-void list_unique (struct list *, struct list *duplicates,
-                  list_less_func *, void *aux);
-
-/* Max and min. */
-struct list_elem *list_max (struct list *, list_less_func *, void *aux);
-struct list_elem *list_min (struct list *, list_less_func *, void *aux);
-
-#endif /* lib/kernel/list.h */
diff --git a/src/lib/kernel/slist.c b/src/lib/kernel/slist.c
deleted file mode 100644
index 2f27250..0000000
--- a/src/lib/kernel/slist.c
+++ /dev/null
@@ -1,153 +0,0 @@
-#include "slist.h"
-#include "threads/malloc.h"
-#include <stdio.h>
-//        #include <stdlib.h>
-
-/* List structure */
-struct Node
-{
-  ListElement Element;
-  Position    Next;
-};
-
-/* make empty list */
-
-SList
-MakeEmpty( SList L )
-{
-  if( L != NULL )
-    DeleteList( L );
-  L = malloc( sizeof( struct Node ) );
-  if( L == NULL ) {
-    printf( "Out of memory!\n" );
-    return NULL;
-  }
-  L->Next = NULL;
-  return L;
-}
-
-/* Return true if L is empty */
-
-int
-IsEmpty( SList L )
-{
-  return L->Next == NULL;
-}
-
-/* Return true if P is the last position in SList L */
-/* Parameter L is unused in this implementation */
-
-int IsLast( Position P, UNUSED SList L)
-{
-  return P->Next == NULL;
-}
-
-/* Return Position of X in L; NULL if not found */
-
-Position
-Find( ListElement X, SList L )
-{
-  Position P;
-
-  P = L->Next;
-  while( P != NULL && P->Element != X )
-    P = P->Next;
-
-  return P;
-}
-
-/* Delete from a SList */
-/* Cell pointed to by P->Next is wiped out */
-/* Assume that the position is legal */
-/* Assume use of a header node */
-
-void
-Delete( ListElement X, SList L )
-{
-  Position P, TmpCell;
-
-  P = FindPrevious( X, L );
-
-  if( !IsLast( P, L ) )  /* Assumption of header use */
-    {                      /* X is found; delete it */
-      TmpCell = P->Next;
-      P->Next = TmpCell->Next;  /* Bypass deleted cell */
-      free( TmpCell );
-    }
-}
-
-/* If X is not found, then Next field of returned value is NULL */
-/* Assumes a header */
-
-Position
-FindPrevious( ListElement X, SList L )
-{
-  Position P;
-
-  P = L;
-  while( P->Next != NULL && P->Next->Element != X )
-    P = P->Next;
-
-  return P;
-}
-
-/* Insert (after legal position P) */
-/* Header implementation assumed */
-/* Parameter L is unused in this implementation */
-
-void
-Insert( ListElement X, UNUSED SList L, Position P )
-{
-  Position TmpCell;
-
-  TmpCell = malloc( sizeof( struct Node ) );
-  if( TmpCell == NULL ) {
-    printf( "Out of space!!!\n" );
-    return;
-  }
-
-  TmpCell->Element = X;
-  TmpCell->Next = P->Next;
-  P->Next = TmpCell;
-}
-
-/*  DeleteSList algorithm */
-
-void
-DeleteList( SList L )
-{
-  Position P, Tmp;
-
-  P = L->Next;  /* Header assumed */
-  L->Next = NULL;
-  while( P != NULL )
-    {
-      Tmp = P->Next;
-      free( P );
-      P = Tmp;
-    }
-}
-
-Position
-Header( SList L )
-{
-  return L;
-}
-
-Position
-First( SList L )
-{
-  return L->Next;
-}
-
-Position
-Advance( Position P )
-{
-  return P->Next;
-}
-
-ListElement
-Retrieve( Position P )
-{
-  return P->Element;
-}
diff --git a/src/lib/kernel/slist.h b/src/lib/kernel/slist.h
deleted file mode 100644
index 708105f..0000000
--- a/src/lib/kernel/slist.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* SList -- simple list for students. 
- * This list was not originally in the pintos implementation. 
- */
-typedef void * ListElement;
-
-#ifndef _SList_H
-#define _SList_H
-
-struct Node;
-typedef struct Node *PtrToNode;
-typedef PtrToNode SList;
-typedef PtrToNode Position;
-
-SList MakeEmpty( SList L );
-int IsEmpty( SList L );
-int IsLast( Position P,  SList L);
-Position Find( ListElement X, SList L );
-void Delete( ListElement X, SList L );
-Position FindPrevious( ListElement X, SList L );
-void Insert( ListElement X, SList L, Position P );
-void DeleteList( SList L );
-Position Header( SList L );
-Position First( SList L );
-Position Advance( Position P );
-ListElement Retrieve( Position P );
-
-#endif    /* _SList_H */
diff --git a/src/lib/kernel/stdio.h b/src/lib/kernel/stdio.h
deleted file mode 100644
index 3e5bae9..0000000
--- a/src/lib/kernel/stdio.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef __LIB_KERNEL_STDIO_H
-#define __LIB_KERNEL_STDIO_H
-
-void putbuf (const char *, size_t);
-
-#endif /* lib/kernel/stdio.h */
diff --git a/src/lib/limits.h b/src/lib/limits.h
deleted file mode 100644
index c957ec4..0000000
--- a/src/lib/limits.h
+++ /dev/null
@@ -1,34 +0,0 @@
-#ifndef __LIB_LIMITS_H
-#define __LIB_LIMITS_H
-
-#define CHAR_BIT 8
-
-#define SCHAR_MAX 127
-#define SCHAR_MIN (-SCHAR_MAX - 1)
-#define UCHAR_MAX 255
-
-#ifdef __CHAR_UNSIGNED__
-#define CHAR_MIN 0
-#define CHAR_MAX UCHAR_MAX
-#else
-#define CHAR_MIN SCHAR_MIN
-#define CHAR_MAX SCHAR_MAX
-#endif
-
-#define SHRT_MAX 32767
-#define SHRT_MIN (-SHRT_MAX - 1)
-#define USHRT_MAX 65535
-
-#define INT_MAX 2147483647
-#define INT_MIN (-INT_MAX - 1)
-#define UINT_MAX 4294967295U
-
-#define LONG_MAX 2147483647L
-#define LONG_MIN (-LONG_MAX - 1)
-#define ULONG_MAX 4294967295UL
-
-#define LLONG_MAX 9223372036854775807LL
-#define LLONG_MIN (-LLONG_MAX - 1)
-#define ULLONG_MAX 18446744073709551615ULL
-
-#endif /* lib/limits.h */
diff --git a/src/lib/random.c b/src/lib/random.c
deleted file mode 100644
index a4761b6..0000000
--- a/src/lib/random.c
+++ /dev/null
@@ -1,83 +0,0 @@
-#include "random.h"
-#include <stdbool.h>
-#include <stdint.h>
-#include "debug.h"
-
-/* RC4-based pseudo-random number generator (PRNG).
-
-   RC4 is a stream cipher.  We're not using it here for its
-   cryptographic properties, but because it is easy to implement
-   and its output is plenty random for non-cryptographic
-   purposes.
-
-   See http://en.wikipedia.org/wiki/RC4_(cipher) for information
-   on RC4.*/
-
-/* RC4 state. */
-static uint8_t s[256];          /* S[]. */
-static uint8_t s_i, s_j;        /* i, j. */
-
-/* Already initialized? */
-static bool inited;     
-
-/* Swaps the bytes pointed to by A and B. */
-static inline void
-swap_byte (uint8_t *a, uint8_t *b) 
-{
-  uint8_t t = *a;
-  *a = *b;
-  *b = t;
-}
-
-/* Initializes or reinitializes the PRNG with the given SEED. */
-void
-random_init (unsigned seed)
-{
-  uint8_t *seedp = (uint8_t *) &seed;
-  int i;
-  uint8_t j;
-
-  for (i = 0; i < 256; i++) 
-    s[i] = i;
-  for (i = j = 0; i < 256; i++) 
-    {
-      j += s[i] + seedp[i % sizeof seed];
-      swap_byte (s + i, s + j);
-    }
-
-  s_i = s_j = 0;
-  inited = true;
-}
-
-/* Writes SIZE random bytes into BUF. */
-void
-random_bytes (void *buf_, size_t size) 
-{
-  uint8_t *buf;
-
-  if (!inited)
-    random_init (0);
-
-  for (buf = buf_; size-- > 0; buf++)
-    {
-      uint8_t s_k;
-      
-      s_i++;
-      s_j += s[s_i];
-      swap_byte (s + s_i, s + s_j);
-
-      s_k = s[s_i] + s[s_j];
-      *buf = s[s_k];
-    }
-}
-
-/* Returns a pseudo-random unsigned long.
-   Use random_ulong() % n to obtain a random number in the range
-   0...n (exclusive). */
-unsigned long
-random_ulong (void) 
-{
-  unsigned long ul;
-  random_bytes (&ul, sizeof ul);
-  return ul;
-}
diff --git a/src/lib/random.h b/src/lib/random.h
deleted file mode 100644
index 0950ae2..0000000
--- a/src/lib/random.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef __LIB_RANDOM_H
-#define __LIB_RANDOM_H
-
-#include <stddef.h>
-
-void random_init (unsigned seed);
-void random_bytes (void *, size_t);
-unsigned long random_ulong (void);
-
-#endif /* lib/random.h */
diff --git a/src/lib/round.h b/src/lib/round.h
deleted file mode 100644
index 3aa6642..0000000
--- a/src/lib/round.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef __LIB_ROUND_H
-#define __LIB_ROUND_H
-
-/* Yields X rounded up to the nearest multiple of STEP.
-   For X >= 0, STEP >= 1 only. */
-#define ROUND_UP(X, STEP) (((X) + (STEP) - 1) / (STEP) * (STEP))
-
-/* Yields X divided by STEP, rounded up.
-   For X >= 0, STEP >= 1 only. */
-#define DIV_ROUND_UP(X, STEP) (((X) + (STEP) - 1) / (STEP))
-
-/* Yields X rounded down to the nearest multiple of STEP.
-   For X >= 0, STEP >= 1 only. */
-#define ROUND_DOWN(X, STEP) ((X) / (STEP) * (STEP))
-
-/* There is no DIV_ROUND_DOWN.   It would be simply X / STEP. */
-
-#endif /* lib/round.h */
diff --git a/src/lib/stdarg.h b/src/lib/stdarg.h
deleted file mode 100644
index 32622b5..0000000
--- a/src/lib/stdarg.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef __LIB_STDARG_H
-#define __LIB_STDARG_H
-
-/* GCC has <stdarg.h> functionality as built-ins,
-   so all we need is to use it. */
-
-typedef __builtin_va_list va_list;
-
-#define va_start(LIST, ARG)	__builtin_va_start (LIST, ARG)
-#define va_end(LIST)            __builtin_va_end (LIST)
-#define va_arg(LIST, TYPE)	__builtin_va_arg (LIST, TYPE)
-#define va_copy(DST, SRC)	__builtin_va_copy (DST, SRC)
-
-#endif /* lib/stdarg.h */
diff --git a/src/lib/stdbool.h b/src/lib/stdbool.h
deleted file mode 100644
index f173a91..0000000
--- a/src/lib/stdbool.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef __LIB_STDBOOL_H
-#define __LIB_STDBOOL_H
-
-#define bool	_Bool
-#define true	1
-#define false	0
-#define __bool_true_false_are_defined	1
-
-#endif /* lib/stdbool.h */
diff --git a/src/lib/stddef.h b/src/lib/stddef.h
deleted file mode 100644
index 4e74fa6..0000000
--- a/src/lib/stddef.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef __LIB_STDDEF_H
-#define __LIB_STDDEF_H
-
-#define NULL ((void *) 0)
-#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *) 0)->MEMBER)
-
-/* GCC predefines the types we need for ptrdiff_t and size_t,
-   so that we don't have to guess. */
-typedef __PTRDIFF_TYPE__ ptrdiff_t;
-typedef __SIZE_TYPE__ size_t;
-
-#endif /* lib/stddef.h */
diff --git a/src/lib/stdint.h b/src/lib/stdint.h
deleted file mode 100644
index ef5f214..0000000
--- a/src/lib/stdint.h
+++ /dev/null
@@ -1,51 +0,0 @@
-#ifndef __LIB_STDINT_H
-#define __LIB_STDINT_H
-
-typedef signed char int8_t;
-#define INT8_MAX 127
-#define INT8_MIN (-INT8_MAX - 1)
-
-typedef signed short int int16_t;
-#define INT16_MAX 32767
-#define INT16_MIN (-INT16_MAX - 1)
-
-typedef signed int int32_t;
-#define INT32_MAX 2147483647
-#define INT32_MIN (-INT32_MAX - 1)
-
-typedef signed long long int int64_t;
-#define INT64_MAX 9223372036854775807LL
-#define INT64_MIN (-INT64_MAX - 1)
-
-typedef unsigned char uint8_t;
-#define UINT8_MAX 255
-
-typedef unsigned short int uint16_t;
-#define UINT16_MAX 65535
-
-typedef unsigned int uint32_t;
-#define UINT32_MAX 4294967295U
-
-typedef unsigned long long int uint64_t;
-#define UINT64_MAX 18446744073709551615ULL
-
-typedef int32_t intptr_t;
-#define INTPTR_MIN INT32_MIN
-#define INTPTR_MAX INT32_MAX
-
-typedef uint32_t uintptr_t;
-#define UINTPTR_MAX UINT32_MAX
-
-typedef int64_t intmax_t;
-#define INTMAX_MIN INT64_MIN
-#define INTMAX_MAX INT64_MAX
-
-typedef uint64_t uintmax_t;
-#define UINTMAX_MAX UINT64_MAX
-
-#define PTRDIFF_MIN INT32_MIN
-#define PTRDIFF_MAX INT32_MAX
-
-#define SIZE_MAX UINT32_MAX
-
-#endif /* lib/stdint.h */
diff --git a/src/lib/stdio.c b/src/lib/stdio.c
deleted file mode 100644
index af80e51..0000000
--- a/src/lib/stdio.c
+++ /dev/null
@@ -1,637 +0,0 @@
-#include <stdio.h>
-#include <ctype.h>
-#include <inttypes.h>
-#include <round.h>
-#include <stdint.h>
-#include <string.h>
-
-/* Auxiliary data for vsnprintf_helper(). */
-struct vsnprintf_aux 
-  {
-    char *p;            /* Current output position. */
-    int length;         /* Length of output string. */
-    int max_length;     /* Max length of output string. */
-  };
-
-static void vsnprintf_helper (char, void *);
-
-/* Like vprintf(), except that output is stored into BUFFER,
-   which must have space for BUF_SIZE characters.  Writes at most
-   BUF_SIZE - 1 characters to BUFFER, followed by a null
-   terminator.  BUFFER will always be null-terminated unless
-   BUF_SIZE is zero.  Returns the number of characters that would
-   have been written to BUFFER, not including a null terminator,
-   had there been enough room. */
-int
-vsnprintf (char *buffer, size_t buf_size, const char *format, va_list args) 
-{
-  /* Set up aux data for vsnprintf_helper(). */
-  struct vsnprintf_aux aux;
-  aux.p = buffer;
-  aux.length = 0;
-  aux.max_length = buf_size > 0 ? buf_size - 1 : 0;
-
-  /* Do most of the work. */
-  __vprintf (format, args, vsnprintf_helper, &aux);
-
-  /* Add null terminator. */
-  if (buf_size > 0)
-    *aux.p = '\0';
-
-  return aux.length;
-}
-
-/* Helper function for vsnprintf(). */
-static void
-vsnprintf_helper (char ch, void *aux_)
-{
-  struct vsnprintf_aux *aux = aux_;
-
-  if (aux->length++ < aux->max_length)
-    *aux->p++ = ch;
-}
-
-/* Like printf(), except that output is stored into BUFFER,
-   which must have space for BUF_SIZE characters.  Writes at most
-   BUF_SIZE - 1 characters to BUFFER, followed by a null
-   terminator.  BUFFER will always be null-terminated unless
-   BUF_SIZE is zero.  Returns the number of characters that would
-   have been written to BUFFER, not including a null terminator,
-   had there been enough room. */
-int
-snprintf (char *buffer, size_t buf_size, const char *format, ...) 
-{
-  va_list args;
-  int retval;
-
-  va_start (args, format);
-  retval = vsnprintf (buffer, buf_size, format, args);
-  va_end (args);
-
-  return retval;
-}
-
-/* Writes formatted output to the console.
-   In the kernel, the console is both the video display and first
-   serial port.
-   In userspace, the console is file descriptor 1. */
-int
-printf (const char *format, ...) 
-{
-  va_list args;
-  int retval;
-
-  va_start (args, format);
-  retval = vprintf (format, args);
-  va_end (args);
-
-  return retval;
-}
-
-/* printf() formatting internals. */
-
-/* A printf() conversion. */
-struct printf_conversion 
-  {
-    /* Flags. */
-    enum 
-      {
-        MINUS = 1 << 0,         /* '-' */
-        PLUS = 1 << 1,          /* '+' */
-        SPACE = 1 << 2,         /* ' ' */
-        POUND = 1 << 3,         /* '#' */
-        ZERO = 1 << 4,          /* '0' */
-        GROUP = 1 << 5          /* '\'' */
-      }
-    flags;
-
-    /* Minimum field width. */
-    int width;
-
-    /* Numeric precision.
-       -1 indicates no precision was specified. */
-    int precision;
-
-    /* Type of argument to format. */
-    enum 
-      {
-        CHAR = 1,               /* hh */
-        SHORT = 2,              /* h */
-        INT = 3,                /* (none) */
-        INTMAX = 4,             /* j */
-        LONG = 5,               /* l */
-        LONGLONG = 6,           /* ll */
-        PTRDIFFT = 7,           /* t */
-        SIZET = 8               /* z */
-      }
-    type;
-  };
-
-struct integer_base 
-  {
-    int base;                   /* Base. */
-    const char *digits;         /* Collection of digits. */
-    int x;                      /* `x' character to use, for base 16 only. */
-    int group;                  /* Number of digits to group with ' flag. */
-  };
-
-static const struct integer_base base_d = {10, "0123456789", 0, 3};
-static const struct integer_base base_o = {8, "01234567", 0, 3};
-static const struct integer_base base_x = {16, "0123456789abcdef", 'x', 4};
-static const struct integer_base base_X = {16, "0123456789ABCDEF", 'X', 4};
-
-static const char *parse_conversion (const char *format,
-                                     struct printf_conversion *,
-                                     va_list *);
-static void format_integer (uintmax_t value, bool is_signed, bool negative, 
-                            const struct integer_base *,
-                            const struct printf_conversion *,
-                            void (*output) (char, void *), void *aux);
-static void output_dup (char ch, size_t cnt,
-                        void (*output) (char, void *), void *aux);
-static void format_string (const char *string, int length,
-                           struct printf_conversion *,
-                           void (*output) (char, void *), void *aux);
-
-void
-__vprintf (const char *format, va_list args,
-           void (*output) (char, void *), void *aux)
-{
-  for (; *format != '\0'; format++)
-    {
-      struct printf_conversion c;
-
-      /* Literally copy non-conversions to output. */
-      if (*format != '%') 
-        {
-          output (*format, aux);
-          continue;
-        }
-      format++;
-
-      /* %% => %. */
-      if (*format == '%') 
-        {
-          output ('%', aux);
-          continue;
-        }
-
-      /* Parse conversion specifiers. */
-      format = parse_conversion (format, &c, &args);
-
-      /* Do conversion. */
-      switch (*format) 
-        {
-        case 'd':
-        case 'i': 
-          {
-            /* Signed integer conversions. */
-            intmax_t value;
-            
-            switch (c.type) 
-              {
-              case CHAR: 
-                value = (signed char) va_arg (args, int);
-                break;
-              case SHORT:
-                value = (short) va_arg (args, int);
-                break;
-              case INT:
-                value = va_arg (args, int);
-                break;
-              case INTMAX:
-                value = va_arg (args, intmax_t);
-                break;
-              case LONG:
-                value = va_arg (args, long);
-                break;
-              case LONGLONG:
-                value = va_arg (args, long long);
-                break;
-              case PTRDIFFT:
-                value = va_arg (args, ptrdiff_t);
-                break;
-              case SIZET:
-                value = va_arg (args, size_t);
-                if (value > SIZE_MAX / 2)
-                  value = value - SIZE_MAX - 1;
-                break;
-              default:
-                NOT_REACHED ();
-              }
-
-            format_integer (value < 0 ? -value : value,
-                            true, value < 0, &base_d, &c, output, aux);
-          }
-          break;
-          
-        case 'o':
-        case 'u':
-        case 'x':
-        case 'X':
-          {
-            /* Unsigned integer conversions. */
-            uintmax_t value;
-            const struct integer_base *b;
-
-            switch (c.type) 
-              {
-              case CHAR: 
-                value = (unsigned char) va_arg (args, unsigned);
-                break;
-              case SHORT:
-                value = (unsigned short) va_arg (args, unsigned);
-                break;
-              case INT:
-                value = va_arg (args, unsigned);
-                break;
-              case INTMAX:
-                value = va_arg (args, uintmax_t);
-                break;
-              case LONG:
-                value = va_arg (args, unsigned long);
-                break;
-              case LONGLONG:
-                value = va_arg (args, unsigned long long);
-                break;
-              case PTRDIFFT:
-                value = va_arg (args, ptrdiff_t);
-#if UINTMAX_MAX != PTRDIFF_MAX
-                value &= ((uintmax_t) PTRDIFF_MAX << 1) | 1;
-#endif
-                break;
-              case SIZET:
-                value = va_arg (args, size_t);
-                break;
-              default:
-                NOT_REACHED ();
-              }
-
-            switch (*format) 
-              {
-              case 'o': b = &base_o; break;
-              case 'u': b = &base_d; break;
-              case 'x': b = &base_x; break;
-              case 'X': b = &base_X; break;
-              default: NOT_REACHED ();
-              }
-
-            format_integer (value, false, false, b, &c, output, aux);
-          }
-          break;
-
-        case 'c': 
-          {
-            /* Treat character as single-character string. */
-            char ch = va_arg (args, int);
-            format_string (&ch, 1, &c, output, aux);
-          }
-          break;
-
-        case 's':
-          {
-            /* String conversion. */
-            const char *s = va_arg (args, char *);
-            if (s == NULL)
-              s = "(null)";
-
-            /* Limit string length according to precision.
-               Note: if c.precision == -1 then strnlen() will get
-               SIZE_MAX for MAXLEN, which is just what we want. */
-            format_string (s, strnlen (s, c.precision), &c, output, aux);
-          }
-          break;
-          
-        case 'p':
-          {
-            /* Pointer conversion.
-               Format pointers as %#x. */
-            void *p = va_arg (args, void *);
-
-            c.flags = POUND;
-            format_integer ((uintptr_t) p, false, false,
-                            &base_x, &c, output, aux);
-          }
-          break;
-      
-        case 'f':
-        case 'e':
-        case 'E':
-        case 'g':
-        case 'G':
-        case 'n':
-          /* We don't support floating-point arithmetic,
-             and %n can be part of a security hole. */
-          __printf ("<<no %%%c in kernel>>", output, aux, *format);
-          break;
-
-        default:
-          __printf ("<<no %%%c conversion>>", output, aux, *format);
-          break;
-        }
-    }
-}
-
-/* Parses conversion option characters starting at FORMAT and
-   initializes C appropriately.  Returns the character in FORMAT
-   that indicates the conversion (e.g. the `d' in `%d').  Uses
-   *ARGS for `*' field widths and precisions. */
-static const char *
-parse_conversion (const char *format, struct printf_conversion *c,
-                  va_list *args) 
-{
-  /* Parse flag characters. */
-  c->flags = 0;
-  for (;;) 
-    {
-      switch (*format++) 
-        {
-        case '-':
-          c->flags |= MINUS;
-          break;
-        case '+':
-          c->flags |= PLUS;
-          break;
-        case ' ':
-          c->flags |= SPACE;
-          break;
-        case '#':
-          c->flags |= POUND;
-          break;
-        case '0':
-          c->flags |= ZERO;
-          break;
-        case '\'':
-          c->flags |= GROUP;
-          break;
-        default:
-          format--;
-          goto not_a_flag;
-        }
-    }
- not_a_flag:
-  if (c->flags & MINUS)
-    c->flags &= ~ZERO;
-  if (c->flags & PLUS)
-    c->flags &= ~SPACE;
-
-  /* Parse field width. */
-  c->width = 0;
-  if (*format == '*')
-    {
-      format++;
-      c->width = va_arg (*args, int);
-    }
-  else 
-    {
-      for (; isdigit (*format); format++)
-        c->width = c->width * 10 + *format - '0';
-    }
-  if (c->width < 0) 
-    {
-      c->width = -c->width;
-      c->flags |= MINUS;
-    }
-      
-  /* Parse precision. */
-  c->precision = -1;
-  if (*format == '.') 
-    {
-      format++;
-      if (*format == '*') 
-        {
-          format++;
-          c->precision = va_arg (*args, int);
-        }
-      else 
-        {
-          c->precision = 0;
-          for (; isdigit (*format); format++)
-            c->precision = c->precision * 10 + *format - '0';
-        }
-      if (c->precision < 0) 
-        c->precision = -1;
-    }
-  if (c->precision >= 0)
-    c->flags &= ~ZERO;
-
-  /* Parse type. */
-  c->type = INT;
-  switch (*format++) 
-    {
-    case 'h':
-      if (*format == 'h') 
-        {
-          format++;
-          c->type = CHAR;
-        }
-      else
-        c->type = SHORT;
-      break;
-      
-    case 'j':
-      c->type = INTMAX;
-      break;
-
-    case 'l':
-      if (*format == 'l')
-        {
-          format++;
-          c->type = LONGLONG;
-        }
-      else
-        c->type = LONG;
-      break;
-
-    case 't':
-      c->type = PTRDIFFT;
-      break;
-
-    case 'z':
-      c->type = SIZET;
-      break;
-
-    default:
-      format--;
-      break;
-    }
-
-  return format;
-}
-
-/* Performs an integer conversion, writing output to OUTPUT with
-   auxiliary data AUX.  The integer converted has absolute value
-   VALUE.  If IS_SIGNED is true, does a signed conversion with
-   NEGATIVE indicating a negative value; otherwise does an
-   unsigned conversion and ignores NEGATIVE.  The output is done
-   according to the provided base B.  Details of the conversion
-   are in C. */
-static void
-format_integer (uintmax_t value, bool is_signed, bool negative, 
-                const struct integer_base *b,
-                const struct printf_conversion *c,
-                void (*output) (char, void *), void *aux)
-{
-  char buf[64], *cp;            /* Buffer and current position. */
-  int x;                        /* `x' character to use or 0 if none. */
-  int sign;                     /* Sign character or 0 if none. */
-  int precision;                /* Rendered precision. */
-  int pad_cnt;                  /* # of pad characters to fill field width. */
-  int digit_cnt;                /* # of digits output so far. */
-
-  /* Determine sign character, if any.
-     An unsigned conversion will never have a sign character,
-     even if one of the flags requests one. */
-  sign = 0;
-  if (is_signed) 
-    {
-      if (c->flags & PLUS)
-        sign = negative ? '-' : '+';
-      else if (c->flags & SPACE)
-        sign = negative ? '-' : ' ';
-      else if (negative)
-        sign = '-';
-    }
-
-  /* Determine whether to include `0x' or `0X'.
-     It will only be included with a hexadecimal conversion of a
-     nonzero value with the # flag. */
-  x = (c->flags & POUND) && value ? b->x : 0;
-
-  /* Accumulate digits into buffer.
-     This algorithm produces digits in reverse order, so later we
-     will output the buffer's content in reverse. */
-  cp = buf;
-  digit_cnt = 0;
-  while (value > 0) 
-    {
-      if ((c->flags & GROUP) && digit_cnt > 0 && digit_cnt % b->group == 0)
-        *cp++ = ',';
-      *cp++ = b->digits[value % b->base];
-      value /= b->base;
-      digit_cnt++;
-    }
-
-  /* Append enough zeros to match precision.
-     If requested precision is 0, then a value of zero is
-     rendered as a null string, otherwise as "0".
-     If the # flag is used with base 8, the result must always
-     begin with a zero. */
-  precision = c->precision < 0 ? 1 : c->precision;
-  while (cp - buf < precision && cp < buf + sizeof buf - 1)
-    *cp++ = '0';
-  if ((c->flags & POUND) && b->base == 8 && (cp == buf || cp[-1] != '0'))
-    *cp++ = '0';
-
-  /* Calculate number of pad characters to fill field width. */
-  pad_cnt = c->width - (cp - buf) - (x ? 2 : 0) - (sign != 0);
-  if (pad_cnt < 0)
-    pad_cnt = 0;
-
-  /* Do output. */
-  if ((c->flags & (MINUS | ZERO)) == 0)
-    output_dup (' ', pad_cnt, output, aux);
-  if (sign)
-    output (sign, aux);
-  if (x) 
-    {
-      output ('0', aux);
-      output (x, aux); 
-    }
-  if (c->flags & ZERO)
-    output_dup ('0', pad_cnt, output, aux);
-  while (cp > buf)
-    output (*--cp, aux);
-  if (c->flags & MINUS)
-    output_dup (' ', pad_cnt, output, aux);
-}
-
-/* Writes CH to OUTPUT with auxiliary data AUX, CNT times. */
-static void
-output_dup (char ch, size_t cnt, void (*output) (char, void *), void *aux) 
-{
-  while (cnt-- > 0)
-    output (ch, aux);
-}
-
-/* Formats the LENGTH characters starting at STRING according to
-   the conversion specified in C.  Writes output to OUTPUT with
-   auxiliary data AUX. */
-static void
-format_string (const char *string, int length,
-               struct printf_conversion *c,
-               void (*output) (char, void *), void *aux) 
-{
-  int i;
-  if (c->width > length && (c->flags & MINUS) == 0)
-    output_dup (' ', c->width - length, output, aux);
-  for (i = 0; i < length; i++)
-    output (string[i], aux);
-  if (c->width > length && (c->flags & MINUS) != 0)
-    output_dup (' ', c->width - length, output, aux);
-}
-
-/* Wrapper for __vprintf() that converts varargs into a
-   va_list. */
-void
-__printf (const char *format,
-          void (*output) (char, void *), void *aux, ...) 
-{
-  va_list args;
-
-  va_start (args, aux);
-  __vprintf (format, args, output, aux);
-  va_end (args);
-}
-
-/* Dumps the SIZE bytes in BUF to the console as hex bytes
-   arranged 16 per line.  Numeric offsets are also included,
-   starting at OFS for the first byte in BUF.  If ASCII is true
-   then the corresponding ASCII characters are also rendered
-   alongside. */   
-void
-hex_dump (uintptr_t ofs, const void *buf_, size_t size, bool ascii)
-{
-  const uint8_t *buf = buf_;
-  const size_t per_line = 16; /* Maximum bytes per line. */
-
-  while (size > 0)
-    {
-      size_t start, end, n;
-      size_t i;
-      
-      /* Number of bytes on this line. */
-      start = ofs % per_line;
-      end = per_line;
-      if (end - start > size)
-        end = start + size;
-      n = end - start;
-
-      /* Print line. */
-      printf ("%08jx  ", (uintmax_t) ROUND_DOWN (ofs, per_line));
-      for (i = 0; i < start; i++)
-        printf ("   ");
-      for (; i < end; i++) 
-        printf ("%02hhx%c",
-                buf[i - start], i == per_line / 2 - 1? '-' : ' ');
-      if (ascii) 
-        {
-          for (; i < per_line; i++)
-            printf ("   ");
-          printf ("|");
-          for (i = 0; i < start; i++)
-            printf (" ");
-          for (; i < end; i++)
-            printf ("%c",
-                    isprint (buf[i - start]) ? buf[i - start] : '.');
-          for (; i < per_line; i++)
-            printf (" ");
-          printf ("|");
-        }
-      printf ("\n");
-
-      ofs += n;
-      buf += n;
-      size -= n;
-    }
-}
diff --git a/src/lib/stdio.h b/src/lib/stdio.h
deleted file mode 100644
index 8288ff0..0000000
--- a/src/lib/stdio.h
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef __LIB_STDIO_H
-#define __LIB_STDIO_H
-
-#include <debug.h>
-#include <stdarg.h>
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdint.h>
-
-/* Include lib/user/stdio.h or lib/kernel/stdio.h, as
-   appropriate. */
-#include_next <stdio.h>
-
-/* Predefined file handles. */
-#define STDIN_FILENO 0
-#define STDOUT_FILENO 1
-
-/* Standard functions. */
-int printf (const char *, ...) PRINTF_FORMAT (1, 2);
-int snprintf (char *, size_t, const char *, ...) PRINTF_FORMAT (3, 4);
-int vprintf (const char *, va_list) PRINTF_FORMAT (1, 0);
-int vsnprintf (char *, size_t, const char *, va_list) PRINTF_FORMAT (3, 0);
-int putchar (int);
-int puts (const char *);
-
-/* Nonstandard functions. */
-void hex_dump (uintptr_t ofs, const void *, size_t size, bool ascii);
-
-/* Internal functions. */
-void __vprintf (const char *format, va_list args,
-                void (*output) (char, void *), void *aux);
-void __printf (const char *format,
-               void (*output) (char, void *), void *aux, ...);
-
-/* Try to be helpful. */
-#define sprintf dont_use_sprintf_use_snprintf
-#define vsprintf dont_use_vsprintf_use_vsnprintf
-
-#endif /* lib/stdio.h */
diff --git a/src/lib/stdlib.c b/src/lib/stdlib.c
deleted file mode 100644
index 84c7f61..0000000
--- a/src/lib/stdlib.c
+++ /dev/null
@@ -1,208 +0,0 @@
-#include <ctype.h>
-#include <debug.h>
-#include <random.h>
-#include <stdlib.h>
-#include <stdbool.h>
-
-/* Converts a string representation of a signed decimal integer
-   in S into an `int', which is returned. */
-int
-atoi (const char *s) 
-{
-  bool negative;
-  int value;
-
-  ASSERT (s != NULL);
-
-  /* Skip white space. */
-  while (isspace ((unsigned char) *s))
-    s++;
-
-  /* Parse sign. */
-  negative = false;
-  if (*s == '+')
-    s++;
-  else if (*s == '-')
-    {
-      negative = true;
-      s++;
-    }
-
-  /* Parse digits.  We always initially parse the value as
-     negative, and then make it positive later, because the
-     negative range of an int is bigger than the positive range
-     on a 2's complement system. */
-  for (value = 0; isdigit (*s); s++)
-    value = value * 10 - (*s - '0');
-  if (!negative)
-    value = -value;
-
-  return value;
-}
-
-/* Compares A and B by calling the AUX function. */
-static int
-compare_thunk (const void *a, const void *b, void *aux) 
-{
-  int (**compare) (const void *, const void *) = aux;
-  return (*compare) (a, b);
-}
-
-/* Sorts ARRAY, which contains CNT elements of SIZE bytes each,
-   using COMPARE.  When COMPARE is passed a pair of elements A
-   and B, respectively, it must return a strcmp()-type result,
-   i.e. less than zero if A < B, zero if A == B, greater than
-   zero if A > B.  Runs in O(n lg n) time and O(1) space in
-   CNT. */
-void
-qsort (void *array, size_t cnt, size_t size,
-       int (*compare) (const void *, const void *)) 
-{
-  sort (array, cnt, size, compare_thunk, &compare);
-}
-
-/* Swaps elements with 1-based indexes A_IDX and B_IDX in ARRAY
-   with elements of SIZE bytes each. */
-static void
-do_swap (unsigned char *array, size_t a_idx, size_t b_idx, size_t size)
-{
-  unsigned char *a = array + (a_idx - 1) * size;
-  unsigned char *b = array + (b_idx - 1) * size;
-  size_t i;
-
-  for (i = 0; i < size; i++)
-    {
-      unsigned char t = a[i];
-      a[i] = b[i];
-      b[i] = t;
-    }
-}
-
-/* Compares elements with 1-based indexes A_IDX and B_IDX in
-   ARRAY with elements of SIZE bytes each, using COMPARE to
-   compare elements, passing AUX as auxiliary data, and returns a
-   strcmp()-type result. */
-static int
-do_compare (unsigned char *array, size_t a_idx, size_t b_idx, size_t size,
-            int (*compare) (const void *, const void *, void *aux),
-            void *aux) 
-{
-  return compare (array + (a_idx - 1) * size, array + (b_idx - 1) * size, aux);
-}
-
-/* "Float down" the element with 1-based index I in ARRAY of CNT
-   elements of SIZE bytes each, using COMPARE to compare
-   elements, passing AUX as auxiliary data. */
-static void
-heapify (unsigned char *array, size_t i, size_t cnt, size_t size,
-         int (*compare) (const void *, const void *, void *aux),
-         void *aux) 
-{
-  for (;;) 
-    {
-      /* Set `max' to the index of the largest element among I
-         and its children (if any). */
-      size_t left = 2 * i;
-      size_t right = 2 * i + 1;
-      size_t max = i;
-      if (left <= cnt && do_compare (array, left, max, size, compare, aux) > 0)
-        max = left;
-      if (right <= cnt
-          && do_compare (array, right, max, size, compare, aux) > 0) 
-        max = right;
-
-      /* If the maximum value is already in element I, we're
-         done. */
-      if (max == i)
-        break;
-
-      /* Swap and continue down the heap. */
-      do_swap (array, i, max, size);
-      i = max;
-    }
-}
-
-/* Sorts ARRAY, which contains CNT elements of SIZE bytes each,
-   using COMPARE to compare elements, passing AUX as auxiliary
-   data.  When COMPARE is passed a pair of elements A and B,
-   respectively, it must return a strcmp()-type result, i.e. less
-   than zero if A < B, zero if A == B, greater than zero if A >
-   B.  Runs in O(n lg n) time and O(1) space in CNT. */
-void
-sort (void *array, size_t cnt, size_t size,
-      int (*compare) (const void *, const void *, void *aux),
-      void *aux) 
-{
-  size_t i;
-
-  ASSERT (array != NULL || cnt == 0);
-  ASSERT (compare != NULL);
-  ASSERT (size > 0);
-
-  /* Build a heap. */
-  for (i = cnt / 2; i > 0; i--)
-    heapify (array, i, cnt, size, compare, aux);
-
-  /* Sort the heap. */
-  for (i = cnt; i > 1; i--) 
-    {
-      do_swap (array, 1, i, size);
-      heapify (array, 1, i - 1, size, compare, aux); 
-    }
-}
-
-/* Searches ARRAY, which contains CNT elements of SIZE bytes
-   each, for the given KEY.  Returns a match is found, otherwise
-   a null pointer.  If there are multiple matches, returns an
-   arbitrary one of them.
-
-   ARRAY must be sorted in order according to COMPARE.
-
-   Uses COMPARE to compare elements.  When COMPARE is passed a
-   pair of elements A and B, respectively, it must return a
-   strcmp()-type result, i.e. less than zero if A < B, zero if A
-   == B, greater than zero if A > B. */
-void *
-bsearch (const void *key, const void *array, size_t cnt,
-         size_t size, int (*compare) (const void *, const void *)) 
-{
-  return binary_search (key, array, cnt, size, compare_thunk, &compare);
-}
-
-/* Searches ARRAY, which contains CNT elements of SIZE bytes
-   each, for the given KEY.  Returns a match is found, otherwise
-   a null pointer.  If there are multiple matches, returns an
-   arbitrary one of them.
-
-   ARRAY must be sorted in order according to COMPARE.
-
-   Uses COMPARE to compare elements, passing AUX as auxiliary
-   data.  When COMPARE is passed a pair of elements A and B,
-   respectively, it must return a strcmp()-type result, i.e. less
-   than zero if A < B, zero if A == B, greater than zero if A >
-   B. */
-void *
-binary_search (const void *key, const void *array, size_t cnt, size_t size,
-               int (*compare) (const void *, const void *, void *aux),
-               void *aux) 
-{
-  const unsigned char *first = array;
-  const unsigned char *last = array + size * cnt;
-
-  while (first < last) 
-    {
-      size_t range = (last - first) / size;
-      const unsigned char *middle = first + (range / 2) * size;
-      int cmp = compare (key, middle, aux);
-
-      if (cmp < 0) 
-        last = middle;
-      else if (cmp > 0) 
-        first = middle + size;
-      else
-        return (void *) middle;
-    }
-  
-  return NULL;
-}
-
diff --git a/src/lib/stdlib.h b/src/lib/stdlib.h
deleted file mode 100644
index d14afa3..0000000
--- a/src/lib/stdlib.h
+++ /dev/null
@@ -1,22 +0,0 @@
-#ifndef __LIB_STDLIB_H
-#define __LIB_STDLIB_H
-
-#include <stddef.h>
-
-/* Standard functions. */
-int atoi (const char *);
-void qsort (void *array, size_t cnt, size_t size,
-            int (*compare) (const void *, const void *));
-void *bsearch (const void *key, const void *array, size_t cnt,
-               size_t size, int (*compare) (const void *, const void *));
-
-/* Nonstandard functions. */
-void sort (void *array, size_t cnt, size_t size,
-           int (*compare) (const void *, const void *, void *aux),
-           void *aux);
-void *binary_search (const void *key, const void *array, size_t cnt,
-                     size_t size,
-                     int (*compare) (const void *, const void *, void *aux),
-                     void *aux);
-
-#endif /* lib/stdlib.h */
diff --git a/src/lib/string.c b/src/lib/string.c
deleted file mode 100644
index d223c89..0000000
--- a/src/lib/string.c
+++ /dev/null
@@ -1,375 +0,0 @@
-#include <string.h>
-#include <debug.h>
-
-/* Copies SIZE bytes from SRC to DST, which must not overlap.
-   Returns DST. */
-void *
-memcpy (void *dst_, const void *src_, size_t size) 
-{
-  unsigned char *dst = dst_;
-  const unsigned char *src = src_;
-
-  ASSERT (dst != NULL || size == 0);
-  ASSERT (src != NULL || size == 0);
-
-  while (size-- > 0)
-    *dst++ = *src++;
-
-  return dst_;
-}
-
-/* Copies SIZE bytes from SRC to DST, which are allowed to
-   overlap.  Returns DST. */
-void *
-memmove (void *dst_, const void *src_, size_t size) 
-{
-  unsigned char *dst = dst_;
-  const unsigned char *src = src_;
-
-  ASSERT (dst != NULL || size == 0);
-  ASSERT (src != NULL || size == 0);
-
-  if (dst < src) 
-    {
-      while (size-- > 0)
-        *dst++ = *src++;
-    }
-  else 
-    {
-      dst += size;
-      src += size;
-      while (size-- > 0)
-        *--dst = *--src;
-    }
-
-  return dst;
-}
-
-/* Find the first differing byte in the two blocks of SIZE bytes
-   at A and B.  Returns a positive value if the byte in A is
-   greater, a negative value if the byte in B is greater, or zero
-   if blocks A and B are equal. */
-int
-memcmp (const void *a_, const void *b_, size_t size) 
-{
-  const unsigned char *a = a_;
-  const unsigned char *b = b_;
-
-  ASSERT (a != NULL || size == 0);
-  ASSERT (b != NULL || size == 0);
-
-  for (; size-- > 0; a++, b++)
-    if (*a != *b)
-      return *a > *b ? +1 : -1;
-  return 0;
-}
-
-/* Finds the first differing characters in strings A and B.
-   Returns a positive value if the character in A (as an unsigned
-   char) is greater, a negative value if the character in B (as
-   an unsigned char) is greater, or zero if strings A and B are
-   equal. */
-int
-strcmp (const char *a_, const char *b_) 
-{
-  const unsigned char *a = (const unsigned char *) a_;
-  const unsigned char *b = (const unsigned char *) b_;
-
-  ASSERT (a != NULL);
-  ASSERT (b != NULL);
-
-  while (*a != '\0' && *a == *b) 
-    {
-      a++;
-      b++;
-    }
-
-  return *a < *b ? -1 : *a > *b;
-}
-
-/* Returns a pointer to the first occurrence of CH in the first
-   SIZE bytes starting at BLOCK.  Returns a null pointer if CH
-   does not occur in BLOCK. */
-void *
-memchr (const void *block_, int ch_, size_t size) 
-{
-  const unsigned char *block = block_;
-  unsigned char ch = ch_;
-
-  ASSERT (block != NULL || size == 0);
-
-  for (; size-- > 0; block++)
-    if (*block == ch)
-      return (void *) block;
-
-  return NULL;
-}
-
-/* Finds and returns the first occurrence of C in STRING, or a
-   null pointer if C does not appear in STRING.  If C == '\0'
-   then returns a pointer to the null terminator at the end of
-   STRING. */
-char *
-strchr (const char *string, int c_) 
-{
-  char c = c_;
-
-  ASSERT (string != NULL);
-
-  for (;;) 
-    if (*string == c)
-      return (char *) string;
-    else if (*string == '\0')
-      return NULL;
-    else
-      string++;
-}
-
-/* Returns the length of the initial substring of STRING that
-   consists of characters that are not in STOP. */
-size_t
-strcspn (const char *string, const char *stop) 
-{
-  size_t length;
-
-  for (length = 0; string[length] != '\0'; length++)
-    if (strchr (stop, string[length]) != NULL)
-      break;
-  return length;
-}
-
-/* Returns a pointer to the first character in STRING that is
-   also in STOP.  If no character in STRING is in STOP, returns a
-   null pointer. */
-char *
-strpbrk (const char *string, const char *stop) 
-{
-  for (; *string != '\0'; string++)
-    if (strchr (stop, *string) != NULL)
-      return (char *) string;
-  return NULL;
-}
-
-/* Returns a pointer to the last occurrence of C in STRING.
-   Returns a null pointer if C does not occur in STRING. */
-char *
-strrchr (const char *string, int c_) 
-{
-  char c = c_;
-  const char *p = NULL;
-
-  for (; *string != '\0'; string++)
-    if (*string == c)
-      p = string;
-  return (char *) p;
-}
-
-/* Returns the length of the initial substring of STRING that
-   consists of characters in SKIP. */
-size_t
-strspn (const char *string, const char *skip) 
-{
-  size_t length;
-  
-  for (length = 0; string[length] != '\0'; length++)
-    if (strchr (skip, string[length]) == NULL)
-      break;
-  return length;
-}
-
-/* Returns a pointer to the first occurrence of NEEDLE within
-   HAYSTACK.  Returns a null pointer if NEEDLE does not exist
-   within HAYSTACK. */
-char *
-strstr (const char *haystack, const char *needle) 
-{
-  size_t haystack_len = strlen (haystack);
-  size_t needle_len = strlen (needle);
-
-  if (haystack_len >= needle_len) 
-    {
-      size_t i;
-
-      for (i = 0; i <= haystack_len - needle_len; i++)
-        if (!memcmp (haystack + i, needle, needle_len))
-          return (char *) haystack + i;
-    }
-
-  return NULL;
-}
-
-/* Breaks a string into tokens separated by DELIMITERS.  The
-   first time this function is called, S should be the string to
-   tokenize, and in subsequent calls it must be a null pointer.
-   SAVE_PTR is the address of a `char *' variable used to keep
-   track of the tokenizer's position.  The return value each time
-   is the next token in the string, or a null pointer if no
-   tokens remain.
-
-   This function treats multiple adjacent delimiters as a single
-   delimiter.  The returned tokens will never be length 0.
-   DELIMITERS may change from one call to the next within a
-   single string.
-
-   strtok_r() modifies the string S, changing delimiters to null
-   bytes.  Thus, S must be a modifiable string.  String literals,
-   in particular, are *not* modifiable in C, even though for
-   backward compatibility they are not `const'.
-
-   Example usage:
-
-   char s[] = "  String to  tokenize. ";
-   char *token, *save_ptr;
-
-   for (token = strtok_r (s, " ", &save_ptr); token != NULL;
-        token = strtok_r (NULL, " ", &save_ptr))
-     printf ("'%s'\n", token);
-
-   outputs:
-
-     'String'
-     'to'
-     'tokenize.'
-*/
-char *
-strtok_r (char *s, const char *delimiters, char **save_ptr) 
-{
-  char *token;
-  
-  ASSERT (delimiters != NULL);
-  ASSERT (save_ptr != NULL);
-
-  /* If S is nonnull, start from it.
-     If S is null, start from saved position. */
-  if (s == NULL)
-    s = *save_ptr;
-  ASSERT (s != NULL);
-
-  /* Skip any DELIMITERS at our current position. */
-  while (strchr (delimiters, *s) != NULL) 
-    {
-      /* strchr() will always return nonnull if we're searching
-         for a null byte, because every string contains a null
-         byte (at the end). */
-      if (*s == '\0')
-        {
-          *save_ptr = s;
-          return NULL;
-        }
-
-      s++;
-    }
-
-  /* Skip any non-DELIMITERS up to the end of the string. */
-  token = s;
-  while (strchr (delimiters, *s) == NULL)
-    s++;
-  if (*s != '\0') 
-    {
-      *s = '\0';
-      *save_ptr = s + 1;
-    }
-  else 
-    *save_ptr = s;
-  return token;
-}
-
-/* Sets the SIZE bytes in DST to VALUE. */
-void *
-memset (void *dst_, int value, size_t size) 
-{
-  unsigned char *dst = dst_;
-
-  ASSERT (dst != NULL || size == 0);
-  
-  while (size-- > 0)
-    *dst++ = value;
-
-  return dst_;
-}
-
-/* Returns the length of STRING. */
-size_t
-strlen (const char *string) 
-{
-  const char *p;
-
-  ASSERT (string != NULL);
-
-  for (p = string; *p != '\0'; p++)
-    continue;
-  return p - string;
-}
-
-/* If STRING is less than MAXLEN characters in length, returns
-   its actual length.  Otherwise, returns MAXLEN. */
-size_t
-strnlen (const char *string, size_t maxlen) 
-{
-  size_t length;
-
-  for (length = 0; string[length] != '\0' && length < maxlen; length++)
-    continue;
-  return length;
-}
-
-/* Copies string SRC to DST.  If SRC is longer than SIZE - 1
-   characters, only SIZE - 1 characters are copied.  A null
-   terminator is always written to DST, unless SIZE is 0.
-   Returns the length of SRC, not including the null terminator.
-
-   strlcpy() is not in the standard C library, but it is an
-   increasingly popular extension.  See
-   http://www.courtesan.com/todd/papers/strlcpy.html for
-   information on strlcpy(). */
-size_t
-strlcpy (char *dst, const char *src, size_t size) 
-{
-  size_t src_len;
-
-  ASSERT (dst != NULL);
-  ASSERT (src != NULL);
-
-  src_len = strlen (src);
-  if (size > 0) 
-    {
-      size_t dst_len = size - 1;
-      if (src_len < dst_len)
-        dst_len = src_len;
-      memcpy (dst, src, dst_len);
-      dst[dst_len] = '\0';
-    }
-  return src_len;
-}
-
-/* Concatenates string SRC to DST.  The concatenated string is
-   limited to SIZE - 1 characters.  A null terminator is always
-   written to DST, unless SIZE is 0.  Returns the length that the
-   concatenated string would have assuming that there was
-   sufficient space, not including a null terminator.
-
-   strlcat() is not in the standard C library, but it is an
-   increasingly popular extension.  See
-   http://www.courtesan.com/todd/papers/strlcpy.html for
-   information on strlcpy(). */
-size_t
-strlcat (char *dst, const char *src, size_t size) 
-{
-  size_t src_len, dst_len;
-
-  ASSERT (dst != NULL);
-  ASSERT (src != NULL);
-
-  src_len = strlen (src);
-  dst_len = strlen (dst);
-  if (size > 0 && dst_len < size) 
-    {
-      size_t copy_cnt = size - dst_len - 1;
-      if (src_len < copy_cnt)
-        copy_cnt = src_len;
-      memcpy (dst + dst_len, src, copy_cnt);
-      dst[dst_len + copy_cnt] = '\0';
-    }
-  return src_len + dst_len;
-}
-
diff --git a/src/lib/string.h b/src/lib/string.h
deleted file mode 100644
index 1fff82a..0000000
--- a/src/lib/string.h
+++ /dev/null
@@ -1,35 +0,0 @@
-#ifndef __LIB_STRING_H
-#define __LIB_STRING_H
-
-#include <stddef.h>
-
-/* Standard. */
-void *memcpy (void *, const void *, size_t);
-void *memmove (void *, const void *, size_t);
-char *strncat (char *, const char *, size_t);
-int memcmp (const void *, const void *, size_t);
-int strcmp (const char *, const char *);
-void *memchr (const void *, int, size_t);
-char *strchr (const char *, int);
-size_t strcspn (const char *, const char *);
-char *strpbrk (const char *, const char *);
-char *strrchr (const char *, int);
-size_t strspn (const char *, const char *);
-char *strstr (const char *, const char *);
-void *memset (void *, int, size_t);
-size_t strlen (const char *);
-
-/* Extensions. */
-size_t strlcpy (char *, const char *, size_t);
-size_t strlcat (char *, const char *, size_t);
-char *strtok_r (char *, const char *, char **);
-size_t strnlen (const char *, size_t);
-
-/* Try to be helpful. */
-#define strcpy dont_use_strcpy_use_strlcpy
-#define strncpy dont_use_strncpy_use_strlcpy
-#define strcat dont_use_strcat_use_strlcat
-#define strncat dont_use_strncat_use_strlcat
-#define strtok dont_use_strtok_use_strtok_r
-
-#endif /* lib/string.h */
diff --git a/src/lib/syscall-nr.h b/src/lib/syscall-nr.h
deleted file mode 100644
index 21a7af9..0000000
--- a/src/lib/syscall-nr.h
+++ /dev/null
@@ -1,34 +0,0 @@
-#ifndef __LIB_SYSCALL_NR_H
-#define __LIB_SYSCALL_NR_H
-
-/* System call numbers. */
-enum 
-  {
-    /* Projects 2 and later. */
-    SYS_HALT,                   /* Halt the operating system. */
-    SYS_EXIT,                   /* Terminate this process. */
-    SYS_EXEC,                   /* Start another process. */
-    SYS_WAIT,                   /* Wait for a child process to die. */
-    SYS_CREATE,                 /* Create a file. */
-    SYS_REMOVE,                 /* Delete a file. */
-    SYS_OPEN,                   /* Open a file. */
-    SYS_FILESIZE,               /* Obtain a file's size. */
-    SYS_READ,                   /* Read from a file. */
-    SYS_WRITE,                  /* Write to a file. */
-    SYS_SEEK,                   /* Change position in a file. */
-    SYS_TELL,                   /* Report current position in a file. */
-    SYS_CLOSE,                  /* Close a file. */
-
-    /* Project 3 and optionally project 4. */
-    SYS_MMAP,                   /* Map a file into memory. */
-    SYS_MUNMAP,                 /* Remove a memory mapping. */
-
-    /* Project 4 only. */
-    SYS_CHDIR,                  /* Change the current directory. */
-    SYS_MKDIR,                  /* Create a directory. */
-    SYS_READDIR,                /* Reads a directory entry. */
-    SYS_ISDIR,                  /* Tests if a fd represents a directory. */
-    SYS_INUMBER                 /* Returns the inode number for a fd. */
-  };
-
-#endif /* lib/syscall-nr.h */
diff --git a/src/lib/user/console.c b/src/lib/user/console.c
deleted file mode 100644
index 22bdc8c..0000000
--- a/src/lib/user/console.c
+++ /dev/null
@@ -1,94 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <syscall.h>
-#include <syscall-nr.h>
-
-/* The standard vprintf() function,
-   which is like printf() but uses a va_list. */
-int
-vprintf (const char *format, va_list args) 
-{
-  return vhprintf (STDOUT_FILENO, format, args);
-}
-
-/* Like printf(), but writes output to the given HANDLE. */
-int
-hprintf (int handle, const char *format, ...) 
-{
-  va_list args;
-  int retval;
-
-  va_start (args, format);
-  retval = vhprintf (handle, format, args);
-  va_end (args);
-
-  return retval;
-}
-
-/* Writes string S to the console, followed by a new-line
-   character. */
-int
-puts (const char *s) 
-{
-  write (STDOUT_FILENO, s, strlen (s));
-  putchar ('\n');
-
-  return 0;
-}
-
-/* Writes C to the console. */
-int
-putchar (int c) 
-{
-  char c2 = c;
-  write (STDOUT_FILENO, &c2, 1);
-  return c;
-}
-
-/* Auxiliary data for vhprintf_helper(). */
-struct vhprintf_aux 
-  {
-    char buf[64];       /* Character buffer. */
-    char *p;            /* Current position in buffer. */
-    int char_cnt;       /* Total characters written so far. */
-    int handle;         /* Output file handle. */
-  };
-
-static void add_char (char, void *);
-static void flush (struct vhprintf_aux *);
-
-/* Formats the printf() format specification FORMAT with
-   arguments given in ARGS and writes the output to the given
-   HANDLE. */
-int
-vhprintf (int handle, const char *format, va_list args) 
-{
-  struct vhprintf_aux aux;
-  aux.p = aux.buf;
-  aux.char_cnt = 0;
-  aux.handle = handle;
-  __vprintf (format, args, add_char, &aux);
-  flush (&aux);
-  return aux.char_cnt;
-}
-
-/* Adds C to the buffer in AUX, flushing it if the buffer fills
-   up. */
-static void
-add_char (char c, void *aux_) 
-{
-  struct vhprintf_aux *aux = aux_;
-  *aux->p++ = c;
-  if (aux->p >= aux->buf + sizeof aux->buf)
-    flush (aux);
-  aux->char_cnt++;
-}
-
-/* Flushes the buffer in AUX. */
-static void
-flush (struct vhprintf_aux *aux)
-{
-  if (aux->p > aux->buf)
-    write (aux->handle, aux->buf, aux->p - aux->buf);
-  aux->p = aux->buf;
-}
diff --git a/src/lib/user/debug.c b/src/lib/user/debug.c
deleted file mode 100644
index f49b874..0000000
--- a/src/lib/user/debug.c
+++ /dev/null
@@ -1,25 +0,0 @@
-#include <debug.h>
-#include <stdarg.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <syscall.h>
-
-/* Aborts the user program, printing the source file name, line
-   number, and function name, plus a user-specific message. */
-void
-debug_panic (const char *file, int line, const char *function,
-             const char *message, ...)
-{
-  va_list args;
-
-  printf ("User process ABORT at %s:%d in %s(): ", file, line, function);
-
-  va_start (args, message);
-  vprintf (message, args);
-  printf ("\n");
-  va_end (args);
-
-  debug_backtrace ();
-  
-  exit (1);
-}
diff --git a/src/lib/user/entry.c b/src/lib/user/entry.c
deleted file mode 100644
index a707c70..0000000
--- a/src/lib/user/entry.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <syscall.h>
-
-int main (int, char *[]);
-void _start (int argc, char *argv[]);
-
-void
-_start (int argc, char *argv[]) 
-{
-  exit (main (argc, argv));
-}
diff --git a/src/lib/user/stdio.h b/src/lib/user/stdio.h
deleted file mode 100644
index b9f3cc6..0000000
--- a/src/lib/user/stdio.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef __LIB_USER_STDIO_H
-#define __LIB_USER_STDIO_H
-
-int hprintf (int, const char *, ...) PRINTF_FORMAT (2, 3);
-int vhprintf (int, const char *, va_list) PRINTF_FORMAT (2, 0);
-
-#endif /* lib/user/stdio.h */
diff --git a/src/lib/user/syscall.c b/src/lib/user/syscall.c
deleted file mode 100644
index a9c5bc8..0000000
--- a/src/lib/user/syscall.c
+++ /dev/null
@@ -1,184 +0,0 @@
-#include <syscall.h>
-#include "../syscall-nr.h"
-
-/* Invokes syscall NUMBER, passing no arguments, and returns the
-   return value as an `int'. */
-#define syscall0(NUMBER)                                        \
-        ({                                                      \
-          int retval;                                           \
-          asm volatile                                          \
-            ("pushl %[number]; int $0x30; addl $4, %%esp"       \
-               : "=a" (retval)                                  \
-               : [number] "i" (NUMBER)                          \
-               : "memory");                                     \
-          retval;                                               \
-        })
-
-/* Invokes syscall NUMBER, passing argument ARG0, and returns the
-   return value as an `int'. */
-#define syscall1(NUMBER, ARG0)                                           \
-        ({                                                               \
-          int retval;                                                    \
-          asm volatile                                                   \
-            ("pushl %[arg0]; pushl %[number]; int $0x30; addl $8, %%esp" \
-               : "=a" (retval)                                           \
-               : [number] "i" (NUMBER),                                  \
-                 [arg0] "g" (ARG0)                                       \
-               : "memory");                                              \
-          retval;                                                        \
-        })
-
-/* Invokes syscall NUMBER, passing arguments ARG0 and ARG1, and
-   returns the return value as an `int'. */
-#define syscall2(NUMBER, ARG0, ARG1)                            \
-        ({                                                      \
-          int retval;                                           \
-          asm volatile                                          \
-            ("pushl %[arg1]; pushl %[arg0]; "                   \
-             "pushl %[number]; int $0x30; addl $12, %%esp"      \
-               : "=a" (retval)                                  \
-               : [number] "i" (NUMBER),                         \
-                 [arg0] "g" (ARG0),                             \
-                 [arg1] "g" (ARG1)                              \
-               : "memory");                                     \
-          retval;                                               \
-        })
-
-/* Invokes syscall NUMBER, passing arguments ARG0, ARG1, and
-   ARG2, and returns the return value as an `int'. */
-#define syscall3(NUMBER, ARG0, ARG1, ARG2)                      \
-        ({                                                      \
-          int retval;                                           \
-          asm volatile                                          \
-            ("pushl %[arg2]; pushl %[arg1]; pushl %[arg0]; "    \
-             "pushl %[number]; int $0x30; addl $16, %%esp"      \
-               : "=a" (retval)                                  \
-               : [number] "i" (NUMBER),                         \
-                 [arg0] "g" (ARG0),                             \
-                 [arg1] "g" (ARG1),                             \
-                 [arg2] "g" (ARG2)                              \
-               : "memory");                                     \
-          retval;                                               \
-        })
-
-void
-halt (void) 
-{
-  syscall0 (SYS_HALT);
-  NOT_REACHED ();
-}
-
-void
-exit (int status)
-{
-  syscall1 (SYS_EXIT, status);
-  NOT_REACHED ();
-}
-
-pid_t
-exec (const char *file)
-{
-  return (pid_t) syscall1 (SYS_EXEC, file);
-}
-
-int
-wait (pid_t pid)
-{
-  return syscall1 (SYS_WAIT, pid);
-}
-
-bool
-create (const char *file, unsigned initial_size)
-{
-  return syscall2 (SYS_CREATE, file, initial_size);
-}
-
-bool
-remove (const char *file)
-{
-  return syscall1 (SYS_REMOVE, file);
-}
-
-int
-open (const char *file)
-{
-  return syscall1 (SYS_OPEN, file);
-}
-
-int
-filesize (int fd) 
-{
-  return syscall1 (SYS_FILESIZE, fd);
-}
-
-int
-read (int fd, void *buffer, unsigned size)
-{
-  return syscall3 (SYS_READ, fd, buffer, size);
-}
-
-int
-write (int fd, const void *buffer, unsigned size)
-{
-  return syscall3 (SYS_WRITE, fd, buffer, size);
-}
-
-void
-seek (int fd, unsigned position) 
-{
-  syscall2 (SYS_SEEK, fd, position);
-}
-
-unsigned
-tell (int fd) 
-{
-  return syscall1 (SYS_TELL, fd);
-}
-
-void
-close (int fd)
-{
-  syscall1 (SYS_CLOSE, fd);
-}
-
-mapid_t
-mmap (int fd, void *addr)
-{
-  return syscall2 (SYS_MMAP, fd, addr);
-}
-
-void
-munmap (mapid_t mapid)
-{
-  syscall1 (SYS_MUNMAP, mapid);
-}
-
-bool
-chdir (const char *dir)
-{
-  return syscall1 (SYS_CHDIR, dir);
-}
-
-bool
-mkdir (const char *dir)
-{
-  return syscall1 (SYS_MKDIR, dir);
-}
-
-bool
-readdir (int fd, char name[READDIR_MAX_LEN + 1]) 
-{
-  return syscall2 (SYS_READDIR, fd, name);
-}
-
-bool
-isdir (int fd) 
-{
-  return syscall1 (SYS_ISDIR, fd);
-}
-
-int
-inumber (int fd) 
-{
-  return syscall1 (SYS_INUMBER, fd);
-}
diff --git a/src/lib/user/syscall.h b/src/lib/user/syscall.h
deleted file mode 100644
index 8a9e0c0..0000000
--- a/src/lib/user/syscall.h
+++ /dev/null
@@ -1,48 +0,0 @@
-#ifndef __LIB_USER_SYSCALL_H
-#define __LIB_USER_SYSCALL_H
-
-#include <stdbool.h>
-#include <debug.h>
-
-/* Process identifier. */
-typedef int pid_t;
-#define PID_ERROR ((pid_t) -1)
-
-/* Map region identifier. */
-typedef int mapid_t;
-#define MAP_FAILED ((mapid_t) -1)
-
-/* Maximum characters in a filename written by readdir(). */
-#define READDIR_MAX_LEN 14
-
-/* Typical return values from main() and arguments to exit(). */
-#define EXIT_SUCCESS 0          /* Successful execution. */
-#define EXIT_FAILURE 1          /* Unsuccessful execution. */
-
-/* Projects 2 and later. */
-void halt (void) NO_RETURN;
-void exit (int status) NO_RETURN;
-pid_t exec (const char *file);
-int wait (pid_t);
-bool create (const char *file, unsigned initial_size);
-bool remove (const char *file);
-int open (const char *file);
-int filesize (int fd);
-int read (int fd, void *buffer, unsigned length);
-int write (int fd, const void *buffer, unsigned length);
-void seek (int fd, unsigned position);
-unsigned tell (int fd);
-void close (int fd);
-
-/* Project 3 and optionally project 4. */
-mapid_t mmap (int fd, void *addr);
-void munmap (mapid_t);
-
-/* Project 4 only. */
-bool chdir (const char *dir);
-bool mkdir (const char *dir);
-bool readdir (int fd, char name[READDIR_MAX_LEN + 1]);
-bool isdir (int fd);
-int inumber (int fd);
-
-#endif /* lib/user/syscall.h */
diff --git a/src/lib/user/user.lds b/src/lib/user/user.lds
deleted file mode 100644
index cc6d6c0..0000000
--- a/src/lib/user/user.lds
+++ /dev/null
@@ -1,57 +0,0 @@
-OUTPUT_FORMAT("elf32-i386")
-OUTPUT_ARCH(i386)
-ENTRY(_start)
-
-SECTIONS
-{
-  /* Read-only sections, merged into text segment: */
-  __executable_start = 0x08048000 + SIZEOF_HEADERS;
-  . = 0x08048000 + SIZEOF_HEADERS;
-  .text : { *(.text) } = 0x90
-  .rodata : { *(.rodata) }
-
-  /* Adjust the address for the data segment.  We want to adjust up to
-     the same address within the page on the next page up.  */
-  . = ALIGN (0x1000) - ((0x1000 - .) & (0x1000 - 1)); 
-  . = DATA_SEGMENT_ALIGN (0x1000, 0x1000);
-
-  .data : { *(.data) }
-  .bss : { *(.bss) }
-
-  /* Stabs debugging sections.  */
-  .stab          0 : { *(.stab) }
-  .stabstr       0 : { *(.stabstr) }
-  .stab.excl     0 : { *(.stab.excl) }
-  .stab.exclstr  0 : { *(.stab.exclstr) }
-  .stab.index    0 : { *(.stab.index) }
-  .stab.indexstr 0 : { *(.stab.indexstr) }
-  .comment       0 : { *(.comment) }
-
-  /* DWARF debug sections.
-  Symbols in the DWARF debugging sections are relative to the beginning
-  of the section so we begin them at 0.  */
-  /* DWARF 1 */
-  .debug          0 : { *(.debug) }
-  .line           0 : { *(.line) }
-  /* GNU DWARF 1 extensions */
-  .debug_srcinfo  0 : { *(.debug_srcinfo) }
-  .debug_sfnames  0 : { *(.debug_sfnames) }
-  /* DWARF 1.1 and DWARF 2 */
-  .debug_aranges  0 : { *(.debug_aranges) }
-  .debug_pubnames 0 : { *(.debug_pubnames) }
-  /* DWARF 2 */
-  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
-  .debug_abbrev   0 : { *(.debug_abbrev) }
-  .debug_line     0 : { *(.debug_line) }
-  .debug_frame    0 : { *(.debug_frame) }
-  .debug_str      0 : { *(.debug_str) }
-  .debug_loc      0 : { *(.debug_loc) }
-  .debug_macinfo  0 : { *(.debug_macinfo) }
-  /* SGI/MIPS DWARF 2 extensions */
-  .debug_weaknames 0 : { *(.debug_weaknames) }
-  .debug_funcnames 0 : { *(.debug_funcnames) }
-  .debug_typenames 0 : { *(.debug_typenames) }
-  .debug_varnames  0 : { *(.debug_varnames) }
-  /DISCARD/ : { *(.note.GNU-stack) }
-  /DISCARD/ : { *(.eh_frame) }
-}
diff --git a/src/misc/bochs-2.2.6-big-endian.patch b/src/misc/bochs-2.2.6-big-endian.patch
deleted file mode 100644
index 420f69b..0000000
--- a/src/misc/bochs-2.2.6-big-endian.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-diff -urp bochs-2.2.6/gdbstub.cc bochs-2.2.6.orig/gdbstub.cc
---- bochs-2.2.6.orig/gdbstub.cc	2006-01-17 09:15:29.000000000 -0800
-+++ bochs-2.2.6/gdbstub.cc	2006-04-03 13:47:39.000000000 -0700
-@@ -672,35 +672,36 @@
-             
-           case 'g':
- #if !BX_SUPPORT_X86_64
--            registers[0] = EAX;
--            registers[1] = ECX;
--            registers[2] = EDX;
--            registers[3] = EBX;
--            registers[4] = ESP;
--            registers[5] = EBP;
--            registers[6] = ESI;
--            registers[7] = EDI;
-+            WriteHostDWordToLittleEndian(registers + 0, EAX);
-+            WriteHostDWordToLittleEndian(registers + 1, ECX);
-+            WriteHostDWordToLittleEndian(registers + 2, EDX);
-+            WriteHostDWordToLittleEndian(registers + 3, EBX);
-+            WriteHostDWordToLittleEndian(registers + 4, ESP);
-+            WriteHostDWordToLittleEndian(registers + 5, EBP);
-+            WriteHostDWordToLittleEndian(registers + 6, ESI);
-+            WriteHostDWordToLittleEndian(registers + 7, EDI);
-             if (last_stop_reason == GDBSTUB_EXECUTION_BREAKPOINT)
-               {
--                 registers[8] = EIP + 1;
-+                WriteHostDWordToLittleEndian(registers + 8, EIP + 1);
-               }
-             else
-               {
--                 registers[8] = EIP;
-+                WriteHostDWordToLittleEndian(registers + 8, EIP);
-               }
--            registers[9] = BX_CPU_THIS_PTR read_eflags();
--            registers[10] = 
--              BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].selector.value;
--            registers[11] = 
--              BX_CPU_THIS_PTR sregs[BX_SEG_REG_SS].selector.value;
--            registers[12] = 
--              BX_CPU_THIS_PTR sregs[BX_SEG_REG_DS].selector.value;
--            registers[13] = 
--              BX_CPU_THIS_PTR sregs[BX_SEG_REG_ES].selector.value;
--            registers[14] = 
--              BX_CPU_THIS_PTR sregs[BX_SEG_REG_FS].selector.value;
--            registers[15] = 
--              BX_CPU_THIS_PTR sregs[BX_SEG_REG_GS].selector.value;
-+            WriteHostDWordToLittleEndian(registers + 9,
-+                                         BX_CPU_THIS_PTR read_eflags());
-+            WriteHostDWordToLittleEndian(registers + 10,
-+              BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].selector.value);
-+            WriteHostDWordToLittleEndian(registers + 11,
-+              BX_CPU_THIS_PTR sregs[BX_SEG_REG_SS].selector.value);
-+            WriteHostDWordToLittleEndian(registers + 12,
-+              BX_CPU_THIS_PTR sregs[BX_SEG_REG_DS].selector.value);
-+            WriteHostDWordToLittleEndian(registers + 13,
-+              BX_CPU_THIS_PTR sregs[BX_SEG_REG_ES].selector.value);
-+            WriteHostDWordToLittleEndian(registers + 14,
-+              BX_CPU_THIS_PTR sregs[BX_SEG_REG_FS].selector.value);
-+            WriteHostDWordToLittleEndian(registers + 15,
-+              BX_CPU_THIS_PTR sregs[BX_SEG_REG_GS].selector.value);
-             mem2hex((char *)registers, obuf, NUMREGSBYTES);
- #else
- #define PUTREG(buf, val, len) do { \
diff --git a/src/misc/bochs-2.2.6-build.sh b/src/misc/bochs-2.2.6-build.sh
deleted file mode 100644
index a8a44e3..0000000
--- a/src/misc/bochs-2.2.6-build.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#! /bin/sh -e
-
-if test -z "$SRCDIR" || test -z "$PINTOSDIR" || test -z "$DSTDIR"; then
-    echo "usage: env SRCDIR=<srcdir> PINTOSDIR=<srcdir> DSTDIR=<dstdir> sh $0"
-    echo "  where <srcdir> contains bochs-2.2.6.tar.gz"
-    echo "    and <pintosdir> is the root of the pintos source tree"
-    echo "    and <dstdir> is the installation prefix (e.g. /usr/local)"
-    exit 1
-fi
-
-cd /tmp
-mkdir $$
-cd $$
-mkdir bochs-2.2.6
-tar xzf $SRCDIR/bochs-2.2.6.tar.gz
-cd bochs-2.2.6
-cat $PINTOSDIR/src/misc/bochs-2.2.6-ms-extensions.patch | patch -p1
-cat $PINTOSDIR/src/misc/bochs-2.2.6-big-endian.patch | patch -p1
-cat $PINTOSDIR/src/misc/bochs-2.2.6-jitter.patch | patch -p1
-cat $PINTOSDIR/src/misc/bochs-2.2.6-triple-fault.patch | patch -p1
-cat $PINTOSDIR/src/misc/bochs-2.2.6-solaris-tty.patch | patch -p1
-cat $PINTOSDIR/src/misc/bochs-2.2.6-page-fault-segv.patch | patch -p1
-cat $PINTOSDIR/src/misc/bochs-2.2.6-paranoia.patch | patch -p1
-cat $PINTOSDIR/src/misc/bochs-2.2.6-gdbstub-ENN.patch | patch -p1
-if test "`uname -s`" = "SunOS"; then
-    cat $PINTOSDIR/src/misc/bochs-2.2.6-solaris-link.patch | patch -p1
-fi
-CFGOPTS="--with-x --with-x11 --with-term --with-nogui --prefix=$DSTDIR"
-mkdir plain &&
-        cd plain && 
-        ../configure $CFGOPTS --enable-gdb-stub && 
-        make && 
-        make install &&
-        cd ..
-mkdir with-dbg &&
-        cd with-dbg &&
-        ../configure --enable-debugger $CFGOPTS &&
-        make &&
-        cp bochs $DSTDIR/bin/bochs-dbg &&
-        cd ..
diff --git a/src/misc/bochs-2.2.6-gdbstub-ENN.patch b/src/misc/bochs-2.2.6-gdbstub-ENN.patch
deleted file mode 100644
index 88a8145..0000000
--- a/src/misc/bochs-2.2.6-gdbstub-ENN.patch
+++ /dev/null
@@ -1,29 +0,0 @@
---- bochs-2.2.6/gdbstub.cc	2006-01-17 12:15:29.000000000 -0500
-+++ bochs-2.2.6-patched/gdbstub.cc	2007-02-06 23:04:51.095523904 -0500
-@@ -515,7 +515,7 @@
-                         }
-                       else
-                         {
--                           put_reply("ENN");
-+                           put_reply("Eff");
-                         }
-                    }
-                  break;                    
-@@ -761,7 +761,7 @@
-               }
-             else
-               {
--                 put_reply("ENN");
-+                 put_reply("Eff");
-               }
-             break;
-             
-@@ -782,7 +782,7 @@
-               }
-             else
-               {
--                 put_reply("ENN");
-+                 put_reply("Eff");
-               }          
-             break;
- 
diff --git a/src/misc/bochs-2.2.6-jitter.patch b/src/misc/bochs-2.2.6-jitter.patch
deleted file mode 100644
index 48917e0..0000000
--- a/src/misc/bochs-2.2.6-jitter.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-diff -urp bochs-2.2.6/iodev/pit82c54.cc bochs-2.2.6.orig/iodev/pit82c54.cc
---- bochs-2.2.6.orig/iodev/pit82c54.cc	2006-01-08 12:39:08.000000000 -0800
-+++ bochs-2.2.6/iodev/pit82c54.cc	2006-04-03 14:00:27.000000000 -0700
-@@ -28,6 +28,7 @@
- 
- #include "iodev.h"
- #include "pit82c54.h"
-+#include <stdlib.h>
- #define LOG_THIS this->
- 
- 
-@@ -359,7 +360,13 @@
-       case 2:
- 	if(thisctr.count_written) {
- 	  if(thisctr.triggerGATE || thisctr.first_pass) {
--	    set_count(thisctr, thisctr.inlatch);
-+            unsigned n = thisctr.inlatch;
-+            if (jitter && n > 5) {
-+                n *= (double) rand() / RAND_MAX;
-+                if (n < 5)
-+                    n = 5;
-+            }
-+	    set_count(thisctr, n);
- 	    thisctr.next_change_time=(thisctr.count_binary-1) & 0xFFFF;
- 	    thisctr.null_count=0;
- 	    if(thisctr.inlatch==1) {
-diff -urp bochs-2.2.6/main.cc bochs-2.2.6.orig/main.cc
---- bochs-2.2.6.orig/main.cc	2006-01-22 04:31:15.000000000 -0800
-+++ bochs-2.2.6/main.cc	2006-04-03 14:00:54.000000000 -0700
-@@ -105,6 +105,7 @@
- #endif
- 
- char *bochsrc_filename = NULL;
-+int jitter = 0;
- 
- void bx_print_header ()
- {
-@@ -459,6 +460,13 @@
-     else if (!strcmp ("-q", argv[arg])) {
-       SIM->get_param_enum(BXP_BOCHS_START)->set (BX_QUICK_START);
-     }
-+    else if (!strcmp ("-j", argv[arg])) {
-+      if (++arg >= argc) BX_PANIC(("-j must be followed by a number"));
-+      else {
-+        jitter = 1;
-+        srand (atoi (argv[arg]));
-+      }
-+    }
-     else if (!strcmp ("-f", argv[arg])) {
-       if (++arg >= argc) BX_PANIC(("-f must be followed by a filename"));
-       else bochsrc_filename = argv[arg];
-diff -up /home/blp/cs140/bochs-2.2.6/bochs.h\~ /home/blp/cs140/bochs-2.2.6/bochs.h
---- bochs-2.2.6/bochs.h.orig	2006-01-28 08:16:02.000000000 -0800
-+++ bochs-2.2.6/bochs.h	2006-04-03 14:03:54.000000000 -0700
-@@ -698,4 +698,6 @@ int bx_init_hardware ();
- 
- #endif
- 
-+extern int jitter;
-+
- #endif  /* BX_BOCHS_H */
diff --git a/src/misc/bochs-2.2.6-ms-extensions.patch b/src/misc/bochs-2.2.6-ms-extensions.patch
deleted file mode 100644
index a6e50a0..0000000
--- a/src/misc/bochs-2.2.6-ms-extensions.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-diff -urp orig/bochs-2.1.1/gui/Makefile.in bochs-2.1.1/gui/Makefile.in
---- orig/bochs-2.1.1/gui/Makefile.in	2003-11-28 07:07:28.000000000 -0800
-+++ bochs-2.1.1/gui/Makefile.in	2004-09-13 15:05:09.402039000 -0700
-@@ -44,7 +44,7 @@ SHELL = /bin/sh
- @SET_MAKE@
- 
- CXX = @CXX@
--CXXFLAGS = $(BX_INCDIRS) @CXXFLAGS@  @GUI_CXXFLAGS@
-+CXXFLAGS = $(BX_INCDIRS) @CXXFLAGS@  @GUI_CXXFLAGS@ -fms-extensions
- LOCAL_CXXFLAGS =
- LDFLAGS = @LDFLAGS@
- LIBS = @LIBS@
-
-
diff --git a/src/misc/bochs-2.2.6-page-fault-segv.patch b/src/misc/bochs-2.2.6-page-fault-segv.patch
deleted file mode 100644
index 7c61a37..0000000
--- a/src/misc/bochs-2.2.6-page-fault-segv.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-Index: bochs-2.2.6/cpu/exception.cc
-diff -u bochs-2.2.6/cpu/exception.cc\~ bochs-2.2.6/cpu/exception.cc
---- bochs-2.2.6/cpu/exception.cc~ 2006-09-28 15:51:39.000000000 -0700
-+++ bochs-2.2.6/cpu/exception.cc 2006-12-08 11:14:33.000000000 -0800
-@@ -1033,6 +1033,10 @@ void BX_CPU_C::exception(unsigned vector
-     BX_CPU_THIS_PTR curr_exception[0] = exception_type;
-   }
- 
-+#if BX_GDBSTUB
-+  bx_gdbstub_exception(vector);
-+#endif
-+
- #if BX_CPU_LEVEL >= 2
-   if (!real_mode()) {
-     BX_CPU_THIS_PTR interrupt(vector, 0, push_error, error_code);
-Index: bochs-2.2.6/gdbstub.cc
-diff -u bochs-2.2.6/gdbstub.cc\~ bochs-2.2.6/gdbstub.cc
---- bochs-2.2.6/gdbstub.cc~ 2006-09-28 15:51:39.000000000 -0700
-+++ bochs-2.2.6/gdbstub.cc 2006-12-08 11:12:03.000000000 -0800
-@@ -26,6 +26,7 @@ static int last_stop_reason = GDBSTUB_ST
- #define GDBSTUB_EXECUTION_BREAKPOINT    (0xac1)
- #define GDBSTUB_TRACE                   (0xac2)
- #define GDBSTUB_USER_BREAK              (0xac3)
-+#define GDBSTUB_EXCEPTION_0E            (0xac4)
- 
- static int listen_socket_fd;
- static int socket_fd;
-@@ -271,6 +272,12 @@ int bx_gdbstub_check(unsigned int eip)
-    return(GDBSTUB_STOP_NO_REASON);
- }
- 
-+void bx_gdbstub_exception(unsigned int nr) 
-+{
-+    if (nr == 0x0e)
-+        last_stop_reason = GDBSTUB_EXCEPTION_0E;
-+}
-+
- static int remove_breakpoint(unsigned int addr, int len)
- {
-    unsigned int i;
-@@ -452,6 +459,10 @@ static void debug_loop(void)
-                    {
-                       write_signal(&buf[1], SIGTRAP);
-                    }
-+                 else if (last_stop_reason == GDBSTUB_EXCEPTION_0E)
-+                   {
-+                      write_signal(&buf[1], SIGSEGV);
-+                   }
-                  else
-                    {
-                       write_signal(&buf[1], 0);
-@@ -476,10 +487,14 @@ static void debug_loop(void)
-                    {
-                       write_signal(&buf[1], SIGTRAP);
-                    }
--                 else
-+                 else if (last_stop_reason == GDBSTUB_EXCEPTION_0E)
-                    {
-                       write_signal(&buf[1], SIGSEGV);
-                    }
-+                 else
-+                   {
-+                      write_signal(&buf[1], 0);
-+                   }
-                  put_reply(buf);
-                  break;
-               }
-Index: bochs-2.2.6/bochs.h
-diff -u bochs-2.2.6/bochs.h\~ bochs-2.2.6/bochs.h
---- bochs-2.2.6/bochs.h~ 2006-09-28 15:51:39.000000000 -0700
-+++ bochs-2.2.6/bochs.h 2006-12-08 11:14:19.000000000 -0800
-@@ -375,6 +375,7 @@ BOCHSAPI extern logfunc_t *genlog;
- // defines for GDB stub
- void bx_gdbstub_init(int argc, char* argv[]);
- int bx_gdbstub_check(unsigned int eip);
-+void bx_gdbstub_exception(unsigned int nr);
- #define GDBSTUB_STOP_NO_REASON   (0xac0)
- 
- #if BX_SUPPORT_SMP
diff --git a/src/misc/bochs-2.2.6-paranoia.patch b/src/misc/bochs-2.2.6-paranoia.patch
deleted file mode 100644
index ff8d736..0000000
--- a/src/misc/bochs-2.2.6-paranoia.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-Index: bochs-2.2.6/iodev/hdimage.h
-diff -u bochs-2.2.6/iodev/hdimage.h\~ bochs-2.2.6/iodev/hdimage.h
---- bochs-2.2.6/iodev/hdimage.h~ 2005-11-06 03:07:01.000000000 -0800
-+++ bochs-2.2.6/iodev/hdimage.h 2006-09-28 15:55:50.000000000 -0700
-@@ -273,14 +273,8 @@ class sparse_image_t : public device_ima
- 
-  void panic(const char * message);
-  off_t
--#ifndef PARANOID
--       sparse_image_t::
--#endif
-                        get_physical_offset();
-  void
--#ifndef PARANOID
--       sparse_image_t::
--#endif
-                        set_virtual_page(Bit32u new_virtual_page);
-  void read_header();
-  ssize_t read_page_fragment(Bit32u read_virtual_page, Bit32u read_page_offset, size_t read_size, void * buf);
diff --git a/src/misc/bochs-2.2.6-solaris-link.patch b/src/misc/bochs-2.2.6-solaris-link.patch
deleted file mode 100644
index 5afef49..0000000
--- a/src/misc/bochs-2.2.6-solaris-link.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- bochs-2.2.6.orig/Makefile.in	2006-04-03 16:34:51.170387000 -0700
-+++ bochs-2.2.6/Makefile.in	2006-04-03 16:34:57.480303000 -0700
-@@ -93,7 +93,7 @@
- CFLAGS = @CFLAGS@ @GUI_CFLAGS@ $(MCH_CFLAGS) $(FLA_FLAGS) @DEFINE_PLUGIN_PATH@ -DBX_SHARE_PATH='"$(sharedir)"'
- CXXFLAGS = @CXXFLAGS@ @GUI_CXXFLAGS@ $(MCH_CFLAGS) $(FLA_FLAGS) @DEFINE_PLUGIN_PATH@ -DBX_SHARE_PATH='"$(sharedir)"'
- 
--LDFLAGS = @LDFLAGS@
-+LDFLAGS = @LDFLAGS@ -lsocket
- LIBS = @LIBS@
- # To compile with readline:
- #   linux needs just -lreadline
diff --git a/src/misc/bochs-2.2.6-solaris-tty.patch b/src/misc/bochs-2.2.6-solaris-tty.patch
deleted file mode 100644
index a9725dc..0000000
--- a/src/misc/bochs-2.2.6-solaris-tty.patch
+++ /dev/null
@@ -1,31 +0,0 @@
---- bochs-2.2.6/iodev/serial.cc	2005-07-11 09:24:47.000000000 -0700
-+++ bochs-2.2.6.patch/iodev/serial.cc	2006-05-28 16:41:33.278938000 -0700
-@@ -245,8 +245,13 @@
-             BX_SER_THIS s[i].io_mode = BX_SER_MODE_TERM;
-             BX_DEBUG(("com%d tty_id: %d", i+1, BX_SER_THIS s[i].tty_id));
-             tcgetattr(BX_SER_THIS s[i].tty_id, &BX_SER_THIS s[i].term_orig);
--            bcopy((caddr_t) &BX_SER_THIS s[i].term_orig, (caddr_t) &BX_SER_THIS s[i].term_new, sizeof(struct termios));
--            cfmakeraw(&BX_SER_THIS s[i].term_new);
-+            memcpy((caddr_t) &BX_SER_THIS s[i].term_new, (caddr_t) &BX_SER_THIS s[i].term_orig, sizeof(struct termios));
-+            BX_SER_THIS s[i].term_new.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
-+                                          |INLCR|IGNCR|ICRNL|IXON);
-+            BX_SER_THIS s[i].term_new.c_oflag &= ~OPOST;
-+            BX_SER_THIS s[i].term_new.c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
-+            BX_SER_THIS s[i].term_new.c_cflag &= ~(CSIZE|PARENB);
-+            BX_SER_THIS s[i].term_new.c_cflag |= CS8;
-             BX_SER_THIS s[i].term_new.c_oflag |= OPOST | ONLCR;  // Enable NL to CR-NL translation
- #ifndef TRUE_CTLC
-             // ctl-C will exit Bochs, or trap to the debugger
-
-
---- bochs-2.2.6/iodev/serial.h	2005-07-10 09:51:09.000000000 -0700
-+++ bochs-2.2.6.patch/iodev/serial.h	2006-05-28 16:39:03.757839000 -0700
-@@ -40,7 +40,7 @@
- #define SERIAL_ENABLE
- #endif
- 
--#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__linux__) || defined(__GNU__) || defined(__GLIBC__) || defined(__APPLE__)
-+#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__linux__) || defined(__GNU__) || defined(__GLIBC__) || defined(__APPLE__) || defined(__sun__)
- #define SERIAL_ENABLE
- extern "C" {
- #include <termios.h>
diff --git a/src/misc/bochs-2.2.6-triple-fault.patch b/src/misc/bochs-2.2.6-triple-fault.patch
deleted file mode 100644
index f6d0871..0000000
--- a/src/misc/bochs-2.2.6-triple-fault.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-diff -u bochs-2.2.6.orig/cpu/exception.cc bochs-2.2.6/cpu/exception.cc
---- bochs-2.2.6.orig/cpu/exception.cc
-+++ bochs-2.2.6/cpu/exception.cc
-@@ -841,6 +841,13 @@ void BX_CPU_C::exception(unsigned vector
- 
-   BX_CPU_THIS_PTR errorno++;
-   if (BX_CPU_THIS_PTR errorno >= 3) {
-+#if BX_GDBSTUB
-+    if (bx_dbg.gdbstub_enabled) {
-+        fprintf(stderr, "Triple fault: stopping for gdb\n");
-+        BX_CPU_THIS_PTR ispanic = 1;
-+        longjmp(BX_CPU_THIS_PTR jmp_buf_env, 1);
-+    }
-+#endif
- #if BX_RESET_ON_TRIPLE_FAULT
-     BX_ERROR(("exception(): 3rd (%d) exception with no resolution, shutdown status is %02xh, resetting", vector, DEV_cmos_get_reg(0x0f)));
-     debug(BX_CPU_THIS_PTR prev_eip);
-@@ -860,6 +867,13 @@ void BX_CPU_C::exception(unsigned vector
- 
-   /* if 1st was a double fault (software INT?), then shutdown */
-   if ( (BX_CPU_THIS_PTR errorno==2) && (BX_CPU_THIS_PTR curr_exception[0]==BX_ET_DOUBLE_FAULT) ) {
-+#if BX_GDBSTUB
-+    if (bx_dbg.gdbstub_enabled) {
-+        fprintf(stderr, "Triple fault: stopping for gdb\n");
-+        BX_CPU_THIS_PTR ispanic = 1;
-+        longjmp(BX_CPU_THIS_PTR jmp_buf_env, 1);
-+    }
-+#endif
- #if BX_RESET_ON_TRIPLE_FAULT
-     BX_INFO(("exception(): triple fault encountered, shutdown status is %02xh, resetting", DEV_cmos_get_reg(0x0f)));
-     debug(BX_CPU_THIS_PTR prev_eip);
-diff -u bochs-2.2.6.orig/gdbstub.cc bochs-2.2.6/gdbstub.cc
---- bochs-2.2.6.orig/gdbstub.cc
-+++ bochs-2.2.6/gdbstub.cc
-@@ -466,19 +466,19 @@ static void debug_loop(void)
-                  
-                  BX_INFO (("stepping"));
-                  stub_trace_flag = 1;
-+                 bx_cpu.ispanic = 0;
-                  bx_cpu.cpu_loop(-1);
-                  DEV_vga_refresh();
-                  stub_trace_flag = 0;
-                  BX_INFO (("stopped with %x", last_stop_reason));
-                  buf[0] = 'S';
--                 if (last_stop_reason == GDBSTUB_EXECUTION_BREAKPOINT ||
--                     last_stop_reason == GDBSTUB_TRACE)
-+                 if (last_stop_reason == GDBSTUB_TRACE && !bx_cpu.ispanic)
-                    {
-                       write_signal(&buf[1], SIGTRAP);
-                    }
-                  else
-                    {
--                      write_signal(&buf[1], SIGTRAP);
-+                      write_signal(&buf[1], SIGSEGV);
-                    }
-                  put_reply(buf);
-                  break;
diff --git a/src/misc/gcc-3.3.6-cross-howto b/src/misc/gcc-3.3.6-cross-howto
deleted file mode 100644
index ad25173..0000000
--- a/src/misc/gcc-3.3.6-cross-howto
+++ /dev/null
@@ -1,39 +0,0 @@
-Here are the commands we used to build and install the SPARC
-cross-compiler:
-
-PINTOSROOT=$HOME/private/pintos
-
-PREFIX=/usr/class/cs140/`uname -m`
-PATH=$PATH:$PREFIX/bin
-TMP=`pwd`
-
-wget ftp://ftp.gnu.org/pub/gnu/binutils/binutils-2.15.tar.bz2
-wget ftp://sources.redhat.com/pub/newlib/newlib-1.13.0.tar.gz
-wget ftp://ftp.gnu.org/pub/gnu/gcc/gcc-3.3.6/gcc-core-3.3.6.tar.bz2
-wget ftp://ftp.gnu.org/pub/gnu/gdb/gdb-6.3.tar.bz2
-
-bzcat binutils-2.15.tar.bz2 | tar x
-tar xzf newlib-1.13.0.tar.gz
-bzcat gcc-core-3.3.6.tar.bz2 | tar x
-bzcat gdb-6.3.tar.bz2 | tar x
-
-cd $TMP/binutils-2.15
-mkdir i386
-cd i386
-../configure --target=i386-elf --prefix=$PREFIX
-make LDFLAGS=-lintl
-make install
-
-cd $TMP/gcc-3.3.6
-mkdir i386
-cd i386
-../configure --target=i386-elf --prefix=$PREFIX --with-gnu-as --with-as=$PREFIX/bin/i386-elf-as --with-gnu-ld --with-ld=$PREFIX/bin/i386-elf-ld --with-headers=$TMP/newlib-1.13.0/newlib/libc/include --with-newlib
-make
-make install
-
-cd $TMP/gdb-6.3
-mkdir i386
-cd i386
-../configure --target=i386-elf --prefix=$PREFIX --disable-tui
-make LDFLAGS=-lintl
-make install
diff --git a/src/misc/gdb-macros b/src/misc/gdb-macros
deleted file mode 100644
index a0d0e54..0000000
--- a/src/misc/gdb-macros
+++ /dev/null
@@ -1,120 +0,0 @@
-#
-# A set of useful macros that can help debug Pintos.
-#
-# Include with "source" cmd in gdb.
-# Use "help user-defined" for help.
-#
-# Author: Godmar Back <gback@cs.vt.edu>, Feb 2006
-#
-# $Id: gdb-macros,v 1.1 2006-04-07 18:29:34 blp Exp $
-#
-
-# for internal use
-define offsetof
-    set $rc = (char*)&((struct $arg0 *)0)->$arg1 - (char*)0
-end
-
-define list_entry
-    offsetof $arg1 $arg2
-    set $rc = ((struct $arg1 *) ((uint8_t *) ($arg0) - $rc))
-end
-
-# dump a Pintos list
-define dumplist
-    set $list = $arg0
-    set $e = $list->head.next
-    set $i = 0
-    while $e != &(($arg0).tail)
-        list_entry $e $arg1 $arg2
-        set $l = $rc
-        printf "pintos-debug: dumplist #%d: %p ", $i++, $l
-        output *$l
-        set $e = $e->next
-        printf "\n"
-    end
-end
-
-document dumplist
-    Dump the content of a Pintos list, 
-    invoke as dumplist name_of_list name_of_struct name_of_elem_in_list_struct
-end
-
-# print a thread's backtrace, given a pointer to the struct thread *
-define btthread
-   if $arg0 == ($esp - ((unsigned)$esp % 4096)) 
-	bt
-   else
-       set $saveEIP = $eip 
-       set $saveESP = $esp 
-       set $saveEBP = $ebp 
-
-       set $esp = ((struct thread *)$arg0)->stack
-       set $ebp = ((void**)$esp)[2]
-       set $eip = ((void**)$esp)[4]
-
-       bt
-
-       set $eip = $saveEIP
-       set $esp = $saveESP
-       set $ebp = $saveEBP
-   end
-end
-document btthread
-    Show the backtrace of a thread,
-    invoke as btthread pointer_to_struct_thread
-end
-
-# print backtraces associated with all threads in a list
-define btthreadlist
-    set $list = $arg0
-    set $e = $list->head.next
-    while $e != &(($arg0).tail)
-        list_entry $e thread $arg1
-        printf "pintos-debug: dumping backtrace of thread '%s' @%p\n", \
-                ((struct thread*)$rc)->name, $rc
-        btthread $rc
-        set $e = $e->next
-        printf "\n"
-    end
-end
-document btthreadlist
-    Given a list of threads, print each thread's backtrace
-    invoke as btthreadlist name_of_list name_of_elem_in_list_struct
-end
-
-# print a correct backtrace by adjusting $eip
-# this works best right at intr0e_stub
-define btpagefault
-    set $saveeip = $eip
-    set $eip = ((void**)$esp)[1]
-    backtrace
-    set $eip = $saveeip
-end
-document btpagefault
-    Print a backtrace of the current thread after a pagefault
-end
-
-# invoked whenever the program stops
-define hook-stop
-    # stopped at stub #0E = #14 (page fault exception handler stub)
-    if ($eip == intr0e_stub)
-        set $savedeip = ((void**)$esp)[1]
-        # if this was in user mode, the OS should handle it
-        # either handle the page fault or terminate the process
-        if ($savedeip < 0xC0000000)
-            printf "pintos-debug: a page fault exception occurred in user mode\n"
-            printf "pintos-debug: hit 'c' to continue, or 's' to step to intr_handler\n"
-        else
-            # if this was in kernel mode, a stack trace might be useful
-            printf "pintos-debug: a page fault occurred in kernel mode\n"
-            btpagefault
-        end
-    end
-end
-
-define debugpintos
-    target remote localhost:1234
-end
-document debugpintos
-    Attach debugger to pintos process
-end
diff --git a/src/tests/Algorithm/Diff.pm b/src/tests/Algorithm/Diff.pm
deleted file mode 100644
index 904c530..0000000
--- a/src/tests/Algorithm/Diff.pm
+++ /dev/null
@@ -1,1713 +0,0 @@
-package Algorithm::Diff;
-# Skip to first "=head" line for documentation.
-use strict;
-
-use integer;    # see below in _replaceNextLargerWith() for mod to make
-                # if you don't use this
-use vars qw( $VERSION @EXPORT_OK );
-$VERSION = 1.19_01;
-#          ^ ^^ ^^-- Incremented at will
-#          | \+----- Incremented for non-trivial changes to features
-#          \-------- Incremented for fundamental changes
-require Exporter;
-*import    = \&Exporter::import;
-@EXPORT_OK = qw(
-    prepare LCS LCDidx LCS_length
-    diff sdiff compact_diff
-    traverse_sequences traverse_balanced
-);
-
-# McIlroy-Hunt diff algorithm
-# Adapted from the Smalltalk code of Mario I. Wolczko, <mario@wolczko.com>
-# by Ned Konz, perl@bike-nomad.com
-# Updates by Tye McQueen, http://perlmonks.org/?node=tye
-
-# Create a hash that maps each element of $aCollection to the set of
-# positions it occupies in $aCollection, restricted to the elements
-# within the range of indexes specified by $start and $end.
-# The fourth parameter is a subroutine reference that will be called to
-# generate a string to use as a key.
-# Additional parameters, if any, will be passed to this subroutine.
-#
-# my $hashRef = _withPositionsOfInInterval( \@array, $start, $end, $keyGen );
-
-sub _withPositionsOfInInterval
-{
-    my $aCollection = shift;    # array ref
-    my $start       = shift;
-    my $end         = shift;
-    my $keyGen      = shift;
-    my %d;
-    my $index;
-    for ( $index = $start ; $index <= $end ; $index++ )
-    {
-        my $element = $aCollection->[$index];
-        my $key = &$keyGen( $element, @_ );
-        if ( exists( $d{$key} ) )
-        {
-            unshift ( @{ $d{$key} }, $index );
-        }
-        else
-        {
-            $d{$key} = [$index];
-        }
-    }
-    return wantarray ? %d : \%d;
-}
-
-# Find the place at which aValue would normally be inserted into the
-# array. If that place is already occupied by aValue, do nothing, and
-# return undef. If the place does not exist (i.e., it is off the end of
-# the array), add it to the end, otherwise replace the element at that
-# point with aValue.  It is assumed that the array's values are numeric.
-# This is where the bulk (75%) of the time is spent in this module, so
-# try to make it fast!
-
-sub _replaceNextLargerWith
-{
-    my ( $array, $aValue, $high ) = @_;
-    $high ||= $#$array;
-
-    # off the end?
-    if ( $high == -1 || $aValue > $array->[-1] )
-    {
-        push ( @$array, $aValue );
-        return $high + 1;
-    }
-
-    # binary search for insertion point...
-    my $low = 0;
-    my $index;
-    my $found;
-    while ( $low <= $high )
-    {
-        $index = ( $high + $low ) / 2;
-
-        # $index = int(( $high + $low ) / 2);  # without 'use integer'
-        $found = $array->[$index];
-
-        if ( $aValue == $found )
-        {
-            return undef;
-        }
-        elsif ( $aValue > $found )
-        {
-            $low = $index + 1;
-        }
-        else
-        {
-            $high = $index - 1;
-        }
-    }
-
-    # now insertion point is in $low.
-    $array->[$low] = $aValue;    # overwrite next larger
-    return $low;
-}
-
-# This method computes the longest common subsequence in $a and $b.
-
-# Result is array or ref, whose contents is such that
-#   $a->[ $i ] == $b->[ $result[ $i ] ]
-# foreach $i in ( 0 .. $#result ) if $result[ $i ] is defined.
-
-# An additional argument may be passed; this is a hash or key generating
-# function that should return a string that uniquely identifies the given
-# element.  It should be the case that if the key is the same, the elements
-# will compare the same. If this parameter is undef or missing, the key
-# will be the element as a string.
-
-# By default, comparisons will use "eq" and elements will be turned into keys
-# using the default stringizing operator '""'.
-
-# Additional parameters, if any, will be passed to the key generation
-# routine.
-
-sub _longestCommonSubsequence
-{
-    my $a        = shift;    # array ref or hash ref
-    my $b        = shift;    # array ref or hash ref
-    my $counting = shift;    # scalar
-    my $keyGen   = shift;    # code ref
-    my $compare;             # code ref
-
-    if ( ref($a) eq 'HASH' )
-    {                        # prepared hash must be in $b
-        my $tmp = $b;
-        $b = $a;
-        $a = $tmp;
-    }
-
-    # Check for bogus (non-ref) argument values
-    if ( !ref($a) || !ref($b) )
-    {
-        my @callerInfo = caller(1);
-        die 'error: must pass array or hash references to ' . $callerInfo[3];
-    }
-
-    # set up code refs
-    # Note that these are optimized.
-    if ( !defined($keyGen) )    # optimize for strings
-    {
-        $keyGen = sub { $_[0] };
-        $compare = sub { my ( $a, $b ) = @_; $a eq $b };
-    }
-    else
-    {
-        $compare = sub {
-            my $a = shift;
-            my $b = shift;
-            &$keyGen( $a, @_ ) eq &$keyGen( $b, @_ );
-        };
-    }
-
-    my ( $aStart, $aFinish, $matchVector ) = ( 0, $#$a, [] );
-    my ( $prunedCount, $bMatches ) = ( 0, {} );
-
-    if ( ref($b) eq 'HASH' )    # was $bMatches prepared for us?
-    {
-        $bMatches = $b;
-    }
-    else
-    {
-        my ( $bStart, $bFinish ) = ( 0, $#$b );
-
-        # First we prune off any common elements at the beginning
-        while ( $aStart <= $aFinish
-            and $bStart <= $bFinish
-            and &$compare( $a->[$aStart], $b->[$bStart], @_ ) )
-        {
-            $matchVector->[ $aStart++ ] = $bStart++;
-            $prunedCount++;
-        }
-
-        # now the end
-        while ( $aStart <= $aFinish
-            and $bStart <= $bFinish
-            and &$compare( $a->[$aFinish], $b->[$bFinish], @_ ) )
-        {
-            $matchVector->[ $aFinish-- ] = $bFinish--;
-            $prunedCount++;
-        }
-
-        # Now compute the equivalence classes of positions of elements
-        $bMatches =
-          _withPositionsOfInInterval( $b, $bStart, $bFinish, $keyGen, @_ );
-    }
-    my $thresh = [];
-    my $links  = [];
-
-    my ( $i, $ai, $j, $k );
-    for ( $i = $aStart ; $i <= $aFinish ; $i++ )
-    {
-        $ai = &$keyGen( $a->[$i], @_ );
-        if ( exists( $bMatches->{$ai} ) )
-        {
-            $k = 0;
-            for $j ( @{ $bMatches->{$ai} } )
-            {
-
-                # optimization: most of the time this will be true
-                if ( $k and $thresh->[$k] > $j and $thresh->[ $k - 1 ] < $j )
-                {
-                    $thresh->[$k] = $j;
-                }
-                else
-                {
-                    $k = _replaceNextLargerWith( $thresh, $j, $k );
-                }
-
-                # oddly, it's faster to always test this (CPU cache?).
-                if ( defined($k) )
-                {
-                    $links->[$k] =
-                      [ ( $k ? $links->[ $k - 1 ] : undef ), $i, $j ];
-                }
-            }
-        }
-    }
-
-    if (@$thresh)
-    {
-        return $prunedCount + @$thresh if $counting;
-        for ( my $link = $links->[$#$thresh] ; $link ; $link = $link->[0] )
-        {
-            $matchVector->[ $link->[1] ] = $link->[2];
-        }
-    }
-    elsif ($counting)
-    {
-        return $prunedCount;
-    }
-
-    return wantarray ? @$matchVector : $matchVector;
-}
-
-sub traverse_sequences
-{
-    my $a                 = shift;          # array ref
-    my $b                 = shift;          # array ref
-    my $callbacks         = shift || {};
-    my $keyGen            = shift;
-    my $matchCallback     = $callbacks->{'MATCH'} || sub { };
-    my $discardACallback  = $callbacks->{'DISCARD_A'} || sub { };
-    my $finishedACallback = $callbacks->{'A_FINISHED'};
-    my $discardBCallback  = $callbacks->{'DISCARD_B'} || sub { };
-    my $finishedBCallback = $callbacks->{'B_FINISHED'};
-    my $matchVector = _longestCommonSubsequence( $a, $b, 0, $keyGen, @_ );
-
-    # Process all the lines in @$matchVector
-    my $lastA = $#$a;
-    my $lastB = $#$b;
-    my $bi    = 0;
-    my $ai;
-
-    for ( $ai = 0 ; $ai <= $#$matchVector ; $ai++ )
-    {
-        my $bLine = $matchVector->[$ai];
-        if ( defined($bLine) )    # matched
-        {
-            &$discardBCallback( $ai, $bi++, @_ ) while $bi < $bLine;
-            &$matchCallback( $ai,    $bi++, @_ );
-        }
-        else
-        {
-            &$discardACallback( $ai, $bi, @_ );
-        }
-    }
-
-    # The last entry (if any) processed was a match.
-    # $ai and $bi point just past the last matching lines in their sequences.
-
-    while ( $ai <= $lastA or $bi <= $lastB )
-    {
-
-        # last A?
-        if ( $ai == $lastA + 1 and $bi <= $lastB )
-        {
-            if ( defined($finishedACallback) )
-            {
-                &$finishedACallback( $lastA, @_ );
-                $finishedACallback = undef;
-            }
-            else
-            {
-                &$discardBCallback( $ai, $bi++, @_ ) while $bi <= $lastB;
-            }
-        }
-
-        # last B?
-        if ( $bi == $lastB + 1 and $ai <= $lastA )
-        {
-            if ( defined($finishedBCallback) )
-            {
-                &$finishedBCallback( $lastB, @_ );
-                $finishedBCallback = undef;
-            }
-            else
-            {
-                &$discardACallback( $ai++, $bi, @_ ) while $ai <= $lastA;
-            }
-        }
-
-        &$discardACallback( $ai++, $bi, @_ ) if $ai <= $lastA;
-        &$discardBCallback( $ai, $bi++, @_ ) if $bi <= $lastB;
-    }
-
-    return 1;
-}
-
-sub traverse_balanced
-{
-    my $a                 = shift;              # array ref
-    my $b                 = shift;              # array ref
-    my $callbacks         = shift || {};
-    my $keyGen            = shift;
-    my $matchCallback     = $callbacks->{'MATCH'} || sub { };
-    my $discardACallback  = $callbacks->{'DISCARD_A'} || sub { };
-    my $discardBCallback  = $callbacks->{'DISCARD_B'} || sub { };
-    my $changeCallback    = $callbacks->{'CHANGE'};
-    my $matchVector = _longestCommonSubsequence( $a, $b, 0, $keyGen, @_ );
-
-    # Process all the lines in match vector
-    my $lastA = $#$a;
-    my $lastB = $#$b;
-    my $bi    = 0;
-    my $ai    = 0;
-    my $ma    = -1;
-    my $mb;
-
-    while (1)
-    {
-
-        # Find next match indices $ma and $mb
-        do {
-            $ma++;
-        } while(
-                $ma <= $#$matchVector
-            &&  !defined $matchVector->[$ma]
-        );
-
-        last if $ma > $#$matchVector;    # end of matchVector?
-        $mb = $matchVector->[$ma];
-
-        # Proceed with discard a/b or change events until
-        # next match
-        while ( $ai < $ma || $bi < $mb )
-        {
-
-            if ( $ai < $ma && $bi < $mb )
-            {
-
-                # Change
-                if ( defined $changeCallback )
-                {
-                    &$changeCallback( $ai++, $bi++, @_ );
-                }
-                else
-                {
-                    &$discardACallback( $ai++, $bi, @_ );
-                    &$discardBCallback( $ai, $bi++, @_ );
-                }
-            }
-            elsif ( $ai < $ma )
-            {
-                &$discardACallback( $ai++, $bi, @_ );
-            }
-            else
-            {
-
-                # $bi < $mb
-                &$discardBCallback( $ai, $bi++, @_ );
-            }
-        }
-
-        # Match
-        &$matchCallback( $ai++, $bi++, @_ );
-    }
-
-    while ( $ai <= $lastA || $bi <= $lastB )
-    {
-        if ( $ai <= $lastA && $bi <= $lastB )
-        {
-
-            # Change
-            if ( defined $changeCallback )
-            {
-                &$changeCallback( $ai++, $bi++, @_ );
-            }
-            else
-            {
-                &$discardACallback( $ai++, $bi, @_ );
-                &$discardBCallback( $ai, $bi++, @_ );
-            }
-        }
-        elsif ( $ai <= $lastA )
-        {
-            &$discardACallback( $ai++, $bi, @_ );
-        }
-        else
-        {
-
-            # $bi <= $lastB
-            &$discardBCallback( $ai, $bi++, @_ );
-        }
-    }
-
-    return 1;
-}
-
-sub prepare
-{
-    my $a       = shift;    # array ref
-    my $keyGen  = shift;    # code ref
-
-    # set up code ref
-    $keyGen = sub { $_[0] } unless defined($keyGen);
-
-    return scalar _withPositionsOfInInterval( $a, 0, $#$a, $keyGen, @_ );
-}
-
-sub LCS
-{
-    my $a = shift;                  # array ref
-    my $b = shift;                  # array ref or hash ref
-    my $matchVector = _longestCommonSubsequence( $a, $b, 0, @_ );
-    my @retval;
-    my $i;
-    for ( $i = 0 ; $i <= $#$matchVector ; $i++ )
-    {
-        if ( defined( $matchVector->[$i] ) )
-        {
-            push ( @retval, $a->[$i] );
-        }
-    }
-    return wantarray ? @retval : \@retval;
-}
-
-sub LCS_length
-{
-    my $a = shift;                          # array ref
-    my $b = shift;                          # array ref or hash ref
-    return _longestCommonSubsequence( $a, $b, 1, @_ );
-}
-
-sub LCSidx
-{
-    my $a= shift @_;
-    my $b= shift @_;
-    my $match= _longestCommonSubsequence( $a, $b, 0, @_ );
-    my @am= grep defined $match->[$_], 0..$#$match;
-    my @bm= @{$match}[@am];
-    return \@am, \@bm;
-}
-
-sub compact_diff
-{
-    my $a= shift @_;
-    my $b= shift @_;
-    my( $am, $bm )= LCSidx( $a, $b, @_ );
-    my @cdiff;
-    my( $ai, $bi )= ( 0, 0 );
-    push @cdiff, $ai, $bi;
-    while( 1 ) {
-        while(  @$am  &&  $ai == $am->[0]  &&  $bi == $bm->[0]  ) {
-            shift @$am;
-            shift @$bm;
-            ++$ai, ++$bi;
-        }
-        push @cdiff, $ai, $bi;
-        last   if  ! @$am;
-        $ai = $am->[0];
-        $bi = $bm->[0];
-        push @cdiff, $ai, $bi;
-    }
-    push @cdiff, 0+@$a, 0+@$b
-        if  $ai < @$a || $bi < @$b;
-    return wantarray ? @cdiff : \@cdiff;
-}
-
-sub diff
-{
-    my $a      = shift;    # array ref
-    my $b      = shift;    # array ref
-    my $retval = [];
-    my $hunk   = [];
-    my $discard = sub {
-        push @$hunk, [ '-', $_[0], $a->[ $_[0] ] ];
-    };
-    my $add = sub {
-        push @$hunk, [ '+', $_[1], $b->[ $_[1] ] ];
-    };
-    my $match = sub {
-        push @$retval, $hunk
-            if 0 < @$hunk;
-        $hunk = []
-    };
-    traverse_sequences( $a, $b,
-        { MATCH => $match, DISCARD_A => $discard, DISCARD_B => $add }, @_ );
-    &$match();
-    return wantarray ? @$retval : $retval;
-}
-
-sub sdiff
-{
-    my $a      = shift;    # array ref
-    my $b      = shift;    # array ref
-    my $retval = [];
-    my $discard = sub { push ( @$retval, [ '-', $a->[ $_[0] ], "" ] ) };
-    my $add = sub { push ( @$retval, [ '+', "", $b->[ $_[1] ] ] ) };
-    my $change = sub {
-        push ( @$retval, [ 'c', $a->[ $_[0] ], $b->[ $_[1] ] ] );
-    };
-    my $match = sub {
-        push ( @$retval, [ 'u', $a->[ $_[0] ], $b->[ $_[1] ] ] );
-    };
-    traverse_balanced(
-        $a,
-        $b,
-        {
-            MATCH     => $match,
-            DISCARD_A => $discard,
-            DISCARD_B => $add,
-            CHANGE    => $change,
-        },
-        @_
-    );
-    return wantarray ? @$retval : $retval;
-}
-
-########################################
-my $Root= __PACKAGE__;
-package Algorithm::Diff::_impl;
-use strict;
-
-sub _Idx()  { 0 } # $me->[_Idx]: Ref to array of hunk indices
-            # 1   # $me->[1]: Ref to first sequence
-            # 2   # $me->[2]: Ref to second sequence
-sub _End()  { 3 } # $me->[_End]: Diff between forward and reverse pos
-sub _Same() { 4 } # $me->[_Same]: 1 if pos 1 contains unchanged items
-sub _Base() { 5 } # $me->[_Base]: Added to range's min and max
-sub _Pos()  { 6 } # $me->[_Pos]: Which hunk is currently selected
-sub _Off()  { 7 } # $me->[_Off]: Offset into _Idx for current position
-sub _Min() { -2 } # Added to _Off to get min instead of max+1
-
-sub Die
-{
-    require Carp;
-    Carp::confess( @_ );
-}
-
-sub _ChkPos
-{
-    my( $me )= @_;
-    return   if  $me->[_Pos];
-    my $meth= ( caller(1) )[3];
-    Die( "Called $meth on 'reset' object" );
-}
-
-sub _ChkSeq
-{
-    my( $me, $seq )= @_;
-    return $seq + $me->[_Off]
-        if  1 == $seq  ||  2 == $seq;
-    my $meth= ( caller(1) )[3];
-    Die( "$meth: Invalid sequence number ($seq); must be 1 or 2" );
-}
-
-sub getObjPkg
-{
-    my( $us )= @_;
-    return ref $us   if  ref $us;
-    return $us . "::_obj";
-}
-
-sub new
-{
-    my( $us, $seq1, $seq2, $opts ) = @_;
-    my @args;
-    for( $opts->{keyGen} ) {
-        push @args, $_   if  $_;
-    }
-    for( $opts->{keyGenArgs} ) {
-        push @args, @$_   if  $_;
-    }
-    my $cdif= Algorithm::Diff::compact_diff( $seq1, $seq2, @args );
-    my $same= 1;
-    if(  0 == $cdif->[2]  &&  0 == $cdif->[3]  ) {
-        $same= 0;
-        splice @$cdif, 0, 2;
-    }
-    my @obj= ( $cdif, $seq1, $seq2 );
-    $obj[_End] = (1+@$cdif)/2;
-    $obj[_Same] = $same;
-    $obj[_Base] = 0;
-    my $me = bless \@obj, $us->getObjPkg();
-    $me->Reset( 0 );
-    return $me;
-}
-
-sub Reset
-{
-    my( $me, $pos )= @_;
-    $pos= int( $pos || 0 );
-    $pos += $me->[_End]
-        if  $pos < 0;
-    $pos= 0
-        if  $pos < 0  ||  $me->[_End] <= $pos;
-    $me->[_Pos]= $pos || !1;
-    $me->[_Off]= 2*$pos - 1;
-    return $me;
-}
-
-sub Base
-{
-    my( $me, $base )= @_;
-    my $oldBase= $me->[_Base];
-    $me->[_Base]= 0+$base   if  defined $base;
-    return $oldBase;
-}
-
-sub Copy
-{
-    my( $me, $pos, $base )= @_;
-    my @obj= @$me;
-    my $you= bless \@obj, ref($me);
-    $you->Reset( $pos )   if  defined $pos;
-    $you->Base( $base );
-    return $you;
-}
-
-sub Next {
-    my( $me, $steps )= @_;
-    $steps= 1   if  ! defined $steps;
-    if( $steps ) {
-        my $pos= $me->[_Pos];
-        my $new= $pos + $steps;
-        $new= 0   if  $pos  &&  $new < 0;
-        $me->Reset( $new )
-    }
-    return $me->[_Pos];
-}
-
-sub Prev {
-    my( $me, $steps )= @_;
-    $steps= 1   if  ! defined $steps;
-    my $pos= $me->Next(-$steps);
-    $pos -= $me->[_End]   if  $pos;
-    return $pos;
-}
-
-sub Diff {
-    my( $me )= @_;
-    $me->_ChkPos();
-    return 0   if  $me->[_Same] == ( 1 & $me->[_Pos] );
-    my $ret= 0;
-    my $off= $me->[_Off];
-    for my $seq ( 1, 2 ) {
-        $ret |= $seq
-            if  $me->[_Idx][ $off + $seq + _Min ]
-            <   $me->[_Idx][ $off + $seq ];
-    }
-    return $ret;
-}
-
-sub Min {
-    my( $me, $seq, $base )= @_;
-    $me->_ChkPos();
-    my $off= $me->_ChkSeq($seq);
-    $base= $me->[_Base] if !defined $base;
-    return $base + $me->[_Idx][ $off + _Min ];
-}
-
-sub Max {
-    my( $me, $seq, $base )= @_;
-    $me->_ChkPos();
-    my $off= $me->_ChkSeq($seq);
-    $base= $me->[_Base] if !defined $base;
-    return $base + $me->[_Idx][ $off ] -1;
-}
-
-sub Range {
-    my( $me, $seq, $base )= @_;
-    $me->_ChkPos();
-    my $off = $me->_ChkSeq($seq);
-    if( !wantarray ) {
-        return  $me->[_Idx][ $off ]
-            -   $me->[_Idx][ $off + _Min ];
-    }
-    $base= $me->[_Base] if !defined $base;
-    return  ( $base + $me->[_Idx][ $off + _Min ] )
-        ..  ( $base + $me->[_Idx][ $off ] - 1 );
-}
-
-sub Items {
-    my( $me, $seq )= @_;
-    $me->_ChkPos();
-    my $off = $me->_ChkSeq($seq);
-    if( !wantarray ) {
-        return  $me->[_Idx][ $off ]
-            -   $me->[_Idx][ $off + _Min ];
-    }
-    return
-        @{$me->[$seq]}[
-                $me->[_Idx][ $off + _Min ]
-            ..  ( $me->[_Idx][ $off ] - 1 )
-        ];
-}
-
-sub Same {
-    my( $me )= @_;
-    $me->_ChkPos();
-    return wantarray ? () : 0
-        if  $me->[_Same] != ( 1 & $me->[_Pos] );
-    return $me->Items(1);
-}
-
-my %getName;
-BEGIN {
-    %getName= (
-        same => \&Same,
-        diff => \&Diff,
-        base => \&Base,
-        min  => \&Min,
-        max  => \&Max,
-        range=> \&Range,
-        items=> \&Items, # same thing
-    );
-}
-
-sub Get
-{
-    my $me= shift @_;
-    $me->_ChkPos();
-    my @value;
-    for my $arg (  @_  ) {
-        for my $word (  split ' ', $arg  ) {
-            my $meth;
-            if(     $word !~ /^(-?\d+)?([a-zA-Z]+)([12])?$/
-                ||  not  $meth= $getName{ lc $2 }
-            ) {
-                Die( $Root, ", Get: Invalid request ($word)" );
-            }
-            my( $base, $name, $seq )= ( $1, $2, $3 );
-            push @value, scalar(
-                4 == length($name)
-                    ? $meth->( $me )
-                    : $meth->( $me, $seq, $base )
-            );
-        }
-    }
-    if(  wantarray  ) {
-        return @value;
-    } elsif(  1 == @value  ) {
-        return $value[0];
-    }
-    Die( 0+@value, " values requested from ",
-        $Root, "'s Get in scalar context" );
-}
-
-
-my $Obj= getObjPkg($Root);
-no strict 'refs';
-
-for my $meth (  qw( new getObjPkg )  ) {
-    *{$Root."::".$meth} = \&{$meth};
-    *{$Obj ."::".$meth} = \&{$meth};
-}
-for my $meth (  qw(
-    Next Prev Reset Copy Base Diff
-    Same Items Range Min Max Get
-    _ChkPos _ChkSeq
-)  ) {
-    *{$Obj."::".$meth} = \&{$meth};
-}
-
-1;
-__END__
-
-=head1 NAME
-
-Algorithm::Diff - Compute `intelligent' differences between two files / lists
-
-=head1 SYNOPSIS
-
-    require Algorithm::Diff;
-
-    # This example produces traditional 'diff' output:
-
-    my $diff = Algorithm::Diff->new( \@seq1, \@seq2 );
-
-    $diff->Base( 1 );   # Return line numbers, not indices
-    while(  $diff->Next()  ) {
-        next   if  $diff->Same();
-        my $sep = '';
-        if(  ! $diff->Items(2)  ) {
-            sprintf "%d,%dd%d\n",
-                $diff->Get(qw( Min1 Max1 Max2 ));
-        } elsif(  ! $diff->Items(1)  ) {
-            sprint "%da%d,%d\n",
-                $diff->Get(qw( Max1 Min2 Max2 ));
-        } else {
-            $sep = "---\n";
-            sprintf "%d,%dc%d,%d\n",
-                $diff->Get(qw( Min1 Max1 Min2 Max2 ));
-        }
-        print "< $_"   for  $diff->Items(1);
-        print $sep;
-        print "> $_"   for  $diff->Items(2);
-    }
-
-
-    # Alternate interfaces:
-
-    use Algorithm::Diff qw(
-        LCS LCS_length LCSidx
-        diff sdiff compact_diff
-        traverse_sequences traverse_balanced );
-
-    @lcs    = LCS( \@seq1, \@seq2 );
-    $lcsref = LCS( \@seq1, \@seq2 );
-    $count  = LCS_length( \@seq1, \@seq2 );
-
-    ( $seq1idxref, $seq2idxref ) = LCSidx( \@seq1, \@seq2 );
-
-
-    # Complicated interfaces:
-
-    @diffs  = diff( \@seq1, \@seq2 );
-
-    @sdiffs = sdiff( \@seq1, \@seq2 );
-
-    @cdiffs = compact_diff( \@seq1, \@seq2 );
-
-    traverse_sequences(
-        \@seq1,
-        \@seq2,
-        {   MATCH     => \&callback1,
-            DISCARD_A => \&callback2,
-            DISCARD_B => \&callback3,
-        },
-        \&key_generator,
-        @extra_args,
-    );
-
-    traverse_balanced(
-        \@seq1,
-        \@seq2,
-        {   MATCH     => \&callback1,
-            DISCARD_A => \&callback2,
-            DISCARD_B => \&callback3,
-            CHANGE    => \&callback4,
-        },
-        \&key_generator,
-        @extra_args,
-    );
-
-
-=head1 INTRODUCTION
-
-(by Mark-Jason Dominus)
-
-I once read an article written by the authors of C<diff>; they said
-that they worked very hard on the algorithm until they found the
-right one.
-
-I think what they ended up using (and I hope someone will correct me,
-because I am not very confident about this) was the `longest common
-subsequence' method.  In the LCS problem, you have two sequences of
-items:
-
-    a b c d f g h j q z
-
-    a b c d e f g i j k r x y z
-
-and you want to find the longest sequence of items that is present in
-both original sequences in the same order.  That is, you want to find
-a new sequence I<S> which can be obtained from the first sequence by
-deleting some items, and from the secend sequence by deleting other
-items.  You also want I<S> to be as long as possible.  In this case I<S>
-is
-
-    a b c d f g j z
-
-From there it's only a small step to get diff-like output:
-
-    e   h i   k   q r x y
-    +   - +   +   - + + +
-
-This module solves the LCS problem.  It also includes a canned function
-to generate C<diff>-like output.
-
-It might seem from the example above that the LCS of two sequences is
-always pretty obvious, but that's not always the case, especially when
-the two sequences have many repeated elements.  For example, consider
-
-    a x b y c z p d q
-    a b c a x b y c z
-
-A naive approach might start by matching up the C<a> and C<b> that
-appear at the beginning of each sequence, like this:
-
-    a x b y c         z p d q
-    a   b   c a b y c z
-
-This finds the common subsequence C<a b c z>.  But actually, the LCS
-is C<a x b y c z>:
-
-          a x b y c z p d q
-    a b c a x b y c z
-
-or
-
-    a       x b y c z p d q
-    a b c a x b y c z
-
-=head1 USAGE
-
-(See also the README file and several example
-scripts include with this module.)
-
-This module now provides an object-oriented interface that uses less
-memory and is easier to use than most of the previous procedural
-interfaces.  It also still provides several exportable functions.  We'll
-deal with these in ascending order of difficulty:  C<LCS>,
-C<LCS_length>, C<LCSidx>, OO interface, C<prepare>, C<diff>, C<sdiff>,
-C<traverse_sequences>, and C<traverse_balanced>.
-
-=head2 C<LCS>
-
-Given references to two lists of items, LCS returns an array containing
-their longest common subsequence.  In scalar context, it returns a
-reference to such a list.
-
-    @lcs    = LCS( \@seq1, \@seq2 );
-    $lcsref = LCS( \@seq1, \@seq2 );
-
-C<LCS> may be passed an optional third parameter; this is a CODE
-reference to a key generation function.  See L</KEY GENERATION
-FUNCTIONS>.
-
-    @lcs    = LCS( \@seq1, \@seq2, \&keyGen, @args );
-    $lcsref = LCS( \@seq1, \@seq2, \&keyGen, @args );
-
-Additional parameters, if any, will be passed to the key generation
-routine.
-
-=head2 C<LCS_length>
-
-This is just like C<LCS> except it only returns the length of the
-longest common subsequence.  This provides a performance gain of about
-9% compared to C<LCS>.
-
-=head2 C<LCSidx>
-
-Like C<LCS> except it returns references to two arrays.  The first array
-contains the indices into @seq1 where the LCS items are located.  The
-second array contains the indices into @seq2 where the LCS items are located.
-
-Therefore, the following three lists will contain the same values:
-
-    my( $idx1, $idx2 ) = LCSidx( \@seq1, \@seq2 );
-    my @list1 = @seq1[ @$idx1 ];
-    my @list2 = @seq2[ @$idx2 ];
-    my @list3 = LCS( \@seq1, \@seq2 );
-
-=head2 C<new>
-
-    $diff = Algorithm::Diffs->new( \@seq1, \@seq2 );
-    $diff = Algorithm::Diffs->new( \@seq1, \@seq2, \%opts );
-
-C<new> computes the smallest set of additions and deletions necessary
-to turn the first sequence into the second and compactly records them
-in the object.
-
-You use the object to iterate over I<hunks>, where each hunk represents
-a contiguous section of items which should be added, deleted, replaced,
-or left unchanged.
-
-=over 4
-
-The following summary of all of the methods looks a lot like Perl code
-but some of the symbols have different meanings:
-
-    [ ]     Encloses optional arguments
-    :       Is followed by the default value for an optional argument
-    |       Separates alternate return results
-
-Method summary:
-
-    $obj        = Algorithm::Diff->new( \@seq1, \@seq2, [ \%opts ] );
-    $pos        = $obj->Next(  [ $count : 1 ] );
-    $revPos     = $obj->Prev(  [ $count : 1 ] );
-    $obj        = $obj->Reset( [ $pos : 0 ] );
-    $copy       = $obj->Copy(  [ $pos, [ $newBase ] ] );
-    $oldBase    = $obj->Base(  [ $newBase ] );
-
-Note that all of the following methods C<die> if used on an object that
-is "reset" (not currently pointing at any hunk).
-
-    $bits       = $obj->Diff(  );
-    @items|$cnt = $obj->Same(  );
-    @items|$cnt = $obj->Items( $seqNum );
-    @idxs |$cnt = $obj->Range( $seqNum, [ $base ] );
-    $minIdx     = $obj->Min(   $seqNum, [ $base ] );
-    $maxIdx     = $obj->Max(   $seqNum, [ $base ] );
-    @values     = $obj->Get(   @names );
-
-Passing in C<undef> for an optional argument is always treated the same
-as if no argument were passed in.
-
-=item C<Next>
-
-    $pos = $diff->Next();    # Move forward 1 hunk
-    $pos = $diff->Next( 2 ); # Move forward 2 hunks
-    $pos = $diff->Next(-5);  # Move backward 5 hunks
-
-C<Next> moves the object to point at the next hunk.  The object starts
-out "reset", which means it isn't pointing at any hunk.  If the object
-is reset, then C<Next()> moves to the first hunk.
-
-C<Next> returns a true value iff the move didn't go past the last hunk.
-So C<Next(0)> will return true iff the object is not reset.
-
-Actually, C<Next> returns the object's new position, which is a number
-between 1 and the number of hunks (inclusive), or returns a false value.
-
-=item C<Prev>
-
-C<Prev($N)> is almost identical to C<Next(-$N)>; it moves to the $Nth
-previous hunk.  On a 'reset' object, C<Prev()> [and C<Next(-1)>] move
-to the last hunk.
-
-The position returned by C<Prev> is relative to the I<end> of the
-hunks; -1 for the last hunk, -2 for the second-to-last, etc.
-
-=item C<Reset>
-
-    $diff->Reset();     # Reset the object's position
-    $diff->Reset($pos); # Move to the specified hunk
-    $diff->Reset(1);    # Move to the first hunk
-    $diff->Reset(-1);   # Move to the last hunk
-
-C<Reset> returns the object, so, for example, you could use
-C<< $diff->Reset()->Next(-1) >> to get the number of hunks.
-
-=item C<Copy>
-
-    $copy = $diff->Copy( $newPos, $newBase );
-
-C<Copy> returns a copy of the object.  The copy and the orignal object
-share most of their data, so making copies takes very little memory.
-The copy maintains its own position (separate from the original), which
-is the main purpose of copies.  It also maintains its own base.
-
-By default, the copy's position starts out the same as the original
-object's position.  But C<Copy> takes an optional first argument to set the
-new position, so the following three snippets are equivalent:
-
-    $copy = $diff->Copy($pos);
-
-    $copy = $diff->Copy();
-    $copy->Reset($pos);
-
-    $copy = $diff->Copy()->Reset($pos);
-
-C<Copy> takes an optional second argument to set the base for
-the copy.  If you wish to change the base of the copy but leave
-the position the same as in the original, here are two
-equivalent ways:
-
-    $copy = $diff->Copy();
-    $copy->Base( 0 );
-
-    $copy = $diff->Copy(undef,0);
-
-Here are two equivalent way to get a "reset" copy:
-
-    $copy = $diff->Copy(0);
-
-    $copy = $diff->Copy()->Reset();
-
-=item C<Diff>
-
-    $bits = $obj->Diff();
-
-C<Diff> returns a true value iff the current hunk contains items that are
-different between the two sequences.  It actually returns one of the
-follow 4 values:
-
-=over 4
-
-=item 3
-
-C<3==(1|2)>.  This hunk contains items from @seq1 and the items
-from @seq2 that should replace them.  Both sequence 1 and 2
-contain changed items so both the 1 and 2 bits are set.
-
-=item 2
-
-This hunk only contains items from @seq2 that should be inserted (not
-items from @seq1).  Only sequence 2 contains changed items so only the 2
-bit is set.
-
-=item 1
-
-This hunk only contains items from @seq1 that should be deleted (not
-items from @seq2).  Only sequence 1 contains changed items so only the 1
-bit is set.
-
-=item 0
-
-This means that the items in this hunk are the same in both sequences.
-Neither sequence 1 nor 2 contain changed items so neither the 1 nor the
-2 bits are set.
-
-=back
-
-=item C<Same>
-
-C<Same> returns a true value iff the current hunk contains items that
-are the same in both sequences.  It actually returns the list of items
-if they are the same or an emty list if they aren't.  In a scalar
-context, it returns the size of the list.
-
-=item C<Items>
-
-    $count = $diff->Items(2);
-    @items = $diff->Items($seqNum);
-
-C<Items> returns the (number of) items from the specified sequence that
-are part of the current hunk.
-
-If the current hunk contains only insertions, then
-C<< $diff->Items(1) >> will return an empty list (0 in a scalar conext).
-If the current hunk contains only deletions, then C<< $diff->Items(2) >>
-will return an empty list (0 in a scalar conext).
-
-If the hunk contains replacements, then both C<< $diff->Items(1) >> and
-C<< $diff->Items(2) >> will return different, non-empty lists.
-
-Otherwise, the hunk contains identical items and all of the following
-will return the same lists:
-
-    @items = $diff->Items(1);
-    @items = $diff->Items(2);
-    @items = $diff->Same();
-
-=item C<Range>
-
-    $count = $diff->Range( $seqNum );
-    @indices = $diff->Range( $seqNum );
-    @indices = $diff->Range( $seqNum, $base );
-
-C<Range> is like C<Items> except that it returns a list of I<indices> to
-the items rather than the items themselves.  By default, the index of
-the first item (in each sequence) is 0 but this can be changed by
-calling the C<Base> method.  So, by default, the following two snippets
-return the same lists:
-
-    @list = $diff->Items(2);
-    @list = @seq2[ $diff->Range(2) ];
-
-You can also specify the base to use as the second argument.  So the
-following two snippets I<always> return the same lists:
-
-    @list = $diff->Items(1);
-    @list = @seq1[ $diff->Range(1,0) ];
-
-=item C<Base>
-
-    $curBase = $diff->Base();
-    $oldBase = $diff->Base($newBase);
-
-C<Base> sets and/or returns the current base (usually 0 or 1) that is
-used when you request range information.  The base defaults to 0 so
-that range information is returned as array indices.  You can set the
-base to 1 if you want to report traditional line numbers instead.
-
-=item C<Min>
-
-    $min1 = $diff->Min(1);
-    $min = $diff->Min( $seqNum, $base );
-
-C<Min> returns the first value that C<Range> would return (given the
-same arguments) or returns C<undef> if C<Range> would return an empty
-list.
-
-=item C<Max>
-
-C<Max> returns the last value that C<Range> would return or C<undef>.
-
-=item C<Get>
-
-    ( $n, $x, $r ) = $diff->Get(qw( min1 max1 range1 ));
-    @values = $diff->Get(qw( 0min2 1max2 range2 same base ));
-
-C<Get> returns one or more scalar values.  You pass in a list of the
-names of the values you want returned.  Each name must match one of the
-following regexes:
-
-    /^(-?\d+)?(min|max)[12]$/i
-    /^(range[12]|same|diff|base)$/i
-
-The 1 or 2 after a name says which sequence you want the information
-for (and where allowed, it is required).  The optional number before
-"min" or "max" is the base to use.  So the following equalities hold:
-
-    $diff->Get('min1') == $diff->Min(1)
-    $diff->Get('0min2') == $diff->Min(2,0)
-
-Using C<Get> in a scalar context when you've passed in more than one
-name is a fatal error (C<die> is called).
-
-=back
-
-=head2 C<prepare>
-
-Given a reference to a list of items, C<prepare> returns a reference
-to a hash which can be used when comparing this sequence to other
-sequences with C<LCS> or C<LCS_length>.
-
-    $prep = prepare( \@seq1 );
-    for $i ( 0 .. 10_000 )
-    {
-        @lcs = LCS( $prep, $seq[$i] );
-        # do something useful with @lcs
-    }
-
-C<prepare> may be passed an optional third parameter; this is a CODE
-reference to a key generation function.  See L</KEY GENERATION
-FUNCTIONS>.
-
-    $prep = prepare( \@seq1, \&keyGen );
-    for $i ( 0 .. 10_000 )
-    {
-        @lcs = LCS( $seq[$i], $prep, \&keyGen );
-        # do something useful with @lcs
-    }
-
-Using C<prepare> provides a performance gain of about 50% when calling LCS
-many times compared with not preparing.
-
-=head2 C<diff>
-
-    @diffs     = diff( \@seq1, \@seq2 );
-    $diffs_ref = diff( \@seq1, \@seq2 );
-
-C<diff> computes the smallest set of additions and deletions necessary
-to turn the first sequence into the second, and returns a description
-of these changes.  The description is a list of I<hunks>; each hunk
-represents a contiguous section of items which should be added,
-deleted, or replaced.  (Hunks containing unchanged items are not
-included.)
-
-The return value of C<diff> is a list of hunks, or, in scalar context, a
-reference to such a list.  If there are no differences, the list will be
-empty.
-
-Here is an example.  Calling C<diff> for the following two sequences:
-
-    a b c e h j l m n p
-    b c d e f j k l m r s t
-
-would produce the following list:
-
-    (
-      [ [ '-', 0, 'a' ] ],
-
-      [ [ '+', 2, 'd' ] ],
-
-      [ [ '-', 4, 'h' ],
-        [ '+', 4, 'f' ] ],
-
-      [ [ '+', 6, 'k' ] ],
-
-      [ [ '-',  8, 'n' ],
-        [ '-',  9, 'p' ],
-        [ '+',  9, 'r' ],
-        [ '+', 10, 's' ],
-        [ '+', 11, 't' ] ],
-    )
-
-There are five hunks here.  The first hunk says that the C<a> at
-position 0 of the first sequence should be deleted (C<->).  The second
-hunk says that the C<d> at position 2 of the second sequence should
-be inserted (C<+>).  The third hunk says that the C<h> at position 4
-of the first sequence should be removed and replaced with the C<f>
-from position 4 of the second sequence.  And so on.
-
-C<diff> may be passed an optional third parameter; this is a CODE
-reference to a key generation function.  See L</KEY GENERATION
-FUNCTIONS>.
-
-Additional parameters, if any, will be passed to the key generation
-routine.
-
-=head2 C<sdiff>
-
-    @sdiffs     = sdiff( \@seq1, \@seq2 );
-    $sdiffs_ref = sdiff( \@seq1, \@seq2 );
-
-C<sdiff> computes all necessary components to show two sequences
-and their minimized differences side by side, just like the
-Unix-utility I<sdiff> does:
-
-    same             same
-    before     |     after
-    old        <     -
-    -          >     new
-
-It returns a list of array refs, each pointing to an array of
-display instructions. In scalar context it returns a reference
-to such a list. If there are no differences, the list will have one
-entry per item, each indicating that the item was unchanged.
-
-Display instructions consist of three elements: A modifier indicator
-(C<+>: Element added, C<->: Element removed, C<u>: Element unmodified,
-C<c>: Element changed) and the value of the old and new elements, to
-be displayed side-by-side.
-
-An C<sdiff> of the following two sequences:
-
-    a b c e h j l m n p
-    b c d e f j k l m r s t
-
-results in
-
-    ( [ '-', 'a', ''  ],
-      [ 'u', 'b', 'b' ],
-      [ 'u', 'c', 'c' ],
-      [ '+', '',  'd' ],
-      [ 'u', 'e', 'e' ],
-      [ 'c', 'h', 'f' ],
-      [ 'u', 'j', 'j' ],
-      [ '+', '',  'k' ],
-      [ 'u', 'l', 'l' ],
-      [ 'u', 'm', 'm' ],
-      [ 'c', 'n', 'r' ],
-      [ 'c', 'p', 's' ],
-      [ '+', '',  't' ],
-    )
-
-C<sdiff> may be passed an optional third parameter; this is a CODE
-reference to a key generation function.  See L</KEY GENERATION
-FUNCTIONS>.
-
-Additional parameters, if any, will be passed to the key generation
-routine.
-
-=head2 C<compact_diff>
-
-C<compact_diff> is much like C<sdiff> except it returns a much more
-compact description consisting of just one flat list of indices.  An
-example helps explain the format:
-
-    my @a = qw( a b c   e  h j   l m n p      );
-    my @b = qw(   b c d e f  j k l m    r s t );
-    @cdiff = compact_diff( \@a, \@b );
-    # Returns:
-    #   @a      @b       @a       @b
-    #  start   start   values   values
-    (    0,      0,   #       =
-         0,      0,   #    a  !
-         1,      0,   #  b c  =  b c
-         3,      2,   #       !  d
-         3,      3,   #    e  =  e
-         4,      4,   #    f  !  h
-         5,      5,   #    j  =  j
-         6,      6,   #       !  k
-         6,      7,   #  l m  =  l m
-         8,      9,   #  n p  !  r s t
-        10,     12,   #
-    );
-
-The 0th, 2nd, 4th, etc. entries are all indices into @seq1 (@a in the
-above example) indicating where a hunk begins.  The 1st, 3rd, 5th, etc.
-entries are all indices into @seq2 (@b in the above example) indicating
-where the same hunk begins.
-
-So each pair of indices (except the last pair) describes where a hunk
-begins (in each sequence).  Since each hunk must end at the item just
-before the item that starts the next hunk, the next pair of indices can
-be used to determine where the hunk ends.
-
-So, the first 4 entries (0..3) describe the first hunk.  Entries 0 and 1
-describe where the first hunk begins (and so are always both 0).
-Entries 2 and 3 describe where the next hunk begins, so subtracting 1
-from each tells us where the first hunk ends.  That is, the first hunk
-contains items C<$diff[0]> through C<$diff[2] - 1> of the first sequence
-and contains items C<$diff[1]> through C<$diff[3] - 1> of the second
-sequence.
-
-In other words, the first hunk consists of the following two lists of items:
-
-               #  1st pair     2nd pair
-               # of indices   of indices
-    @list1 = @a[ $cdiff[0] .. $cdiff[2]-1 ];
-    @list2 = @b[ $cdiff[1] .. $cdiff[3]-1 ];
-               # Hunk start   Hunk end
-
-Note that the hunks will always alternate between those that are part of
-the LCS (those that contain unchanged items) and those that contain
-changes.  This means that all we need to be told is whether the first
-hunk is a 'same' or 'diff' hunk and we can determine which of the other
-hunks contain 'same' items or 'diff' items.
-
-By convention, we always make the first hunk contain unchanged items.
-So the 1st, 3rd, 5th, etc. hunks (all odd-numbered hunks if you start
-counting from 1) all contain unchanged items.  And the 2nd, 4th, 6th,
-etc. hunks (all even-numbered hunks if you start counting from 1) all
-contain changed items.
-
-Since @a and @b don't begin with the same value, the first hunk in our
-example is empty (otherwise we'd violate the above convention).  Note
-that the first 4 index values in our example are all zero.  Plug these
-values into our previous code block and we get:
-
-    @hunk1a = @a[ 0 .. 0-1 ];
-    @hunk1b = @b[ 0 .. 0-1 ];
-
-And C<0..-1> returns the empty list.
-
-Move down one pair of indices (2..5) and we get the offset ranges for
-the second hunk, which contains changed items.
-
-Since C<@diff[2..5]> contains (0,0,1,0) in our example, the second hunk
-consists of these two lists of items:
-
-        @hunk2a = @a[ $cdiff[2] .. $cdiff[4]-1 ];
-        @hunk2b = @b[ $cdiff[3] .. $cdiff[5]-1 ];
-    # or
-        @hunk2a = @a[ 0 .. 1-1 ];
-        @hunk2b = @b[ 0 .. 0-1 ];
-    # or
-        @hunk2a = @a[ 0 .. 0 ];
-        @hunk2b = @b[ 0 .. -1 ];
-    # or
-        @hunk2a = ( 'a' );
-        @hunk2b = ( );
-
-That is, we would delete item 0 ('a') from @a.
-
-Since C<@diff[4..7]> contains (1,0,3,2) in our example, the third hunk
-consists of these two lists of items:
-
-        @hunk3a = @a[ $cdiff[4] .. $cdiff[6]-1 ];
-        @hunk3a = @b[ $cdiff[5] .. $cdiff[7]-1 ];
-    # or
-        @hunk3a = @a[ 1 .. 3-1 ];
-        @hunk3a = @b[ 0 .. 2-1 ];
-    # or
-        @hunk3a = @a[ 1 .. 2 ];
-        @hunk3a = @b[ 0 .. 1 ];
-    # or
-        @hunk3a = qw( b c );
-        @hunk3a = qw( b c );
-
-Note that this third hunk contains unchanged items as our convention demands.
-
-You can continue this process until you reach the last two indices,
-which will always be the number of items in each sequence.  This is
-required so that subtracting one from each will give you the indices to
-the last items in each sequence.
-
-=head2 C<traverse_sequences>
-
-C<traverse_sequences> used to be the most general facility provided by
-this module (the new OO interface is more powerful and much easier to
-use).
-
-Imagine that there are two arrows.  Arrow A points to an element of
-sequence A, and arrow B points to an element of the sequence B. 
-Initially, the arrows point to the first elements of the respective
-sequences.  C<traverse_sequences> will advance the arrows through the
-sequences one element at a time, calling an appropriate user-specified
-callback function before each advance.  It willadvance the arrows in
-such a way that if there are equal elements C<$A[$i]> and C<$B[$j]>
-which are equal and which are part of the LCS, there will be some moment
-during the execution of C<traverse_sequences> when arrow A is pointing
-to C<$A[$i]> and arrow B is pointing to C<$B[$j]>.  When this happens,
-C<traverse_sequences> will call the C<MATCH> callback function and then
-it will advance both arrows.
-
-Otherwise, one of the arrows is pointing to an element of its sequence
-that is not part of the LCS.  C<traverse_sequences> will advance that
-arrow and will call the C<DISCARD_A> or the C<DISCARD_B> callback,
-depending on which arrow it advanced.  If both arrows point to elements
-that are not part of the LCS, then C<traverse_sequences> will advance
-one of them and call the appropriate callback, but it is not specified
-which it will call.
-
-The arguments to C<traverse_sequences> are the two sequences to
-traverse, and a hash which specifies the callback functions, like this:
-
-    traverse_sequences(
-        \@seq1, \@seq2,
-        {   MATCH => $callback_1,
-            DISCARD_A => $callback_2,
-            DISCARD_B => $callback_3,
-        }
-    );
-
-Callbacks for MATCH, DISCARD_A, and DISCARD_B are invoked with at least
-the indices of the two arrows as their arguments.  They are not expected
-to return any values.  If a callback is omitted from the table, it is
-not called.
-
-Callbacks for A_FINISHED and B_FINISHED are invoked with at least the
-corresponding index in A or B.
-
-If arrow A reaches the end of its sequence, before arrow B does,
-C<traverse_sequences> will call the C<A_FINISHED> callback when it
-advances arrow B, if there is such a function; if not it will call
-C<DISCARD_B> instead.  Similarly if arrow B finishes first. 
-C<traverse_sequences> returns when both arrows are at the ends of their
-respective sequences.  It returns true on success and false on failure. 
-At present there is no way to fail.
-
-C<traverse_sequences> may be passed an optional fourth parameter; this
-is a CODE reference to a key generation function.  See L</KEY GENERATION
-FUNCTIONS>.
-
-Additional parameters, if any, will be passed to the key generation function.
-
-If you want to pass additional parameters to your callbacks, but don't
-need a custom key generation function, you can get the default by
-passing undef:
-
-    traverse_sequences(
-        \@seq1, \@seq2,
-        {   MATCH => $callback_1,
-            DISCARD_A => $callback_2,
-            DISCARD_B => $callback_3,
-        },
-        undef,     # default key-gen
-        $myArgument1,
-        $myArgument2,
-        $myArgument3,
-    );
-
-C<traverse_sequences> does not have a useful return value; you are
-expected to plug in the appropriate behavior with the callback
-functions.
-
-=head2 C<traverse_balanced>
-
-C<traverse_balanced> is an alternative to C<traverse_sequences>. It
-uses a different algorithm to iterate through the entries in the
-computed LCS. Instead of sticking to one side and showing element changes
-as insertions and deletions only, it will jump back and forth between
-the two sequences and report I<changes> occurring as deletions on one
-side followed immediatly by an insertion on the other side.
-
-In addition to the C<DISCARD_A>, C<DISCARD_B>, and C<MATCH> callbacks
-supported by C<traverse_sequences>, C<traverse_balanced> supports
-a C<CHANGE> callback indicating that one element got C<replaced> by another:
-
-    traverse_balanced(
-        \@seq1, \@seq2,
-        {   MATCH => $callback_1,
-            DISCARD_A => $callback_2,
-            DISCARD_B => $callback_3,
-            CHANGE    => $callback_4,
-        }
-    );
-
-If no C<CHANGE> callback is specified, C<traverse_balanced>
-will map C<CHANGE> events to C<DISCARD_A> and C<DISCARD_B> actions,
-therefore resulting in a similar behaviour as C<traverse_sequences>
-with different order of events.
-
-C<traverse_balanced> might be a bit slower than C<traverse_sequences>,
-noticable only while processing huge amounts of data.
-
-The C<sdiff> function of this module 
-is implemented as call to C<traverse_balanced>.
-
-C<traverse_balanced> does not have a useful return value; you are expected to
-plug in the appropriate behavior with the callback functions.
-
-=head1 KEY GENERATION FUNCTIONS
-
-Most of the functions accept an optional extra parameter.  This is a
-CODE reference to a key generating (hashing) function that should return
-a string that uniquely identifies a given element.  It should be the
-case that if two elements are to be considered equal, their keys should
-be the same (and the other way around).  If no key generation function
-is provided, the key will be the element as a string.
-
-By default, comparisons will use "eq" and elements will be turned into keys
-using the default stringizing operator '""'.
-
-Where this is important is when you're comparing something other than
-strings.  If it is the case that you have multiple different objects
-that should be considered to be equal, you should supply a key
-generation function. Otherwise, you have to make sure that your arrays
-contain unique references.
-
-For instance, consider this example:
-
-    package Person;
-
-    sub new
-    {
-        my $package = shift;
-        return bless { name => '', ssn => '', @_ }, $package;
-    }
-
-    sub clone
-    {
-        my $old = shift;
-        my $new = bless { %$old }, ref($old);
-    }
-
-    sub hash
-    {
-        return shift()->{'ssn'};
-    }
-
-    my $person1 = Person->new( name => 'Joe', ssn => '123-45-6789' );
-    my $person2 = Person->new( name => 'Mary', ssn => '123-47-0000' );
-    my $person3 = Person->new( name => 'Pete', ssn => '999-45-2222' );
-    my $person4 = Person->new( name => 'Peggy', ssn => '123-45-9999' );
-    my $person5 = Person->new( name => 'Frank', ssn => '000-45-9999' );
-
-If you did this:
-
-    my $array1 = [ $person1, $person2, $person4 ];
-    my $array2 = [ $person1, $person3, $person4, $person5 ];
-    Algorithm::Diff::diff( $array1, $array2 );
-
-everything would work out OK (each of the objects would be converted
-into a string like "Person=HASH(0x82425b0)" for comparison).
-
-But if you did this:
-
-    my $array1 = [ $person1, $person2, $person4 ];
-    my $array2 = [ $person1, $person3, $person4->clone(), $person5 ];
-    Algorithm::Diff::diff( $array1, $array2 );
-
-$person4 and $person4->clone() (which have the same name and SSN)
-would be seen as different objects. If you wanted them to be considered
-equivalent, you would have to pass in a key generation function:
-
-    my $array1 = [ $person1, $person2, $person4 ];
-    my $array2 = [ $person1, $person3, $person4->clone(), $person5 ];
-    Algorithm::Diff::diff( $array1, $array2, \&Person::hash );
-
-This would use the 'ssn' field in each Person as a comparison key, and
-so would consider $person4 and $person4->clone() as equal.
-
-You may also pass additional parameters to the key generation function
-if you wish.
-
-=head1 ERROR CHECKING
-
-If you pass these routines a non-reference and they expect a reference,
-they will die with a message.
-
-=head1 AUTHOR
-
-This version released by Tye McQueen (http://perlmonks.org/?node=tye).
-
-=head1 LICENSE
-
-Parts Copyright (c) 2000-2004 Ned Konz.  All rights reserved.
-Parts by Tye McQueen.
-
-This program is free software; you can redistribute it and/or modify it
-under the same terms as Perl.
-
-=head1 MAILING LIST
-
-Mark-Jason still maintains a mailing list.  To join a low-volume mailing
-list for announcements related to diff and Algorithm::Diff, send an
-empty mail message to mjd-perl-diff-request@plover.com.
-
-=head1 CREDITS
-
-Versions through 0.59 (and much of this documentation) were written by:
-
-Mark-Jason Dominus, mjd-perl-diff@plover.com
-
-This version borrows some documentation and routine names from
-Mark-Jason's, but Diff.pm's code was completely replaced.
-
-This code was adapted from the Smalltalk code of Mario Wolczko
-<mario@wolczko.com>, which is available at
-ftp://st.cs.uiuc.edu/pub/Smalltalk/MANCHESTER/manchester/4.0/diff.st
-
-C<sdiff> and C<traverse_balanced> were written by Mike Schilli
-<m@perlmeister.com>.
-
-The algorithm is that described in
-I<A Fast Algorithm for Computing Longest Common Subsequences>,
-CACM, vol.20, no.5, pp.350-353, May 1977, with a few
-minor improvements to improve the speed.
-
-Much work was done by Ned Konz (perl@bike-nomad.com).
-
-The OO interface and some other changes are by Tye McQueen.
-
-=cut
diff --git a/src/tests/Make.tests b/src/tests/Make.tests
deleted file mode 100644
index 76d63f6..0000000
--- a/src/tests/Make.tests
+++ /dev/null
@@ -1,76 +0,0 @@
-# -*- makefile -*-
-
-include $(patsubst %,$(SRCDIR)/%/Make.tests,$(TEST_SUBDIRS))
-
-PROGS = $(foreach subdir,$(TEST_SUBDIRS),$($(subdir)_PROGS))
-TESTS = $(foreach subdir,$(TEST_SUBDIRS),$($(subdir)_TESTS))
-EXTRA_GRADES = $(foreach subdir,$(TEST_SUBDIRS),$($(subdir)_EXTRA_GRADES))
-
-OUTPUTS = $(addsuffix .output,$(TESTS) $(EXTRA_GRADES))
-ERRORS = $(addsuffix .errors,$(TESTS) $(EXTRA_GRADES))
-RESULTS = $(addsuffix .result,$(TESTS) $(EXTRA_GRADES))
-
-ifdef PROGS
-include ../../Makefile.userprog
-endif
-
-TIMEOUT = 60
-
-clean::
-	rm -f $(OUTPUTS) $(ERRORS) $(RESULTS) 
-
-grade:: results
-	$(SRCDIR)/tests/make-grade $(SRCDIR) $< $(GRADING_FILE) | tee $@
-
-check:: results
-	@cat $<
-	@COUNT="`egrep '^(pass|FAIL) ' $< | wc -l | sed 's/[ 	]//g;'`"; \
-	FAILURES="`egrep '^FAIL ' $< | wc -l | sed 's/[ 	]//g;'`"; \
-	if [ $$FAILURES = 0 ]; then					  \
-		echo "All $$COUNT tests passed.";			  \
-	else								  \
-		echo "$$FAILURES of $$COUNT tests failed.";		  \
-		exit 1;							  \
-	fi
-
-results: $(RESULTS)
-	@for d in $(TESTS) $(EXTRA_GRADES); do			\
-		if echo PASS | cmp -s $$d.result -; then	\
-			echo "pass $$d";			\
-		else						\
-			echo "FAIL $$d";			\
-		fi;						\
-	done > $@
-
-outputs:: $(OUTPUTS)
-
-$(foreach prog,$(PROGS),$(eval $(prog).output: $(prog)))
-$(foreach test,$(TESTS),$(eval $(test).output: $($(test)_PUTFILES)))
-$(foreach test,$(TESTS),$(eval $(test).output: TEST = $(test)))
-
-# Prevent an environment variable VERBOSE from surprising us.
-VERBOSE =
-
-TESTCMD = pintos -v -k -T $(TIMEOUT)
-TESTCMD += $(SIMULATOR)
-TESTCMD += $(PINTOSOPTS)
-ifeq ($(filter userprog, $(KERNEL_SUBDIRS)), userprog)
-TESTCMD += --fs-disk=$(FSDISK)
-TESTCMD += $(foreach file,$(PUTFILES),-p $(file) -a $(notdir $(file)))
-endif
-ifeq ($(filter vm, $(KERNEL_SUBDIRS)), vm)
-TESTCMD += --swap-disk=4
-endif
-TESTCMD += -- -q 
-TESTCMD += $(KERNELFLAGS)
-ifeq ($(filter userprog, $(KERNEL_SUBDIRS)), userprog)
-TESTCMD += -f
-endif
-TESTCMD += $(if $($(TEST)_ARGS),run '$(*F) $($(TEST)_ARGS)',run $(*F))
-TESTCMD += < /dev/null
-TESTCMD += 2> $(TEST).errors $(if $(VERBOSE),|tee,>) $(TEST).output
-%.output: os.dsk
-	$(TESTCMD)
-
-%.result: %.ck %.output
-	perl -I$(SRCDIR) $< $* $@
diff --git a/src/tests/arc4.c b/src/tests/arc4.c
deleted file mode 100644
index b033cc6..0000000
--- a/src/tests/arc4.c
+++ /dev/null
@@ -1,53 +0,0 @@
-#include <stdint.h>
-#include "tests/arc4.h"
-
-/* Swap bytes. */
-static inline void
-swap_byte (uint8_t *a, uint8_t *b)
-{
-  uint8_t t = *a;
-  *a = *b;
-  *b = t;
-}
-
-void
-arc4_init (struct arc4 *arc4, const void *key_, size_t size)
-{
-  const uint8_t *key = key_;
-  size_t key_idx;
-  uint8_t *s;
-  int i, j;
-
-  s = arc4->s;
-  arc4->i = arc4->j = 0;
-  for (i = 0; i < 256; i++)
-    s[i] = i;
-  for (key_idx = 0, i = j = 0; i < 256; i++)
-    {
-      j = (j + s[i] + key[key_idx]) & 255;
-      swap_byte (s + i, s + j);
-      if (++key_idx >= size)
-        key_idx = 0;
-    }
-}
-
-void
-arc4_crypt (struct arc4 *arc4, void *buf_, size_t size)
-{
-  uint8_t *buf = buf_;
-  uint8_t *s;
-  uint8_t i, j;
-
-  s = arc4->s;
-  i = arc4->i;
-  j = arc4->j;
-  while (size-- > 0)
-    {
-      i += 1;
-      j += s[i];
-      swap_byte (s + i, s + j);
-      *buf++ ^= s[(s[i] + s[j]) & 255];
-    }
-  arc4->i = i;
-  arc4->j = j;
-}
diff --git a/src/tests/arc4.h b/src/tests/arc4.h
deleted file mode 100644
index 61c533a..0000000
--- a/src/tests/arc4.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef TESTS_ARC4_H
-#define TESTS_ARC4_H
-
-#include <stddef.h>
-#include <stdint.h>
-
-/* Alleged RC4 algorithm encryption state. */
-struct arc4
-  {
-    uint8_t s[256];
-    uint8_t i, j;
-  };
-
-void arc4_init (struct arc4 *, const void *, size_t);
-void arc4_crypt (struct arc4 *, void *, size_t);
-
-#endif /* tests/arc4.h */
diff --git a/src/tests/arc4.pm b/src/tests/arc4.pm
deleted file mode 100644
index df19216..0000000
--- a/src/tests/arc4.pm
+++ /dev/null
@@ -1,29 +0,0 @@
-use strict;
-use warnings;
-
-sub arc4_init {
-    my ($key) = @_;
-    my (@s) = 0...255;
-    my ($j) = 0;
-    for my $i (0...255) {
-	$j = ($j + $s[$i] + ord (substr ($key, $i % length ($key), 1))) & 0xff;
-	@s[$i, $j] = @s[$j, $i];
-    }
-    return (0, 0, @s);
-}
-
-sub arc4_crypt {
-    my ($arc4, $buf) = @_;
-    my ($i, $j, @s) = @$arc4;
-    my ($out) = "";
-    for my $c (split (//, $buf)) {
-	$i = ($i + 1) & 0xff;
-	$j = ($j + $s[$i]) & 0xff;
-	@s[$i, $j] = @s[$j, $i];
-	$out .= chr (ord ($c) ^ $s[($s[$i] + $s[$j]) & 0xff]);
-    }
-    @$arc4 = ($i, $j, @s);
-    return $out;
-}
-
-1;
diff --git a/src/tests/cksum.c b/src/tests/cksum.c
deleted file mode 100644
index 92a2995..0000000
--- a/src/tests/cksum.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/* crctab[] and cksum() are from the `cksum' entry in SUSv3. */
-
-#include <stdint.h>
-#include "tests/cksum.h"
-
-static unsigned long crctab[] = {
-  0x00000000,
-  0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b,
-  0x1a864db2, 0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6,
-  0x2b4bcb61, 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd,
-  0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, 0x5f15adac,
-  0x5bd4b01b, 0x569796c2, 0x52568b75, 0x6a1936c8, 0x6ed82b7f,
-  0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3, 0x709f7b7a,
-  0x745e66cd, 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039,
-  0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, 0xbe2b5b58,
-  0xbaea46ef, 0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033,
-  0xa4ad16ea, 0xa06c0b5d, 0xd4326d90, 0xd0f37027, 0xddb056fe,
-  0xd9714b49, 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95,
-  0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, 0xe13ef6f4,
-  0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, 0x34867077, 0x30476dc0,
-  0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, 0x2e003dc5,
-  0x2ac12072, 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16,
-  0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, 0x7897ab07,
-  0x7c56b6b0, 0x71159069, 0x75d48dde, 0x6b93dddb, 0x6f52c06c,
-  0x6211e6b5, 0x66d0fb02, 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1,
-  0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba,
-  0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b,
-  0xbb60adfc, 0xb6238b25, 0xb2e29692, 0x8aad2b2f, 0x8e6c3698,
-  0x832f1041, 0x87ee0df6, 0x99a95df3, 0x9d684044, 0x902b669d,
-  0x94ea7b2a, 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e,
-  0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, 0xc6bcf05f,
-  0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34,
-  0xdc3abded, 0xd8fba05a, 0x690ce0ee, 0x6dcdfd59, 0x608edb80,
-  0x644fc637, 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb,
-  0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, 0x5c007b8a,
-  0x58c1663d, 0x558240e4, 0x51435d53, 0x251d3b9e, 0x21dc2629,
-  0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5, 0x3f9b762c,
-  0x3b5a6b9b, 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff,
-  0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, 0xf12f560e,
-  0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65,
-  0xeba91bbc, 0xef68060b, 0xd727bbb6, 0xd3e6a601, 0xdea580d8,
-  0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3,
-  0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, 0xae3afba2,
-  0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, 0x9b3660c6, 0x9ff77d71,
-  0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, 0x81b02d74,
-  0x857130c3, 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640,
-  0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, 0x7b827d21,
-  0x7f436096, 0x7200464f, 0x76c15bf8, 0x68860bfd, 0x6c47164a,
-  0x61043093, 0x65c52d24, 0x119b4be9, 0x155a565e, 0x18197087,
-  0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec,
-  0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d,
-  0x2056cd3a, 0x2d15ebe3, 0x29d4f654, 0xc5a92679, 0xc1683bce,
-  0xcc2b1d17, 0xc8ea00a0, 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb,
-  0xdbee767c, 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18,
-  0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, 0x89b8fd09,
-  0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, 0x9e7d9662,
-  0x933eb0bb, 0x97ffad0c, 0xafb010b1, 0xab710d06, 0xa6322bdf,
-  0xa2f33668, 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4
-};
-
-/* This is the algorithm used by the Posix `cksum' utility. */
-unsigned long
-cksum (const void *b_, size_t n)
-{
-  const unsigned char *b = b_;
-  uint32_t s = 0;
-  size_t i;
-  for (i = n; i > 0; --i)
-    {
-      unsigned char c = *b++;
-      s = (s << 8) ^ crctab[(s >> 24) ^ c];
-    }
-  while (n != 0)
-    {
-      unsigned char c = n;
-      n >>= 8;
-      s = (s << 8) ^ crctab[(s >> 24) ^ c];
-    }
-  return ~s;
-}
-
-#ifdef STANDALONE_TEST
-#include <stdio.h>
-int
-main (void) 
-{
-  char buf[65536];
-  int n = fread (buf, 1, sizeof buf, stdin);
-  printf ("%lu\n", cksum (buf, n));
-  return 0;
-}
-#endif
diff --git a/src/tests/cksum.h b/src/tests/cksum.h
deleted file mode 100644
index 23a1fe9..0000000
--- a/src/tests/cksum.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef TESTS_CKSUM_H
-#define TESTS_CKSUM_H
-
-#include <stddef.h>
-
-unsigned long cksum(const void *, size_t);
-
-#endif /* tests/cksum.h */
diff --git a/src/tests/cksum.pm b/src/tests/cksum.pm
deleted file mode 100644
index 73be5f2..0000000
--- a/src/tests/cksum.pm
+++ /dev/null
@@ -1,87 +0,0 @@
-# From the `cksum' entry in SUSv3.
-
-use strict;
-use warnings;
-
-my (@crctab) =
-  (0x00000000,
-   0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b,
-   0x1a864db2, 0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6,
-   0x2b4bcb61, 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd,
-   0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, 0x5f15adac,
-   0x5bd4b01b, 0x569796c2, 0x52568b75, 0x6a1936c8, 0x6ed82b7f,
-   0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3, 0x709f7b7a,
-   0x745e66cd, 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039,
-   0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, 0xbe2b5b58,
-   0xbaea46ef, 0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033,
-   0xa4ad16ea, 0xa06c0b5d, 0xd4326d90, 0xd0f37027, 0xddb056fe,
-   0xd9714b49, 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95,
-   0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, 0xe13ef6f4,
-   0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, 0x34867077, 0x30476dc0,
-   0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, 0x2e003dc5,
-   0x2ac12072, 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16,
-   0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, 0x7897ab07,
-   0x7c56b6b0, 0x71159069, 0x75d48dde, 0x6b93dddb, 0x6f52c06c,
-   0x6211e6b5, 0x66d0fb02, 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1,
-   0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba,
-   0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b,
-   0xbb60adfc, 0xb6238b25, 0xb2e29692, 0x8aad2b2f, 0x8e6c3698,
-   0x832f1041, 0x87ee0df6, 0x99a95df3, 0x9d684044, 0x902b669d,
-   0x94ea7b2a, 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e,
-   0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, 0xc6bcf05f,
-   0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34,
-   0xdc3abded, 0xd8fba05a, 0x690ce0ee, 0x6dcdfd59, 0x608edb80,
-   0x644fc637, 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb,
-   0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, 0x5c007b8a,
-   0x58c1663d, 0x558240e4, 0x51435d53, 0x251d3b9e, 0x21dc2629,
-   0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5, 0x3f9b762c,
-   0x3b5a6b9b, 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff,
-   0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, 0xf12f560e,
-   0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65,
-   0xeba91bbc, 0xef68060b, 0xd727bbb6, 0xd3e6a601, 0xdea580d8,
-   0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3,
-   0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, 0xae3afba2,
-   0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, 0x9b3660c6, 0x9ff77d71,
-   0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, 0x81b02d74,
-   0x857130c3, 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640,
-   0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, 0x7b827d21,
-   0x7f436096, 0x7200464f, 0x76c15bf8, 0x68860bfd, 0x6c47164a,
-   0x61043093, 0x65c52d24, 0x119b4be9, 0x155a565e, 0x18197087,
-   0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec,
-   0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d,
-   0x2056cd3a, 0x2d15ebe3, 0x29d4f654, 0xc5a92679, 0xc1683bce,
-   0xcc2b1d17, 0xc8ea00a0, 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb,
-   0xdbee767c, 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18,
-   0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, 0x89b8fd09,
-   0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, 0x9e7d9662,
-   0x933eb0bb, 0x97ffad0c, 0xafb010b1, 0xab710d06, 0xa6322bdf,
-   0xa2f33668, 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4);
-
-sub cksum {
-    my ($b) = @_;
-    my ($n) = length ($b);
-    my ($s) = 0;
-    for my $i (0...$n - 1) {
-	my ($c) = ord (substr ($b, $i, 1));
-	$s = ($s << 8) ^ $crctab[($s >> 24) ^ $c];
-	$s &= 0xffff_ffff;
-    }
-    while ($n != 0) {
-	my ($c) = $n & 0xff;
-	$n >>= 8;
-	$s = ($s << 8) ^ $crctab[($s >> 24) ^ $c];
-	$s &= 0xffff_ffff;
-    }
-    return ~$s & 0xffff_ffff;
-}
-
-sub cksum_file {
-    my ($file) = @_;
-    open (FILE, '<', $file) or die "$file: open: $!\n";
-    my ($data);
-    sysread (FILE, $data, -s FILE) == -s FILE or die "$file: read: $!\n";
-    close (FILE);
-    return cksum ($data);
-}
-
-1;
diff --git a/src/tests/filesys/Grading.no-vm b/src/tests/filesys/Grading.no-vm
deleted file mode 100644
index ee98fc1..0000000
--- a/src/tests/filesys/Grading.no-vm
+++ /dev/null
@@ -1,18 +0,0 @@
-# Percentage of the testing point total designated for each set of
-# tests.
-
-# This project is primarily about implementing the file system, but
-# all the previous functionality should work too.  It's not too easy
-# to screw it up, thus the emphasis.
-
-# 65% for extended file system features.
-30%	tests/filesys/extended/Rubric.functionality
-15%	tests/filesys/extended/Rubric.robustness
-20%	tests/filesys/extended/Rubric.persistence
-
-# 20% to not break the provided file system features.
-20%	tests/filesys/base/Rubric
-
-# 15% for the rest.
-10%	tests/userprog/Rubric.functionality
-5%	tests/userprog/Rubric.robustness
diff --git a/src/tests/filesys/Grading.with-vm b/src/tests/filesys/Grading.with-vm
deleted file mode 100644
index e7c041e..0000000
--- a/src/tests/filesys/Grading.with-vm
+++ /dev/null
@@ -1,22 +0,0 @@
-# Percentage of the testing point total designated for each set of
-# tests.
-
-# This project is primarily about implementing the file system, but
-# all the previous functionality should work too.  It's not too easy
-# to screw it up, thus the emphasis.
-
-# 65% for extended file system features.
-30%	tests/filesys/extended/Rubric.functionality
-15%	tests/filesys/extended/Rubric.robustness
-20%	tests/filesys/extended/Rubric.persistence
-
-# 20% to not break the provided file system features.
-20%	tests/filesys/base/Rubric
-
-# 15% for the rest.
-10%	tests/userprog/Rubric.functionality
-5%	tests/userprog/Rubric.robustness
-
-# Up to 10% bonus for working VM functionality.
-8%	tests/vm/Rubric.functionality
-2%	tests/vm/Rubric.robustness
diff --git a/src/tests/filesys/base/Make.tests b/src/tests/filesys/base/Make.tests
deleted file mode 100644
index e475222..0000000
--- a/src/tests/filesys/base/Make.tests
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- makefile -*-
-
-tests/filesys/base_TESTS = $(addprefix tests/filesys/base/,lg-create	\
-lg-full lg-random lg-seq-block lg-seq-random sm-create sm-full		\
-sm-random sm-seq-block sm-seq-random syn-read syn-remove syn-write)
-
-tests/filesys/base_PROGS = $(tests/filesys/base_TESTS) $(addprefix	\
-tests/filesys/base/,child-syn-read child-syn-wrt)
-
-$(foreach prog,$(tests/filesys/base_PROGS),				\
-	$(eval $(prog)_SRC += $(prog).c tests/lib.c tests/filesys/seq-test.c))
-$(foreach prog,$(tests/filesys/base_TESTS),			\
-	$(eval $(prog)_SRC += tests/main.c))
-
-tests/filesys/base/syn-read_PUTFILES = tests/filesys/base/child-syn-read
-tests/filesys/base/syn-write_PUTFILES = tests/filesys/base/child-syn-wrt
-
-tests/filesys/base/syn-read.output: TIMEOUT = 300
diff --git a/src/tests/filesys/base/Rubric b/src/tests/filesys/base/Rubric
deleted file mode 100644
index 49a9d15..0000000
--- a/src/tests/filesys/base/Rubric
+++ /dev/null
@@ -1,19 +0,0 @@
-Functionality of base file system:
-- Test basic support for small files.
-1	sm-create
-2	sm-full
-2	sm-random
-2	sm-seq-block
-3	sm-seq-random
-
-- Test basic support for large files.
-1	lg-create
-2	lg-full
-2	lg-random
-2	lg-seq-block
-3	lg-seq-random
-
-- Test synchronized multiprogram access to files.
-4	syn-read
-4	syn-write
-2	syn-remove
diff --git a/src/tests/filesys/base/child-syn-read.c b/src/tests/filesys/base/child-syn-read.c
deleted file mode 100644
index 77a5e26..0000000
--- a/src/tests/filesys/base/child-syn-read.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Child process for syn-read test.
-   Reads the contents of a test file a byte at a time, in the
-   hope that this will take long enough that we can get a
-   significant amount of contention in the kernel file system
-   code. */
-
-#include <random.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/filesys/base/syn-read.h"
-
-const char *test_name = "child-syn-read";
-
-static char buf[BUF_SIZE];
-
-int
-main (int argc, const char *argv[]) 
-{
-  int child_idx;
-  int fd;
-  size_t i;
-
-  quiet = true;
-  
-  CHECK (argc == 2, "argc must be 2, actually %d", argc);
-  child_idx = atoi (argv[1]);
-
-  random_init (0);
-  random_bytes (buf, sizeof buf);
-
-  CHECK ((fd = open (file_name)) > 1, "open \"%s\"", file_name);
-  for (i = 0; i < sizeof buf; i++) 
-    {
-      char c;
-      CHECK (read (fd, &c, 1) > 0, "read \"%s\"", file_name);
-      compare_bytes (&c, buf + i, 1, i, file_name);
-    }
-  close (fd);
-
-  return child_idx;
-}
-
diff --git a/src/tests/filesys/base/child-syn-wrt.c b/src/tests/filesys/base/child-syn-wrt.c
deleted file mode 100644
index 1b52584..0000000
--- a/src/tests/filesys/base/child-syn-wrt.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Child process for syn-read test.
-   Writes into part of a test file.  Other processes will be
-   writing into other parts at the same time. */
-
-#include <random.h>
-#include <stdlib.h>
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/filesys/base/syn-write.h"
-
-char buf[BUF_SIZE];
-
-int
-main (int argc, char *argv[])
-{
-  int child_idx;
-  int fd;
-
-  quiet = true;
-  
-  CHECK (argc == 2, "argc must be 2, actually %d", argc);
-  child_idx = atoi (argv[1]);
-
-  random_init (0);
-  random_bytes (buf, sizeof buf);
-
-  CHECK ((fd = open (file_name)) > 1, "open \"%s\"", file_name);
-  seek (fd, CHUNK_SIZE * child_idx);
-  CHECK (write (fd, buf + CHUNK_SIZE * child_idx, CHUNK_SIZE) > 0,
-         "write \"%s\"", file_name);
-  msg ("close \"%s\"", file_name);
-  close (fd);
-
-  return child_idx;
-}
diff --git a/src/tests/filesys/base/full.inc b/src/tests/filesys/base/full.inc
deleted file mode 100644
index 38a0396..0000000
--- a/src/tests/filesys/base/full.inc
+++ /dev/null
@@ -1,20 +0,0 @@
-/* -*- c -*- */
-
-#include "tests/filesys/seq-test.h"
-#include "tests/main.h"
-
-static char buf[TEST_SIZE];
-
-static size_t
-return_test_size (void) 
-{
-  return TEST_SIZE;
-}
-
-void
-test_main (void) 
-{
-  seq_test ("quux",
-            buf, sizeof buf, sizeof buf,
-            return_test_size, NULL);
-}
diff --git a/src/tests/filesys/base/lg-create.c b/src/tests/filesys/base/lg-create.c
deleted file mode 100644
index 5c45eee..0000000
--- a/src/tests/filesys/base/lg-create.c
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Tests that create properly zeros out the contents of a fairly
-   large file. */
-
-#define TEST_SIZE 75678
-#include "tests/filesys/create.inc"
diff --git a/src/tests/filesys/base/lg-create.ck b/src/tests/filesys/base/lg-create.ck
deleted file mode 100644
index 86b2c51..0000000
--- a/src/tests/filesys/base/lg-create.ck
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(lg-create) begin
-(lg-create) create "blargle"
-(lg-create) open "blargle" for verification
-(lg-create) verified contents of "blargle"
-(lg-create) close "blargle"
-(lg-create) end
-EOF
-pass;
diff --git a/src/tests/filesys/base/lg-full.c b/src/tests/filesys/base/lg-full.c
deleted file mode 100644
index 5f7234d..0000000
--- a/src/tests/filesys/base/lg-full.c
+++ /dev/null
@@ -1,6 +0,0 @@
-/* Writes out the contents of a fairly large file all at once,
-   and then reads it back to make sure that it was written
-   properly. */
-
-#define TEST_SIZE 75678
-#include "tests/filesys/base/full.inc"
diff --git a/src/tests/filesys/base/lg-full.ck b/src/tests/filesys/base/lg-full.ck
deleted file mode 100644
index ee6c7f9..0000000
--- a/src/tests/filesys/base/lg-full.ck
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(lg-full) begin
-(lg-full) create "quux"
-(lg-full) open "quux"
-(lg-full) writing "quux"
-(lg-full) close "quux"
-(lg-full) open "quux" for verification
-(lg-full) verified contents of "quux"
-(lg-full) close "quux"
-(lg-full) end
-EOF
-pass;
diff --git a/src/tests/filesys/base/lg-random.c b/src/tests/filesys/base/lg-random.c
deleted file mode 100644
index b6f8873..0000000
--- a/src/tests/filesys/base/lg-random.c
+++ /dev/null
@@ -1,7 +0,0 @@
-/* Writes out the content of a fairly large file in random order,
-   then reads it back in random order to verify that it was
-   written properly. */
-
-#define BLOCK_SIZE 512
-#define TEST_SIZE (512 * 150)
-#include "tests/filesys/base/random.inc"
diff --git a/src/tests/filesys/base/lg-random.ck b/src/tests/filesys/base/lg-random.ck
deleted file mode 100644
index dd9f1dd..0000000
--- a/src/tests/filesys/base/lg-random.ck
+++ /dev/null
@@ -1,14 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(lg-random) begin
-(lg-random) create "bazzle"
-(lg-random) open "bazzle"
-(lg-random) write "bazzle" in random order
-(lg-random) read "bazzle" in random order
-(lg-random) close "bazzle"
-(lg-random) end
-EOF
-pass;
diff --git a/src/tests/filesys/base/lg-seq-block.c b/src/tests/filesys/base/lg-seq-block.c
deleted file mode 100644
index 580c30b..0000000
--- a/src/tests/filesys/base/lg-seq-block.c
+++ /dev/null
@@ -1,7 +0,0 @@
-/* Writes out a fairly large file sequentially, one fixed-size
-   block at a time, then reads it back to verify that it was
-   written properly. */
-
-#define TEST_SIZE 75678
-#define BLOCK_SIZE 513
-#include "tests/filesys/base/seq-block.inc"
diff --git a/src/tests/filesys/base/lg-seq-block.ck b/src/tests/filesys/base/lg-seq-block.ck
deleted file mode 100644
index b789081..0000000
--- a/src/tests/filesys/base/lg-seq-block.ck
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(lg-seq-block) begin
-(lg-seq-block) create "noodle"
-(lg-seq-block) open "noodle"
-(lg-seq-block) writing "noodle"
-(lg-seq-block) close "noodle"
-(lg-seq-block) open "noodle" for verification
-(lg-seq-block) verified contents of "noodle"
-(lg-seq-block) close "noodle"
-(lg-seq-block) end
-EOF
-pass;
diff --git a/src/tests/filesys/base/lg-seq-random.c b/src/tests/filesys/base/lg-seq-random.c
deleted file mode 100644
index fbb6bba..0000000
--- a/src/tests/filesys/base/lg-seq-random.c
+++ /dev/null
@@ -1,6 +0,0 @@
-/* Writes out a fairly large file sequentially, one random-sized
-   block at a time, then reads it back to verify that it was
-   written properly. */
-
-#define TEST_SIZE 75678
-#include "tests/filesys/base/seq-random.inc"
diff --git a/src/tests/filesys/base/lg-seq-random.ck b/src/tests/filesys/base/lg-seq-random.ck
deleted file mode 100644
index 6b2dc82..0000000
--- a/src/tests/filesys/base/lg-seq-random.ck
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(lg-seq-random) begin
-(lg-seq-random) create "nibble"
-(lg-seq-random) open "nibble"
-(lg-seq-random) writing "nibble"
-(lg-seq-random) close "nibble"
-(lg-seq-random) open "nibble" for verification
-(lg-seq-random) verified contents of "nibble"
-(lg-seq-random) close "nibble"
-(lg-seq-random) end
-EOF
-pass;
diff --git a/src/tests/filesys/base/random.inc b/src/tests/filesys/base/random.inc
deleted file mode 100644
index eeeea68..0000000
--- a/src/tests/filesys/base/random.inc
+++ /dev/null
@@ -1,59 +0,0 @@
-/* -*- c -*- */
-
-#include <random.h>
-#include <stdio.h>
-#include <string.h>
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-#if TEST_SIZE % BLOCK_SIZE != 0
-#error TEST_SIZE must be a multiple of BLOCK_SIZE
-#endif
-
-#define BLOCK_CNT (TEST_SIZE / BLOCK_SIZE)
-
-char buf[TEST_SIZE];
-int order[BLOCK_CNT];
-
-void
-test_main (void) 
-{
-  const char *file_name = "bazzle";
-  int fd;
-  size_t i;
-
-  random_init (57);
-  random_bytes (buf, sizeof buf);
-
-  for (i = 0; i < BLOCK_CNT; i++)
-    order[i] = i;
-
-  CHECK (create (file_name, TEST_SIZE), "create \"%s\"", file_name);
-  CHECK ((fd = open (file_name)) > 1, "open \"%s\"", file_name);
-
-  msg ("write \"%s\" in random order", file_name);
-  shuffle (order, BLOCK_CNT, sizeof *order);
-  for (i = 0; i < BLOCK_CNT; i++) 
-    {
-      size_t ofs = BLOCK_SIZE * order[i];
-      seek (fd, ofs);
-      if (write (fd, buf + ofs, BLOCK_SIZE) != BLOCK_SIZE)
-        fail ("write %d bytes at offset %zu failed", (int) BLOCK_SIZE, ofs);
-    }
-
-  msg ("read \"%s\" in random order", file_name);
-  shuffle (order, BLOCK_CNT, sizeof *order);
-  for (i = 0; i < BLOCK_CNT; i++) 
-    {
-      char block[BLOCK_SIZE];
-      size_t ofs = BLOCK_SIZE * order[i];
-      seek (fd, ofs);
-      if (read (fd, block, BLOCK_SIZE) != BLOCK_SIZE)
-        fail ("read %d bytes at offset %zu failed", (int) BLOCK_SIZE, ofs);
-      compare_bytes (block, buf + ofs, BLOCK_SIZE, ofs, file_name);
-    }
-
-  msg ("close \"%s\"", file_name);
-  close (fd);
-}
diff --git a/src/tests/filesys/base/seq-block.inc b/src/tests/filesys/base/seq-block.inc
deleted file mode 100644
index d4c1f57..0000000
--- a/src/tests/filesys/base/seq-block.inc
+++ /dev/null
@@ -1,20 +0,0 @@
-/* -*- c -*- */
-
-#include "tests/filesys/seq-test.h"
-#include "tests/main.h"
-
-static char buf[TEST_SIZE];
-
-static size_t
-return_block_size (void) 
-{
-  return BLOCK_SIZE;
-}
-
-void
-test_main (void) 
-{
-  seq_test ("noodle",
-            buf, sizeof buf, sizeof buf,
-            return_block_size, NULL);
-}
diff --git a/src/tests/filesys/base/seq-random.inc b/src/tests/filesys/base/seq-random.inc
deleted file mode 100644
index a4da4c5..0000000
--- a/src/tests/filesys/base/seq-random.inc
+++ /dev/null
@@ -1,22 +0,0 @@
-/* -*- c -*- */
-
-#include <random.h>
-#include "tests/filesys/seq-test.h"
-#include "tests/main.h"
-
-static char buf[TEST_SIZE];
-
-static size_t
-return_random (void) 
-{
-  return random_ulong () % 1031 + 1;
-}
-
-void
-test_main (void) 
-{
-  random_init (-1);
-  seq_test ("nibble",
-            buf, sizeof buf, sizeof buf,
-            return_random, NULL);
-}
diff --git a/src/tests/filesys/base/sm-create.c b/src/tests/filesys/base/sm-create.c
deleted file mode 100644
index 6b97ac1..0000000
--- a/src/tests/filesys/base/sm-create.c
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Tests that create properly zeros out the contents of a fairly
-   small file. */
-
-#define TEST_SIZE 5678
-#include "tests/filesys/create.inc"
diff --git a/src/tests/filesys/base/sm-create.ck b/src/tests/filesys/base/sm-create.ck
deleted file mode 100644
index 8ca80dc..0000000
--- a/src/tests/filesys/base/sm-create.ck
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(sm-create) begin
-(sm-create) create "blargle"
-(sm-create) open "blargle" for verification
-(sm-create) verified contents of "blargle"
-(sm-create) close "blargle"
-(sm-create) end
-EOF
-pass;
diff --git a/src/tests/filesys/base/sm-full.c b/src/tests/filesys/base/sm-full.c
deleted file mode 100644
index 23ff3d4..0000000
--- a/src/tests/filesys/base/sm-full.c
+++ /dev/null
@@ -1,6 +0,0 @@
-/* Writes out the contents of a fairly small file all at once,
-   and then reads it back to make sure that it was written
-   properly. */
-
-#define TEST_SIZE 5678
-#include "tests/filesys/base/full.inc"
diff --git a/src/tests/filesys/base/sm-full.ck b/src/tests/filesys/base/sm-full.ck
deleted file mode 100644
index 2e0eb36..0000000
--- a/src/tests/filesys/base/sm-full.ck
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(sm-full) begin
-(sm-full) create "quux"
-(sm-full) open "quux"
-(sm-full) writing "quux"
-(sm-full) close "quux"
-(sm-full) open "quux" for verification
-(sm-full) verified contents of "quux"
-(sm-full) close "quux"
-(sm-full) end
-EOF
-pass;
diff --git a/src/tests/filesys/base/sm-random.c b/src/tests/filesys/base/sm-random.c
deleted file mode 100644
index 42d670f..0000000
--- a/src/tests/filesys/base/sm-random.c
+++ /dev/null
@@ -1,7 +0,0 @@
-/* Writes out the content of a fairly small file in random order,
-   then reads it back in random order to verify that it was
-   written properly. */
-
-#define BLOCK_SIZE 13
-#define TEST_SIZE (13 * 123)
-#include "tests/filesys/base/random.inc"
diff --git a/src/tests/filesys/base/sm-random.ck b/src/tests/filesys/base/sm-random.ck
deleted file mode 100644
index bda049d..0000000
--- a/src/tests/filesys/base/sm-random.ck
+++ /dev/null
@@ -1,14 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(sm-random) begin
-(sm-random) create "bazzle"
-(sm-random) open "bazzle"
-(sm-random) write "bazzle" in random order
-(sm-random) read "bazzle" in random order
-(sm-random) close "bazzle"
-(sm-random) end
-EOF
-pass;
diff --git a/src/tests/filesys/base/sm-seq-block.c b/src/tests/filesys/base/sm-seq-block.c
deleted file mode 100644
index e368327..0000000
--- a/src/tests/filesys/base/sm-seq-block.c
+++ /dev/null
@@ -1,7 +0,0 @@
-/* Writes out a fairly small file sequentially, one fixed-size
-   block at a time, then reads it back to verify that it was
-   written properly. */
-
-#define TEST_SIZE 5678
-#define BLOCK_SIZE 513
-#include "tests/filesys/base/seq-block.inc"
diff --git a/src/tests/filesys/base/sm-seq-block.ck b/src/tests/filesys/base/sm-seq-block.ck
deleted file mode 100644
index 0e2939d..0000000
--- a/src/tests/filesys/base/sm-seq-block.ck
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(sm-seq-block) begin
-(sm-seq-block) create "noodle"
-(sm-seq-block) open "noodle"
-(sm-seq-block) writing "noodle"
-(sm-seq-block) close "noodle"
-(sm-seq-block) open "noodle" for verification
-(sm-seq-block) verified contents of "noodle"
-(sm-seq-block) close "noodle"
-(sm-seq-block) end
-EOF
-pass;
diff --git a/src/tests/filesys/base/sm-seq-random.c b/src/tests/filesys/base/sm-seq-random.c
deleted file mode 100644
index 89e5b71..0000000
--- a/src/tests/filesys/base/sm-seq-random.c
+++ /dev/null
@@ -1,6 +0,0 @@
-/* Writes out a fairly large file sequentially, one random-sized
-   block at a time, then reads it back to verify that it was
-   written properly. */
-
-#define TEST_SIZE 5678
-#include "tests/filesys/base/seq-random.inc"
diff --git a/src/tests/filesys/base/sm-seq-random.ck b/src/tests/filesys/base/sm-seq-random.ck
deleted file mode 100644
index 2fb368b..0000000
--- a/src/tests/filesys/base/sm-seq-random.ck
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(sm-seq-random) begin
-(sm-seq-random) create "nibble"
-(sm-seq-random) open "nibble"
-(sm-seq-random) writing "nibble"
-(sm-seq-random) close "nibble"
-(sm-seq-random) open "nibble" for verification
-(sm-seq-random) verified contents of "nibble"
-(sm-seq-random) close "nibble"
-(sm-seq-random) end
-EOF
-pass;
diff --git a/src/tests/filesys/base/syn-read.c b/src/tests/filesys/base/syn-read.c
deleted file mode 100644
index 7c36a42..0000000
--- a/src/tests/filesys/base/syn-read.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Spawns 10 child processes, all of which read from the same
-   file and make sure that the contents are what they should
-   be. */
-
-#include <random.h>
-#include <stdio.h>
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-#include "tests/filesys/base/syn-read.h"
-
-static char buf[BUF_SIZE];
-
-#define CHILD_CNT 10
-
-void
-test_main (void) 
-{
-  pid_t children[CHILD_CNT];
-  int fd;
-
-  CHECK (create (file_name, sizeof buf), "create \"%s\"", file_name);
-  CHECK ((fd = open (file_name)) > 1, "open \"%s\"", file_name);
-  random_bytes (buf, sizeof buf);
-  CHECK (write (fd, buf, sizeof buf) > 0, "write \"%s\"", file_name);
-  msg ("close \"%s\"", file_name);
-  close (fd);
-
-  exec_children ("child-syn-read", children, CHILD_CNT);
-  wait_children (children, CHILD_CNT);
-}
diff --git a/src/tests/filesys/base/syn-read.ck b/src/tests/filesys/base/syn-read.ck
deleted file mode 100644
index e2f68e8..0000000
--- a/src/tests/filesys/base/syn-read.ck
+++ /dev/null
@@ -1,33 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(syn-read) begin
-(syn-read) create "data"
-(syn-read) open "data"
-(syn-read) write "data"
-(syn-read) close "data"
-(syn-read) exec child 1 of 10: "child-syn-read 0"
-(syn-read) exec child 2 of 10: "child-syn-read 1"
-(syn-read) exec child 3 of 10: "child-syn-read 2"
-(syn-read) exec child 4 of 10: "child-syn-read 3"
-(syn-read) exec child 5 of 10: "child-syn-read 4"
-(syn-read) exec child 6 of 10: "child-syn-read 5"
-(syn-read) exec child 7 of 10: "child-syn-read 6"
-(syn-read) exec child 8 of 10: "child-syn-read 7"
-(syn-read) exec child 9 of 10: "child-syn-read 8"
-(syn-read) exec child 10 of 10: "child-syn-read 9"
-(syn-read) wait for child 1 of 10 returned 0 (expected 0)
-(syn-read) wait for child 2 of 10 returned 1 (expected 1)
-(syn-read) wait for child 3 of 10 returned 2 (expected 2)
-(syn-read) wait for child 4 of 10 returned 3 (expected 3)
-(syn-read) wait for child 5 of 10 returned 4 (expected 4)
-(syn-read) wait for child 6 of 10 returned 5 (expected 5)
-(syn-read) wait for child 7 of 10 returned 6 (expected 6)
-(syn-read) wait for child 8 of 10 returned 7 (expected 7)
-(syn-read) wait for child 9 of 10 returned 8 (expected 8)
-(syn-read) wait for child 10 of 10 returned 9 (expected 9)
-(syn-read) end
-EOF
-pass;
diff --git a/src/tests/filesys/base/syn-read.h b/src/tests/filesys/base/syn-read.h
deleted file mode 100644
index bff8082..0000000
--- a/src/tests/filesys/base/syn-read.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef TESTS_FILESYS_BASE_SYN_READ_H
-#define TESTS_FILESYS_BASE_SYN_READ_H
-
-#define BUF_SIZE 1024
-static const char file_name[] = "data";
-
-#endif /* tests/filesys/base/syn-read.h */
diff --git a/src/tests/filesys/base/syn-remove.c b/src/tests/filesys/base/syn-remove.c
deleted file mode 100644
index c9ba110..0000000
--- a/src/tests/filesys/base/syn-remove.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Verifies that a deleted file may still be written to and read
-   from. */
-
-#include <random.h>
-#include <string.h>
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-char buf1[1234];
-char buf2[1234];
-
-void
-test_main (void) 
-{
-  const char *file_name = "deleteme";
-  int fd;
-  
-  CHECK (create (file_name, sizeof buf1), "create \"%s\"", file_name);
-  CHECK ((fd = open (file_name)) > 1, "open \"%s\"", file_name);
-  CHECK (remove (file_name), "remove \"%s\"", file_name);
-  random_bytes (buf1, sizeof buf1);
-  CHECK (write (fd, buf1, sizeof buf1) > 0, "write \"%s\"", file_name);
-  msg ("seek \"%s\" to 0", file_name);
-  seek (fd, 0);
-  CHECK (read (fd, buf2, sizeof buf2) > 0, "read \"%s\"", file_name);
-  compare_bytes (buf2, buf1, sizeof buf1, 0, file_name);
-  msg ("close \"%s\"", file_name);
-  close (fd);
-}
diff --git a/src/tests/filesys/base/syn-remove.ck b/src/tests/filesys/base/syn-remove.ck
deleted file mode 100644
index 16ff11e..0000000
--- a/src/tests/filesys/base/syn-remove.ck
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(syn-remove) begin
-(syn-remove) create "deleteme"
-(syn-remove) open "deleteme"
-(syn-remove) remove "deleteme"
-(syn-remove) write "deleteme"
-(syn-remove) seek "deleteme" to 0
-(syn-remove) read "deleteme"
-(syn-remove) close "deleteme"
-(syn-remove) end
-EOF
-pass;
diff --git a/src/tests/filesys/base/syn-write.c b/src/tests/filesys/base/syn-write.c
deleted file mode 100644
index 1439862..0000000
--- a/src/tests/filesys/base/syn-write.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Spawns several child processes to write out different parts of
-   the contents of a file and waits for them to finish.  Then
-   reads back the file and verifies its contents. */
-
-#include <random.h>
-#include <stdio.h>
-#include <string.h>
-#include <syscall.h>
-#include "tests/filesys/base/syn-write.h"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-char buf1[BUF_SIZE];
-char buf2[BUF_SIZE];
-
-void
-test_main (void) 
-{
-  pid_t children[CHILD_CNT];
-  int fd;
-
-  CHECK (create (file_name, sizeof buf1), "create \"%s\"", file_name);
-
-  exec_children ("child-syn-wrt", children, CHILD_CNT);
-  wait_children (children, CHILD_CNT);
-
-  CHECK ((fd = open (file_name)) > 1, "open \"%s\"", file_name);
-  CHECK (read (fd, buf1, sizeof buf1) > 0, "read \"%s\"", file_name);
-  random_bytes (buf2, sizeof buf2);
-  compare_bytes (buf1, buf2, sizeof buf1, 0, file_name);
-}
diff --git a/src/tests/filesys/base/syn-write.ck b/src/tests/filesys/base/syn-write.ck
deleted file mode 100644
index 629a7a2..0000000
--- a/src/tests/filesys/base/syn-write.ck
+++ /dev/null
@@ -1,32 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(syn-write) begin
-(syn-write) create "stuff"
-(syn-write) exec child 1 of 10: "child-syn-wrt 0"
-(syn-write) exec child 2 of 10: "child-syn-wrt 1"
-(syn-write) exec child 3 of 10: "child-syn-wrt 2"
-(syn-write) exec child 4 of 10: "child-syn-wrt 3"
-(syn-write) exec child 5 of 10: "child-syn-wrt 4"
-(syn-write) exec child 6 of 10: "child-syn-wrt 5"
-(syn-write) exec child 7 of 10: "child-syn-wrt 6"
-(syn-write) exec child 8 of 10: "child-syn-wrt 7"
-(syn-write) exec child 9 of 10: "child-syn-wrt 8"
-(syn-write) exec child 10 of 10: "child-syn-wrt 9"
-(syn-write) wait for child 1 of 10 returned 0 (expected 0)
-(syn-write) wait for child 2 of 10 returned 1 (expected 1)
-(syn-write) wait for child 3 of 10 returned 2 (expected 2)
-(syn-write) wait for child 4 of 10 returned 3 (expected 3)
-(syn-write) wait for child 5 of 10 returned 4 (expected 4)
-(syn-write) wait for child 6 of 10 returned 5 (expected 5)
-(syn-write) wait for child 7 of 10 returned 6 (expected 6)
-(syn-write) wait for child 8 of 10 returned 7 (expected 7)
-(syn-write) wait for child 9 of 10 returned 8 (expected 8)
-(syn-write) wait for child 10 of 10 returned 9 (expected 9)
-(syn-write) open "stuff"
-(syn-write) read "stuff"
-(syn-write) end
-EOF
-pass;
diff --git a/src/tests/filesys/base/syn-write.h b/src/tests/filesys/base/syn-write.h
deleted file mode 100644
index 07a6d5a..0000000
--- a/src/tests/filesys/base/syn-write.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef TESTS_FILESYS_BASE_SYN_WRITE_H
-#define TESTS_FILESYS_BASE_SYN_WRITE_H
-
-#define CHILD_CNT 10
-#define CHUNK_SIZE 512
-#define BUF_SIZE (CHILD_CNT * CHUNK_SIZE)
-static const char file_name[] = "stuff";
-
-#endif /* tests/filesys/base/syn-write.h */
diff --git a/src/tests/filesys/create.inc b/src/tests/filesys/create.inc
deleted file mode 100644
index 4baf771..0000000
--- a/src/tests/filesys/create.inc
+++ /dev/null
@@ -1,15 +0,0 @@
-/* -*- c -*- */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-static char buf[TEST_SIZE];
-
-void
-test_main (void) 
-{
-  const char *file_name = "blargle";
-  CHECK (create (file_name, TEST_SIZE), "create \"%s\"", file_name);
-  check_file (file_name, buf, TEST_SIZE);
-}
diff --git a/src/tests/filesys/extended/Make.tests b/src/tests/filesys/extended/Make.tests
deleted file mode 100644
index 75a872b..0000000
--- a/src/tests/filesys/extended/Make.tests
+++ /dev/null
@@ -1,61 +0,0 @@
-# -*- makefile -*-
-
-raw_tests = dir-empty-name dir-mk-tree dir-mkdir dir-open		\
-dir-over-file dir-rm-cwd dir-rm-parent dir-rm-root dir-rm-tree		\
-dir-rmdir dir-under-file dir-vine grow-create grow-dir-lg		\
-grow-file-size grow-root-lg grow-root-sm grow-seq-lg grow-seq-sm	\
-grow-sparse grow-tell grow-two-files syn-rw
-
-tests/filesys/extended_TESTS = $(patsubst %,tests/filesys/extended/%,$(raw_tests))
-tests/filesys/extended_EXTRA_GRADES = $(patsubst %,tests/filesys/extended/%-persistence,$(raw_tests))
-
-tests/filesys/extended_PROGS = $(tests/filesys/extended_TESTS) \
-tests/filesys/extended/child-syn-rw tests/filesys/extended/tar
-
-$(foreach prog,$(tests/filesys/extended_PROGS),			\
-	$(eval $(prog)_SRC += $(prog).c tests/lib.c tests/filesys/seq-test.c))
-$(foreach prog,$(tests/filesys/extended_TESTS),		\
-	$(eval $(prog)_SRC += tests/main.c))
-$(foreach prog,$(tests/filesys/extended_TESTS),		\
-	$(eval $(prog)_PUTFILES += tests/filesys/extended/tar))
-# The version of GNU make 3.80 on vine barfs if this is split at
-# the last comma.
-$(foreach test,$(tests/filesys/extended_TESTS),$(eval $(test).output: FSDISK = tmp.dsk))
-
-tests/filesys/extended/dir-mk-tree_SRC += tests/filesys/extended/mk-tree.c
-tests/filesys/extended/dir-rm-tree_SRC += tests/filesys/extended/mk-tree.c
-
-tests/filesys/extended/syn-rw_PUTFILES += tests/filesys/extended/child-syn-rw
-
-tests/filesys/extended/dir-vine.output: TIMEOUT = 150
-
-GETTIMEOUT = 60
-
-GETCMD = pintos -v -k -T $(GETTIMEOUT)
-GETCMD += $(PINTOSOPTS)
-GETCMD += $(SIMULATOR)
-GETCMD += --fs-disk=$(FSDISK)
-GETCMD += -g fs.tar -a $(TEST).tar
-ifeq ($(filter vm, $(KERNEL_SUBDIRS)), vm)
-GETCMD += --swap-disk=4
-endif
-GETCMD += -- -q
-GETCMD += $(KERNELFLAGS)
-GETCMD += run 'tar fs.tar /'
-GETCMD += < /dev/null
-GETCMD += 2> $(TEST)-persistence.errors $(if $(VERBOSE),|tee,>) $(TEST)-persistence.output
-
-tests/filesys/extended/%.output: os.dsk
-	rm -f tmp.dsk
-	pintos-mkdisk tmp.dsk 2
-	$(TESTCMD)
-	$(GETCMD)
-	rm -f tmp.dsk
-$(foreach raw_test,$(raw_tests),$(eval tests/filesys/extended/$(raw_test)-persistence.output: tests/filesys/extended/$(raw_test).output))
-$(foreach raw_test,$(raw_tests),$(eval tests/filesys/extended/$(raw_test)-persistence.result: tests/filesys/extended/$(raw_test).result))
-
-TARS = $(addsuffix .tar,$(tests/filesys/extended_TESTS))
-
-clean::
-	rm -f $(TARS)
-	rm -f tests/filesys/extended/can-rmdir-cwd
diff --git a/src/tests/filesys/extended/Rubric.functionality b/src/tests/filesys/extended/Rubric.functionality
deleted file mode 100644
index 91ed6f0..0000000
--- a/src/tests/filesys/extended/Rubric.functionality
+++ /dev/null
@@ -1,26 +0,0 @@
-Functionality of extended file system:
-- Test directory support.
-1	dir-mkdir
-3	dir-mk-tree
-
-1	dir-rmdir
-3	dir-rm-tree
-
-5	dir-vine
-
-- Test file growth.
-1	grow-create
-1	grow-seq-sm
-3	grow-seq-lg
-3	grow-sparse
-3	grow-two-files
-1	grow-tell
-1	grow-file-size
-
-- Test directory growth.
-1	grow-dir-lg
-1	grow-root-sm
-1	grow-root-lg
-
-- Test writing from multiple processes.
-5	syn-rw
diff --git a/src/tests/filesys/extended/Rubric.persistence b/src/tests/filesys/extended/Rubric.persistence
deleted file mode 100644
index 405620a..0000000
--- a/src/tests/filesys/extended/Rubric.persistence
+++ /dev/null
@@ -1,24 +0,0 @@
-Persistence of file system:
-1	dir-empty-name-persistence
-1	dir-mk-tree-persistence
-1	dir-mkdir-persistence
-1	dir-open-persistence
-1	dir-over-file-persistence
-1	dir-rm-cwd-persistence
-1	dir-rm-parent-persistence
-1	dir-rm-root-persistence
-1	dir-rm-tree-persistence
-1	dir-rmdir-persistence
-1	dir-under-file-persistence
-1	dir-vine-persistence
-1	grow-create-persistence
-1	grow-dir-lg-persistence
-1	grow-file-size-persistence
-1	grow-root-lg-persistence
-1	grow-root-sm-persistence
-1	grow-seq-lg-persistence
-1	grow-seq-sm-persistence
-1	grow-sparse-persistence
-1	grow-tell-persistence
-1	grow-two-files-persistence
-1	syn-rw-persistence
diff --git a/src/tests/filesys/extended/Rubric.robustness b/src/tests/filesys/extended/Rubric.robustness
deleted file mode 100644
index fb9f32f..0000000
--- a/src/tests/filesys/extended/Rubric.robustness
+++ /dev/null
@@ -1,9 +0,0 @@
-Robustness of file system:
-1	dir-empty-name
-1	dir-open
-1	dir-over-file
-1	dir-under-file
-
-3	dir-rm-cwd
-2	dir-rm-parent
-1	dir-rm-root
diff --git a/src/tests/filesys/extended/child-syn-rw.c b/src/tests/filesys/extended/child-syn-rw.c
deleted file mode 100644
index 0e2217d..0000000
--- a/src/tests/filesys/extended/child-syn-rw.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Child process for syn-rw.
-   Reads from a file created by our parent process, which is
-   growing it.  We loop until we've read the whole file
-   successfully.  Many iterations through the loop will return 0
-   bytes, because the file has not grown in the meantime.  That
-   is, we are "busy waiting" for the file to grow.
-   (This test could be improved by adding a "yield" system call
-   and calling yield whenever we receive a 0-byte read.) */
-
-#include <random.h>
-#include <stdlib.h>
-#include <syscall.h>
-#include "tests/filesys/extended/syn-rw.h"
-#include "tests/lib.h"
-
-const char *test_name = "child-syn-rw";
-
-static char buf1[BUF_SIZE];
-static char buf2[BUF_SIZE];
-
-int
-main (int argc, const char *argv[]) 
-{
-  int child_idx;
-  int fd;
-  size_t ofs;
-
-  quiet = true;
-  
-  CHECK (argc == 2, "argc must be 2, actually %d", argc);
-  child_idx = atoi (argv[1]);
-
-  random_init (0);
-  random_bytes (buf1, sizeof buf1);
-
-  CHECK ((fd = open (file_name)) > 1, "open \"%s\"", file_name);
-  ofs = 0;
-  while (ofs < sizeof buf2)
-    {
-      int bytes_read = read (fd, buf2 + ofs, sizeof buf2 - ofs);
-      CHECK (bytes_read >= -1 && bytes_read <= (int) (sizeof buf2 - ofs),
-             "%zu-byte read on \"%s\" returned invalid value of %d",
-             sizeof buf2 - ofs, file_name, bytes_read);
-      if (bytes_read > 0) 
-        {
-          compare_bytes (buf2 + ofs, buf1 + ofs, bytes_read, ofs, file_name);
-          ofs += bytes_read;
-        }
-    }
-  close (fd);
-
-  return child_idx;
-}
diff --git a/src/tests/filesys/extended/dir-empty-name-persistence.ck b/src/tests/filesys/extended/dir-empty-name-persistence.ck
deleted file mode 100644
index 562c451..0000000
--- a/src/tests/filesys/extended/dir-empty-name-persistence.ck
+++ /dev/null
@@ -1,6 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_archive ({});
-pass;
diff --git a/src/tests/filesys/extended/dir-empty-name.c b/src/tests/filesys/extended/dir-empty-name.c
deleted file mode 100644
index c4859d2..0000000
--- a/src/tests/filesys/extended/dir-empty-name.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Tries to create a directory named as the empty string,
-   which must return failure. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  CHECK (!mkdir (""), "mkdir \"\" (must return false)");
-}
diff --git a/src/tests/filesys/extended/dir-empty-name.ck b/src/tests/filesys/extended/dir-empty-name.ck
deleted file mode 100644
index d6c5621..0000000
--- a/src/tests/filesys/extended/dir-empty-name.ck
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(dir-empty-name) begin
-(dir-empty-name) mkdir "" (must return false)
-(dir-empty-name) end
-EOF
-pass;
diff --git a/src/tests/filesys/extended/dir-mk-tree-persistence.ck b/src/tests/filesys/extended/dir-mk-tree-persistence.ck
deleted file mode 100644
index fb16afd..0000000
--- a/src/tests/filesys/extended/dir-mk-tree-persistence.ck
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-my ($tree);
-for my $a (0...3) {
-    for my $b (0...2) {
-	for my $c (0...2) {
-	    for my $d (0...3) {
-		$tree->{$a}{$b}{$c}{$d} = [''];
-	    }
-	}
-    }
-}
-check_archive ($tree);
-pass;
diff --git a/src/tests/filesys/extended/dir-mk-tree.c b/src/tests/filesys/extended/dir-mk-tree.c
deleted file mode 100644
index a714ff3..0000000
--- a/src/tests/filesys/extended/dir-mk-tree.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Creates directories /0/0/0 through /3/2/2 and creates files in
-   the leaf directories. */
-
-#include "tests/filesys/extended/mk-tree.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  make_tree (4, 3, 3, 4);
-}
-
diff --git a/src/tests/filesys/extended/dir-mk-tree.ck b/src/tests/filesys/extended/dir-mk-tree.ck
deleted file mode 100644
index a8507e2..0000000
--- a/src/tests/filesys/extended/dir-mk-tree.ck
+++ /dev/null
@@ -1,12 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(dir-mk-tree) begin
-(dir-mk-tree) creating /0/0/0/0 through /3/2/2/3...
-(dir-mk-tree) open "/0/2/0/3"
-(dir-mk-tree) close "/0/2/0/3"
-(dir-mk-tree) end
-EOF
-pass;
diff --git a/src/tests/filesys/extended/dir-mkdir-persistence.ck b/src/tests/filesys/extended/dir-mkdir-persistence.ck
deleted file mode 100644
index 7682900..0000000
--- a/src/tests/filesys/extended/dir-mkdir-persistence.ck
+++ /dev/null
@@ -1,6 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_archive ({'a' => {'b' => ["\0" x 512]}});
-pass;
diff --git a/src/tests/filesys/extended/dir-mkdir.c b/src/tests/filesys/extended/dir-mkdir.c
deleted file mode 100644
index 994f41c..0000000
--- a/src/tests/filesys/extended/dir-mkdir.c
+++ /dev/null
@@ -1,15 +0,0 @@
-/* Tests mkdir(). */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  CHECK (mkdir ("a"), "mkdir \"a\"");
-  CHECK (create ("a/b", 512), "create \"a/b\"");
-  CHECK (chdir ("a"), "chdir \"a\"");
-  CHECK (open ("b") > 1, "open \"b\"");
-}
-
diff --git a/src/tests/filesys/extended/dir-mkdir.ck b/src/tests/filesys/extended/dir-mkdir.ck
deleted file mode 100644
index 4644f80..0000000
--- a/src/tests/filesys/extended/dir-mkdir.ck
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(dir-mkdir) begin
-(dir-mkdir) mkdir "a"
-(dir-mkdir) create "a/b"
-(dir-mkdir) chdir "a"
-(dir-mkdir) open "b"
-(dir-mkdir) end
-EOF
-pass;
diff --git a/src/tests/filesys/extended/dir-open-persistence.ck b/src/tests/filesys/extended/dir-open-persistence.ck
deleted file mode 100644
index 26ff2f1..0000000
--- a/src/tests/filesys/extended/dir-open-persistence.ck
+++ /dev/null
@@ -1,6 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_archive ({"xyzzy" => {}});
-pass;
diff --git a/src/tests/filesys/extended/dir-open.c b/src/tests/filesys/extended/dir-open.c
deleted file mode 100644
index 29d18b8..0000000
--- a/src/tests/filesys/extended/dir-open.c
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Opens a directory, then tries to write to it, which must
-   fail. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  int fd;
-  int retval;
-  
-  CHECK (mkdir ("xyzzy"), "mkdir \"xyzzy\"");
-  CHECK ((fd = open ("xyzzy")) > 1, "open \"xyzzy\"");
-
-  msg ("write \"xyzzy\"");
-  retval = write (fd, "foobar", 6);
-  CHECK (retval == -1,
-         "write \"xyzzy\" (must return -1, actually %d)", retval);
-}
diff --git a/src/tests/filesys/extended/dir-open.ck b/src/tests/filesys/extended/dir-open.ck
deleted file mode 100644
index fccc563..0000000
--- a/src/tests/filesys/extended/dir-open.ck
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF', <<'EOF']);
-(dir-open) begin
-(dir-open) mkdir "xyzzy"
-(dir-open) open "xyzzy"
-(dir-open) write "xyzzy"
-(dir-open) write "xyzzy" (must return -1, actually -1)
-(dir-open) end
-dir-open: exit(0)
-EOF
-(dir-open) begin
-(dir-open) mkdir "xyzzy"
-(dir-open) open "xyzzy"
-(dir-open) write "xyzzy"
-dir-open: exit(-1)
-EOF
-pass;
diff --git a/src/tests/filesys/extended/dir-over-file-persistence.ck b/src/tests/filesys/extended/dir-over-file-persistence.ck
deleted file mode 100644
index 56b4ed2..0000000
--- a/src/tests/filesys/extended/dir-over-file-persistence.ck
+++ /dev/null
@@ -1,6 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_archive ({"abc" => {}});
-pass;
diff --git a/src/tests/filesys/extended/dir-over-file.c b/src/tests/filesys/extended/dir-over-file.c
deleted file mode 100644
index cdd2c62..0000000
--- a/src/tests/filesys/extended/dir-over-file.c
+++ /dev/null
@@ -1,13 +0,0 @@
-/* Tries to create a file with the same name as an existing
-   directory, which must return failure. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  CHECK (mkdir ("abc"), "mkdir \"abc\"");
-  CHECK (!create ("abc", 0), "create \"abc\" (must return false)");
-}
diff --git a/src/tests/filesys/extended/dir-over-file.ck b/src/tests/filesys/extended/dir-over-file.ck
deleted file mode 100644
index aae1c1e..0000000
--- a/src/tests/filesys/extended/dir-over-file.ck
+++ /dev/null
@@ -1,11 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(dir-over-file) begin
-(dir-over-file) mkdir "abc"
-(dir-over-file) create "abc" (must return false)
-(dir-over-file) end
-EOF
-pass;
diff --git a/src/tests/filesys/extended/dir-rm-cwd-persistence.ck b/src/tests/filesys/extended/dir-rm-cwd-persistence.ck
deleted file mode 100644
index 7533570..0000000
--- a/src/tests/filesys/extended/dir-rm-cwd-persistence.ck
+++ /dev/null
@@ -1,8 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-my ($cwd_removable) = read_text_file ("tests/filesys/extended/can-rmdir-cwd");
-$cwd_removable eq 'YES' || $cwd_removable eq 'NO' or die;
-check_archive ($cwd_removable eq 'YES' ? {} : {"a" => {}});
-pass;
diff --git a/src/tests/filesys/extended/dir-rm-cwd.c b/src/tests/filesys/extended/dir-rm-cwd.c
deleted file mode 100644
index 78e13de..0000000
--- a/src/tests/filesys/extended/dir-rm-cwd.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Tries to remove the current directory, which may succeed or
-   fail.  The requirements in each case are different; refer to
-   the assignment for details. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-static int
-wrap_open (const char *name) 
-{
-  static int fds[8], fd_cnt;
-  int fd, i;
-
-  CHECK ((fd = open (name)) > 1, "open \"%s\"", name);
-  for (i = 0; i < fd_cnt; i++)
-    if (fds[i] == fd)
-      fail ("fd returned is not unique");
-  fds[fd_cnt++] = fd;
-  return fd;
-}
-
-void
-test_main (void) 
-{
-  int root_fd, a_fd0;
-  char name[READDIR_MAX_LEN + 1];
-
-  root_fd = wrap_open ("/");
-  CHECK (mkdir ("a"), "mkdir \"a\"");
-
-  a_fd0 = wrap_open ("/a");
-  CHECK (!readdir (a_fd0, name), "verify \"/a\" is empty");
-  CHECK (inumber (root_fd) != inumber (a_fd0),
-         "\"/\" and \"/a\" must have different inumbers");
-
-  CHECK (chdir ("a"), "chdir \"a\"");
-
-  msg ("try to remove \"/a\"");
-  if (remove ("/a"))
-    {
-      msg ("remove successful");
-
-      CHECK (open ("/a") == -1, "open \"/a\" (must fail)");
-      CHECK (open (".") == -1, "open \".\" (must fail)");
-      CHECK (open ("..") == -1, "open \"..\" (must fail)");
-      CHECK (!create ("x", 512), "create \"x\" (must fail)");
-    }
-  else
-    {
-      int a_fd1, a_fd2, a_fd3;
-
-      msg ("remove failed");
-
-      CHECK (!remove ("../a"), "try to remove \"../a\" (must fail)");
-      CHECK (!remove (".././a"), "try to remove \".././a\" (must fail)");
-      CHECK (!remove ("/./a"), "try to remove \"/./a\" (must fail)");
-
-      a_fd1 = wrap_open ("/a");
-      a_fd2 = wrap_open (".");
-      CHECK (inumber (a_fd1) == inumber (a_fd2),
-             "\"/a\" and \".\" must have same inumber");
-      CHECK (inumber (root_fd) != inumber (a_fd1),
-             "\"/\" and \"/a\" must have different inumbers");
-
-      CHECK (chdir ("/a"), "chdir \"/a\"");
-      a_fd3 = wrap_open (".");
-      CHECK (inumber (a_fd3) == inumber (a_fd1),
-             "\".\" must have same inumber as before");
-
-      CHECK (chdir ("/"), "chdir \"/\"");
-      CHECK (!remove ("a"), "try to remove \"a\" (must fail: still open)");
-    }
-  CHECK (!readdir (a_fd0, name), "verify \"/a\" is empty");
-}
diff --git a/src/tests/filesys/extended/dir-rm-cwd.ck b/src/tests/filesys/extended/dir-rm-cwd.ck
deleted file mode 100644
index 6fa4739..0000000
--- a/src/tests/filesys/extended/dir-rm-cwd.ck
+++ /dev/null
@@ -1,51 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-my ($cwd_removable) = check_expected (IGNORE_EXIT_CODES => 1,
-				      {NO => <<'EOF', YES => <<'EOF'});
-(dir-rm-cwd) begin
-(dir-rm-cwd) open "/"
-(dir-rm-cwd) mkdir "a"
-(dir-rm-cwd) open "/a"
-(dir-rm-cwd) verify "/a" is empty
-(dir-rm-cwd) "/" and "/a" must have different inumbers
-(dir-rm-cwd) chdir "a"
-(dir-rm-cwd) try to remove "/a"
-(dir-rm-cwd) remove failed
-(dir-rm-cwd) try to remove "../a" (must fail)
-(dir-rm-cwd) try to remove ".././a" (must fail)
-(dir-rm-cwd) try to remove "/./a" (must fail)
-(dir-rm-cwd) open "/a"
-(dir-rm-cwd) open "."
-(dir-rm-cwd) "/a" and "." must have same inumber
-(dir-rm-cwd) "/" and "/a" must have different inumbers
-(dir-rm-cwd) chdir "/a"
-(dir-rm-cwd) open "."
-(dir-rm-cwd) "." must have same inumber as before
-(dir-rm-cwd) chdir "/"
-(dir-rm-cwd) try to remove "a" (must fail: still open)
-(dir-rm-cwd) verify "/a" is empty
-(dir-rm-cwd) end
-EOF
-(dir-rm-cwd) begin
-(dir-rm-cwd) open "/"
-(dir-rm-cwd) mkdir "a"
-(dir-rm-cwd) open "/a"
-(dir-rm-cwd) verify "/a" is empty
-(dir-rm-cwd) "/" and "/a" must have different inumbers
-(dir-rm-cwd) chdir "a"
-(dir-rm-cwd) try to remove "/a"
-(dir-rm-cwd) remove successful
-(dir-rm-cwd) open "/a" (must fail)
-(dir-rm-cwd) open "." (must fail)
-(dir-rm-cwd) open ".." (must fail)
-(dir-rm-cwd) create "x" (must fail)
-(dir-rm-cwd) verify "/a" is empty
-(dir-rm-cwd) end
-EOF
-open (CAN_RMDIR_CWD, ">tests/filesys/extended/can-rmdir-cwd")
-  or die "tests/filesys/extended/can-rmdir-cwd: create: $!\n";
-print CAN_RMDIR_CWD "$cwd_removable";
-close (CAN_RMDIR_CWD);
-pass;
diff --git a/src/tests/filesys/extended/dir-rm-parent-persistence.ck b/src/tests/filesys/extended/dir-rm-parent-persistence.ck
deleted file mode 100644
index f30b04a..0000000
--- a/src/tests/filesys/extended/dir-rm-parent-persistence.ck
+++ /dev/null
@@ -1,6 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_archive ({"a" => {"b" => {}}});
-pass;
diff --git a/src/tests/filesys/extended/dir-rm-parent.c b/src/tests/filesys/extended/dir-rm-parent.c
deleted file mode 100644
index eb43f5b..0000000
--- a/src/tests/filesys/extended/dir-rm-parent.c
+++ /dev/null
@@ -1,16 +0,0 @@
-/* Tries to remove a parent of the current directory.  This must
-   fail, because that directory is non-empty. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  CHECK (mkdir ("a"), "mkdir \"a\"");
-  CHECK (chdir ("a"), "chdir \"a\"");
-  CHECK (mkdir ("b"), "mkdir \"b\"");
-  CHECK (chdir ("b"), "chdir \"b\"");
-  CHECK (!remove ("/a"), "remove \"/a\" (must fail)");
-}
diff --git a/src/tests/filesys/extended/dir-rm-parent.ck b/src/tests/filesys/extended/dir-rm-parent.ck
deleted file mode 100644
index 9fea8f2..0000000
--- a/src/tests/filesys/extended/dir-rm-parent.ck
+++ /dev/null
@@ -1,14 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(dir-rm-parent) begin
-(dir-rm-parent) mkdir "a"
-(dir-rm-parent) chdir "a"
-(dir-rm-parent) mkdir "b"
-(dir-rm-parent) chdir "b"
-(dir-rm-parent) remove "/a" (must fail)
-(dir-rm-parent) end
-EOF
-pass;
diff --git a/src/tests/filesys/extended/dir-rm-root-persistence.ck b/src/tests/filesys/extended/dir-rm-root-persistence.ck
deleted file mode 100644
index 6315107..0000000
--- a/src/tests/filesys/extended/dir-rm-root-persistence.ck
+++ /dev/null
@@ -1,6 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_archive ({"a" => ["\0" x 243]});
-pass;
diff --git a/src/tests/filesys/extended/dir-rm-root.c b/src/tests/filesys/extended/dir-rm-root.c
deleted file mode 100644
index c47f1eb..0000000
--- a/src/tests/filesys/extended/dir-rm-root.c
+++ /dev/null
@@ -1,13 +0,0 @@
-/* Try to remove the root directory.
-   This must fail. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  CHECK (!remove ("/"), "remove \"/\" (must fail)");
-  CHECK (create ("/a", 243), "create \"/a\"");
-}
diff --git a/src/tests/filesys/extended/dir-rm-root.ck b/src/tests/filesys/extended/dir-rm-root.ck
deleted file mode 100644
index 8a69ff3..0000000
--- a/src/tests/filesys/extended/dir-rm-root.ck
+++ /dev/null
@@ -1,11 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(dir-rm-root) begin
-(dir-rm-root) remove "/" (must fail)
-(dir-rm-root) create "/a"
-(dir-rm-root) end
-EOF
-pass;
diff --git a/src/tests/filesys/extended/dir-rm-tree-persistence.ck b/src/tests/filesys/extended/dir-rm-tree-persistence.ck
deleted file mode 100644
index 562c451..0000000
--- a/src/tests/filesys/extended/dir-rm-tree-persistence.ck
+++ /dev/null
@@ -1,6 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_archive ({});
-pass;
diff --git a/src/tests/filesys/extended/dir-rm-tree.c b/src/tests/filesys/extended/dir-rm-tree.c
deleted file mode 100644
index bab41a6..0000000
--- a/src/tests/filesys/extended/dir-rm-tree.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/* Creates directories /0/0/0 through /3/2/2 and files in the
-   leaf directories, then removes them. */
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <syscall.h>
-#include "tests/filesys/extended/mk-tree.h"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-static void remove_tree (int at, int bt, int ct, int dt);
-
-void
-test_main (void) 
-{
-  make_tree (4, 3, 3, 4);
-  remove_tree (4, 3, 3, 4);
-}
-
-static void do_remove (const char *format, ...) PRINTF_FORMAT (1, 2);
-
-static void
-remove_tree (int at, int bt, int ct, int dt) 
-{
-  char try[128];
-  int a, b, c, d;
-
-  msg ("removing /0/0/0/0 through /%d/%d/%d/%d...",
-       at - 1, bt - 1, ct - 1, dt - 1);
-  quiet = true;
-  for (a = 0; a < at; a++) 
-    {
-      for (b = 0; b < bt; b++) 
-        {
-          for (c = 0; c < ct; c++) 
-            {
-              for (d = 0; d < dt; d++)
-                do_remove ("/%d/%d/%d/%d", a, b, c, d);
-              do_remove ("/%d/%d/%d", a, b, c);
-            }
-          do_remove ("/%d/%d", a, b);
-        }
-      do_remove ("/%d", a);
-    }
-  quiet = false;
-
-  snprintf (try, sizeof (try), "/%d/%d/%d/%d", at - 1, 0, ct - 1, 0);
-  CHECK (open (try) == -1, "open \"%s\" (must return -1)", try);
-}
-
-static void
-do_remove (const char *format, ...) 
-{
-  char name[128];
-  va_list args;
-
-  va_start (args, format);
-  vsnprintf (name, sizeof name, format, args);
-  va_end (args);
-
-  CHECK (remove (name), "remove \"%s\"", name);
-}
diff --git a/src/tests/filesys/extended/dir-rm-tree.ck b/src/tests/filesys/extended/dir-rm-tree.ck
deleted file mode 100644
index 587b493..0000000
--- a/src/tests/filesys/extended/dir-rm-tree.ck
+++ /dev/null
@@ -1,14 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(dir-rm-tree) begin
-(dir-rm-tree) creating /0/0/0/0 through /3/2/2/3...
-(dir-rm-tree) open "/0/2/0/3"
-(dir-rm-tree) close "/0/2/0/3"
-(dir-rm-tree) removing /0/0/0/0 through /3/2/2/3...
-(dir-rm-tree) open "/3/0/2/0" (must return -1)
-(dir-rm-tree) end
-EOF
-pass;
diff --git a/src/tests/filesys/extended/dir-rmdir-persistence.ck b/src/tests/filesys/extended/dir-rmdir-persistence.ck
deleted file mode 100644
index 562c451..0000000
--- a/src/tests/filesys/extended/dir-rmdir-persistence.ck
+++ /dev/null
@@ -1,6 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_archive ({});
-pass;
diff --git a/src/tests/filesys/extended/dir-rmdir.c b/src/tests/filesys/extended/dir-rmdir.c
deleted file mode 100644
index b3cbc6f..0000000
--- a/src/tests/filesys/extended/dir-rmdir.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/* Creates and removes a directory, then makes sure that it's
-   really gone. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  CHECK (mkdir ("a"), "mkdir \"a\"");
-  CHECK (remove ("a"), "rmdir \"a\"");
-  CHECK (!chdir ("a"), "chdir \"a\" (must return false)");
-}
diff --git a/src/tests/filesys/extended/dir-rmdir.ck b/src/tests/filesys/extended/dir-rmdir.ck
deleted file mode 100644
index e0d8922..0000000
--- a/src/tests/filesys/extended/dir-rmdir.ck
+++ /dev/null
@@ -1,12 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(dir-rmdir) begin
-(dir-rmdir) mkdir "a"
-(dir-rmdir) rmdir "a"
-(dir-rmdir) chdir "a" (must return false)
-(dir-rmdir) end
-EOF
-pass;
diff --git a/src/tests/filesys/extended/dir-under-file-persistence.ck b/src/tests/filesys/extended/dir-under-file-persistence.ck
deleted file mode 100644
index 67ca528..0000000
--- a/src/tests/filesys/extended/dir-under-file-persistence.ck
+++ /dev/null
@@ -1,6 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_archive ({"abc" => ['']});
-pass;
diff --git a/src/tests/filesys/extended/dir-under-file.c b/src/tests/filesys/extended/dir-under-file.c
deleted file mode 100644
index 973a8b1..0000000
--- a/src/tests/filesys/extended/dir-under-file.c
+++ /dev/null
@@ -1,13 +0,0 @@
-/* Tries to create a directory with the same name as an existing
-   file, which must return failure. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  CHECK (create ("abc", 0), "create \"abc\"");
-  CHECK (!mkdir ("abc"), "mkdir \"abc\" (must return false)");
-}
diff --git a/src/tests/filesys/extended/dir-under-file.ck b/src/tests/filesys/extended/dir-under-file.ck
deleted file mode 100644
index cce23b4..0000000
--- a/src/tests/filesys/extended/dir-under-file.ck
+++ /dev/null
@@ -1,11 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(dir-under-file) begin
-(dir-under-file) create "abc"
-(dir-under-file) mkdir "abc" (must return false)
-(dir-under-file) end
-EOF
-pass;
diff --git a/src/tests/filesys/extended/dir-vine-persistence.ck b/src/tests/filesys/extended/dir-vine-persistence.ck
deleted file mode 100644
index 698ef01..0000000
--- a/src/tests/filesys/extended/dir-vine-persistence.ck
+++ /dev/null
@@ -1,37 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-# The archive should look like this:
-#
-# 40642 dir-vine
-# 42479 tar
-#     0 start
-#    11 start/file0
-#     0 start/dir0
-#    11 start/dir0/file1
-#     0 start/dir0/dir1
-#    11 start/dir0/dir1/file2
-#     0 start/dir0/dir1/dir2
-#    11 start/dir0/dir1/dir2/file3
-#     0 start/dir0/dir1/dir2/dir3
-#    11 start/dir0/dir1/dir2/dir3/file4
-#     0 start/dir0/dir1/dir2/dir3/dir4
-#    11 start/dir0/dir1/dir2/dir3/dir4/file5
-#     0 start/dir0/dir1/dir2/dir3/dir4/dir5
-#    11 start/dir0/dir1/dir2/dir3/dir4/dir5/file6
-#     0 start/dir0/dir1/dir2/dir3/dir4/dir5/dir6
-#    11 start/dir0/dir1/dir2/dir3/dir4/dir5/dir6/file7
-#     0 start/dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7
-#    11 start/dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/file8
-#     0 start/dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8
-#    11 start/dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/file9
-#     0 start/dir0/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9
-my ($dir) = {};
-my ($root) = {"start" => $dir};
-for (my ($i) = 0; $i < 10; $i++) {
-    $dir->{"file$i"} = ["contents $i\n"];
-    $dir = $dir->{"dir$i"} = {};
-}
-check_archive ($root);
-pass;
diff --git a/src/tests/filesys/extended/dir-vine.c b/src/tests/filesys/extended/dir-vine.c
deleted file mode 100644
index 8a31c38..0000000
--- a/src/tests/filesys/extended/dir-vine.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/* Create a very deep "vine" of directories: /dir0/dir1/dir2/...
-   and an ordinary file in each of them, until we fill up the
-   disk.
-   
-   Then delete most of them, for two reasons.  First, "tar"
-   limits file names to 100 characters (which could be extended
-   to 256 without much trouble).  Second, a full disk has no room
-   for the tar archive. */
-
-#include <string.h>
-#include <stdio.h>
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  int i;
-
-  msg ("creating many levels of files and directories...");
-  quiet = true;
-  CHECK (mkdir ("start"), "mkdir \"start\"");
-  CHECK (chdir ("start"), "chdir \"start\"");
-  for (i = 0; ; i++) 
-    {
-      char name[3][READDIR_MAX_LEN + 1];
-      char file_name[16], dir_name[16];
-      char contents[128];
-      int fd;
-
-      /* Create file. */
-      snprintf (file_name, sizeof file_name, "file%d", i);
-      if (!create (file_name, 0))
-        break;
-      CHECK ((fd = open (file_name)) > 1, "open \"%s\"", file_name);
-      snprintf (contents, sizeof contents, "contents %d\n", i);
-      if (write (fd, contents, strlen (contents)) != (int) strlen (contents)) 
-        {
-          CHECK (remove (file_name), "remove \"%s\"", file_name);
-          close (fd);
-          break;
-        }
-      close (fd);
-      
-      /* Create directory. */
-      snprintf (dir_name, sizeof dir_name, "dir%d", i);
-      if (!mkdir (dir_name)) 
-        {
-          CHECK (remove (file_name), "remove \"%s\"", file_name);
-          break; 
-        }
-
-      /* Check for file and directory. */
-      CHECK ((fd = open (".")) > 1, "open \".\"");
-      CHECK (readdir (fd, name[0]), "readdir \".\"");
-      CHECK (readdir (fd, name[1]), "readdir \".\"");
-      CHECK (!readdir (fd, name[2]), "readdir \".\" (should fail)");
-      CHECK ((!strcmp (name[0], dir_name) && !strcmp (name[1], file_name))
-             || (!strcmp (name[1], dir_name) && !strcmp (name[0], file_name)),
-             "names should be \"%s\" and \"%s\", "
-             "actually \"%s\" and \"%s\"",
-             file_name, dir_name, name[0], name[1]);
-      close (fd);
-
-      /* Descend into directory. */
-      CHECK (chdir (dir_name), "chdir \"%s\"", dir_name);
-    }
-  CHECK (i > 200, "created files and directories only to level %d", i);
-  quiet = false;
-
-  msg ("removing all but top 10 levels of files and directories...");
-  quiet = true;
-  while (i-- > 10) 
-    {
-      char file_name[16], dir_name[16];
-
-      snprintf (file_name, sizeof file_name, "file%d", i);
-      snprintf (dir_name, sizeof dir_name, "dir%d", i);
-      CHECK (chdir (".."), "chdir \"..\"");
-      CHECK (remove (dir_name), "remove \"%s\"", dir_name);
-      CHECK (remove (file_name), "remove \"%s\"", file_name);
-    }
-  quiet = false;
-}
diff --git a/src/tests/filesys/extended/dir-vine.ck b/src/tests/filesys/extended/dir-vine.ck
deleted file mode 100644
index db452b0..0000000
--- a/src/tests/filesys/extended/dir-vine.ck
+++ /dev/null
@@ -1,11 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(dir-vine) begin
-(dir-vine) creating many levels of files and directories...
-(dir-vine) removing all but top 10 levels of files and directories...
-(dir-vine) end
-EOF
-pass;
diff --git a/src/tests/filesys/extended/grow-create-persistence.ck b/src/tests/filesys/extended/grow-create-persistence.ck
deleted file mode 100644
index bbcb24f..0000000
--- a/src/tests/filesys/extended/grow-create-persistence.ck
+++ /dev/null
@@ -1,6 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_archive ({"blargle" => ['']});
-pass;
diff --git a/src/tests/filesys/extended/grow-create.c b/src/tests/filesys/extended/grow-create.c
deleted file mode 100644
index 9ccc4ea..0000000
--- a/src/tests/filesys/extended/grow-create.c
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Create a file of size 0. */
-
-#define TEST_SIZE 0
-#include "tests/filesys/create.inc"
diff --git a/src/tests/filesys/extended/grow-create.ck b/src/tests/filesys/extended/grow-create.ck
deleted file mode 100644
index b2e69d1..0000000
--- a/src/tests/filesys/extended/grow-create.ck
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(grow-create) begin
-(grow-create) create "blargle"
-(grow-create) open "blargle" for verification
-(grow-create) verified contents of "blargle"
-(grow-create) close "blargle"
-(grow-create) end
-EOF
-pass;
diff --git a/src/tests/filesys/extended/grow-dir-lg-persistence.ck b/src/tests/filesys/extended/grow-dir-lg-persistence.ck
deleted file mode 100644
index 989a322..0000000
--- a/src/tests/filesys/extended/grow-dir-lg-persistence.ck
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-use tests::random;
-my ($fs);
-$fs->{'x'}{"file$_"} = [random_bytes (512)] foreach 0...49;
-check_archive ($fs);
-pass;
diff --git a/src/tests/filesys/extended/grow-dir-lg.c b/src/tests/filesys/extended/grow-dir-lg.c
deleted file mode 100644
index 20a194b..0000000
--- a/src/tests/filesys/extended/grow-dir-lg.c
+++ /dev/null
@@ -1,6 +0,0 @@
-/* Creates a directory,
-   then creates 50 files in that directory. */
-
-#define FILE_CNT 50
-#define DIRECTORY "/x"
-#include "tests/filesys/extended/grow-dir.inc"
diff --git a/src/tests/filesys/extended/grow-dir-lg.ck b/src/tests/filesys/extended/grow-dir-lg.ck
deleted file mode 100644
index ec58bd3..0000000
--- a/src/tests/filesys/extended/grow-dir-lg.ck
+++ /dev/null
@@ -1,61 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-use tests::random;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(grow-dir-lg) begin
-(grow-dir-lg) mkdir /x
-(grow-dir-lg) creating and checking "/x/file0"
-(grow-dir-lg) creating and checking "/x/file1"
-(grow-dir-lg) creating and checking "/x/file2"
-(grow-dir-lg) creating and checking "/x/file3"
-(grow-dir-lg) creating and checking "/x/file4"
-(grow-dir-lg) creating and checking "/x/file5"
-(grow-dir-lg) creating and checking "/x/file6"
-(grow-dir-lg) creating and checking "/x/file7"
-(grow-dir-lg) creating and checking "/x/file8"
-(grow-dir-lg) creating and checking "/x/file9"
-(grow-dir-lg) creating and checking "/x/file10"
-(grow-dir-lg) creating and checking "/x/file11"
-(grow-dir-lg) creating and checking "/x/file12"
-(grow-dir-lg) creating and checking "/x/file13"
-(grow-dir-lg) creating and checking "/x/file14"
-(grow-dir-lg) creating and checking "/x/file15"
-(grow-dir-lg) creating and checking "/x/file16"
-(grow-dir-lg) creating and checking "/x/file17"
-(grow-dir-lg) creating and checking "/x/file18"
-(grow-dir-lg) creating and checking "/x/file19"
-(grow-dir-lg) creating and checking "/x/file20"
-(grow-dir-lg) creating and checking "/x/file21"
-(grow-dir-lg) creating and checking "/x/file22"
-(grow-dir-lg) creating and checking "/x/file23"
-(grow-dir-lg) creating and checking "/x/file24"
-(grow-dir-lg) creating and checking "/x/file25"
-(grow-dir-lg) creating and checking "/x/file26"
-(grow-dir-lg) creating and checking "/x/file27"
-(grow-dir-lg) creating and checking "/x/file28"
-(grow-dir-lg) creating and checking "/x/file29"
-(grow-dir-lg) creating and checking "/x/file30"
-(grow-dir-lg) creating and checking "/x/file31"
-(grow-dir-lg) creating and checking "/x/file32"
-(grow-dir-lg) creating and checking "/x/file33"
-(grow-dir-lg) creating and checking "/x/file34"
-(grow-dir-lg) creating and checking "/x/file35"
-(grow-dir-lg) creating and checking "/x/file36"
-(grow-dir-lg) creating and checking "/x/file37"
-(grow-dir-lg) creating and checking "/x/file38"
-(grow-dir-lg) creating and checking "/x/file39"
-(grow-dir-lg) creating and checking "/x/file40"
-(grow-dir-lg) creating and checking "/x/file41"
-(grow-dir-lg) creating and checking "/x/file42"
-(grow-dir-lg) creating and checking "/x/file43"
-(grow-dir-lg) creating and checking "/x/file44"
-(grow-dir-lg) creating and checking "/x/file45"
-(grow-dir-lg) creating and checking "/x/file46"
-(grow-dir-lg) creating and checking "/x/file47"
-(grow-dir-lg) creating and checking "/x/file48"
-(grow-dir-lg) creating and checking "/x/file49"
-(grow-dir-lg) end
-EOF
-pass;
diff --git a/src/tests/filesys/extended/grow-dir.inc b/src/tests/filesys/extended/grow-dir.inc
deleted file mode 100644
index bee0ba0..0000000
--- a/src/tests/filesys/extended/grow-dir.inc
+++ /dev/null
@@ -1,41 +0,0 @@
-/* -*- c -*- */
-
-#include <syscall.h>
-#include <stdio.h>
-#include "tests/filesys/seq-test.h"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-static char buf[512];
-
-static size_t
-return_block_size (void) 
-{
-  return sizeof buf;
-}
-
-void
-test_main (void) 
-{
-  size_t i;
-  
-#ifdef DIRECTORY
-  CHECK (mkdir (DIRECTORY), "mkdir %s", DIRECTORY);
-#define DIR_PREFIX DIRECTORY "/"
-#else
-#define DIR_PREFIX ""
-#endif
-  for (i = 0; i < FILE_CNT; i++) 
-    {
-      char file_name[128];
-      snprintf (file_name, sizeof file_name, "%sfile%zu", DIR_PREFIX, i);
-
-      msg ("creating and checking \"%s\"", file_name);
-
-      quiet = true;
-      seq_test (file_name,
-                buf, sizeof buf, sizeof buf,
-                return_block_size, NULL); 
-      quiet = false;
-    }
-}
diff --git a/src/tests/filesys/extended/grow-file-size-persistence.ck b/src/tests/filesys/extended/grow-file-size-persistence.ck
deleted file mode 100644
index 150f383..0000000
--- a/src/tests/filesys/extended/grow-file-size-persistence.ck
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-use tests::random;
-check_archive ({"testfile" => [random_bytes (2134)]});
-pass;
diff --git a/src/tests/filesys/extended/grow-file-size.c b/src/tests/filesys/extended/grow-file-size.c
deleted file mode 100644
index 3ce8588..0000000
--- a/src/tests/filesys/extended/grow-file-size.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Grows a file from 0 bytes to 2,134 bytes, 37 bytes at a time,
-   and checks that the file's size is reported correctly at each
-   step. */
-
-#include <syscall.h>
-#include "tests/filesys/seq-test.h"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-static char buf[2134];
-
-static size_t
-return_block_size (void) 
-{
-  return 37;
-}
-
-static void
-check_file_size (int fd, long ofs) 
-{
-  long size = filesize (fd);
-  if (size != ofs)
-    fail ("filesize not updated properly: should be %ld, actually %ld",
-          ofs, size);
-}
-
-void
-test_main (void) 
-{
-  seq_test ("testfile",
-            buf, sizeof buf, 0,
-            return_block_size, check_file_size);
-}
diff --git a/src/tests/filesys/extended/grow-file-size.ck b/src/tests/filesys/extended/grow-file-size.ck
deleted file mode 100644
index d81feff..0000000
--- a/src/tests/filesys/extended/grow-file-size.ck
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-use tests::random;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(grow-file-size) begin
-(grow-file-size) create "testfile"
-(grow-file-size) open "testfile"
-(grow-file-size) writing "testfile"
-(grow-file-size) close "testfile"
-(grow-file-size) open "testfile" for verification
-(grow-file-size) verified contents of "testfile"
-(grow-file-size) close "testfile"
-(grow-file-size) end
-EOF
-pass;
diff --git a/src/tests/filesys/extended/grow-root-lg-persistence.ck b/src/tests/filesys/extended/grow-root-lg-persistence.ck
deleted file mode 100644
index 1692f46..0000000
--- a/src/tests/filesys/extended/grow-root-lg-persistence.ck
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-use tests::random;
-my ($fs);
-$fs->{"file$_"} = [random_bytes (512)] foreach 0...49;
-check_archive ($fs);
-pass;
diff --git a/src/tests/filesys/extended/grow-root-lg.c b/src/tests/filesys/extended/grow-root-lg.c
deleted file mode 100644
index d8d6c09..0000000
--- a/src/tests/filesys/extended/grow-root-lg.c
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Creates 50 files in the root directory. */
-
-#define FILE_CNT 50
-#include "tests/filesys/extended/grow-dir.inc"
diff --git a/src/tests/filesys/extended/grow-root-lg.ck b/src/tests/filesys/extended/grow-root-lg.ck
deleted file mode 100644
index b174bc9..0000000
--- a/src/tests/filesys/extended/grow-root-lg.ck
+++ /dev/null
@@ -1,60 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-use tests::random;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(grow-root-lg) begin
-(grow-root-lg) creating and checking "file0"
-(grow-root-lg) creating and checking "file1"
-(grow-root-lg) creating and checking "file2"
-(grow-root-lg) creating and checking "file3"
-(grow-root-lg) creating and checking "file4"
-(grow-root-lg) creating and checking "file5"
-(grow-root-lg) creating and checking "file6"
-(grow-root-lg) creating and checking "file7"
-(grow-root-lg) creating and checking "file8"
-(grow-root-lg) creating and checking "file9"
-(grow-root-lg) creating and checking "file10"
-(grow-root-lg) creating and checking "file11"
-(grow-root-lg) creating and checking "file12"
-(grow-root-lg) creating and checking "file13"
-(grow-root-lg) creating and checking "file14"
-(grow-root-lg) creating and checking "file15"
-(grow-root-lg) creating and checking "file16"
-(grow-root-lg) creating and checking "file17"
-(grow-root-lg) creating and checking "file18"
-(grow-root-lg) creating and checking "file19"
-(grow-root-lg) creating and checking "file20"
-(grow-root-lg) creating and checking "file21"
-(grow-root-lg) creating and checking "file22"
-(grow-root-lg) creating and checking "file23"
-(grow-root-lg) creating and checking "file24"
-(grow-root-lg) creating and checking "file25"
-(grow-root-lg) creating and checking "file26"
-(grow-root-lg) creating and checking "file27"
-(grow-root-lg) creating and checking "file28"
-(grow-root-lg) creating and checking "file29"
-(grow-root-lg) creating and checking "file30"
-(grow-root-lg) creating and checking "file31"
-(grow-root-lg) creating and checking "file32"
-(grow-root-lg) creating and checking "file33"
-(grow-root-lg) creating and checking "file34"
-(grow-root-lg) creating and checking "file35"
-(grow-root-lg) creating and checking "file36"
-(grow-root-lg) creating and checking "file37"
-(grow-root-lg) creating and checking "file38"
-(grow-root-lg) creating and checking "file39"
-(grow-root-lg) creating and checking "file40"
-(grow-root-lg) creating and checking "file41"
-(grow-root-lg) creating and checking "file42"
-(grow-root-lg) creating and checking "file43"
-(grow-root-lg) creating and checking "file44"
-(grow-root-lg) creating and checking "file45"
-(grow-root-lg) creating and checking "file46"
-(grow-root-lg) creating and checking "file47"
-(grow-root-lg) creating and checking "file48"
-(grow-root-lg) creating and checking "file49"
-(grow-root-lg) end
-EOF
-pass;
diff --git a/src/tests/filesys/extended/grow-root-sm-persistence.ck b/src/tests/filesys/extended/grow-root-sm-persistence.ck
deleted file mode 100644
index 2b0b8ab..0000000
--- a/src/tests/filesys/extended/grow-root-sm-persistence.ck
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-use tests::random;
-my ($fs);
-$fs->{"file$_"} = [random_bytes (512)] foreach 0...19;
-check_archive ($fs);
-pass;
diff --git a/src/tests/filesys/extended/grow-root-sm.c b/src/tests/filesys/extended/grow-root-sm.c
deleted file mode 100644
index ee375d5..0000000
--- a/src/tests/filesys/extended/grow-root-sm.c
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Creates 20 files in the root directory. */
-
-#define FILE_CNT 20
-#include "tests/filesys/extended/grow-dir.inc"
diff --git a/src/tests/filesys/extended/grow-root-sm.ck b/src/tests/filesys/extended/grow-root-sm.ck
deleted file mode 100644
index 1aac7e9..0000000
--- a/src/tests/filesys/extended/grow-root-sm.ck
+++ /dev/null
@@ -1,30 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-use tests::random;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(grow-root-sm) begin
-(grow-root-sm) creating and checking "file0"
-(grow-root-sm) creating and checking "file1"
-(grow-root-sm) creating and checking "file2"
-(grow-root-sm) creating and checking "file3"
-(grow-root-sm) creating and checking "file4"
-(grow-root-sm) creating and checking "file5"
-(grow-root-sm) creating and checking "file6"
-(grow-root-sm) creating and checking "file7"
-(grow-root-sm) creating and checking "file8"
-(grow-root-sm) creating and checking "file9"
-(grow-root-sm) creating and checking "file10"
-(grow-root-sm) creating and checking "file11"
-(grow-root-sm) creating and checking "file12"
-(grow-root-sm) creating and checking "file13"
-(grow-root-sm) creating and checking "file14"
-(grow-root-sm) creating and checking "file15"
-(grow-root-sm) creating and checking "file16"
-(grow-root-sm) creating and checking "file17"
-(grow-root-sm) creating and checking "file18"
-(grow-root-sm) creating and checking "file19"
-(grow-root-sm) end
-EOF
-pass;
diff --git a/src/tests/filesys/extended/grow-seq-lg-persistence.ck b/src/tests/filesys/extended/grow-seq-lg-persistence.ck
deleted file mode 100644
index 41aaae0..0000000
--- a/src/tests/filesys/extended/grow-seq-lg-persistence.ck
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-use tests::random;
-check_archive ({"testme" => [random_bytes (72943)]});
-pass;
diff --git a/src/tests/filesys/extended/grow-seq-lg.c b/src/tests/filesys/extended/grow-seq-lg.c
deleted file mode 100644
index 3108d17..0000000
--- a/src/tests/filesys/extended/grow-seq-lg.c
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Grows a file from 0 bytes to 72,943 bytes, 1,234 bytes at a
-   time. */
-
-#define TEST_SIZE 72943
-#include "tests/filesys/extended/grow-seq.inc"
diff --git a/src/tests/filesys/extended/grow-seq-lg.ck b/src/tests/filesys/extended/grow-seq-lg.ck
deleted file mode 100644
index 90fcd8c..0000000
--- a/src/tests/filesys/extended/grow-seq-lg.ck
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-use tests::random;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(grow-seq-lg) begin
-(grow-seq-lg) create "testme"
-(grow-seq-lg) open "testme"
-(grow-seq-lg) writing "testme"
-(grow-seq-lg) close "testme"
-(grow-seq-lg) open "testme" for verification
-(grow-seq-lg) verified contents of "testme"
-(grow-seq-lg) close "testme"
-(grow-seq-lg) end
-EOF
-pass;
diff --git a/src/tests/filesys/extended/grow-seq-sm-persistence.ck b/src/tests/filesys/extended/grow-seq-sm-persistence.ck
deleted file mode 100644
index 6cb0bd8..0000000
--- a/src/tests/filesys/extended/grow-seq-sm-persistence.ck
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-use tests::random;
-check_archive ({"testme" => [random_bytes (5678)]});
-pass;
diff --git a/src/tests/filesys/extended/grow-seq-sm.c b/src/tests/filesys/extended/grow-seq-sm.c
deleted file mode 100644
index 3656e2e..0000000
--- a/src/tests/filesys/extended/grow-seq-sm.c
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Grows a file from 0 bytes to 5,678 bytes, 1,234 bytes at a
-   time. */
-
-#define TEST_SIZE 5678
-#include "tests/filesys/extended/grow-seq.inc"
diff --git a/src/tests/filesys/extended/grow-seq-sm.ck b/src/tests/filesys/extended/grow-seq-sm.ck
deleted file mode 100644
index 5cf4518..0000000
--- a/src/tests/filesys/extended/grow-seq-sm.ck
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-use tests::random;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(grow-seq-sm) begin
-(grow-seq-sm) create "testme"
-(grow-seq-sm) open "testme"
-(grow-seq-sm) writing "testme"
-(grow-seq-sm) close "testme"
-(grow-seq-sm) open "testme" for verification
-(grow-seq-sm) verified contents of "testme"
-(grow-seq-sm) close "testme"
-(grow-seq-sm) end
-EOF
-pass;
diff --git a/src/tests/filesys/extended/grow-seq.inc b/src/tests/filesys/extended/grow-seq.inc
deleted file mode 100644
index 1b7710c..0000000
--- a/src/tests/filesys/extended/grow-seq.inc
+++ /dev/null
@@ -1,20 +0,0 @@
-/* -*- c -*- */
-
-#include "tests/filesys/seq-test.h"
-#include "tests/main.h"
-
-static char buf[TEST_SIZE];
-
-static size_t
-return_block_size (void) 
-{
-  return 1234;
-}
-
-void
-test_main (void) 
-{
-  seq_test ("testme",
-            buf, sizeof buf, 0,
-            return_block_size, NULL);
-}
diff --git a/src/tests/filesys/extended/grow-sparse-persistence.ck b/src/tests/filesys/extended/grow-sparse-persistence.ck
deleted file mode 100644
index 3f06a5b..0000000
--- a/src/tests/filesys/extended/grow-sparse-persistence.ck
+++ /dev/null
@@ -1,6 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_archive ({"testfile" => ["\0" x 76543]});
-pass;
diff --git a/src/tests/filesys/extended/grow-sparse.c b/src/tests/filesys/extended/grow-sparse.c
deleted file mode 100644
index 6eab210..0000000
--- a/src/tests/filesys/extended/grow-sparse.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Tests that seeking past the end of a file and writing will
-   properly zero out the region in between. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-static char buf[76543];
-
-void
-test_main (void) 
-{
-  const char *file_name = "testfile";
-  char zero = 0;
-  int fd;
-  
-  CHECK (create (file_name, 0), "create \"%s\"", file_name);
-  CHECK ((fd = open (file_name)) > 1, "open \"%s\"", file_name);
-  msg ("seek \"%s\"", file_name);
-  seek (fd, sizeof buf - 1);
-  CHECK (write (fd, &zero, 1) > 0, "write \"%s\"", file_name);
-  msg ("close \"%s\"", file_name);
-  close (fd);
-  check_file (file_name, buf, sizeof buf);
-}
diff --git a/src/tests/filesys/extended/grow-sparse.ck b/src/tests/filesys/extended/grow-sparse.ck
deleted file mode 100644
index 379ba2c..0000000
--- a/src/tests/filesys/extended/grow-sparse.ck
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(grow-sparse) begin
-(grow-sparse) create "testfile"
-(grow-sparse) open "testfile"
-(grow-sparse) seek "testfile"
-(grow-sparse) write "testfile"
-(grow-sparse) close "testfile"
-(grow-sparse) open "testfile" for verification
-(grow-sparse) verified contents of "testfile"
-(grow-sparse) close "testfile"
-(grow-sparse) end
-EOF
-pass;
diff --git a/src/tests/filesys/extended/grow-tell-persistence.ck b/src/tests/filesys/extended/grow-tell-persistence.ck
deleted file mode 100644
index d93a422..0000000
--- a/src/tests/filesys/extended/grow-tell-persistence.ck
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-use tests::random;
-check_archive ({"foobar" => [random_bytes (2134)]});
-pass;
diff --git a/src/tests/filesys/extended/grow-tell.c b/src/tests/filesys/extended/grow-tell.c
deleted file mode 100644
index 5f5da5b..0000000
--- a/src/tests/filesys/extended/grow-tell.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Checks that growing a file updates the file position
-   correctly. */
-
-#include <syscall.h>
-#include "tests/filesys/seq-test.h"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-static char buf[2134];
-
-static size_t
-return_block_size (void) 
-{
-  return 37;
-}
-
-static void
-check_tell (int fd, long ofs) 
-{
-  long pos = tell (fd);
-  if (pos != ofs)
-    fail ("file position not updated properly: should be %ld, actually %ld",
-          ofs, pos);
-}
-
-void
-test_main (void) 
-{
-  seq_test ("foobar",
-            buf, sizeof buf, 0,
-            return_block_size, check_tell);
-}
diff --git a/src/tests/filesys/extended/grow-tell.ck b/src/tests/filesys/extended/grow-tell.ck
deleted file mode 100644
index fe94707..0000000
--- a/src/tests/filesys/extended/grow-tell.ck
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-use tests::random;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(grow-tell) begin
-(grow-tell) create "foobar"
-(grow-tell) open "foobar"
-(grow-tell) writing "foobar"
-(grow-tell) close "foobar"
-(grow-tell) open "foobar" for verification
-(grow-tell) verified contents of "foobar"
-(grow-tell) close "foobar"
-(grow-tell) end
-EOF
-pass;
diff --git a/src/tests/filesys/extended/grow-two-files-persistence.ck b/src/tests/filesys/extended/grow-two-files-persistence.ck
deleted file mode 100644
index 1c4ced1..0000000
--- a/src/tests/filesys/extended/grow-two-files-persistence.ck
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-use tests::random;
-my ($a) = random_bytes (8143);
-my ($b) = random_bytes (8143);
-check_archive ({"a" => [$a], "b" => [$b]});
-pass;
diff --git a/src/tests/filesys/extended/grow-two-files.c b/src/tests/filesys/extended/grow-two-files.c
deleted file mode 100644
index 6a8fb1c..0000000
--- a/src/tests/filesys/extended/grow-two-files.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/* Grows two files in parallel and checks that their contents are
-   correct. */
-
-#include <random.h>
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-#define FILE_SIZE 8143
-static char buf_a[FILE_SIZE];
-static char buf_b[FILE_SIZE];
-
-static void
-write_some_bytes (const char *file_name, int fd, const char *buf, size_t *ofs) 
-{
-  if (*ofs < FILE_SIZE) 
-    {
-      size_t block_size = random_ulong () % (FILE_SIZE / 8) + 1;
-      size_t ret_val;
-      if (block_size > FILE_SIZE - *ofs)
-        block_size = FILE_SIZE - *ofs;
-
-      ret_val = write (fd, buf + *ofs, block_size);
-      if (ret_val != block_size)
-        fail ("write %zu bytes at offset %zu in \"%s\" returned %zu",
-              block_size, *ofs, file_name, ret_val);
-      *ofs += block_size;
-    }
-}
-
-void
-test_main (void) 
-{
-  int fd_a, fd_b;
-  size_t ofs_a = 0, ofs_b = 0;
-
-  random_init (0);
-  random_bytes (buf_a, sizeof buf_a);
-  random_bytes (buf_b, sizeof buf_b);
-
-  CHECK (create ("a", 0), "create \"a\"");
-  CHECK (create ("b", 0), "create \"b\"");
-
-  CHECK ((fd_a = open ("a")) > 1, "open \"a\"");
-  CHECK ((fd_b = open ("b")) > 1, "open \"b\"");
-
-  msg ("write \"a\" and \"b\" alternately");
-  while (ofs_a < FILE_SIZE || ofs_b < FILE_SIZE) 
-    {
-      write_some_bytes ("a", fd_a, buf_a, &ofs_a);
-      write_some_bytes ("b", fd_b, buf_b, &ofs_b);
-    }
-
-  msg ("close \"a\"");
-  close (fd_a);
-
-  msg ("close \"b\"");
-  close (fd_b);
-
-  check_file ("a", buf_a, FILE_SIZE);
-  check_file ("b", buf_b, FILE_SIZE);
-}
diff --git a/src/tests/filesys/extended/grow-two-files.ck b/src/tests/filesys/extended/grow-two-files.ck
deleted file mode 100644
index b5e754a..0000000
--- a/src/tests/filesys/extended/grow-two-files.ck
+++ /dev/null
@@ -1,23 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-use tests::random;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(grow-two-files) begin
-(grow-two-files) create "a"
-(grow-two-files) create "b"
-(grow-two-files) open "a"
-(grow-two-files) open "b"
-(grow-two-files) write "a" and "b" alternately
-(grow-two-files) close "a"
-(grow-two-files) close "b"
-(grow-two-files) open "a" for verification
-(grow-two-files) verified contents of "a"
-(grow-two-files) close "a"
-(grow-two-files) open "b" for verification
-(grow-two-files) verified contents of "b"
-(grow-two-files) close "b"
-(grow-two-files) end
-EOF
-pass;
diff --git a/src/tests/filesys/extended/mk-tree.c b/src/tests/filesys/extended/mk-tree.c
deleted file mode 100644
index a36bb88..0000000
--- a/src/tests/filesys/extended/mk-tree.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/* Library function for creating a tree of directories. */
-
-#include <stdio.h>
-#include <syscall.h>
-#include "tests/filesys/extended/mk-tree.h"
-#include "tests/lib.h"
-
-static void do_mkdir (const char *format, ...) PRINTF_FORMAT (1, 2);
-static void do_touch (const char *format, ...) PRINTF_FORMAT (1, 2);
-
-void
-make_tree (int at, int bt, int ct, int dt) 
-{
-  char try[128];
-  int a, b, c, d;
-  int fd;
-
-  msg ("creating /0/0/0/0 through /%d/%d/%d/%d...",
-       at - 1, bt - 1, ct - 1, dt - 1);
-  quiet = true;
-  for (a = 0; a < at; a++) 
-    {
-      do_mkdir ("/%d", a);
-      for (b = 0; b < bt; b++) 
-        {
-          do_mkdir ("/%d/%d", a, b);
-          for (c = 0; c < ct; c++) 
-            {
-              do_mkdir ("/%d/%d/%d", a, b, c);
-              for (d = 0; d < dt; d++)
-                do_touch ("/%d/%d/%d/%d", a, b, c, d);
-            }
-        }
-    }
-  quiet = false;
-
-  snprintf (try, sizeof try, "/%d/%d/%d/%d", 0, bt - 1, 0, dt - 1);
-  CHECK ((fd = open (try)) > 1, "open \"%s\"", try);
-  msg ("close \"%s\"", try);
-  close (fd);
-}
-
-static void
-do_mkdir (const char *format, ...) 
-{
-  char dir[128];
-  va_list args;
-
-  va_start (args, format);
-  vsnprintf (dir, sizeof dir, format, args);
-  va_end (args);
-
-  CHECK (mkdir (dir), "mkdir \"%s\"", dir);
-}
-
-static void
-do_touch (const char *format, ...)
-{
-  char file[128];
-  va_list args;
-
-  va_start (args, format);
-  vsnprintf (file, sizeof file, format, args);
-  va_end (args);
-
-  CHECK (create (file, 0), "create \"%s\"", file);
-}
diff --git a/src/tests/filesys/extended/mk-tree.h b/src/tests/filesys/extended/mk-tree.h
deleted file mode 100644
index df0d5a6..0000000
--- a/src/tests/filesys/extended/mk-tree.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef TESTS_FILESYS_EXTENDED_MK_TREE_H
-#define TESTS_FILESYS_EXTENDED_MK_TREE_H
-
-void make_tree (int at, int bt, int ct, int dt);
-
-#endif /* tests/filesys/extended/mk-tree.h */
diff --git a/src/tests/filesys/extended/syn-rw-persistence.ck b/src/tests/filesys/extended/syn-rw-persistence.ck
deleted file mode 100644
index 62d57ee..0000000
--- a/src/tests/filesys/extended/syn-rw-persistence.ck
+++ /dev/null
@@ -1,8 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-use tests::random;
-check_archive ({"child-syn-rw" => "tests/filesys/extended/child-syn-rw",
-		"logfile" => [random_bytes (8 * 512)]});
-pass;
diff --git a/src/tests/filesys/extended/syn-rw.c b/src/tests/filesys/extended/syn-rw.c
deleted file mode 100644
index 657dfb5..0000000
--- a/src/tests/filesys/extended/syn-rw.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Grows a file in chunks while subprocesses read the growing
-   file. */
-
-#include <random.h>
-#include <syscall.h>
-#include "tests/filesys/extended/syn-rw.h"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-char buf[BUF_SIZE];
-
-#define CHILD_CNT 4
-
-void
-test_main (void) 
-{
-  pid_t children[CHILD_CNT];
-  size_t ofs;
-  int fd;
-
-  CHECK (create (file_name, 0), "create \"%s\"", file_name);
-  CHECK ((fd = open (file_name)) > 1, "open \"%s\"", file_name);
-
-  exec_children ("child-syn-rw", children, CHILD_CNT);
-
-  random_bytes (buf, sizeof buf);
-  quiet = true;
-  for (ofs = 0; ofs < BUF_SIZE; ofs += CHUNK_SIZE)
-    CHECK (write (fd, buf + ofs, CHUNK_SIZE) > 0,
-           "write %d bytes at offset %zu in \"%s\"",
-           (int) CHUNK_SIZE, ofs, file_name);
-  quiet = false;
-
-  wait_children (children, CHILD_CNT);
-}
diff --git a/src/tests/filesys/extended/syn-rw.ck b/src/tests/filesys/extended/syn-rw.ck
deleted file mode 100644
index ac82aa8..0000000
--- a/src/tests/filesys/extended/syn-rw.ck
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-use tests::random;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(syn-rw) begin
-(syn-rw) create "logfile"
-(syn-rw) open "logfile"
-(syn-rw) exec child 1 of 4: "child-syn-rw 0"
-(syn-rw) exec child 2 of 4: "child-syn-rw 1"
-(syn-rw) exec child 3 of 4: "child-syn-rw 2"
-(syn-rw) exec child 4 of 4: "child-syn-rw 3"
-(syn-rw) wait for child 1 of 4 returned 0 (expected 0)
-(syn-rw) wait for child 2 of 4 returned 1 (expected 1)
-(syn-rw) wait for child 3 of 4 returned 2 (expected 2)
-(syn-rw) wait for child 4 of 4 returned 3 (expected 3)
-(syn-rw) end
-EOF
-pass;
diff --git a/src/tests/filesys/extended/syn-rw.h b/src/tests/filesys/extended/syn-rw.h
deleted file mode 100644
index 170aeb4..0000000
--- a/src/tests/filesys/extended/syn-rw.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef TESTS_FILESYS_EXTENDED_SYN_RW_H
-#define TESTS_FILESYS_EXTENDED_SYN_RW_H
-
-#define CHUNK_SIZE 8
-#define CHUNK_CNT 512
-#define BUF_SIZE (CHUNK_SIZE * CHUNK_CNT)
-static const char file_name[] = "logfile";
-
-#endif /* tests/filesys/extended/syn-rw.h */
diff --git a/src/tests/filesys/extended/tar.c b/src/tests/filesys/extended/tar.c
deleted file mode 100644
index 6f70d97..0000000
--- a/src/tests/filesys/extended/tar.c
+++ /dev/null
@@ -1,250 +0,0 @@
-/* tar.c
-
-   Creates a tar archive. */
-
-#include <syscall.h>
-#include <stdio.h>
-#include <string.h>
-
-static void usage (void);
-static bool make_tar_archive (const char *archive_name,
-                              char *files[], size_t file_cnt);
-
-int
-main (int argc, char *argv[]) 
-{
-  if (argc < 3)
-    usage ();
-
-  return (make_tar_archive (argv[1], argv + 2, argc - 2)
-          ? EXIT_SUCCESS : EXIT_FAILURE);
-}
-
-static void
-usage (void) 
-{
-  printf ("tar, tar archive creator\n"
-          "Usage: tar ARCHIVE FILE...\n"
-          "where ARCHIVE is the tar archive to create\n"
-          "  and FILE... is a list of files or directories to put into it.\n"
-          "(ARCHIVE itself will not be included in the archive, even if it\n"
-          "is in a directory to be archived.)\n");
-  exit (EXIT_FAILURE);
-}
-
-static bool archive_file (char file_name[], size_t file_name_size,
-                          int archive_fd, bool *write_error);
-
-static bool archive_ordinary_file (const char *file_name, int file_fd,
-                                   int archive_fd, bool *write_error);
-static bool archive_directory (char file_name[], size_t file_name_size,
-                               int file_fd, int archive_fd, bool *write_error);
-static bool write_header (const char *file_name,
-                          char type_flag, int size, unsigned mode,
-                          int archive_fd, bool *write_error);
-
-static bool do_write (int fd, const char *buffer, int size, bool *write_error);
-
-static bool
-make_tar_archive (const char *archive_name, char *files[], size_t file_cnt) 
-{
-  static const char zeros[512];
-  int archive_fd;
-  bool success = true;
-  bool write_error = false;
-  size_t i;
-  
-  if (!create (archive_name, 0)) 
-    {
-      printf ("%s: create failed\n", archive_name);
-      return false;
-    }
-  archive_fd = open (archive_name);
-  if (archive_fd < 0)
-    {
-      printf ("%s: open failed\n", archive_name);
-      return false;
-    }
-
-  for (i = 0; i < file_cnt; i++) 
-    {
-      char file_name[128];
-      
-      strlcpy (file_name, files[i], sizeof file_name);
-      if (!archive_file (file_name, sizeof file_name,
-                         archive_fd, &write_error))
-        success = false;
-    }
-
-  if (!do_write (archive_fd, zeros, 512, &write_error)
-      || !do_write (archive_fd, zeros, 512, &write_error)) 
-    success = false;
-
-  close (archive_fd);
-
-  return success;
-}
-
-static bool
-archive_file (char file_name[], size_t file_name_size,
-              int archive_fd, bool *write_error) 
-{
-  int file_fd = open (file_name);
-  if (file_fd >= 0) 
-    {
-      bool success;
-
-      if (inumber (file_fd) != inumber (archive_fd)) 
-        {
-          if (!isdir (file_fd))
-            success = archive_ordinary_file (file_name, file_fd,
-                                             archive_fd, write_error);
-          else
-            success = archive_directory (file_name, file_name_size, file_fd,
-                                         archive_fd, write_error);      
-        }
-      else
-        {
-          /* Nothing to do: don't try to archive the archive file. */
-          success = true;
-        }
-  
-      close (file_fd);
-
-      return success;
-    }
-  else
-    {
-      printf ("%s: open failed\n", file_name);
-      return false;
-    }
-}
-
-static bool
-archive_ordinary_file (const char *file_name, int file_fd,
-                       int archive_fd, bool *write_error)
-{
-  bool read_error = false;
-  bool success = true;
-  int file_size = filesize (file_fd);
-
-  if (!write_header (file_name, '0', file_size, 0644, archive_fd, write_error))
-    return false;
-
-  while (file_size > 0) 
-    {
-      static char buf[512];
-      int chunk_size = file_size > 512 ? 512 : file_size;
-      int read_retval = read (file_fd, buf, chunk_size);
-      int bytes_read = read_retval > 0 ? read_retval : 0;
-
-      if (bytes_read != chunk_size && !read_error) 
-        {
-          printf ("%s: read error\n", file_name);
-          read_error = true;
-          success = false;
-        }
-
-      memset (buf + bytes_read, 0, 512 - bytes_read);
-      if (!do_write (archive_fd, buf, 512, write_error))
-        success = false;
-
-      file_size -= chunk_size;
-    }
-
-  return success;
-}
-
-static bool
-archive_directory (char file_name[], size_t file_name_size, int file_fd,
-                   int archive_fd, bool *write_error)
-{
-  size_t dir_len;
-  bool success = true;
-
-  dir_len = strlen (file_name);
-  if (dir_len + 1 + READDIR_MAX_LEN + 1 > file_name_size) 
-    {
-      printf ("%s: file name too long\n", file_name);
-      return false;
-    }
-
-  if (!write_header (file_name, '5', 0, 0755, archive_fd, write_error))
-    return false;
-      
-  file_name[dir_len] = '/';
-  while (readdir (file_fd, &file_name[dir_len + 1])) 
-    if (!archive_file (file_name, file_name_size, archive_fd, write_error))
-      success = false;
-  file_name[dir_len] = '\0';
-
-  return success;
-}
-
-static bool
-write_header (const char *file_name,
-              char type_flag, int size, unsigned mode,
-              int archive_fd, bool *write_error) 
-{
-  static char header[512];
-  unsigned chksum;
-  size_t i;
-
-  memset (header, 0, sizeof header);
-
-  /* Drop confusing and possibly dangerous prefixes from
-     FILE_NAME. */
-  while (*file_name == '/'
-         || !memcmp (file_name, "./", 2)
-         || !memcmp (file_name, "../", 3))
-    file_name = strchr (file_name, '/') + 1;
-  if (*file_name == '\0') 
-    {
-      /* Dropped *everything* from FILE_NAME.
-         Should only be possible for a directory. */
-      ASSERT (type_flag == '5');
-      return true; 
-    }
-  else if (strlen (file_name) > 99)
-    {
-      printf ("%s: file name too long\n", file_name);
-      return false;
-    }
-
-  /* Fill in header except for final checksum. */
-  strlcpy (header, file_name, 100);                 /* name */
-  snprintf (header + 100, 8, "%07o", mode);         /* mode */
-  strlcpy (header + 108, "0000000", 8);             /* uid */
-  strlcpy (header + 116, "0000000", 8);             /* gid */
-  snprintf (header + 124, 12, "%011o", size);       /* size */
-  snprintf (header + 136, 12, "%011o", 1136102400); /* mtime (2006-01-01) */
-  memset (header + 148, ' ', 8);                    /* chksum */
-  header[156] = type_flag;                          /* typeflag */
-  strlcpy (header + 257, "ustar", 6);               /* magic */
-  strlcpy (header + 263, "00", 3);                  /* version */
-
-  /* Compute and fill in final checksum. */
-  chksum = 0;
-  for (i = 0; i < 512; i++)
-    chksum += (uint8_t) header[i];
-  snprintf (header + 148, 8, "%07o", chksum);
-
-  /* Write header. */
-  return do_write (archive_fd, header, 512, write_error);
-}
-
-static bool
-do_write (int fd, const char *buffer, int size, bool *write_error) 
-{
-  if (write (fd, buffer, size) == size) 
-    return true;
-  else
-    {
-      if (!*write_error) 
-        {
-          printf ("error writing archive\n");
-          *write_error = true; 
-        }
-      return false; 
-    }
-}
diff --git a/src/tests/filesys/seq-test.c b/src/tests/filesys/seq-test.c
deleted file mode 100644
index 8ce222c..0000000
--- a/src/tests/filesys/seq-test.c
+++ /dev/null
@@ -1,37 +0,0 @@
-#include "tests/filesys/seq-test.h"
-#include <random.h>
-#include <syscall.h>
-#include "tests/lib.h"
-
-void 
-seq_test (const char *file_name, void *buf, size_t size, size_t initial_size,
-          size_t (*block_size_func) (void),
-          void (*check_func) (int fd, long ofs)) 
-{
-  size_t ofs;
-  int fd;
-  
-  random_bytes (buf, size);
-  CHECK (create (file_name, initial_size), "create \"%s\"", file_name);
-  CHECK ((fd = open (file_name)) > 1, "open \"%s\"", file_name);
-
-  ofs = 0;
-  msg ("writing \"%s\"", file_name);
-  while (ofs < size) 
-    {
-      size_t block_size = block_size_func ();
-      if (block_size > size - ofs)
-        block_size = size - ofs;
-
-      if (write (fd, buf + ofs, block_size) != (int) block_size)
-        fail ("write %zu bytes at offset %zu in \"%s\" failed",
-              block_size, ofs, file_name);
-
-      ofs += block_size;
-      if (check_func != NULL)
-        check_func (fd, ofs);
-    }
-  msg ("close \"%s\"", file_name);
-  close (fd);
-  check_file (file_name, buf, size);
-}
diff --git a/src/tests/filesys/seq-test.h b/src/tests/filesys/seq-test.h
deleted file mode 100644
index 0697381..0000000
--- a/src/tests/filesys/seq-test.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef TESTS_FILESYS_SEQ_TEST_H
-#define TESTS_FILESYS_SEQ_TEST_H
-
-#include <stddef.h>
-
-void seq_test (const char *file_name,
-               void *buf, size_t size, size_t initial_size,
-               size_t (*block_size_func) (void),
-               void (*check_func) (int fd, long ofs));
-
-#endif /* tests/filesys/seq-test.h */
diff --git a/src/tests/internal/list.c b/src/tests/internal/list.c
deleted file mode 100644
index 836c69e..0000000
--- a/src/tests/internal/list.c
+++ /dev/null
@@ -1,174 +0,0 @@
-/* Test program for lib/kernel/list.c.
-
-   Attempts to test the list functionality that is not
-   sufficiently tested elsewhere in Pintos.
-
-   This is not a test we will run on your submitted projects.
-   It is here for completeness.
-*/
-
-#undef NDEBUG
-#include <debug.h>
-#include <list.h>
-#include <random.h>
-#include <stdio.h>
-#include "threads/test.h"
-
-/* Maximum number of elements in a linked list that we will
-   test. */
-#define MAX_SIZE 64
-
-/* A linked list element. */
-struct value 
-  {
-    struct list_elem elem;      /* List element. */
-    int value;                  /* Item value. */
-  };
-
-static void shuffle (struct value[], size_t);
-static bool value_less (const struct list_elem *, const struct list_elem *,
-                        void *);
-static void verify_list_fwd (struct list *, int size);
-static void verify_list_bkwd (struct list *, int size);
-
-/* Test the linked list implementation. */
-void
-test (void) 
-{
-  int size;
-
-  printf ("testing various size lists:");
-  for (size = 0; size < MAX_SIZE; size++) 
-    {
-      int repeat;
-
-      printf (" %d", size);
-      for (repeat = 0; repeat < 10; repeat++) 
-        {
-          static struct value values[MAX_SIZE * 4];
-          struct list list;
-          struct list_elem *e;
-          int i, ofs;
-
-          /* Put values 0...SIZE in random order in VALUES. */
-          for (i = 0; i < size; i++)
-            values[i].value = i;
-          shuffle (values, size);
-  
-          /* Assemble list. */
-          list_init (&list);
-          for (i = 0; i < size; i++)
-            list_push_back (&list, &values[i].elem);
-
-          /* Verify correct minimum and maximum elements. */
-          e = list_min (&list, value_less, NULL);
-          ASSERT (size ? list_entry (e, struct value, elem)->value == 0
-                  : e == list_begin (&list));
-          e = list_max (&list, value_less, NULL);
-          ASSERT (size ? list_entry (e, struct value, elem)->value == size - 1
-                  : e == list_begin (&list));
-
-          /* Sort and verify list. */
-          list_sort (&list, value_less, NULL);
-          verify_list_fwd (&list, size);
-
-          /* Reverse and verify list. */
-          list_reverse (&list);
-          verify_list_bkwd (&list, size);
-
-          /* Shuffle, insert using list_insert_ordered(),
-             and verify ordering. */
-          shuffle (values, size);
-          list_init (&list);
-          for (i = 0; i < size; i++)
-            list_insert_ordered (&list, &values[i].elem,
-                                 value_less, NULL);
-          verify_list_fwd (&list, size);
-
-          /* Duplicate some items, uniquify, and verify. */
-          ofs = size;
-          for (e = list_begin (&list); e != list_end (&list);
-               e = list_next (e))
-            {
-              struct value *v = list_entry (e, struct value, elem);
-              int copies = random_ulong () % 4;
-              while (copies-- > 0) 
-                {
-                  values[ofs].value = v->value;
-                  list_insert (e, &values[ofs++].elem);
-                }
-            }
-          ASSERT ((size_t) ofs < sizeof values / sizeof *values);
-          list_unique (&list, NULL, value_less, NULL);
-          verify_list_fwd (&list, size);
-        }
-    }
-  
-  printf (" done\n");
-  printf ("list: PASS\n");
-}
-
-/* Shuffles the CNT elements in ARRAY into random order. */
-static void
-shuffle (struct value *array, size_t cnt) 
-{
-  size_t i;
-
-  for (i = 0; i < cnt; i++)
-    {
-      size_t j = i + random_ulong () % (cnt - i);
-      struct value t = array[j];
-      array[j] = array[i];
-      array[i] = t;
-    }
-}
-
-/* Returns true if value A is less than value B, false
-   otherwise. */
-static bool
-value_less (const struct list_elem *a_, const struct list_elem *b_,
-            void *aux UNUSED) 
-{
-  const struct value *a = list_entry (a_, struct value, elem);
-  const struct value *b = list_entry (b_, struct value, elem);
-  
-  return a->value < b->value;
-}
-
-/* Verifies that LIST contains the values 0...SIZE when traversed
-   in forward order. */
-static void
-verify_list_fwd (struct list *list, int size) 
-{
-  struct list_elem *e;
-  int i;
-  
-  for (i = 0, e = list_begin (list);
-       i < size && e != list_end (list);
-       i++, e = list_next (e)) 
-    {
-      struct value *v = list_entry (e, struct value, elem);
-      ASSERT (i == v->value);
-    }
-  ASSERT (i == size);
-  ASSERT (e == list_end (list));
-}
-
-/* Verifies that LIST contains the values 0...SIZE when traversed
-   in reverse order. */
-static void
-verify_list_bkwd (struct list *list, int size) 
-{
-  struct list_elem *e;
-  int i;
-
-  for (i = 0, e = list_rbegin (list);
-       i < size && e != list_rend (list);
-       i++, e = list_prev (e)) 
-    {
-      struct value *v = list_entry (e, struct value, elem);
-      ASSERT (i == v->value);
-    }
-  ASSERT (i == size);
-  ASSERT (e == list_rend (list));
-}
diff --git a/src/tests/internal/stdio.c b/src/tests/internal/stdio.c
deleted file mode 100644
index fb60cda..0000000
--- a/src/tests/internal/stdio.c
+++ /dev/null
@@ -1,208 +0,0 @@
-/* Test program for printf() in lib/stdio.c.
-
-   Attempts to test printf() functionality that is not
-   sufficiently tested elsewhere in Pintos.
-
-   This is not a test we will run on your submitted projects.
-   It is here for completeness.
-*/
-
-#undef NDEBUG
-#include <limits.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include "threads/test.h"
-
-/* Number of failures so far. */
-static int failure_cnt;
-
-static void
-checkf (const char *expect, const char *format, ...) 
-{
-  char output[128];
-  va_list args;
-
-  printf ("\"%s\" -> \"%s\": ", format, expect);
-  
-  va_start (args, format);
-  vsnprintf (output, sizeof output, format, args);
-  va_end (args);
-
-  if (strcmp (expect, output)) 
-    {
-      printf ("\nFAIL: actual output \"%s\"\n", output);
-      failure_cnt++;
-    }
-  else
-    printf ("okay\n");
-}
-
-/* Test printf() implementation. */
-void
-test (void) 
-{
-  printf ("Testing formats:");
-
-  /* Check that commas show up in the right places, for positive
-     numbers. */
-  checkf ("1", "%'d", 1);
-  checkf ("12", "%'d", 12);
-  checkf ("123", "%'d", 123);
-  checkf ("1,234", "%'d", 1234);
-  checkf ("12,345", "%'d", 12345);
-  checkf ("123,456", "%'ld", 123456L);
-  checkf ("1,234,567", "%'ld", 1234567L);
-  checkf ("12,345,678", "%'ld", 12345678L);
-  checkf ("123,456,789", "%'ld", 123456789L);
-  checkf ("1,234,567,890", "%'ld", 1234567890L);
-  checkf ("12,345,678,901", "%'lld", 12345678901LL);
-  checkf ("123,456,789,012", "%'lld", 123456789012LL);
-  checkf ("1,234,567,890,123", "%'lld", 1234567890123LL);
-  checkf ("12,345,678,901,234", "%'lld", 12345678901234LL);
-  checkf ("123,456,789,012,345", "%'lld", 123456789012345LL);
-  checkf ("1,234,567,890,123,456", "%'lld", 1234567890123456LL);
-  checkf ("12,345,678,901,234,567", "%'lld", 12345678901234567LL);
-  checkf ("123,456,789,012,345,678", "%'lld", 123456789012345678LL);
-  checkf ("1,234,567,890,123,456,789", "%'lld", 1234567890123456789LL);
-
-  /* Check that commas show up in the right places, for positive
-     numbers. */
-  checkf ("-1", "%'d", -1);
-  checkf ("-12", "%'d", -12);
-  checkf ("-123", "%'d", -123);
-  checkf ("-1,234", "%'d", -1234);
-  checkf ("-12,345", "%'d", -12345);
-  checkf ("-123,456", "%'ld", -123456L);
-  checkf ("-1,234,567", "%'ld", -1234567L);
-  checkf ("-12,345,678", "%'ld", -12345678L);
-  checkf ("-123,456,789", "%'ld", -123456789L);
-  checkf ("-1,234,567,890", "%'ld", -1234567890L);
-  checkf ("-12,345,678,901", "%'lld", -12345678901LL);
-  checkf ("-123,456,789,012", "%'lld", -123456789012LL);
-  checkf ("-1,234,567,890,123", "%'lld", -1234567890123LL);
-  checkf ("-12,345,678,901,234", "%'lld", -12345678901234LL);
-  checkf ("-123,456,789,012,345", "%'lld", -123456789012345LL);
-  checkf ("-1,234,567,890,123,456", "%'lld", -1234567890123456LL);
-  checkf ("-12,345,678,901,234,567", "%'lld", -12345678901234567LL);
-  checkf ("-123,456,789,012,345,678", "%'lld", -123456789012345678LL);
-  checkf ("-1,234,567,890,123,456,789", "%'lld", -1234567890123456789LL);
-  
-  /* Check signed integer conversions. */
-  checkf ("    0", "%5d", 0);
-  checkf ("0    ", "%-5d", 0);
-  checkf ("   +0", "%+5d", 0);
-  checkf ("+0   ", "%+-5d", 0);
-  checkf ("    0", "% 5d", 0);
-  checkf ("00000", "%05d", 0);
-  checkf ("     ", "%5.0d", 0);
-  checkf ("   00", "%5.2d", 0);
-  checkf ("0", "%d", 0);
-
-  checkf ("    1", "%5d", 1);
-  checkf ("1    ", "%-5d", 1);
-  checkf ("   +1", "%+5d", 1);
-  checkf ("+1   ", "%+-5d", 1);
-  checkf ("    1", "% 5d", 1);
-  checkf ("00001", "%05d", 1);
-  checkf ("    1", "%5.0d", 1);
-  checkf ("   01", "%5.2d", 1);
-  checkf ("1", "%d", 1);
-
-  checkf ("   -1", "%5d", -1);
-  checkf ("-1   ", "%-5d", -1);
-  checkf ("   -1", "%+5d", -1);
-  checkf ("-1   ", "%+-5d", -1);
-  checkf ("   -1", "% 5d", -1);
-  checkf ("-0001", "%05d", -1);
-  checkf ("   -1", "%5.0d", -1);
-  checkf ("  -01", "%5.2d", -1);
-  checkf ("-1", "%d", -1);
-
-  checkf ("12345", "%5d", 12345);
-  checkf ("12345", "%-5d", 12345);
-  checkf ("+12345", "%+5d", 12345);
-  checkf ("+12345", "%+-5d", 12345);
-  checkf (" 12345", "% 5d", 12345);
-  checkf ("12345", "%05d", 12345);
-  checkf ("12345", "%5.0d", 12345);
-  checkf ("12345", "%5.2d", 12345);
-  checkf ("12345", "%d", 12345);
-
-  checkf ("123456", "%5d", 123456);
-  checkf ("123456", "%-5d", 123456);
-  checkf ("+123456", "%+5d", 123456);
-  checkf ("+123456", "%+-5d", 123456);
-  checkf (" 123456", "% 5d", 123456);
-  checkf ("123456", "%05d", 123456);
-  checkf ("123456", "%5.0d", 123456);
-  checkf ("123456", "%5.2d", 123456);
-  checkf ("123456", "%d", 123456);
-
-  /* Check unsigned integer conversions. */
-  checkf ("    0", "%5u", 0);
-  checkf ("    0", "%5o", 0);
-  checkf ("    0", "%5x", 0);
-  checkf ("    0", "%5X", 0);
-  checkf ("    0", "%#5o", 0);
-  checkf ("    0", "%#5x", 0);
-  checkf ("    0", "%#5X", 0);
-  checkf ("  00000000", "%#10.8x", 0);
-  
-  checkf ("    1", "%5u", 1);
-  checkf ("    1", "%5o", 1);
-  checkf ("    1", "%5x", 1);
-  checkf ("    1", "%5X", 1);
-  checkf ("   01", "%#5o", 1);
-  checkf ("  0x1", "%#5x", 1);
-  checkf ("  0X1", "%#5X", 1);
-  checkf ("0x00000001", "%#10.8x", 1);
-
-  checkf ("123456", "%5u", 123456);
-  checkf ("361100", "%5o", 123456);
-  checkf ("1e240", "%5x", 123456);
-  checkf ("1E240", "%5X", 123456);
-  checkf ("0361100", "%#5o", 123456);
-  checkf ("0x1e240", "%#5x", 123456);
-  checkf ("0X1E240", "%#5X", 123456);
-  checkf ("0x0001e240", "%#10.8x", 123456);
-
-  /* Character and string conversions. */
-  checkf ("foobar", "%c%c%c%c%c%c", 'f', 'o', 'o', 'b', 'a', 'r');
-  checkf ("  left-right  ", "%6s%s%-7s", "left", "-", "right");
-  checkf ("trim", "%.4s", "trimoff");
-  checkf ("%%", "%%%%");
-
-  /* From Cristian Cadar's automatic test case generator. */
-  checkf (" abcdefgh", "%9s", "abcdefgh");
-  checkf ("36657730000", "%- o", (unsigned) 036657730000);
-  checkf ("4139757568", "%- u", (unsigned) 4139757568UL);
-  checkf ("f6bfb000", "%- x", (unsigned) 0xf6bfb000);
-  checkf ("36657730000", "%-to", (ptrdiff_t) 036657730000);
-  checkf ("4139757568", "%-tu", (ptrdiff_t) 4139757568UL);
-  checkf ("-155209728", "%-zi", (size_t) -155209728);
-  checkf ("-155209728", "%-zd", (size_t) -155209728);
-  checkf ("036657730000", "%+#o", (unsigned) 036657730000);
-  checkf ("0xf6bfb000", "%+#x", (unsigned) 0xf6bfb000);
-  checkf ("-155209728", "% zi", (size_t) -155209728);
-  checkf ("-155209728", "% zd", (size_t) -155209728);
-  checkf ("4139757568", "% tu", (ptrdiff_t) 4139757568UL);
-  checkf ("036657730000", "% #o", (unsigned) 036657730000);
-  checkf ("0xf6bfb000", "% #x", (unsigned) 0xf6bfb000);
-  checkf ("0xf6bfb000", "%# x", (unsigned) 0xf6bfb000);
-  checkf ("-155209728", "%#zd", (size_t) -155209728);
-  checkf ("-155209728", "%0zi", (size_t) -155209728);
-  checkf ("4,139,757,568", "%'tu", (ptrdiff_t) 4139757568UL);
-  checkf ("-155,209,728", "%-'d", -155209728);
-  checkf ("-155209728", "%.zi", (size_t) -155209728);
-  checkf ("-155209728", "%zi", (size_t) -155209728);
-  checkf ("-155209728", "%zd", (size_t) -155209728);
-  checkf ("-155209728", "%+zi", (size_t) -155209728);
-
-  if (failure_cnt == 0)
-    printf ("\nstdio: PASS\n");
-  else
-    printf ("\nstdio: FAIL: %d tests failed\n", failure_cnt);
-}                                                                  
diff --git a/src/tests/internal/stdlib.c b/src/tests/internal/stdlib.c
deleted file mode 100644
index ad0f0f9..0000000
--- a/src/tests/internal/stdlib.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/* Test program for sorting and searching in lib/stdlib.c.
-
-   Attempts to test the sorting and searching functionality that
-   is not sufficiently tested elsewhere in Pintos.
-
-   This is not a test we will run on your submitted projects.
-   It is here for completeness.
-*/
-
-#undef NDEBUG
-#include <debug.h>
-#include <limits.h>
-#include <random.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include "threads/test.h"
-
-/* Maximum number of elements in an array that we will test. */
-#define MAX_CNT 4096
-
-static void shuffle (int[], size_t);
-static int compare_ints (const void *, const void *);
-static void verify_order (const int[], size_t);
-static void verify_bsearch (const int[], size_t);
-
-/* Test sorting and searching implementations. */
-void
-test (void) 
-{
-  int cnt;
-
-  printf ("testing various size arrays:");
-  for (cnt = 0; cnt < MAX_CNT; cnt = cnt * 4 / 3 + 1)
-    {
-      int repeat;
-
-      printf (" %zu", cnt);
-      for (repeat = 0; repeat < 10; repeat++) 
-        {
-          static int values[MAX_CNT];
-          int i;
-
-          /* Put values 0...CNT in random order in VALUES. */
-          for (i = 0; i < cnt; i++)
-            values[i] = i;
-          shuffle (values, cnt);
-  
-          /* Sort VALUES, then verify ordering. */
-          qsort (values, cnt, sizeof *values, compare_ints);
-          verify_order (values, cnt);
-          verify_bsearch (values, cnt);
-        }
-    }
-  
-  printf (" done\n");
-  printf ("stdlib: PASS\n");
-}
-
-/* Shuffles the CNT elements in ARRAY into random order. */
-static void
-shuffle (int *array, size_t cnt) 
-{
-  size_t i;
-
-  for (i = 0; i < cnt; i++)
-    {
-      size_t j = i + random_ulong () % (cnt - i);
-      int t = array[j];
-      array[j] = array[i];
-      array[i] = t;
-    }
-}
-
-/* Returns 1 if *A is greater than *B,
-   0 if *A equals *B,
-   -1 if *A is less than *B. */
-static int
-compare_ints (const void *a_, const void *b_) 
-{
-  const int *a = a_;
-  const int *b = b_;
-
-  return *a < *b ? -1 : *a > *b;
-}
-
-/* Verifies that ARRAY contains the CNT ints 0...CNT-1. */
-static void
-verify_order (const int *array, size_t cnt) 
-{
-  int i;
-
-  for (i = 0; (size_t) i < cnt; i++) 
-    ASSERT (array[i] == i);
-}
-
-/* Checks that bsearch() works properly in ARRAY.  ARRAY must
-   contain the values 0...CNT-1. */
-static void
-verify_bsearch (const int *array, size_t cnt) 
-{
-  int not_in_array[] = {0, -1, INT_MAX, MAX_CNT, MAX_CNT + 1, MAX_CNT * 2};
-  int i;
-
-  /* Check that all the values in the array are found properly. */
-  for (i = 0; (size_t) i < cnt; i++) 
-    ASSERT (bsearch (&i, array, cnt, sizeof *array, compare_ints)
-            == array + i);
-
-  /* Check that some values not in the array are not found. */
-  not_in_array[0] = cnt;
-  for (i = 0; (size_t) i < sizeof not_in_array / sizeof *not_in_array; i++) 
-    ASSERT (bsearch (&not_in_array[i], array, cnt, sizeof *array, compare_ints)
-            == NULL);
-}
diff --git a/src/tests/lib.c b/src/tests/lib.c
deleted file mode 100644
index ee36505..0000000
--- a/src/tests/lib.c
+++ /dev/null
@@ -1,196 +0,0 @@
-#include "tests/lib.h"
-#include <random.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <string.h>
-#include <syscall.h>
-
-const char *test_name;
-bool quiet = false;
-
-static void
-vmsg (const char *format, va_list args, const char *suffix) 
-{
-  /* We go to some trouble to stuff the entire message into a
-     single buffer and output it in a single system call, because
-     that'll (typically) ensure that it gets sent to the console
-     atomically.  Otherwise kernel messages like "foo: exit(0)"
-     can end up being interleaved if we're unlucky. */
-  static char buf[1024];
-
-  snprintf (buf, sizeof buf, "(%s) ", test_name);
-  vsnprintf (buf + strlen (buf), sizeof buf - strlen (buf), format, args);
-  strlcpy (buf + strlen (buf), suffix, sizeof buf - strlen (buf));
-  write (STDOUT_FILENO, buf, strlen (buf));
-}
-
-void
-msg (const char *format, ...) 
-{
-  va_list args;
-
-  if (quiet)
-    return;
-  va_start (args, format);
-  vmsg (format, args, "\n");
-  va_end (args);
-}
-
-void
-fail (const char *format, ...) 
-{
-  va_list args;
-
-  va_start (args, format);
-  vmsg (format, args, ": FAILED\n");
-  va_end (args);
-
-  exit (1);
-}
-
-static void
-swap (void *a_, void *b_, size_t size) 
-{
-  uint8_t *a = a_;
-  uint8_t *b = b_;
-  size_t i;
-
-  for (i = 0; i < size; i++) 
-    {
-      uint8_t t = a[i];
-      a[i] = b[i];
-      b[i] = t;
-    }
-}
-
-void
-shuffle (void *buf_, size_t cnt, size_t size) 
-{
-  char *buf = buf_;
-  size_t i;
-
-  for (i = 0; i < cnt; i++)
-    {
-      size_t j = i + random_ulong () % (cnt - i);
-      swap (buf + i * size, buf + j * size, size);
-    }
-}
-
-void
-exec_children (const char *child_name, pid_t pids[], size_t child_cnt) 
-{
-  size_t i;
-
-  for (i = 0; i < child_cnt; i++) 
-    {
-      char cmd_line[128];
-      snprintf (cmd_line, sizeof cmd_line, "%s %zu", child_name, i);
-      CHECK ((pids[i] = exec (cmd_line)) != PID_ERROR,
-             "exec child %zu of %zu: \"%s\"", i + 1, child_cnt, cmd_line);
-    }
-}
-
-void
-wait_children (pid_t pids[], size_t child_cnt) 
-{
-  size_t i;
-  
-  for (i = 0; i < child_cnt; i++) 
-    {
-      int status = wait (pids[i]);
-      CHECK (status == (int) i,
-             "wait for child %zu of %zu returned %d (expected %zu)",
-             i + 1, child_cnt, status, i);
-    }
-}
-
-void
-check_file_handle (int fd,
-                   const char *file_name, const void *buf_, size_t size) 
-{
-  const char *buf = buf_;
-  size_t ofs = 0;
-  size_t file_size;
-
-  /* Warn about file of wrong size.  Don't fail yet because we
-     may still be able to get more information by reading the
-     file. */
-  file_size = filesize (fd);
-  if (file_size != size)
-    msg ("size of %s (%zu) differs from expected (%zu)",
-          file_name, file_size, size);
-
-  /* Read the file block-by-block, comparing data as we go. */
-  while (ofs < size)
-    {
-      char block[512];
-      size_t block_size, ret_val;
-
-      block_size = size - ofs;
-      if (block_size > sizeof block)
-        block_size = sizeof block;
-
-      ret_val = read (fd, block, block_size);
-      if (ret_val != block_size)
-        fail ("read of %zu bytes at offset %zu in \"%s\" returned %zu",
-              block_size, ofs, file_name, ret_val);
-
-      compare_bytes (block, buf + ofs, block_size, ofs, file_name);
-      ofs += block_size;
-    }
-
-  /* Now fail due to wrong file size. */
-  if (file_size != size)
-    fail ("size of %s (%zu) differs from expected (%zu)",
-          file_name, file_size, size);
-
-  msg ("verified contents of \"%s\"", file_name);
-}
-
-void
-check_file (const char *file_name, const void *buf, size_t size) 
-{
-  int fd;
-
-  CHECK ((fd = open (file_name)) > 1, "open \"%s\" for verification",
-         file_name);
-  check_file_handle (fd, file_name, buf, size);
-  msg ("close \"%s\"", file_name);
-  close (fd);
-}
-
-void
-compare_bytes (const void *read_data_, const void *expected_data_, size_t size,
-               size_t ofs, const char *file_name) 
-{
-  const uint8_t *read_data = read_data_;
-  const uint8_t *expected_data = expected_data_;
-  size_t i, j;
-  size_t show_cnt;
-
-  if (!memcmp (read_data, expected_data, size))
-    return;
-  
-  for (i = 0; i < size; i++)
-    if (read_data[i] != expected_data[i])
-      break;
-  for (j = i + 1; j < size; j++)
-    if (read_data[j] == expected_data[j])
-      break;
-
-  quiet = false;
-  msg ("%zu bytes read starting at offset %zu in \"%s\" differ "
-       "from expected.", j - i, ofs + i, file_name);
-  show_cnt = j - i;
-  if (j - i > 64) 
-    {
-      show_cnt = 64;
-      msg ("Showing first differing %zu bytes.", show_cnt);
-    }
-  msg ("Data actually read:");
-  hex_dump (ofs + i, read_data + i, show_cnt, true);
-  msg ("Expected data:");
-  hex_dump (ofs + i, expected_data + i, show_cnt, true);
-  fail ("%zu bytes read starting at offset %zu in \"%s\" differ "
-        "from expected", j - i, ofs + i, file_name);
-}
diff --git a/src/tests/lib.h b/src/tests/lib.h
deleted file mode 100644
index 648327b..0000000
--- a/src/tests/lib.h
+++ /dev/null
@@ -1,50 +0,0 @@
-#ifndef TESTS_LIB_H
-#define TESTS_LIB_H
-
-#include <debug.h>
-#include <stdbool.h>
-#include <stddef.h>
-#include <syscall.h>
-
-extern const char *test_name;
-extern bool quiet;
-
-void msg (const char *, ...) PRINTF_FORMAT (1, 2);
-void fail (const char *, ...) PRINTF_FORMAT (1, 2) NO_RETURN;
-
-/* Takes an expression to test for SUCCESS and a message, which
-   may include printf-style arguments.  Logs the message, then
-   tests the expression.  If it is zero, indicating failure,
-   emits the message as a failure.
-
-   Somewhat tricky to use:
-
-     - SUCCESS must not have side effects that affect the
-       message, because that will cause the original message and
-       the failure message to differ.
-
-     - The message must not have side effects of its own, because
-       it will be printed twice on failure, or zero times on
-       success if quiet is set. */
-#define CHECK(SUCCESS, ...)                     \
-        do                                      \
-          {                                     \
-            msg (__VA_ARGS__);                  \
-            if (!(SUCCESS))                     \
-              fail (__VA_ARGS__);               \
-          }                                     \
-        while (0)
-
-void shuffle (void *, size_t cnt, size_t size);
-
-void exec_children (const char *child_name, pid_t pids[], size_t child_cnt);
-void wait_children (pid_t pids[], size_t child_cnt);
-
-void check_file_handle (int fd, const char *file_name,
-                        const void *buf_, size_t filesize);
-void check_file (const char *file_name, const void *buf, size_t filesize);
-
-void compare_bytes (const void *read_data, const void *expected_data,
-                    size_t size, size_t ofs, const char *file_name);
-
-#endif /* test/lib.h */
diff --git a/src/tests/lib.pm b/src/tests/lib.pm
deleted file mode 100644
index bc37ae5..0000000
--- a/src/tests/lib.pm
+++ /dev/null
@@ -1,19 +0,0 @@
-use strict;
-use warnings;
-
-use tests::random;
-
-sub shuffle {
-    my ($in, $cnt, $sz) = @_;
-    $cnt * $sz == length $in or die;
-    my (@a) = 0...$cnt - 1;
-    for my $i (0...$cnt - 1) {
-	my ($j) = $i + random_ulong () % ($cnt - $i);
-	@a[$i, $j] = @a[$j, $i];
-    }
-    my ($out) = "";
-    $out .= substr ($in, $_ * $sz, $sz) foreach @a;
-    return $out;
-}
-
-1;
diff --git a/src/tests/main.c b/src/tests/main.c
deleted file mode 100644
index ad1b0f1..0000000
--- a/src/tests/main.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <random.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-int
-main (int argc UNUSED, char *argv[]) 
-{
-  test_name = argv[0];
-
-  msg ("begin");
-  random_init (0);
-  test_main ();
-  msg ("end");
-  return 0;
-}
diff --git a/src/tests/main.h b/src/tests/main.h
deleted file mode 100644
index f0e8818..0000000
--- a/src/tests/main.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef TESTS_MAIN_H
-#define TESTS_MAIN_H
-
-void test_main (void);
-
-#endif /* tests/main.h */
diff --git a/src/tests/make-grade b/src/tests/make-grade
deleted file mode 100644
index a3faa0e..0000000
--- a/src/tests/make-grade
+++ /dev/null
@@ -1,152 +0,0 @@
-#! /usr/bin/perl
-
-use strict;
-use warnings;
-
-@ARGV == 3 || die;
-my ($src_dir, $results_file, $grading_file) = @ARGV;
-
-# Read pass/file verdicts from $results_file.
-open (RESULTS, '<', $results_file) || die "$results_file: open: $!\n";
-my (%verdicts, %verdict_counts);
-while (<RESULTS>) {
-    my ($verdict, $test) = /^(pass|FAIL) (.*)$/ or die;
-    $verdicts{$test} = $verdict eq 'pass';
-}
-close RESULTS;
-
-my (@failures);
-my (@overall, @rubrics, @summary);
-my ($pct_actual, $pct_possible) = (0, 0);
-
-# Read grading file.
-my (@items);
-open (GRADING, '<', $grading_file) || die "$grading_file: open: $!\n";
-while (<GRADING>) {
-    s/#.*//;
-    next if /^\s*$/;
-    my ($max_pct, $rubric_suffix) = /^\s*(\d+(?:\.\d+)?)%\t(.*)/ or die;
-    my ($dir) = $rubric_suffix =~ /^(.*)\//;
-    my ($rubric_file) = "$src_dir/$rubric_suffix";
-    open (RUBRIC, '<', $rubric_file) or die "$rubric_file: open: $!\n";
-
-    # Rubric file must begin with title line.
-    my $title = <RUBRIC>;
-    chomp $title;
-    $title =~ s/:$// or die;
-    $title .= " ($rubric_suffix):";
-    push (@rubrics, $title);
-
-    my ($score, $possible) = (0, 0);
-    my ($cnt, $passed) = (0, 0);
-    my ($was_score) = 0;
-    while (<RUBRIC>) {
-	chomp;
-	push (@rubrics, "\t$_"), next if /^-/;
-	push (@rubrics, ""), next if /^\s*$/;
-	my ($poss, $name) = /^(\d+)\t(.*)$/ or die;
-	my ($test) = "$dir/$name";
-	my ($points) = 0;
-	if (!defined $verdicts{$test}) {
-	    push (@overall, "warning: $test not tested, assuming failure");
-	} elsif ($verdicts{$test}) {
-	    $points = $poss;
-	    $passed++;
-	}
-	push (@failures, $test) if !$points;
-	$verdict_counts{$test}++;
-	push (@rubrics, sprintf ("\t%4s%2d/%2d %s",
-				 $points ? '' : '**', $points, $poss, $test));
-	$score += $points;
-	$possible += $poss;
-	$cnt++;
-    }
-    close (RUBRIC);
-
-    push (@rubrics, "");
-    push (@rubrics, "\t- Section summary.");
-    push (@rubrics, sprintf ("\t%4s%3d/%3d %s",
-			     '', $passed, $cnt, 'tests passed'));
-    push (@rubrics, sprintf ("\t%4s%3d/%3d %s",
-			     '', $score, $possible, 'points subtotal'));
-    push (@rubrics, '');
-
-    my ($pct) = ($score / $possible) * $max_pct;
-    push (@summary, sprintf ("%-45s %3d/%3d %5.1f%%/%5.1f%%",
-			     $rubric_suffix,
-			     $score, $possible,
-			     $pct, $max_pct));
-    $pct_actual += $pct;
-    $pct_possible += $max_pct;
-}
-close GRADING;
-
-my ($sum_line)
-  = "--------------------------------------------- --- --- ------ ------";
-unshift (@summary,
-	 "SUMMARY BY TEST SET",
-	 '',
-	 sprintf ("%-45s %3s %3s %6s %6s",
-		  "Test Set", "Pts", "Max", "% Ttl", "% Max"),
-	 $sum_line);
-push (@summary,
-      $sum_line,
-      sprintf ("%-45s %3s %3s %5.1f%%/%5.1f%%",
-	       'Total', '', '', $pct_actual, $pct_possible));
-
-unshift (@rubrics,
-	 "SUMMARY OF INDIVIDUAL TESTS",
-	 '');
-
-foreach my $name (keys (%verdicts)) {
-    my ($count) = $verdict_counts{$name};
-    if (!defined ($count) || $count != 1) {
-	if (!defined ($count) || !$count) {
-	    push (@overall, "warning: test $name doesn't count for grading");
-	} else {
-	    push (@overall,
-		  "warning: test $name counted $count times in grading");
-	}
-    }
-}
-push (@overall, sprintf ("TOTAL TESTING SCORE: %.1f%%", $pct_actual));
-if (sprintf ("%.1f", $pct_actual) eq sprintf ("%.1f", $pct_possible)) {
-    push (@overall, "ALL TESTED PASSED -- PERFECT SCORE");
-}
-
-my (@divider) = ('', '- ' x 38, '');
-
-print map ("$_\n", @overall, @divider, @summary, @divider, @rubrics);
-
-for my $test (@failures) {
-    print map ("$_\n", @divider);
-    print "DETAILS OF $test FAILURE:\n\n";
-
-    if (open (RESULT, '<', "$test.result")) {
-	my $first_line = <RESULT>;
-	my ($cnt) = 0;
-	while (<RESULT>) {
-	    print;
-	    $cnt++;
-	}
-	close (RESULT);
-    }
-
-    if (open (OUTPUT, '<', "$test.output")) {
-	print "\nOUTPUT FROM $test:\n\n";
-    
-	my ($panics, $boots) = (0, 0);
-	while (<OUTPUT>) {
-	    if (/PANIC/ && ++$panics > 2) {
-		print "[...details of additional panic(s) omitted...]\n";
-		last;
-	    }
-	    print;
-	    if (/Pintos booting/ && ++$boots > 1) {
-		print "[...details of reboot(s) omitted...]\n";
-		last;
-	    }
-	}
-	close (OUTPUT);
-    }
-}
diff --git a/src/tests/random.pm b/src/tests/random.pm
deleted file mode 100644
index be008ff..0000000
--- a/src/tests/random.pm
+++ /dev/null
@@ -1,27 +0,0 @@
-use strict;
-use warnings;
-
-use tests::arc4;
-
-my (@arc4);
-
-sub random_init {
-    if (@arc4 == 0) {
-	my ($seed) = @_;
-	$seed = 0 if !defined $seed;
-	@arc4 = arc4_init (pack ("V", $seed));
-    }
-}
-
-sub random_bytes {
-    random_init ();
-    my ($n) = @_;
-    return arc4_crypt (\@arc4, "\0" x $n);
-}
-
-sub random_ulong {
-    random_init ();
-    return unpack ("V", random_bytes (4));
-}
-
-1;
diff --git a/src/tests/tests.pm b/src/tests/tests.pm
deleted file mode 100644
index 29e0707..0000000
--- a/src/tests/tests.pm
+++ /dev/null
@@ -1,622 +0,0 @@
-use strict;
-use warnings;
-use tests::Algorithm::Diff;
-use File::Temp 'tempfile';
-use Fcntl qw(SEEK_SET SEEK_CUR);
-
-sub fail;
-sub pass;
-
-die if @ARGV != 2;
-our ($test, $src_dir) = @ARGV;
-
-my ($msg_file) = tempfile ();
-select ($msg_file);
-
-our (@prereq_tests) = ();
-if ($test =~ /^(.*)-persistence$/) {
-    push (@prereq_tests, $1);
-}
-for my $prereq_test (@prereq_tests) {
-    my (@result) = read_text_file ("$prereq_test.result");
-    fail "Prerequisite test $prereq_test failed.\n" if $result[0] ne 'PASS';
-}
-
-
-# Generic testing.
-
-sub check_expected {
-    my ($expected) = pop @_;
-    my (@options) = @_;
-    my (@output) = read_text_file ("$test.output");
-    common_checks ("run", @output);
-    compare_output ("run", @options, \@output, $expected);
-}
-
-sub common_checks {
-    my ($run, @output) = @_;
-
-    fail "\u$run produced no output at all\n" if @output == 0;
-
-    check_for_panic ($run, @output);
-    check_for_keyword ($run, "FAIL", @output);
-    check_for_triple_fault ($run, @output);
-    check_for_keyword ($run, "TIMEOUT", @output);
-
-    fail "\u$run didn't start up properly: no \"Pintos booting\" message\n"
-      if !grep (/Pintos booting with.*kB RAM\.\.\./, @output);
-    fail "\u$run didn't start up properly: no \"Boot complete\" message\n"
-      if !grep (/Boot complete/, @output);
-    fail "\u$run didn't shut down properly: no \"Timer: # ticks\" message\n"
-      if !grep (/Timer: \d+ ticks/, @output);
-    fail "\u$run didn't shut down properly: no \"Powering off\" message\n"
-      if !grep (/Powering off/, @output);
-}
-
-sub check_for_panic {
-    my ($run, @output) = @_;
-
-    my ($panic) = grep (/PANIC/, @output);
-    return unless defined $panic;
-
-    print "Kernel panic in $run: ", substr ($panic, index ($panic, "PANIC")),
-      "\n";
-
-    my (@stack_line) = grep (/Call stack:/, @output);
-    if (@stack_line != 0) {
-	my ($addrs) = $stack_line[0] =~ /Call stack:((?: 0x[0-9a-f]+)+)/;
-
-	# Find a user program to translate user virtual addresses.
-	my ($userprog) = "";
-	$userprog = "$test"
-	  if grep (hex ($_) < 0xc0000000, split (' ', $addrs)) > 0 && -e $test;
-
-	# Get and print the backtrace.
-	my ($trace) = scalar (`backtrace kernel.o $userprog $addrs`);
-	print "Call stack:$addrs\n";
-	print "Translation of call stack:\n";
-	print $trace;
-
-	# Print disclaimer.
-	if ($userprog ne '' && index ($trace, $userprog) >= 0) {
-	    print <<EOF;
-Translations of user virtual addresses above are based on a guess at
-the binary to use.  If this guess is incorrect, then those
-translations will be misleading.
-EOF
-	}
-    }
-
-    if ($panic =~ /sec_no \< d-\>capacity/) {
-	print <<EOF;
-\nThis assertion commonly fails when accessing a file via an inode that
-has been closed and freed.  Freeing an inode clears all its sector
-indexes to 0xcccccccc, which is not a valid sector number for disks
-smaller than about 1.6 TB.
-EOF
-    }
-
-    fail;
-}
-
-sub check_for_keyword {
-    my ($run, $keyword, @output) = @_;
-    
-    my ($kw_line) = grep (/$keyword/, @output);
-    return unless defined $kw_line;
-
-    # Most output lines are prefixed by (test-name).  Eliminate this
-    # from our message for brevity.
-    $kw_line =~ s/^\([^\)]+\)\s+//;
-    print "$run: $kw_line\n";
-
-    fail;
-}
-
-sub check_for_triple_fault {
-    my ($run, @output) = @_;
-
-    my ($reboots) = grep (/Pintos booting/, @output) - 1;
-    return unless $reboots > 0;
-
-    print <<EOF;
-\u$run spontaneously rebooted $reboots times.
-This is most often caused by unhandled page faults.
-Read the Triple Faults section in the Debugging chapter
-of the Pintos manual for more information.
-EOF
-
-    fail;
-}
-
-# Get @output without header or trailer.
-sub get_core_output {
-    my ($run, @output) = @_;
-    my ($p);
-
-    my ($process);
-    my ($start);
-    for my $i (0...$#_) {
-	$start = $i + 1, last
-	  if ($process) = $output[$i] =~ /^Executing '(\S+).*':$/;
-    }
-
-    my ($end);
-    for my $i ($start...$#output) {
-	$end = $i - 1, last if $output[$i] =~ /^Execution of '.*' complete.$/;
-    }
-
-    fail "\u$run didn't start a thread or process\n" if !defined $start;
-    fail "\u$run started '$process' but it never finished\n" if !defined $end;
-
-    return @output[$start...$end];
-}
-
-sub compare_output {
-    my ($run) = shift @_;
-    my ($expected) = pop @_;
-    my ($output) = pop @_;
-    my (%options) = @_;
-
-    my (@output) = get_core_output ($run, @$output);
-    fail "\u$run didn't produce any output" if !@output;
-
-    my $ignore_exit_codes = exists $options{IGNORE_EXIT_CODES};
-    if ($ignore_exit_codes) {
-	delete $options{IGNORE_EXIT_CODES};
-	@output = grep (!/^[a-zA-Z0-9-_]+: exit\(\-?\d+\)$/, @output);
-    }
-    my $ignore_user_faults = exists $options{IGNORE_USER_FAULTS};
-    if ($ignore_user_faults) {
-	delete $options{IGNORE_USER_FAULTS};
-	@output = grep (!/^Page fault at.*in user context\.$/
-			&& !/: dying due to interrupt 0x0e \(.*\).$/
-			&& !/^Interrupt 0x0e \(.*\) at eip=/
-			&& !/^ cr2=.* error=.*/
-			&& !/^ eax=.* ebx=.* ecx=.* edx=.*/
-			&& !/^ esi=.* edi=.* esp=.* ebp=.*/
-			&& !/^ cs=.* ds=.* es=.* ss=.*/, @output);
-    }
-    die "unknown option " . (keys (%options))[0] . "\n" if %options;
-
-    my ($msg);
-
-    # Compare actual output against each allowed output.
-    if (ref ($expected) eq 'ARRAY') {
-	my ($i) = 0;
-	$expected = {map ((++$i => $_), @$expected)};
-    }
-    foreach my $key (keys %$expected) {
-	my (@expected) = split ("\n", $expected->{$key});
-
-	$msg .= "Acceptable output:\n";
-	$msg .= join ('', map ("  $_\n", @expected));
-
-	# Check whether actual and expected match.
-	# If it's a perfect match, we're done.
-	if ($#output == $#expected) {
-	    my ($eq) = 1;
-	    for (my ($i) = 0; $i <= $#expected; $i++) {
-		$eq = 0 if $output[$i] ne $expected[$i];
-	    }
-	    return $key if $eq;
-	}
-
-	# They differ.  Output a diff.
-	my (@diff) = "";
-	my ($d) = Algorithm::Diff->new (\@expected, \@output);
-	while ($d->Next ()) {
-	    my ($ef, $el, $af, $al) = $d->Get (qw (min1 max1 min2 max2));
-	    if ($d->Same ()) {
-		push (@diff, map ("  $_\n", $d->Items (1)));
-	    } else {
-		push (@diff, map ("- $_\n", $d->Items (1))) if $d->Items (1);
-		push (@diff, map ("+ $_\n", $d->Items (2))) if $d->Items (2);
-	    }
-	}
-
-	$msg .= "Differences in `diff -u' format:\n";
-	$msg .= join ('', @diff);
-    }
-
-    # Failed to match.  Report failure.
-    $msg .= "\n(Process exit codes are excluded for matching purposes.)\n"
-      if $ignore_exit_codes;
-    $msg .= "\n(User fault messages are excluded for matching purposes.)\n"
-      if $ignore_user_faults;
-    fail "Test output failed to match any acceptable form.\n\n$msg";
-}
-
-# File system extraction.
-
-# check_archive (\%CONTENTS)
-#
-# Checks that the extracted file system's contents match \%CONTENTS.
-# Each key in the hash is a file name.  Each value may be:
-#
-#	- $FILE: Name of a host file containing the expected contents.
-#
-#	- [$FILE, $OFFSET, $LENGTH]: An excerpt of host file $FILE
-#	  comprising the $LENGTH bytes starting at $OFFSET.
-#
-#	- [$CONTENTS]: The literal expected file contents, as a string.
-#
-#       - {SUBDIR}: A subdirectory, in the same form described here,
-#         recursively.
-sub check_archive {
-    my ($expected_hier) = @_;
-
-    my (@output) = read_text_file ("$test.output");
-    common_checks ("file system extraction run", @output);
-
-    @output = get_core_output ("file system extraction run", @output);
-    @output = grep (!/^[a-zA-Z0-9-_]+: exit\(\d+\)$/, @output);
-    fail join ("\n", "Error extracting file system:", @output) if @output;
-
-    my ($test_base_name) = $test;
-    $test_base_name =~ s%.*/%%;
-    $test_base_name =~ s%-persistence$%%;
-    $expected_hier->{$test_base_name} = $prereq_tests[0];
-    $expected_hier->{'tar'} = 'tests/filesys/extended/tar';
-
-    my (%expected) = normalize_fs (flatten_hierarchy ($expected_hier, ""));
-    my (%actual) = read_tar ("$prereq_tests[0].tar");
-
-    my ($errors) = 0;
-    foreach my $name (sort keys %expected) {
-	if (exists $actual{$name}) {
-	    if (is_dir ($actual{$name}) && !is_dir ($expected{$name})) {
-		print "$name is a directory but should be an ordinary file.\n";
-		$errors++;
-	    } elsif (!is_dir ($actual{$name}) && is_dir ($expected{$name})) {
-		print "$name is an ordinary file but should be a directory.\n";
-		$errors++;
-	    }
-	} else {
-	    print "$name is missing from the file system.\n";
-	    $errors++;
-	}
-    }
-    foreach my $name (sort keys %actual) {
-	if (!exists $expected{$name}) {
-	    if ($name =~ /^[[:print:]]+$/) {
-		print "$name exists in the file system but it should not.\n";
-	    } else {
-		my ($esc_name) = $name;
-		$esc_name =~ s/[^[:print:]]/./g;
-		print <<EOF;
-$esc_name exists in the file system but should not.  (The name
-of this file contains unusual characters that were printed as `.'.)
-EOF
-	    }
-	    $errors++;
- 	}
-    }
-    if ($errors) {
-	print "\nActual contents of file system:\n";
-	print_fs (%actual);
-	print "\nExpected contents of file system:\n";
-	print_fs (%expected);
-    } else {
-	foreach my $name (sort keys %expected) {
-	    if (!is_dir ($expected{$name})) {
-		my ($exp_file, $exp_length) = open_file ($expected{$name});
-		my ($act_file, $act_length) = open_file ($actual{$name});
-		$errors += !compare_files ($exp_file, $exp_length,
-					   $act_file, $act_length, $name,
-					   !$errors);
-		close ($exp_file);
-		close ($act_file);
-	    }
-	}
-    }
-    fail "Extracted file system contents are not correct.\n" if $errors;
-}
-
-# open_file ([$FILE, $OFFSET, $LENGTH])
-# open_file ([$CONTENTS])
-#
-# Opens a file for the contents passed in, which must be in one of
-# the two above forms that correspond to check_archive() arguments.
-#
-# Returns ($HANDLE, $LENGTH), where $HANDLE is the file's handle and
-# $LENGTH is the number of bytes in the file's content.
-sub open_file {
-    my ($value) = @_;
-    die if ref ($value) ne 'ARRAY';
-
-    my ($file) = tempfile ();
-    my ($length);
-    if (@$value == 1) {
-	$length = length ($value->[0]);
-	$file = tempfile ();
-	syswrite ($file, $value->[0]) == $length
-	  or die "writing temporary file: $!\n";
-	sysseek ($file, 0, SEEK_SET);
-    } elsif (@$value == 3) {
-	$length = $value->[2];
-	open ($file, '<', $value->[0]) or die "$value->[0]: open: $!\n";
-	die "$value->[0]: file is smaller than expected\n"
-	  if -s $file < $value->[1] + $length;
-	sysseek ($file, $value->[1], SEEK_SET);
-    } else {
-	die;
-    }
-    return ($file, $length);
-}
-
-# compare_files ($A, $A_SIZE, $B, $B_SIZE, $NAME, $VERBOSE)
-#
-# Compares $A_SIZE bytes in $A to $B_SIZE bytes in $B.
-# ($A and $B are handles.)
-# If their contents differ, prints a brief message describing
-# the differences, using $NAME to identify the file.
-# The message contains more detail if $VERBOSE is nonzero.
-# Returns 1 if the contents are identical, 0 otherwise.
-sub compare_files {
-    my ($a, $a_size, $b, $b_size, $name, $verbose) = @_;
-    my ($ofs) = 0;
-    select(STDOUT);
-    for (;;) {
-	my ($a_amt) = $a_size >= 1024 ? 1024 : $a_size;
-	my ($b_amt) = $b_size >= 1024 ? 1024 : $b_size;
-	my ($a_data, $b_data);
-	if (!defined (sysread ($a, $a_data, $a_amt))
-	    || !defined (sysread ($b, $b_data, $b_amt))) {
-	    die "reading $name: $!\n";
-	}
-
-	my ($a_len) = length $a_data;
-	my ($b_len) = length $b_data;
-	last if $a_len == 0 && $b_len == 0;
-
-	if ($a_data ne $b_data) {
-	    my ($min_len) = $a_len < $b_len ? $a_len : $b_len;
-	    my ($diff_ofs);
-	    for ($diff_ofs = 0; $diff_ofs < $min_len; $diff_ofs++) {
-		last if (substr ($a_data, $diff_ofs, 1)
-			 ne substr ($b_data, $diff_ofs, 1));
-	    }
-
-	    printf "\nFile $name differs from expected "
-	      . "starting at offset 0x%x.\n", $ofs + $diff_ofs;
-	    if ($verbose ) {
-		print "Expected contents:\n";
-		hex_dump (substr ($a_data, $diff_ofs, 64), $ofs + $diff_ofs);
-		print "Actual contents:\n";
-		hex_dump (substr ($b_data, $diff_ofs, 64), $ofs + $diff_ofs);
-	    }
-	    return 0;
-	}
-
-	$ofs += $a_len;
-	$a_size -= $a_len;
-	$b_size -= $b_len;
-    }
-    return 1;
-}
-
-# hex_dump ($DATA, $OFS)
-#
-# Prints $DATA in hex and text formats.
-# The first byte of $DATA corresponds to logical offset $OFS
-# in whatever file the data comes from.
-sub hex_dump {
-    my ($data, $ofs) = @_;
-
-    if ($data eq '') {
-	printf "  (File ends at offset %08x.)\n", $ofs;
-	return;
-    }
-
-    my ($per_line) = 16;
-    while ((my $size = length ($data)) > 0) {
-	my ($start) = $ofs % $per_line;
-	my ($end) = $per_line;
-	$end = $start + $size if $end - $start > $size;
-	my ($n) = $end - $start;
-
-	printf "0x%08x  ", int ($ofs / $per_line) * $per_line;
-
-	# Hex version.
-	print "   " x $start;
-	for my $i ($start...$end - 1) {
-	    printf "%02x", ord (substr ($data, $i - $start, 1));
-	    print $i == $per_line / 2 - 1 ? '-' : ' ';
-	}
-	print "   " x ($per_line - $end);
-
-	# Character version.
-	my ($esc_data) = substr ($data, 0, $n);
-	$esc_data =~ s/[^[:print:]]/./g;
-	print "|", " " x $start, $esc_data, " " x ($per_line - $end), "|";
-
-	print "\n";
-
-	$data = substr ($data, $n);
-	$ofs += $n;
-    }
-}
-
-# print_fs (%FS)
-#
-# Prints a list of files in %FS, which must be a file system
-# as flattened by flatten_hierarchy() and normalized by
-# normalize_fs().
-sub print_fs {
-    my (%fs) = @_;
-    foreach my $name (sort keys %fs) {
-	my ($esc_name) = $name;
-	$esc_name =~ s/[^[:print:]]/./g;
-	print "$esc_name: ";
-	if (!is_dir ($fs{$name})) {
-	    print +file_size ($fs{$name}), "-byte file";
-	} else {
-	    print "directory";
-	}
-	print "\n";
-    }
-    print "(empty)\n" if !@_;
-}
-
-# normalize_fs (%FS)
-#
-# Takes a file system as flattened by flatten_hierarchy().
-# Returns a similar file system in which values of the form $FILE
-# are replaced by those of the form [$FILE, $OFFSET, $LENGTH].
-sub normalize_fs {
-    my (%fs) = @_;
-    foreach my $name (keys %fs) {
-	my ($value) = $fs{$name};
-	next if is_dir ($value) || ref ($value) ne '';
-	die "can't open $value\n" if !stat $value;
-	$fs{$name} = [$value, 0, -s _];
-    }
-    return %fs;
-}
-
-# is_dir ($VALUE)
-#
-# Takes a value like one in the hash returned by flatten_hierarchy()
-# and returns 1 if it represents a directory, 0 otherwise.
-sub is_dir {
-    my ($value) = @_;
-    return ref ($value) eq '' && $value eq 'directory';
-}
-
-# file_size ($VALUE)
-#
-# Takes a value like one in the hash returned by flatten_hierarchy()
-# and returns the size of the file it represents.
-sub file_size {
-    my ($value) = @_;
-    die if is_dir ($value);
-    die if ref ($value) ne 'ARRAY';
-    return @$value > 1 ? $value->[2] : length ($value->[0]);
-}
-
-# flatten_hierarchy ($HIER_FS, $PREFIX)
-#
-# Takes a file system in the format expected by check_archive() and
-# returns a "flattened" version in which file names include all parent
-# directory names and the value of directories is just "directory".
-sub flatten_hierarchy {
-    my (%hier_fs) = %{$_[0]};
-    my ($prefix) = $_[1];
-    my (%flat_fs);
-    for my $name (keys %hier_fs) {
-	my ($value) = $hier_fs{$name};
-	if (ref $value eq 'HASH') {
-	    %flat_fs = (%flat_fs, flatten_hierarchy ($value, "$prefix$name/"));
-	    $flat_fs{"$prefix$name"} = 'directory';
-	} else {
-	    $flat_fs{"$prefix$name"} = $value;
-	}
-    }
-    return %flat_fs;
-}
-
-# read_tar ($ARCHIVE)
-#
-# Reads the ustar-format tar file in $ARCHIVE
-# and returns a flattened file system for it.
-sub read_tar {
-    my ($archive) = @_;
-    my (%content);
-    open (ARCHIVE, '<', $archive) or fail "$archive: open: $!\n";
-    for (;;) {
-	my ($header);
-	if ((my $retval = sysread (ARCHIVE, $header, 512)) != 512) {
-	    fail "$archive: unexpected end of file\n" if $retval >= 0;
-	    fail "$archive: read: $!\n";
-	}
-
-	last if $header eq "\0" x 512;
-
-	# Verify magic numbers.
-	if (substr ($header, 257, 6) ne "ustar\0"
-	    || substr ($header, 263, 2) ne '00') {
-	    fail "$archive: corrupt ustar header\n";
-	}
-
-	# Verify checksum.
-	my ($chksum) = oct (unpack ("Z*", substr ($header, 148, 8, ' ' x 8)));
-	my ($correct_chksum) = unpack ("%32a*", $header);
-	fail "$archive: bad header checksum\n" if $chksum != $correct_chksum;
-
-	# Get file name.
-	my ($name) = unpack ("Z100", $header);
-	my ($prefix) = unpack ("Z*", substr ($header, 345));
-	$name = "$prefix/$name" if $prefix ne '';
-	fail "$archive: contains file with empty name" if $name eq '';
-
-	# Get type.
-	my ($typeflag) = substr ($header, 156, 1);
-	$typeflag = '0' if $typeflag eq "\0";
-	fail "unknown file type '$typeflag'\n" if $typeflag !~ /[05]/;
-
-	# Get size.
-	my ($size) = oct (unpack ("Z*", substr ($header, 124, 12)));
-	fail "bad size $size\n" if $size < 0;
-	$size = 0 if $typeflag eq '5';
-
-	# Store content.
-	if (exists $content{$name}) {
-	    fail "$archive: contains multiple entries for $name\n";
-	}
-	if ($typeflag eq '5') {
-	    $content{$name} = 'directory';
-	} else {
-	    my ($position) = sysseek (ARCHIVE, 0, SEEK_CUR);
-	    $content{$name} = [$archive, $position, $size];
-	    sysseek (ARCHIVE, int (($size + 511) / 512) * 512, SEEK_CUR);
-	}
-    }
-    close (ARCHIVE);
-    return %content;
-}
-
-# Utilities.
-
-sub fail {
-    finish ("FAIL", @_);
-}
-
-sub pass {
-    finish ("PASS", @_);
-}
-
-sub finish {
-    my ($verdict, @messages) = @_;
-
-    seek ($msg_file, 0, 0);
-    push (@messages, <$msg_file>);
-    close ($msg_file);
-    chomp (@messages);
-
-    my ($result_fn) = "$test.result";
-    open (RESULT, '>', $result_fn) or die "$result_fn: create: $!\n";
-    print RESULT "$verdict\n";
-    print RESULT "$_\n" foreach @messages;
-    close (RESULT);
-
-    if ($verdict eq 'PASS') {
-	print STDOUT "pass $test\n";
-    } else {
-	print STDOUT "FAIL $test\n";
-    }
-    print STDOUT "$_\n" foreach @messages;
-
-    exit 0;
-}
-
-sub read_text_file {
-    my ($file_name) = @_;
-    open (FILE, '<', $file_name) or die "$file_name: open: $!\n";
-    my (@content) = <FILE>;
-    chomp (@content);
-    close (FILE);
-    return @content;
-}
-
-1;
diff --git a/src/tests/threads/Grading b/src/tests/threads/Grading
deleted file mode 100644
index c9be35f..0000000
--- a/src/tests/threads/Grading
+++ /dev/null
@@ -1,6 +0,0 @@
-# Percentage of the testing point total designated for each set of
-# tests.
-
-20.0%	tests/threads/Rubric.alarm
-40.0%	tests/threads/Rubric.priority
-40.0%	tests/threads/Rubric.mlfqs
diff --git a/src/tests/threads/Make.tests b/src/tests/threads/Make.tests
deleted file mode 100644
index 961c3ce..0000000
--- a/src/tests/threads/Make.tests
+++ /dev/null
@@ -1,49 +0,0 @@
-# -*- makefile -*-
-
-# Test names.
-tests/threads_TESTS = $(addprefix tests/threads/,alarm-single		\
-alarm-multiple alarm-simultaneous alarm-zero alarm-negative		\
-)
-
-# Sources for tests.
-tests/threads_SRC  = tests/threads/tests.c
-tests/threads_SRC += tests/threads/alarm-wait.c
-tests/threads_SRC += tests/threads/alarm-simultaneous.c
-tests/threads_SRC += tests/threads/alarm-priority.c
-tests/threads_SRC += tests/threads/alarm-zero.c
-tests/threads_SRC += tests/threads/alarm-negative.c
-tests/threads_SRC += tests/threads/priority-change.c
-tests/threads_SRC += tests/threads/priority-donate-one.c
-tests/threads_SRC += tests/threads/priority-donate-multiple.c
-tests/threads_SRC += tests/threads/priority-donate-multiple2.c
-tests/threads_SRC += tests/threads/priority-donate-nest.c
-tests/threads_SRC += tests/threads/priority-donate-sema.c
-tests/threads_SRC += tests/threads/priority-donate-lower.c
-tests/threads_SRC += tests/threads/priority-fifo.c
-tests/threads_SRC += tests/threads/priority-preempt.c
-tests/threads_SRC += tests/threads/priority-sema.c
-tests/threads_SRC += tests/threads/priority-condvar.c
-tests/threads_SRC += tests/threads/priority-donate-chain.c
-tests/threads_SRC += tests/threads/mlfqs-load-1.c
-tests/threads_SRC += tests/threads/mlfqs-load-60.c
-tests/threads_SRC += tests/threads/mlfqs-load-avg.c
-tests/threads_SRC += tests/threads/mlfqs-recent-1.c
-tests/threads_SRC += tests/threads/mlfqs-fair.c
-tests/threads_SRC += tests/threads/mlfqs-block.c
-tests/threads_SRC += tests/threads/threadtest.c
-tests/threads_SRC += tests/threads/simplethreadtest.c
-
-MLFQS_OUTPUTS = 				\
-tests/threads/mlfqs-load-1.output		\
-tests/threads/mlfqs-load-60.output		\
-tests/threads/mlfqs-load-avg.output		\
-tests/threads/mlfqs-recent-1.output		\
-tests/threads/mlfqs-fair-2.output		\
-tests/threads/mlfqs-fair-20.output		\
-tests/threads/mlfqs-nice-2.output		\
-tests/threads/mlfqs-nice-10.output		\
-tests/threads/mlfqs-block.output
-
-$(MLFQS_OUTPUTS): KERNELFLAGS += -mlfqs
-$(MLFQS_OUTPUTS): TIMEOUT = 480
-
diff --git a/src/tests/threads/Rubric.alarm b/src/tests/threads/Rubric.alarm
deleted file mode 100644
index 61abe85..0000000
--- a/src/tests/threads/Rubric.alarm
+++ /dev/null
@@ -1,8 +0,0 @@
-Functionality and robustness of alarm clock:
-4	alarm-single
-4	alarm-multiple
-4	alarm-simultaneous
-4	alarm-priority
-
-1	alarm-zero
-1	alarm-negative
diff --git a/src/tests/threads/Rubric.mlfqs b/src/tests/threads/Rubric.mlfqs
deleted file mode 100644
index f260091..0000000
--- a/src/tests/threads/Rubric.mlfqs
+++ /dev/null
@@ -1,14 +0,0 @@
-Functionality of advanced scheduler:
-5	mlfqs-load-1
-5	mlfqs-load-60
-3	mlfqs-load-avg
-
-5	mlfqs-recent-1
-
-5	mlfqs-fair-2
-3	mlfqs-fair-20
-
-4	mlfqs-nice-2
-2	mlfqs-nice-10
-
-5	mlfqs-block
diff --git a/src/tests/threads/Rubric.priority b/src/tests/threads/Rubric.priority
deleted file mode 100644
index 652bc99..0000000
--- a/src/tests/threads/Rubric.priority
+++ /dev/null
@@ -1,15 +0,0 @@
-Functionality of priority scheduler:
-3	priority-change
-3	priority-preempt
-
-3	priority-fifo
-3	priority-sema
-3	priority-condvar
-
-3	priority-donate-one
-3	priority-donate-multiple
-3	priority-donate-multiple2
-3	priority-donate-nest
-5	priority-donate-chain
-3	priority-donate-sema
-3	priority-donate-lower
diff --git a/src/tests/threads/alarm-multiple.ck b/src/tests/threads/alarm-multiple.ck
deleted file mode 100644
index fd83bcd..0000000
--- a/src/tests/threads/alarm-multiple.ck
+++ /dev/null
@@ -1,4 +0,0 @@
-# -*- perl -*-
-use tests::tests;
-use tests::threads::alarm;
-check_alarm (7);
diff --git a/src/tests/threads/alarm-negative.c b/src/tests/threads/alarm-negative.c
deleted file mode 100644
index aec52cf..0000000
--- a/src/tests/threads/alarm-negative.c
+++ /dev/null
@@ -1,15 +0,0 @@
-/* Tests timer_sleep(-100).  Only requirement is that it not crash. */
-
-#include <stdio.h>
-#include "tests/threads/tests.h"
-#include "threads/malloc.h"
-#include "threads/synch.h"
-#include "threads/thread.h"
-#include "devices/timer.h"
-
-void
-test_alarm_negative (void) 
-{
-  timer_sleep (-100);
-  pass ();
-}
diff --git a/src/tests/threads/alarm-negative.ck b/src/tests/threads/alarm-negative.ck
deleted file mode 100644
index 0d2bab0..0000000
--- a/src/tests/threads/alarm-negative.ck
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(alarm-negative) begin
-(alarm-negative) PASS
-(alarm-negative) end
-EOF
-pass;
diff --git a/src/tests/threads/alarm-priority.c b/src/tests/threads/alarm-priority.c
deleted file mode 100644
index 2288ff6..0000000
--- a/src/tests/threads/alarm-priority.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Checks that when the alarm clock wakes up threads, the
-   higher-priority threads run first. */
-
-#include <stdio.h>
-#include "tests/threads/tests.h"
-#include "threads/init.h"
-#include "threads/malloc.h"
-#include "threads/synch.h"
-#include "threads/thread.h"
-#include "devices/timer.h"
-
-static thread_func alarm_priority_thread;
-static int64_t wake_time;
-static struct semaphore wait_sema;
-
-void
-test_alarm_priority (void) 
-{
-  int i;
-  
-  /* This test does not work with the MLFQS. */
-  ASSERT (!thread_mlfqs);
-
-  wake_time = timer_ticks () + 5 * TIMER_FREQ;
-  sema_init (&wait_sema, 0);
-  
-  for (i = 0; i < 10; i++) 
-    {
-      int priority = PRI_DEFAULT - (i + 5) % 10 - 1;
-      char name[16];
-      snprintf (name, sizeof name, "priority %d", priority);
-      thread_create (name, priority, alarm_priority_thread, NULL);
-    }
-
-  thread_set_priority (PRI_MIN);
-
-  for (i = 0; i < 10; i++)
-    sema_down (&wait_sema);
-}
-
-static void
-alarm_priority_thread (void *aux UNUSED) 
-{
-  /* Busy-wait until the current time changes. */
-  int64_t start_time = timer_ticks ();
-  while (timer_elapsed (start_time) == 0)
-    continue;
-
-  /* Now we know we're at the very beginning of a timer tick, so
-     we can call timer_sleep() without worrying about races
-     between checking the time and a timer interrupt. */
-  timer_sleep (wake_time - timer_ticks ());
-
-  /* Print a message on wake-up. */
-  msg ("Thread %s woke up.", thread_name ());
-
-  sema_up (&wait_sema);
-}
diff --git a/src/tests/threads/alarm-priority.ck b/src/tests/threads/alarm-priority.ck
deleted file mode 100644
index b57c78b..0000000
--- a/src/tests/threads/alarm-priority.ck
+++ /dev/null
@@ -1,19 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(alarm-priority) begin
-(alarm-priority) Thread priority 30 woke up.
-(alarm-priority) Thread priority 29 woke up.
-(alarm-priority) Thread priority 28 woke up.
-(alarm-priority) Thread priority 27 woke up.
-(alarm-priority) Thread priority 26 woke up.
-(alarm-priority) Thread priority 25 woke up.
-(alarm-priority) Thread priority 24 woke up.
-(alarm-priority) Thread priority 23 woke up.
-(alarm-priority) Thread priority 22 woke up.
-(alarm-priority) Thread priority 21 woke up.
-(alarm-priority) end
-EOF
-pass;
diff --git a/src/tests/threads/alarm-simultaneous.c b/src/tests/threads/alarm-simultaneous.c
deleted file mode 100644
index 844eea4..0000000
--- a/src/tests/threads/alarm-simultaneous.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/* Creates N threads, each of which sleeps a different, fixed
-   duration, M times.  Records the wake-up order and verifies
-   that it is valid. */
-
-#include <stdio.h>
-#include "tests/threads/tests.h"
-#include "threads/init.h"
-#include "threads/malloc.h"
-#include "threads/synch.h"
-#include "threads/thread.h"
-#include "devices/timer.h"
-
-static void test_sleep (int thread_cnt, int iterations);
-
-void
-test_alarm_simultaneous (void) 
-{
-  test_sleep (3, 5);
-}
-
-/* Information about the test. */
-struct sleep_test 
-  {
-    int64_t start;              /* Current time at start of test. */
-    int iterations;             /* Number of iterations per thread. */
-    int *output_pos;            /* Current position in output buffer. */
-  };
-
-static void sleeper (void *);
-
-/* Runs THREAD_CNT threads thread sleep ITERATIONS times each. */
-static void
-test_sleep (int thread_cnt, int iterations) 
-{
-  struct sleep_test test;
-  int *output;
-  int i;
-
-  /* This test does not work with the MLFQS. */
-  ASSERT (!thread_mlfqs);
-
-  msg ("Creating %d threads to sleep %d times each.", thread_cnt, iterations);
-  msg ("Each thread sleeps 10 ticks each time.");
-  msg ("Within an iteration, all threads should wake up on the same tick.");
-
-  /* Allocate memory. */
-  output = malloc (sizeof *output * iterations * thread_cnt * 2);
-  if (output == NULL)
-    PANIC ("couldn't allocate memory for test");
-
-  /* Initialize test. */
-  test.start = timer_ticks () + 100;
-  test.iterations = iterations;
-  test.output_pos = output;
-
-  /* Start threads. */
-  ASSERT (output != NULL);
-  for (i = 0; i < thread_cnt; i++)
-    {
-      char name[16];
-      snprintf (name, sizeof name, "thread %d", i);
-      thread_create (name, PRI_DEFAULT, sleeper, &test);
-    }
-  
-  /* Wait long enough for all the threads to finish. */
-  timer_sleep (100 + iterations * 10 + 100);
-
-  /* Print completion order. */
-  msg ("iteration 0, thread 0: woke up after %d ticks", output[0]);
-  for (i = 1; i < test.output_pos - output; i++) 
-    msg ("iteration %d, thread %d: woke up %d ticks later",
-         i / thread_cnt, i % thread_cnt, output[i] - output[i - 1]);
-  
-  free (output);
-}
-
-/* Sleeper thread. */
-static void
-sleeper (void *test_) 
-{
-  struct sleep_test *test = test_;
-  int i;
-
-  /* Make sure we're at the beginning of a timer tick. */
-  timer_sleep (1);
-
-  for (i = 1; i <= test->iterations; i++) 
-    {
-      int64_t sleep_until = test->start + i * 10;
-      timer_sleep (sleep_until - timer_ticks ());
-      *test->output_pos++ = timer_ticks () - test->start;
-      thread_yield ();
-    }
-}
diff --git a/src/tests/threads/alarm-simultaneous.ck b/src/tests/threads/alarm-simultaneous.ck
deleted file mode 100644
index 406b8b0..0000000
--- a/src/tests/threads/alarm-simultaneous.ck
+++ /dev/null
@@ -1,27 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(alarm-simultaneous) begin
-(alarm-simultaneous) Creating 3 threads to sleep 5 times each.
-(alarm-simultaneous) Each thread sleeps 10 ticks each time.
-(alarm-simultaneous) Within an iteration, all threads should wake up on the same tick.
-(alarm-simultaneous) iteration 0, thread 0: woke up after 10 ticks
-(alarm-simultaneous) iteration 0, thread 1: woke up 0 ticks later
-(alarm-simultaneous) iteration 0, thread 2: woke up 0 ticks later
-(alarm-simultaneous) iteration 1, thread 0: woke up 10 ticks later
-(alarm-simultaneous) iteration 1, thread 1: woke up 0 ticks later
-(alarm-simultaneous) iteration 1, thread 2: woke up 0 ticks later
-(alarm-simultaneous) iteration 2, thread 0: woke up 10 ticks later
-(alarm-simultaneous) iteration 2, thread 1: woke up 0 ticks later
-(alarm-simultaneous) iteration 2, thread 2: woke up 0 ticks later
-(alarm-simultaneous) iteration 3, thread 0: woke up 10 ticks later
-(alarm-simultaneous) iteration 3, thread 1: woke up 0 ticks later
-(alarm-simultaneous) iteration 3, thread 2: woke up 0 ticks later
-(alarm-simultaneous) iteration 4, thread 0: woke up 10 ticks later
-(alarm-simultaneous) iteration 4, thread 1: woke up 0 ticks later
-(alarm-simultaneous) iteration 4, thread 2: woke up 0 ticks later
-(alarm-simultaneous) end
-EOF
-pass;
diff --git a/src/tests/threads/alarm-single.ck b/src/tests/threads/alarm-single.ck
deleted file mode 100644
index 31215df..0000000
--- a/src/tests/threads/alarm-single.ck
+++ /dev/null
@@ -1,4 +0,0 @@
-# -*- perl -*-
-use tests::tests;
-use tests::threads::alarm;
-check_alarm (1);
diff --git a/src/tests/threads/alarm-wait.c b/src/tests/threads/alarm-wait.c
deleted file mode 100644
index 37d3afc..0000000
--- a/src/tests/threads/alarm-wait.c
+++ /dev/null
@@ -1,152 +0,0 @@
-/* Creates N threads, each of which sleeps a different, fixed
-   duration, M times.  Records the wake-up order and verifies
-   that it is valid. */
-
-#include <stdio.h>
-#include "tests/threads/tests.h"
-#include "threads/init.h"
-#include "threads/malloc.h"
-#include "threads/synch.h"
-#include "threads/thread.h"
-#include "devices/timer.h"
-
-static void test_sleep (int thread_cnt, int iterations);
-
-void
-test_alarm_single (void) 
-{
-  test_sleep (5, 1);
-}
-
-void
-test_alarm_multiple (void) 
-{
-  test_sleep (5, 7);
-}
-
-/* Information about the test. */
-struct sleep_test 
-  {
-    int64_t start;              /* Current time at start of test. */
-    int iterations;             /* Number of iterations per thread. */
-
-    /* Output. */
-    struct lock output_lock;    /* Lock protecting output buffer. */
-    int *output_pos;            /* Current position in output buffer. */
-  };
-
-/* Information about an individual thread in the test. */
-struct sleep_thread 
-  {
-    struct sleep_test *test;     /* Info shared between all threads. */
-    int id;                     /* Sleeper ID. */
-    int duration;               /* Number of ticks to sleep. */
-    int iterations;             /* Iterations counted so far. */
-  };
-
-static void sleeper (void *);
-
-/* Runs THREAD_CNT threads thread sleep ITERATIONS times each. */
-static void
-test_sleep (int thread_cnt, int iterations) 
-{
-  struct sleep_test test;
-  struct sleep_thread *threads;
-  int *output, *op;
-  int product;
-  int i;
-
-  /* This test does not work with the MLFQS. */
-  ASSERT (!thread_mlfqs);
-
-  msg ("Creating %d threads to sleep %d times each.", thread_cnt, iterations);
-  msg ("Thread 0 sleeps 10 ticks each time,");
-  msg ("thread 1 sleeps 20 ticks each time, and so on.");
-  msg ("If successful, product of iteration count and");
-  msg ("sleep duration will appear in nondescending order.");
-
-  /* Allocate memory. */
-  threads = malloc (sizeof *threads * thread_cnt);
-  output = malloc (sizeof *output * iterations * thread_cnt * 2);
-  if (threads == NULL || output == NULL)
-    PANIC ("couldn't allocate memory for test");
-
-  /* Initialize test. */
-  test.start = timer_ticks () + 100;
-  test.iterations = iterations;
-  lock_init (&test.output_lock);
-  test.output_pos = output;
-
-  /* Start threads. */
-  ASSERT (output != NULL);
-  for (i = 0; i < thread_cnt; i++)
-    {
-      struct sleep_thread *t = threads + i;
-      char name[16];
-      
-      t->test = &test;
-      t->id = i;
-      t->duration = (i + 1) * 10;
-      t->iterations = 0;
-
-      snprintf (name, sizeof name, "thread %d", i);
-      thread_create (name, PRI_DEFAULT, sleeper, t);
-    }
-  
-  /* Wait long enough for all the threads to finish. */
-  timer_sleep (100 + thread_cnt * iterations * 10 + 100);
-
-  /* Acquire the output lock in case some rogue thread is still
-     running. */
-  lock_acquire (&test.output_lock);
-
-  /* Print completion order. */
-  product = 0;
-  for (op = output; op < test.output_pos; op++) 
-    {
-      struct sleep_thread *t;
-      int new_prod;
-
-      ASSERT (*op >= 0 && *op < thread_cnt);
-      t = threads + *op;
-
-      new_prod = ++t->iterations * t->duration;
-        
-      msg ("thread %d: duration=%d, iteration=%d, product=%d",
-           t->id, t->duration, t->iterations, new_prod);
-      
-      if (new_prod >= product)
-        product = new_prod;
-      else
-        fail ("thread %d woke up out of order (%d > %d)!",
-              t->id, product, new_prod);
-    }
-
-  /* Verify that we had the proper number of wakeups. */
-  for (i = 0; i < thread_cnt; i++)
-    if (threads[i].iterations != iterations)
-      fail ("thread %d woke up %d times instead of %d",
-            i, threads[i].iterations, iterations);
-  
-  lock_release (&test.output_lock);
-  free (output);
-  free (threads);
-}
-
-/* Sleeper thread. */
-static void
-sleeper (void *t_) 
-{
-  struct sleep_thread *t = t_;
-  struct sleep_test *test = t->test;
-  int i;
-
-  for (i = 1; i <= test->iterations; i++) 
-    {
-      int64_t sleep_until = test->start + i * t->duration;
-      timer_sleep (sleep_until - timer_ticks ());
-      lock_acquire (&test->output_lock);
-      *test->output_pos++ = t->id;
-      lock_release (&test->output_lock);
-    }
-}
diff --git a/src/tests/threads/alarm-zero.c b/src/tests/threads/alarm-zero.c
deleted file mode 100644
index c8a3ee2..0000000
--- a/src/tests/threads/alarm-zero.c
+++ /dev/null
@@ -1,15 +0,0 @@
-/* Tests timer_sleep(0), which should return immediately. */
-
-#include <stdio.h>
-#include "tests/threads/tests.h"
-#include "threads/malloc.h"
-#include "threads/synch.h"
-#include "threads/thread.h"
-#include "devices/timer.h"
-
-void
-test_alarm_zero (void) 
-{
-  timer_sleep (0);
-  pass ();
-}
diff --git a/src/tests/threads/alarm-zero.ck b/src/tests/threads/alarm-zero.ck
deleted file mode 100644
index a6b1a3c..0000000
--- a/src/tests/threads/alarm-zero.ck
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(alarm-zero) begin
-(alarm-zero) PASS
-(alarm-zero) end
-EOF
-pass;
diff --git a/src/tests/threads/alarm.pm b/src/tests/threads/alarm.pm
deleted file mode 100644
index 84b3b7f..0000000
--- a/src/tests/threads/alarm.pm
+++ /dev/null
@@ -1,32 +0,0 @@
-sub check_alarm {
-    my ($iterations) = @_;
-    our ($test);
-
-    @output = read_text_file ("$test.output");
-    common_checks ("run", @output);
-
-    my (@products);
-    for (my ($i) = 0; $i < $iterations; $i++) {
-	for (my ($t) = 0; $t < 5; $t++) {
-	    push (@products, ($i + 1) * ($t + 1) * 10);
-	}
-    }
-    @products = sort {$a <=> $b} @products;
-
-    local ($_);
-    foreach (@output) {
-	fail $_ if /out of order/i;
-
-	my ($p) = /product=(\d+)$/;
-	next if !defined $p;
-
-	my ($q) = shift (@products);
-	fail "Too many wakeups.\n" if !defined $q;
-	fail "Out of order wakeups ($p vs. $q).\n" if $p != $q; # FIXME
-    }
-    fail scalar (@products) . " fewer wakeups than expected.\n"
-      if @products != 0;
-    pass;
-}
-
-1;
diff --git a/src/tests/threads/mlfqs-block.c b/src/tests/threads/mlfqs-block.c
deleted file mode 100644
index 6d4992d..0000000
--- a/src/tests/threads/mlfqs-block.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Checks that recent_cpu and priorities are updated for blocked
-   threads.
-
-   The main thread sleeps for 25 seconds, spins for 5 seconds,
-   then releases a lock.  The "block" thread spins for 20 seconds
-   then attempts to acquire the lock, which will block for 10
-   seconds (until the main thread releases it).  If recent_cpu
-   decays properly while the "block" thread sleeps, then the
-   block thread should be immediately scheduled when the main
-   thread releases the lock. */
-
-#include <stdio.h>
-#include "tests/threads/tests.h"
-#include "threads/init.h"
-#include "threads/malloc.h"
-#include "threads/synch.h"
-#include "threads/thread.h"
-#include "devices/timer.h"
-
-static void block_thread (void *lock_);
-
-void
-test_mlfqs_block (void) 
-{
-  int64_t start_time;
-  struct lock lock;
-  
-  ASSERT (thread_mlfqs);
-
-  msg ("Main thread acquiring lock.");
-  lock_init (&lock);
-  lock_acquire (&lock);
-  
-  msg ("Main thread creating block thread, sleeping 25 seconds...");
-  thread_create ("block", PRI_DEFAULT, block_thread, &lock);
-  timer_sleep (25 * TIMER_FREQ);
-
-  msg ("Main thread spinning for 5 seconds...");
-  start_time = timer_ticks ();
-  while (timer_elapsed (start_time) < 5 * TIMER_FREQ)
-    continue;
-
-  msg ("Main thread releasing lock.");
-  lock_release (&lock);
-
-  msg ("Block thread should have already acquired lock.");
-}
-
-static void
-block_thread (void *lock_) 
-{
-  struct lock *lock = lock_;
-  int64_t start_time;
-
-  msg ("Block thread spinning for 20 seconds...");
-  start_time = timer_ticks ();
-  while (timer_elapsed (start_time) < 20 * TIMER_FREQ)
-    continue;
-
-  msg ("Block thread acquiring lock...");
-  lock_acquire (lock);
-
-  msg ("...got it.");
-}
diff --git a/src/tests/threads/mlfqs-block.ck b/src/tests/threads/mlfqs-block.ck
deleted file mode 100644
index 8833a3a..0000000
--- a/src/tests/threads/mlfqs-block.ck
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(mlfqs-block) begin
-(mlfqs-block) Main thread acquiring lock.
-(mlfqs-block) Main thread creating block thread, sleeping 25 seconds...
-(mlfqs-block) Block thread spinning for 20 seconds...
-(mlfqs-block) Block thread acquiring lock...
-(mlfqs-block) Main thread spinning for 5 seconds...
-(mlfqs-block) Main thread releasing lock.
-(mlfqs-block) ...got it.
-(mlfqs-block) Block thread should have already acquired lock.
-(mlfqs-block) end
-EOF
-pass;
diff --git a/src/tests/threads/mlfqs-fair-2.ck b/src/tests/threads/mlfqs-fair-2.ck
deleted file mode 100644
index 5b19ff1..0000000
--- a/src/tests/threads/mlfqs-fair-2.ck
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-use tests::threads::mlfqs;
-
-check_mlfqs_fair ([0, 0], 50);
diff --git a/src/tests/threads/mlfqs-fair-20.ck b/src/tests/threads/mlfqs-fair-20.ck
deleted file mode 100644
index bb4d051..0000000
--- a/src/tests/threads/mlfqs-fair-20.ck
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-use tests::threads::mlfqs;
-
-check_mlfqs_fair ([(0) x 20], 20);
diff --git a/src/tests/threads/mlfqs-fair.c b/src/tests/threads/mlfqs-fair.c
deleted file mode 100644
index 3b1bea5..0000000
--- a/src/tests/threads/mlfqs-fair.c
+++ /dev/null
@@ -1,124 +0,0 @@
-/* Measures the correctness of the "nice" implementation.
-
-   The "fair" tests run either 2 or 20 threads all niced to 0.
-   The threads should all receive approximately the same number
-   of ticks.  Each test runs for 30 seconds, so the ticks should
-   also sum to approximately 30 * 100 == 3000 ticks.
-
-   The mlfqs-nice-2 test runs 2 threads, one with nice 0, the
-   other with nice 5, which should receive 1,904 and 1,096 ticks,
-   respectively, over 30 seconds.
-
-   The mlfqs-nice-10 test runs 10 threads with nice 0 through 9.
-   They should receive 672, 588, 492, 408, 316, 232, 152, 92, 40,
-   and 8 ticks, respectively, over 30 seconds.
-
-   (The above are computed via simulation in mlfqs.pm.) */
-
-#include <stdio.h>
-#include <inttypes.h>
-#include "tests/threads/tests.h"
-#include "threads/init.h"
-#include "threads/malloc.h"
-#include "threads/palloc.h"
-#include "threads/synch.h"
-#include "threads/thread.h"
-#include "devices/timer.h"
-
-static void test_mlfqs_fair (int thread_cnt, int nice_min, int nice_step);
-
-void
-test_mlfqs_fair_2 (void) 
-{
-  test_mlfqs_fair (2, 0, 0);
-}
-
-void
-test_mlfqs_fair_20 (void) 
-{
-  test_mlfqs_fair (20, 0, 0);
-}
-
-void
-test_mlfqs_nice_2 (void) 
-{
-  test_mlfqs_fair (2, 0, 5);
-}
-
-void
-test_mlfqs_nice_10 (void) 
-{
-  test_mlfqs_fair (10, 0, 1);
-}
-
-#define MAX_THREAD_CNT 20
-
-struct thread_info 
-  {
-    int64_t start_time;
-    int tick_count;
-    int nice;
-  };
-
-static void load_thread (void *aux);
-
-static void
-test_mlfqs_fair (int thread_cnt, int nice_min, int nice_step)
-{
-  struct thread_info info[MAX_THREAD_CNT];
-  int64_t start_time;
-  int nice;
-  int i;
-
-  ASSERT (thread_mlfqs);
-  ASSERT (thread_cnt <= MAX_THREAD_CNT);
-  ASSERT (nice_min >= -10);
-  ASSERT (nice_step >= 0);
-  ASSERT (nice_min + nice_step * (thread_cnt - 1) <= 20);
-
-  thread_set_nice (-20);
-
-  start_time = timer_ticks ();
-  msg ("Starting %d threads...", thread_cnt);
-  nice = nice_min;
-  for (i = 0; i < thread_cnt; i++) 
-    {
-      struct thread_info *ti = &info[i];
-      char name[16];
-
-      ti->start_time = start_time;
-      ti->tick_count = 0;
-      ti->nice = nice;
-
-      snprintf(name, sizeof name, "load %d", i);
-      thread_create (name, PRI_DEFAULT, load_thread, ti);
-
-      nice += nice_step;
-    }
-  msg ("Starting threads took %"PRId64" ticks.", timer_elapsed (start_time));
-
-  msg ("Sleeping 40 seconds to let threads run, please wait...");
-  timer_sleep (40 * TIMER_FREQ);
-  
-  for (i = 0; i < thread_cnt; i++)
-    msg ("Thread %d received %d ticks.", i, info[i].tick_count);
-}
-
-static void
-load_thread (void *ti_) 
-{
-  struct thread_info *ti = ti_;
-  int64_t sleep_time = 5 * TIMER_FREQ;
-  int64_t spin_time = sleep_time + 30 * TIMER_FREQ;
-  int64_t last_time = 0;
-
-  thread_set_nice (ti->nice);
-  timer_sleep (sleep_time - timer_elapsed (ti->start_time));
-  while (timer_elapsed (ti->start_time) < spin_time) 
-    {
-      int64_t cur_time = timer_ticks ();
-      if (cur_time != last_time)
-        ti->tick_count++;
-      last_time = cur_time;
-    }
-}
diff --git a/src/tests/threads/mlfqs-load-1.c b/src/tests/threads/mlfqs-load-1.c
deleted file mode 100644
index a39eea2..0000000
--- a/src/tests/threads/mlfqs-load-1.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Verifies that a single busy thread raises the load average to
-   0.5 in 38 to 45 seconds.  The expected time is 42 seconds, as
-   you can verify:
-   perl -e '$i++,$a=(59*$a+1)/60while$a<=.5;print "$i\n"'
-
-   Then, verifies that 10 seconds of inactivity drop the load
-   average back below 0.5 again. */
-
-#include <stdio.h>
-#include "tests/threads/tests.h"
-#include "threads/init.h"
-#include "threads/malloc.h"
-#include "threads/synch.h"
-#include "threads/thread.h"
-#include "devices/timer.h"
-
-void
-test_mlfqs_load_1 (void) 
-{
-  int64_t start_time;
-  int elapsed;
-  int load_avg;
-  
-  ASSERT (thread_mlfqs);
-
-  msg ("spinning for up to 45 seconds, please wait...");
-
-  start_time = timer_ticks ();
-  for (;;) 
-    {
-      load_avg = thread_get_load_avg ();
-      ASSERT (load_avg >= 0);
-      elapsed = timer_elapsed (start_time) / TIMER_FREQ;
-      if (load_avg > 100)
-        fail ("load average is %d.%02d "
-              "but should be between 0 and 1 (after %d seconds)",
-              load_avg / 100, load_avg % 100, elapsed);
-      else if (load_avg > 50)
-        break;
-      else if (elapsed > 45)
-        fail ("load average stayed below 0.5 for more than 45 seconds");
-    }
-
-  if (elapsed < 38)
-    fail ("load average took only %d seconds to rise above 0.5", elapsed);
-  msg ("load average rose to 0.5 after %d seconds", elapsed);
-
-  msg ("sleeping for another 10 seconds, please wait...");
-  timer_sleep (TIMER_FREQ * 10);
-
-  load_avg = thread_get_load_avg ();
-  if (load_avg < 0)
-    fail ("load average fell below 0");
-  if (load_avg > 50)
-    fail ("load average stayed above 0.5 for more than 10 seconds");
-  msg ("load average fell back below 0.5 (to %d.%02d)",
-       load_avg / 100, load_avg % 100);
-
-  pass ();
-}
diff --git a/src/tests/threads/mlfqs-load-1.ck b/src/tests/threads/mlfqs-load-1.ck
deleted file mode 100644
index faf0ffa..0000000
--- a/src/tests/threads/mlfqs-load-1.ck
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-
-our ($test);
-my (@output) = read_text_file ("$test.output");
-
-common_checks ("run", @output);
-
-@output = get_core_output ("run", @output);
-fail "missing PASS in output"
-  unless grep ($_ eq '(mlfqs-load-1) PASS', @output);
-
-pass;
diff --git a/src/tests/threads/mlfqs-load-60.c b/src/tests/threads/mlfqs-load-60.c
deleted file mode 100644
index b6a3eb6..0000000
--- a/src/tests/threads/mlfqs-load-60.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/* Starts 60 threads that each sleep for 10 seconds, then spin in
-   a tight loop for 60 seconds, and sleep for another 60 seconds.
-   Every 2 seconds after the initial sleep, the main thread
-   prints the load average.
-
-   The expected output is this (some margin of error is allowed):
-
-   After 0 seconds, load average=1.00.
-   After 2 seconds, load average=2.95.
-   After 4 seconds, load average=4.84.
-   After 6 seconds, load average=6.66.
-   After 8 seconds, load average=8.42.
-   After 10 seconds, load average=10.13.
-   After 12 seconds, load average=11.78.
-   After 14 seconds, load average=13.37.
-   After 16 seconds, load average=14.91.
-   After 18 seconds, load average=16.40.
-   After 20 seconds, load average=17.84.
-   After 22 seconds, load average=19.24.
-   After 24 seconds, load average=20.58.
-   After 26 seconds, load average=21.89.
-   After 28 seconds, load average=23.15.
-   After 30 seconds, load average=24.37.
-   After 32 seconds, load average=25.54.
-   After 34 seconds, load average=26.68.
-   After 36 seconds, load average=27.78.
-   After 38 seconds, load average=28.85.
-   After 40 seconds, load average=29.88.
-   After 42 seconds, load average=30.87.
-   After 44 seconds, load average=31.84.
-   After 46 seconds, load average=32.77.
-   After 48 seconds, load average=33.67.
-   After 50 seconds, load average=34.54.
-   After 52 seconds, load average=35.38.
-   After 54 seconds, load average=36.19.
-   After 56 seconds, load average=36.98.
-   After 58 seconds, load average=37.74.
-   After 60 seconds, load average=37.48.
-   After 62 seconds, load average=36.24.
-   After 64 seconds, load average=35.04.
-   After 66 seconds, load average=33.88.
-   After 68 seconds, load average=32.76.
-   After 70 seconds, load average=31.68.
-   After 72 seconds, load average=30.63.
-   After 74 seconds, load average=29.62.
-   After 76 seconds, load average=28.64.
-   After 78 seconds, load average=27.69.
-   After 80 seconds, load average=26.78.
-   After 82 seconds, load average=25.89.
-   After 84 seconds, load average=25.04.
-   After 86 seconds, load average=24.21.
-   After 88 seconds, load average=23.41.
-   After 90 seconds, load average=22.64.
-   After 92 seconds, load average=21.89.
-   After 94 seconds, load average=21.16.
-   After 96 seconds, load average=20.46.
-   After 98 seconds, load average=19.79.
-   After 100 seconds, load average=19.13.
-   After 102 seconds, load average=18.50.
-   After 104 seconds, load average=17.89.
-   After 106 seconds, load average=17.30.
-   After 108 seconds, load average=16.73.
-   After 110 seconds, load average=16.17.
-   After 112 seconds, load average=15.64.
-   After 114 seconds, load average=15.12.
-   After 116 seconds, load average=14.62.
-   After 118 seconds, load average=14.14.
-   After 120 seconds, load average=13.67.
-   After 122 seconds, load average=13.22.
-   After 124 seconds, load average=12.78.
-   After 126 seconds, load average=12.36.
-   After 128 seconds, load average=11.95.
-   After 130 seconds, load average=11.56.
-   After 132 seconds, load average=11.17.
-   After 134 seconds, load average=10.80.
-   After 136 seconds, load average=10.45.
-   After 138 seconds, load average=10.10.
-   After 140 seconds, load average=9.77.
-   After 142 seconds, load average=9.45.
-   After 144 seconds, load average=9.13.
-   After 146 seconds, load average=8.83.
-   After 148 seconds, load average=8.54.
-   After 150 seconds, load average=8.26.
-   After 152 seconds, load average=7.98.
-   After 154 seconds, load average=7.72.
-   After 156 seconds, load average=7.47.
-   After 158 seconds, load average=7.22.
-   After 160 seconds, load average=6.98.
-   After 162 seconds, load average=6.75.
-   After 164 seconds, load average=6.53.
-   After 166 seconds, load average=6.31.
-   After 168 seconds, load average=6.10.
-   After 170 seconds, load average=5.90.
-   After 172 seconds, load average=5.70.
-   After 174 seconds, load average=5.52.
-   After 176 seconds, load average=5.33.
-   After 178 seconds, load average=5.16.
-*/
-
-#include <stdio.h>
-#include "tests/threads/tests.h"
-#include "threads/init.h"
-#include "threads/malloc.h"
-#include "threads/synch.h"
-#include "threads/thread.h"
-#include "devices/timer.h"
-
-static int64_t start_time;
-
-static void load_thread (void *aux);
-
-#define THREAD_CNT 60
-
-void
-test_mlfqs_load_60 (void) 
-{
-  int i;
-  
-  ASSERT (thread_mlfqs);
-
-  start_time = timer_ticks ();
-  msg ("Starting %d niced load threads...", THREAD_CNT);
-  for (i = 0; i < THREAD_CNT; i++) 
-    {
-      char name[16];
-      snprintf(name, sizeof name, "load %d", i);
-      thread_create (name, PRI_DEFAULT, load_thread, NULL);
-    }
-  msg ("Starting threads took %d seconds.",
-       timer_elapsed (start_time) / TIMER_FREQ);
-  
-  for (i = 0; i < 90; i++) 
-    {
-      int64_t sleep_until = start_time + TIMER_FREQ * (2 * i + 10);
-      int load_avg;
-      timer_sleep (sleep_until - timer_ticks ());
-      load_avg = thread_get_load_avg ();
-      msg ("After %d seconds, load average=%d.%02d.",
-           i * 2, load_avg / 100, load_avg % 100);
-    }
-}
-
-static void
-load_thread (void *aux UNUSED) 
-{
-  int64_t sleep_time = 10 * TIMER_FREQ;
-  int64_t spin_time = sleep_time + 60 * TIMER_FREQ;
-  int64_t exit_time = spin_time + 60 * TIMER_FREQ;
-
-  thread_set_nice (20);
-  timer_sleep (sleep_time - timer_elapsed (start_time));
-  while (timer_elapsed (start_time) < spin_time)
-    continue;
-  timer_sleep (exit_time - timer_elapsed (start_time));
-}
diff --git a/src/tests/threads/mlfqs-load-60.ck b/src/tests/threads/mlfqs-load-60.ck
deleted file mode 100644
index cb69220..0000000
--- a/src/tests/threads/mlfqs-load-60.ck
+++ /dev/null
@@ -1,36 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-use tests::threads::mlfqs;
-
-our ($test);
-
-my (@output) = read_text_file ("$test.output");
-common_checks ("run", @output);
-@output = get_core_output ("run", @output);
-
-# Get actual values.
-local ($_);
-my (@actual);
-foreach (@output) {
-    my ($t, $load_avg) = /After (\d+) seconds, load average=(\d+\.\d+)\./
-      or next;
-    $actual[$t] = $load_avg;
-}
-
-# Calculate expected values.
-my ($load_avg) = 0;
-my ($recent) = 0;
-my (@expected);
-for (my ($t) = 0; $t < 180; $t++) {
-    my ($ready) = $t < 60 ? 60 : 0;
-    $load_avg = (59/60) * $load_avg + (1/60) * $ready;
-    $expected[$t] = $load_avg;
-}
-
-mlfqs_compare ("time", "%.2f", \@actual, \@expected, 3.5, [2, 178, 2],
-	       "Some load average values were missing or "
-	       . "differed from those expected "
-	       . "by more than 3.5.");
-pass;
diff --git a/src/tests/threads/mlfqs-load-avg.c b/src/tests/threads/mlfqs-load-avg.c
deleted file mode 100644
index 50e83e2..0000000
--- a/src/tests/threads/mlfqs-load-avg.c
+++ /dev/null
@@ -1,167 +0,0 @@
-/* Starts 60 threads numbered 0 through 59.  Thread #i sleeps for
-   (10+i) seconds, then spins in a loop for 60 seconds, then
-   sleeps until a total of 120 seconds have passed.  Every 2
-   seconds, starting 10 seconds in, the main thread prints the
-   load average.
-
-   The expected output is listed below.  Some margin of error is
-   allowed.
-
-   If your implementation fails this test but passes most other
-   tests, then consider whether you are doing too much work in
-   the timer interrupt.  If the timer interrupt handler takes too
-   long, then the test's main thread will not have enough time to
-   do its own work (printing a message) and go back to sleep
-   before the next tick arrives.  Then the main thread will be
-   ready, instead of sleeping, when the tick arrives,
-   artificially driving up the load average.
-
-   After 0 seconds, load average=0.00.
-   After 2 seconds, load average=0.05.
-   After 4 seconds, load average=0.16.
-   After 6 seconds, load average=0.34.
-   After 8 seconds, load average=0.58.
-   After 10 seconds, load average=0.87.
-   After 12 seconds, load average=1.22.
-   After 14 seconds, load average=1.63.
-   After 16 seconds, load average=2.09.
-   After 18 seconds, load average=2.60.
-   After 20 seconds, load average=3.16.
-   After 22 seconds, load average=3.76.
-   After 24 seconds, load average=4.42.
-   After 26 seconds, load average=5.11.
-   After 28 seconds, load average=5.85.
-   After 30 seconds, load average=6.63.
-   After 32 seconds, load average=7.46.
-   After 34 seconds, load average=8.32.
-   After 36 seconds, load average=9.22.
-   After 38 seconds, load average=10.15.
-   After 40 seconds, load average=11.12.
-   After 42 seconds, load average=12.13.
-   After 44 seconds, load average=13.16.
-   After 46 seconds, load average=14.23.
-   After 48 seconds, load average=15.33.
-   After 50 seconds, load average=16.46.
-   After 52 seconds, load average=17.62.
-   After 54 seconds, load average=18.81.
-   After 56 seconds, load average=20.02.
-   After 58 seconds, load average=21.26.
-   After 60 seconds, load average=22.52.
-   After 62 seconds, load average=23.71.
-   After 64 seconds, load average=24.80.
-   After 66 seconds, load average=25.78.
-   After 68 seconds, load average=26.66.
-   After 70 seconds, load average=27.45.
-   After 72 seconds, load average=28.14.
-   After 74 seconds, load average=28.75.
-   After 76 seconds, load average=29.27.
-   After 78 seconds, load average=29.71.
-   After 80 seconds, load average=30.06.
-   After 82 seconds, load average=30.34.
-   After 84 seconds, load average=30.55.
-   After 86 seconds, load average=30.68.
-   After 88 seconds, load average=30.74.
-   After 90 seconds, load average=30.73.
-   After 92 seconds, load average=30.66.
-   After 94 seconds, load average=30.52.
-   After 96 seconds, load average=30.32.
-   After 98 seconds, load average=30.06.
-   After 100 seconds, load average=29.74.
-   After 102 seconds, load average=29.37.
-   After 104 seconds, load average=28.95.
-   After 106 seconds, load average=28.47.
-   After 108 seconds, load average=27.94.
-   After 110 seconds, load average=27.36.
-   After 112 seconds, load average=26.74.
-   After 114 seconds, load average=26.07.
-   After 116 seconds, load average=25.36.
-   After 118 seconds, load average=24.60.
-   After 120 seconds, load average=23.81.
-   After 122 seconds, load average=23.02.
-   After 124 seconds, load average=22.26.
-   After 126 seconds, load average=21.52.
-   After 128 seconds, load average=20.81.
-   After 130 seconds, load average=20.12.
-   After 132 seconds, load average=19.46.
-   After 134 seconds, load average=18.81.
-   After 136 seconds, load average=18.19.
-   After 138 seconds, load average=17.59.
-   After 140 seconds, load average=17.01.
-   After 142 seconds, load average=16.45.
-   After 144 seconds, load average=15.90.
-   After 146 seconds, load average=15.38.
-   After 148 seconds, load average=14.87.
-   After 150 seconds, load average=14.38.
-   After 152 seconds, load average=13.90.
-   After 154 seconds, load average=13.44.
-   After 156 seconds, load average=13.00.
-   After 158 seconds, load average=12.57.
-   After 160 seconds, load average=12.15.
-   After 162 seconds, load average=11.75.
-   After 164 seconds, load average=11.36.
-   After 166 seconds, load average=10.99.
-   After 168 seconds, load average=10.62.
-   After 170 seconds, load average=10.27.
-   After 172 seconds, load average=9.93.
-   After 174 seconds, load average=9.61.
-   After 176 seconds, load average=9.29.
-   After 178 seconds, load average=8.98.
-*/
-
-#include <stdio.h>
-#include "tests/threads/tests.h"
-#include "threads/init.h"
-#include "threads/malloc.h"
-#include "threads/synch.h"
-#include "threads/thread.h"
-#include "devices/timer.h"
-
-static int64_t start_time;
-
-static void load_thread (void *seq_no);
-
-#define THREAD_CNT 60
-
-void
-test_mlfqs_load_avg (void) 
-{
-  int i;
-  
-  ASSERT (thread_mlfqs);
-
-  start_time = timer_ticks ();
-  msg ("Starting %d load threads...", THREAD_CNT);
-  for (i = 0; i < THREAD_CNT; i++) 
-    {
-      char name[16];
-      snprintf(name, sizeof name, "load %d", i);
-      thread_create (name, PRI_DEFAULT, load_thread, (void *) i);
-    }
-  msg ("Starting threads took %d seconds.",
-       timer_elapsed (start_time) / TIMER_FREQ);
-  thread_set_nice (-20);
-
-  for (i = 0; i < 90; i++) 
-    {
-      int64_t sleep_until = start_time + TIMER_FREQ * (2 * i + 10);
-      int load_avg;
-      timer_sleep (sleep_until - timer_ticks ());
-      load_avg = thread_get_load_avg ();
-      msg ("After %d seconds, load average=%d.%02d.",
-           i * 2, load_avg / 100, load_avg % 100);
-    }
-}
-
-static void
-load_thread (void *seq_no_) 
-{
-  int seq_no = (int) seq_no_;
-  int sleep_time = TIMER_FREQ * (10 + seq_no);
-  int spin_time = sleep_time + TIMER_FREQ * THREAD_CNT;
-  int exit_time = TIMER_FREQ * (THREAD_CNT * 2);
-
-  timer_sleep (sleep_time - timer_elapsed (start_time));
-  while (timer_elapsed (start_time) < spin_time)
-    continue;
-  timer_sleep (exit_time - timer_elapsed (start_time));
-}
diff --git a/src/tests/threads/mlfqs-load-avg.ck b/src/tests/threads/mlfqs-load-avg.ck
deleted file mode 100644
index 2254d05..0000000
--- a/src/tests/threads/mlfqs-load-avg.ck
+++ /dev/null
@@ -1,36 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-use tests::threads::mlfqs;
-
-our ($test);
-my (@output) = read_text_file ("$test.output");
-
-common_checks ("run", @output);
-@output = get_core_output ("run", @output);
-
-# Get actual values.
-local ($_);
-my (@actual);
-foreach (@output) {
-    my ($t, $load_avg) = /After (\d+) seconds, load average=(\d+\.\d+)\./
-      or next;
-    $actual[$t] = $load_avg;
-}
-
-# Calculate expected values.
-my ($load_avg) = 0;
-my ($recent) = 0;
-my (@expected);
-for (my ($t) = 0; $t < 180; $t++) {
-    my ($ready) = $t < 60 ? $t : $t < 120 ? 120 - $t : 0;
-    $load_avg = (59/60) * $load_avg + (1/60) * $ready;
-    $expected[$t] = $load_avg;
-}
-
-mlfqs_compare ("time", "%.2f", \@actual, \@expected, 2.5, [2, 178, 2],
-	       "Some load average values were missing or "
-	       . "differed from those expected "
-	       . "by more than 2.5.");
-pass;
diff --git a/src/tests/threads/mlfqs-nice-10.ck b/src/tests/threads/mlfqs-nice-10.ck
deleted file mode 100644
index 53e0abe..0000000
--- a/src/tests/threads/mlfqs-nice-10.ck
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-use tests::threads::mlfqs;
-
-check_mlfqs_fair ([0...9], 25);
diff --git a/src/tests/threads/mlfqs-nice-2.ck b/src/tests/threads/mlfqs-nice-2.ck
deleted file mode 100644
index ada366b..0000000
--- a/src/tests/threads/mlfqs-nice-2.ck
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-use tests::threads::mlfqs;
-
-check_mlfqs_fair ([0, 5], 50);
diff --git a/src/tests/threads/mlfqs-recent-1.c b/src/tests/threads/mlfqs-recent-1.c
deleted file mode 100644
index 4258671..0000000
--- a/src/tests/threads/mlfqs-recent-1.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/* Checks that recent_cpu is calculated properly for the case of
-   a single ready process.
-
-   The expected output is this (some margin of error is allowed):
-
-   After 2 seconds, recent_cpu is 6.40, load_avg is 0.03.
-   After 4 seconds, recent_cpu is 12.60, load_avg is 0.07.
-   After 6 seconds, recent_cpu is 18.61, load_avg is 0.10.
-   After 8 seconds, recent_cpu is 24.44, load_avg is 0.13.
-   After 10 seconds, recent_cpu is 30.08, load_avg is 0.15.
-   After 12 seconds, recent_cpu is 35.54, load_avg is 0.18.
-   After 14 seconds, recent_cpu is 40.83, load_avg is 0.21.
-   After 16 seconds, recent_cpu is 45.96, load_avg is 0.24.
-   After 18 seconds, recent_cpu is 50.92, load_avg is 0.26.
-   After 20 seconds, recent_cpu is 55.73, load_avg is 0.29.
-   After 22 seconds, recent_cpu is 60.39, load_avg is 0.31.
-   After 24 seconds, recent_cpu is 64.90, load_avg is 0.33.
-   After 26 seconds, recent_cpu is 69.27, load_avg is 0.35.
-   After 28 seconds, recent_cpu is 73.50, load_avg is 0.38.
-   After 30 seconds, recent_cpu is 77.60, load_avg is 0.40.
-   After 32 seconds, recent_cpu is 81.56, load_avg is 0.42.
-   After 34 seconds, recent_cpu is 85.40, load_avg is 0.44.
-   After 36 seconds, recent_cpu is 89.12, load_avg is 0.45.
-   After 38 seconds, recent_cpu is 92.72, load_avg is 0.47.
-   After 40 seconds, recent_cpu is 96.20, load_avg is 0.49.
-   After 42 seconds, recent_cpu is 99.57, load_avg is 0.51.
-   After 44 seconds, recent_cpu is 102.84, load_avg is 0.52.
-   After 46 seconds, recent_cpu is 106.00, load_avg is 0.54.
-   After 48 seconds, recent_cpu is 109.06, load_avg is 0.55.
-   After 50 seconds, recent_cpu is 112.02, load_avg is 0.57.
-   After 52 seconds, recent_cpu is 114.89, load_avg is 0.58.
-   After 54 seconds, recent_cpu is 117.66, load_avg is 0.60.
-   After 56 seconds, recent_cpu is 120.34, load_avg is 0.61.
-   After 58 seconds, recent_cpu is 122.94, load_avg is 0.62.
-   After 60 seconds, recent_cpu is 125.46, load_avg is 0.64.
-   After 62 seconds, recent_cpu is 127.89, load_avg is 0.65.
-   After 64 seconds, recent_cpu is 130.25, load_avg is 0.66.
-   After 66 seconds, recent_cpu is 132.53, load_avg is 0.67.
-   After 68 seconds, recent_cpu is 134.73, load_avg is 0.68.
-   After 70 seconds, recent_cpu is 136.86, load_avg is 0.69.
-   After 72 seconds, recent_cpu is 138.93, load_avg is 0.70.
-   After 74 seconds, recent_cpu is 140.93, load_avg is 0.71.
-   After 76 seconds, recent_cpu is 142.86, load_avg is 0.72.
-   After 78 seconds, recent_cpu is 144.73, load_avg is 0.73.
-   After 80 seconds, recent_cpu is 146.54, load_avg is 0.74.
-   After 82 seconds, recent_cpu is 148.29, load_avg is 0.75.
-   After 84 seconds, recent_cpu is 149.99, load_avg is 0.76.
-   After 86 seconds, recent_cpu is 151.63, load_avg is 0.76.
-   After 88 seconds, recent_cpu is 153.21, load_avg is 0.77.
-   After 90 seconds, recent_cpu is 154.75, load_avg is 0.78.
-   After 92 seconds, recent_cpu is 156.23, load_avg is 0.79.
-   After 94 seconds, recent_cpu is 157.67, load_avg is 0.79.
-   After 96 seconds, recent_cpu is 159.06, load_avg is 0.80.
-   After 98 seconds, recent_cpu is 160.40, load_avg is 0.81.
-   After 100 seconds, recent_cpu is 161.70, load_avg is 0.81.
-   After 102 seconds, recent_cpu is 162.96, load_avg is 0.82.
-   After 104 seconds, recent_cpu is 164.18, load_avg is 0.83.
-   After 106 seconds, recent_cpu is 165.35, load_avg is 0.83.
-   After 108 seconds, recent_cpu is 166.49, load_avg is 0.84.
-   After 110 seconds, recent_cpu is 167.59, load_avg is 0.84.
-   After 112 seconds, recent_cpu is 168.66, load_avg is 0.85.
-   After 114 seconds, recent_cpu is 169.69, load_avg is 0.85.
-   After 116 seconds, recent_cpu is 170.69, load_avg is 0.86.
-   After 118 seconds, recent_cpu is 171.65, load_avg is 0.86.
-   After 120 seconds, recent_cpu is 172.58, load_avg is 0.87.
-   After 122 seconds, recent_cpu is 173.49, load_avg is 0.87.
-   After 124 seconds, recent_cpu is 174.36, load_avg is 0.88.
-   After 126 seconds, recent_cpu is 175.20, load_avg is 0.88.
-   After 128 seconds, recent_cpu is 176.02, load_avg is 0.88.
-   After 130 seconds, recent_cpu is 176.81, load_avg is 0.89.
-   After 132 seconds, recent_cpu is 177.57, load_avg is 0.89.
-   After 134 seconds, recent_cpu is 178.31, load_avg is 0.89.
-   After 136 seconds, recent_cpu is 179.02, load_avg is 0.90.
-   After 138 seconds, recent_cpu is 179.72, load_avg is 0.90.
-   After 140 seconds, recent_cpu is 180.38, load_avg is 0.90.
-   After 142 seconds, recent_cpu is 181.03, load_avg is 0.91.
-   After 144 seconds, recent_cpu is 181.65, load_avg is 0.91.
-   After 146 seconds, recent_cpu is 182.26, load_avg is 0.91.
-   After 148 seconds, recent_cpu is 182.84, load_avg is 0.92.
-   After 150 seconds, recent_cpu is 183.41, load_avg is 0.92.
-   After 152 seconds, recent_cpu is 183.96, load_avg is 0.92.
-   After 154 seconds, recent_cpu is 184.49, load_avg is 0.92.
-   After 156 seconds, recent_cpu is 185.00, load_avg is 0.93.
-   After 158 seconds, recent_cpu is 185.49, load_avg is 0.93.
-   After 160 seconds, recent_cpu is 185.97, load_avg is 0.93.
-   After 162 seconds, recent_cpu is 186.43, load_avg is 0.93.
-   After 164 seconds, recent_cpu is 186.88, load_avg is 0.94.
-   After 166 seconds, recent_cpu is 187.31, load_avg is 0.94.
-   After 168 seconds, recent_cpu is 187.73, load_avg is 0.94.
-   After 170 seconds, recent_cpu is 188.14, load_avg is 0.94.
-   After 172 seconds, recent_cpu is 188.53, load_avg is 0.94.
-   After 174 seconds, recent_cpu is 188.91, load_avg is 0.95.
-   After 176 seconds, recent_cpu is 189.27, load_avg is 0.95.
-   After 178 seconds, recent_cpu is 189.63, load_avg is 0.95.
-   After 180 seconds, recent_cpu is 189.97, load_avg is 0.95.
-*/   
-
-#include <stdio.h>
-#include "tests/threads/tests.h"
-#include "threads/init.h"
-#include "threads/malloc.h"
-#include "threads/synch.h"
-#include "threads/thread.h"
-#include "devices/timer.h"
-
-/* Sensitive to assumption that recent_cpu updates happen exactly
-   when timer_ticks() % TIMER_FREQ == 0. */
-
-void
-test_mlfqs_recent_1 (void) 
-{
-  int64_t start_time;
-  int last_elapsed = 0;
-  
-  ASSERT (thread_mlfqs);
-
-  do 
-    {
-      msg ("Sleeping 10 seconds to allow recent_cpu to decay, please wait...");
-      start_time = timer_ticks ();
-      timer_sleep (DIV_ROUND_UP (start_time, TIMER_FREQ) - start_time
-                   + 10 * TIMER_FREQ);
-    }
-  while (thread_get_recent_cpu () > 700);
-
-  start_time = timer_ticks ();
-  for (;;) 
-    {
-      int elapsed = timer_elapsed (start_time);
-      if (elapsed % (TIMER_FREQ * 2) == 0 && elapsed > last_elapsed) 
-        {
-          int recent_cpu = thread_get_recent_cpu ();
-          int load_avg = thread_get_load_avg ();
-          int elapsed_seconds = elapsed / TIMER_FREQ;
-          msg ("After %d seconds, recent_cpu is %d.%02d, load_avg is %d.%02d.",
-               elapsed_seconds,
-               recent_cpu / 100, recent_cpu % 100,
-               load_avg / 100, load_avg % 100);
-          if (elapsed_seconds >= 180)
-            break;
-        } 
-      last_elapsed = elapsed;
-    }
-}
diff --git a/src/tests/threads/mlfqs-recent-1.ck b/src/tests/threads/mlfqs-recent-1.ck
deleted file mode 100644
index a2ba44d..0000000
--- a/src/tests/threads/mlfqs-recent-1.ck
+++ /dev/null
@@ -1,31 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-use tests::threads::mlfqs;
-
-our ($test);
-my (@output) = read_text_file ("$test.output");
-common_checks ("run", @output);
-@output = get_core_output ("run", @output);
-
-# Get actual values.
-local ($_);
-my (@actual);
-foreach (@output) {
-    my ($t, $recent_cpu) = /After (\d+) seconds, recent_cpu is (\d+\.\d+),/
-      or next;
-    $actual[$t] = $recent_cpu;
-}
-
-# Calculate expected values.
-my ($expected_load_avg, $expected_recent_cpu)
-  = mlfqs_expected_load ([(1) x 180], [(100) x 180]);
-my (@expected) = @$expected_recent_cpu;
-
-# Compare actual and expected values.
-mlfqs_compare ("time", "%.2f", \@actual, \@expected, 2.5, [2, 178, 2],
-	       "Some recent_cpu values were missing or "
-	       . "differed from those expected "
-	       . "by more than 2.5.");
-pass;
diff --git a/src/tests/threads/mlfqs.pm b/src/tests/threads/mlfqs.pm
deleted file mode 100644
index 184ac16..0000000
--- a/src/tests/threads/mlfqs.pm
+++ /dev/null
@@ -1,146 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-
-sub mlfqs_expected_load {
-    my ($ready, $recent_delta) = @_;
-    my (@load_avg) = 0;
-    my (@recent_cpu) = 0;
-    my ($load_avg) = 0;
-    my ($recent_cpu) = 0;
-    for my $i (0...$#$ready) {
-	$load_avg = (59/60) * $load_avg + (1/60) * $ready->[$i];
-	push (@load_avg, $load_avg);
-
-	if (defined $recent_delta->[$i]) {
-	    my ($twice_load) = $load_avg * 2;
-	    my ($load_factor) = $twice_load / ($twice_load + 1);
-	    $recent_cpu = ($recent_cpu + $recent_delta->[$i]) * $load_factor;
-	    push (@recent_cpu, $recent_cpu);
-	}
-    }
-    return (\@load_avg, \@recent_cpu);
-}
-
-sub mlfqs_expected_ticks {
-    my (@nice) = @_;
-    my ($thread_cnt) = scalar (@nice);
-    my (@recent_cpu) = (0) x $thread_cnt;
-    my (@slices) = (0) x $thread_cnt;
-    my (@fifo) = (0) x $thread_cnt;
-    my ($next_fifo) = 1;
-    my ($load_avg) = 0;
-    for my $i (1...750) {
-	if ($i % 25 == 0) {
-	    # Update load average.
-	    $load_avg = (59/60) * $load_avg + (1/60) * $thread_cnt;
-
-	    # Update recent_cpu.
-	    my ($twice_load) = $load_avg * 2;
-	    my ($load_factor) = $twice_load / ($twice_load + 1);
-	    $recent_cpu[$_] = $recent_cpu[$_] * $load_factor + $nice[$_]
-	      foreach 0...($thread_cnt - 1);
-	}
-
-	# Update priorities.
-	my (@priority);
-	foreach my $j (0...($thread_cnt - 1)) {
-	    my ($priority) = int ($recent_cpu[$j] / 4 + $nice[$j] * 2);
-	    $priority = 0 if $priority < 0;
-	    $priority = 63 if $priority > 63;
-	    push (@priority, $priority);
-	}
-
-	# Choose thread to run.
-	my $max = 0;
-	for my $j (1...$#priority) {
-	    if ($priority[$j] < $priority[$max]
-		|| ($priority[$j] == $priority[$max]
-		    && $fifo[$j] < $fifo[$max])) {
-		$max = $j;
-	    }
-	}
-	$fifo[$max] = $next_fifo++;
-
-	# Run thread.
-	$recent_cpu[$max] += 4;
-	$slices[$max] += 4;
-    }
-    return @slices;
-}
-
-sub check_mlfqs_fair {
-    my ($nice, $maxdiff) = @_;
-    our ($test);
-    my (@output) = read_text_file ("$test.output");
-    common_checks ("run", @output);
-    @output = get_core_output ("run", @output);
-
-    my (@actual);
-    local ($_);
-    foreach (@output) {
-	my ($id, $count) = /Thread (\d+) received (\d+) ticks\./ or next;
-        $actual[$id] = $count;
-    }
-
-    my (@expected) = mlfqs_expected_ticks (@$nice);
-    mlfqs_compare ("thread", "%d",
-		   \@actual, \@expected, $maxdiff, [0, $#$nice, 1],
-		   "Some tick counts were missing or differed from those "
-		   . "expected by more than $maxdiff.");
-    pass;
-}
-
-sub mlfqs_compare {
-    my ($indep_var, $format,
-	$actual_ref, $expected_ref, $maxdiff, $t_range, $message) = @_;
-    my ($t_min, $t_max, $t_step) = @$t_range;
-
-    my ($ok) = 1;
-    for (my ($t) = $t_min; $t <= $t_max; $t += $t_step) {
-	my ($actual) = $actual_ref->[$t];
-	my ($expected) = $expected_ref->[$t];
-	$ok = 0, last
-	  if !defined ($actual) || abs ($actual - $expected) > $maxdiff + .01;
-    }
-    return if $ok;
-
-    print "$message\n";
-    mlfqs_row ($indep_var, "actual", "<->", "expected", "explanation");
-    mlfqs_row ("------", "--------", "---", "--------", '-' x 40);
-    for (my ($t) = $t_min; $t <= $t_max; $t += $t_step) {
-	my ($actual) = $actual_ref->[$t];
-	my ($expected) = $expected_ref->[$t];
-	my ($diff, $rationale);
-	if (!defined $actual) {
-	    $actual = 'undef' ;
-	    $diff = '';
-	    $rationale = 'Missing value.';
-	} else {
-	    my ($delta) = abs ($actual - $expected);
-	    if ($delta > $maxdiff + .01) {
-		my ($excess) = $delta - $maxdiff;
-		if ($actual > $expected) {
-		    $diff = '>>>';
-		    $rationale = sprintf "Too big, by $format.", $excess;
-		} else {
-		    $diff = '<<<';
-		    $rationale = sprintf "Too small, by $format.", $excess;
-		}
-	    } else {
-		$diff = ' = ';
-		$rationale = '';
-	    }
-	    $actual = sprintf ($format, $actual);
-	}
-	$expected = sprintf ($format, $expected);
-	mlfqs_row ($t, $actual, $diff, $expected, $rationale);
-    }
-    fail;
-}
-
-sub mlfqs_row {
-    printf "%6s %8s %3s %-8s %s\n", @_;
-}
-
-1;
diff --git a/src/tests/threads/priority-change.c b/src/tests/threads/priority-change.c
deleted file mode 100644
index 810b05a..0000000
--- a/src/tests/threads/priority-change.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Verifies that lowering a thread's priority so that it is no
-   longer the highest-priority thread in the system causes it to
-   yield immediately. */
-
-#include <stdio.h>
-#include "tests/threads/tests.h"
-#include "threads/init.h"
-#include "threads/thread.h"
-
-static thread_func changing_thread;
-
-void
-test_priority_change (void) 
-{
-  /* This test does not work with the MLFQS. */
-  ASSERT (!thread_mlfqs);
-
-  msg ("Creating a high-priority thread 2.");
-  thread_create ("thread 2", PRI_DEFAULT + 1, changing_thread, NULL);
-  msg ("Thread 2 should have just lowered its priority.");
-  thread_set_priority (PRI_DEFAULT - 2);
-  msg ("Thread 2 should have just exited.");
-}
-
-static void
-changing_thread (void *aux UNUSED) 
-{
-  msg ("Thread 2 now lowering priority.");
-  thread_set_priority (PRI_DEFAULT - 1);
-  msg ("Thread 2 exiting.");
-}
diff --git a/src/tests/threads/priority-change.ck b/src/tests/threads/priority-change.ck
deleted file mode 100644
index f4d9b2f..0000000
--- a/src/tests/threads/priority-change.ck
+++ /dev/null
@@ -1,14 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(priority-change) begin
-(priority-change) Creating a high-priority thread 2.
-(priority-change) Thread 2 now lowering priority.
-(priority-change) Thread 2 should have just lowered its priority.
-(priority-change) Thread 2 exiting.
-(priority-change) Thread 2 should have just exited.
-(priority-change) end
-EOF
-pass;
diff --git a/src/tests/threads/priority-condvar.c b/src/tests/threads/priority-condvar.c
deleted file mode 100644
index c1efb1b..0000000
--- a/src/tests/threads/priority-condvar.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Tests that cond_signal() wakes up the highest-priority thread
-   waiting in cond_wait(). */
-
-#include <stdio.h>
-#include "tests/threads/tests.h"
-#include "threads/init.h"
-#include "threads/malloc.h"
-#include "threads/synch.h"
-#include "threads/thread.h"
-#include "devices/timer.h"
-
-static thread_func priority_condvar_thread;
-static struct lock lock;
-static struct condition condition;
-
-void
-test_priority_condvar (void) 
-{
-  int i;
-  
-  /* This test does not work with the MLFQS. */
-  ASSERT (!thread_mlfqs);
-
-  lock_init (&lock);
-  cond_init (&condition);
-
-  thread_set_priority (PRI_MIN);
-  for (i = 0; i < 10; i++) 
-    {
-      int priority = PRI_DEFAULT - (i + 7) % 10 - 1;
-      char name[16];
-      snprintf (name, sizeof name, "priority %d", priority);
-      thread_create (name, priority, priority_condvar_thread, NULL);
-    }
-
-  for (i = 0; i < 10; i++) 
-    {
-      lock_acquire (&lock);
-      msg ("Signaling...");
-      cond_signal (&condition, &lock);
-      lock_release (&lock);
-    }
-}
-
-static void
-priority_condvar_thread (void *aux UNUSED) 
-{
-  msg ("Thread %s starting.", thread_name ());
-  lock_acquire (&lock);
-  cond_wait (&condition, &lock);
-  msg ("Thread %s woke up.", thread_name ());
-  lock_release (&lock);
-}
diff --git a/src/tests/threads/priority-condvar.ck b/src/tests/threads/priority-condvar.ck
deleted file mode 100644
index 195c1ab..0000000
--- a/src/tests/threads/priority-condvar.ck
+++ /dev/null
@@ -1,39 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(priority-condvar) begin
-(priority-condvar) Thread priority 23 starting.
-(priority-condvar) Thread priority 22 starting.
-(priority-condvar) Thread priority 21 starting.
-(priority-condvar) Thread priority 30 starting.
-(priority-condvar) Thread priority 29 starting.
-(priority-condvar) Thread priority 28 starting.
-(priority-condvar) Thread priority 27 starting.
-(priority-condvar) Thread priority 26 starting.
-(priority-condvar) Thread priority 25 starting.
-(priority-condvar) Thread priority 24 starting.
-(priority-condvar) Signaling...
-(priority-condvar) Thread priority 30 woke up.
-(priority-condvar) Signaling...
-(priority-condvar) Thread priority 29 woke up.
-(priority-condvar) Signaling...
-(priority-condvar) Thread priority 28 woke up.
-(priority-condvar) Signaling...
-(priority-condvar) Thread priority 27 woke up.
-(priority-condvar) Signaling...
-(priority-condvar) Thread priority 26 woke up.
-(priority-condvar) Signaling...
-(priority-condvar) Thread priority 25 woke up.
-(priority-condvar) Signaling...
-(priority-condvar) Thread priority 24 woke up.
-(priority-condvar) Signaling...
-(priority-condvar) Thread priority 23 woke up.
-(priority-condvar) Signaling...
-(priority-condvar) Thread priority 22 woke up.
-(priority-condvar) Signaling...
-(priority-condvar) Thread priority 21 woke up.
-(priority-condvar) end
-EOF
-pass;
diff --git a/src/tests/threads/priority-donate-chain.c b/src/tests/threads/priority-donate-chain.c
deleted file mode 100644
index 3ffabca..0000000
--- a/src/tests/threads/priority-donate-chain.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/* The main thread set its priority to PRI_MIN and creates 7 threads 
-   (thread 1..7) with priorities PRI_MIN + 3, 6, 9, 12, ...
-   The main thread initializes 8 locks: lock 0..7 and acquires lock 0.
-
-   When thread[i] starts, it first acquires lock[i] (unless i == 7.)
-   Subsequently, thread[i] attempts to acquire lock[i-1], which is held by
-   thread[i-1], except for lock[0], which is held by the main thread.
-   Because the lock is held, thread[i] donates its priority to thread[i-1],
-   which donates to thread[i-2], and so on until the main thread
-   receives the donation.
-
-   After threads[1..7] have been created and are blocked on locks[0..7],
-   the main thread releases lock[0], unblocking thread[1], and being
-   preempted by it.
-   Thread[1] then completes acquiring lock[0], then releases lock[0],
-   then releases lock[1], unblocking thread[2], etc.
-   Thread[7] finally acquires & releases lock[7] and exits, allowing 
-   thread[6], then thread[5] etc. to run and exit until finally the 
-   main thread exits.
-
-   In addition, interloper threads are created at priority levels
-   p = PRI_MIN + 2, 5, 8, 11, ... which should not be run until the 
-   corresponding thread with priority p + 1 has finished.
-  
-   Written by Godmar Back <gback@cs.vt.edu> */ 
-
-#include <stdio.h>
-#include "tests/threads/tests.h"
-#include "threads/init.h"
-#include "threads/synch.h"
-#include "threads/thread.h"
-
-#define NESTING_DEPTH 8
-
-struct lock_pair
-  {
-    struct lock *second;
-    struct lock *first;
-  };
-
-static thread_func donor_thread_func;
-static thread_func interloper_thread_func;
-
-void
-test_priority_donate_chain (void) 
-{
-  int i;  
-  struct lock locks[NESTING_DEPTH - 1];
-  struct lock_pair lock_pairs[NESTING_DEPTH];
-
-  /* This test does not work with the MLFQS. */
-  ASSERT (!thread_mlfqs);
-
-  thread_set_priority (PRI_MIN);
-
-  for (i = 0; i < NESTING_DEPTH - 1; i++)
-    lock_init (&locks[i]);
-
-  lock_acquire (&locks[0]);
-  msg ("%s got lock.", thread_name ());
-
-  for (i = 1; i < NESTING_DEPTH; i++)
-    {
-      char name[16];
-      int thread_priority;
-
-      snprintf (name, sizeof name, "thread %d", i);
-      thread_priority = PRI_MIN + i * 3;
-      lock_pairs[i].first = i < NESTING_DEPTH - 1 ? locks + i: NULL;
-      lock_pairs[i].second = locks + i - 1;
-
-      thread_create (name, thread_priority, donor_thread_func, lock_pairs + i);
-      msg ("%s should have priority %d.  Actual priority: %d.",
-          thread_name (), thread_priority, thread_get_priority ());
-
-      snprintf (name, sizeof name, "interloper %d", i);
-      thread_create (name, thread_priority - 1, interloper_thread_func, NULL);
-    }
-
-  lock_release (&locks[0]);
-  msg ("%s finishing with priority %d.", thread_name (),
-                                         thread_get_priority ());
-}
-
-static void
-donor_thread_func (void *locks_) 
-{
-  struct lock_pair *locks = locks_;
-
-  if (locks->first)
-    lock_acquire (locks->first);
-
-  lock_acquire (locks->second);
-  msg ("%s got lock", thread_name ());
-
-  lock_release (locks->second);
-  msg ("%s should have priority %d. Actual priority: %d", 
-        thread_name (), (NESTING_DEPTH - 1) * 3,
-        thread_get_priority ());
-
-  if (locks->first)
-    lock_release (locks->first);
-
-  msg ("%s finishing with priority %d.", thread_name (),
-                                         thread_get_priority ());
-}
-
-static void
-interloper_thread_func (void *arg_ UNUSED)
-{
-  msg ("%s finished.", thread_name ());
-}
-
-// vim: sw=2
diff --git a/src/tests/threads/priority-donate-chain.ck b/src/tests/threads/priority-donate-chain.ck
deleted file mode 100644
index 213e649..0000000
--- a/src/tests/threads/priority-donate-chain.ck
+++ /dev/null
@@ -1,46 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(priority-donate-chain) begin
-(priority-donate-chain) main got lock.
-(priority-donate-chain) main should have priority 3.  Actual priority: 3.
-(priority-donate-chain) main should have priority 6.  Actual priority: 6.
-(priority-donate-chain) main should have priority 9.  Actual priority: 9.
-(priority-donate-chain) main should have priority 12.  Actual priority: 12.
-(priority-donate-chain) main should have priority 15.  Actual priority: 15.
-(priority-donate-chain) main should have priority 18.  Actual priority: 18.
-(priority-donate-chain) main should have priority 21.  Actual priority: 21.
-(priority-donate-chain) thread 1 got lock
-(priority-donate-chain) thread 1 should have priority 21. Actual priority: 21
-(priority-donate-chain) thread 2 got lock
-(priority-donate-chain) thread 2 should have priority 21. Actual priority: 21
-(priority-donate-chain) thread 3 got lock
-(priority-donate-chain) thread 3 should have priority 21. Actual priority: 21
-(priority-donate-chain) thread 4 got lock
-(priority-donate-chain) thread 4 should have priority 21. Actual priority: 21
-(priority-donate-chain) thread 5 got lock
-(priority-donate-chain) thread 5 should have priority 21. Actual priority: 21
-(priority-donate-chain) thread 6 got lock
-(priority-donate-chain) thread 6 should have priority 21. Actual priority: 21
-(priority-donate-chain) thread 7 got lock
-(priority-donate-chain) thread 7 should have priority 21. Actual priority: 21
-(priority-donate-chain) thread 7 finishing with priority 21.
-(priority-donate-chain) interloper 7 finished.
-(priority-donate-chain) thread 6 finishing with priority 18.
-(priority-donate-chain) interloper 6 finished.
-(priority-donate-chain) thread 5 finishing with priority 15.
-(priority-donate-chain) interloper 5 finished.
-(priority-donate-chain) thread 4 finishing with priority 12.
-(priority-donate-chain) interloper 4 finished.
-(priority-donate-chain) thread 3 finishing with priority 9.
-(priority-donate-chain) interloper 3 finished.
-(priority-donate-chain) thread 2 finishing with priority 6.
-(priority-donate-chain) interloper 2 finished.
-(priority-donate-chain) thread 1 finishing with priority 3.
-(priority-donate-chain) interloper 1 finished.
-(priority-donate-chain) main finishing with priority 0.
-(priority-donate-chain) end
-EOF
-pass;
diff --git a/src/tests/threads/priority-donate-lower.c b/src/tests/threads/priority-donate-lower.c
deleted file mode 100644
index 4965d75..0000000
--- a/src/tests/threads/priority-donate-lower.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/* The main thread acquires a lock.  Then it creates a
-   higher-priority thread that blocks acquiring the lock, causing
-   it to donate their priorities to the main thread.  The main
-   thread attempts to lower its priority, which should not take
-   effect until the donation is released. */
-
-#include <stdio.h>
-#include "tests/threads/tests.h"
-#include "threads/init.h"
-#include "threads/synch.h"
-#include "threads/thread.h"
-
-static thread_func acquire_thread_func;
-
-void
-test_priority_donate_lower (void) 
-{
-  struct lock lock;
-
-  /* This test does not work with the MLFQS. */
-  ASSERT (!thread_mlfqs);
-
-  /* Make sure our priority is the default. */
-  ASSERT (thread_get_priority () == PRI_DEFAULT);
-
-  lock_init (&lock);
-  lock_acquire (&lock);
-  thread_create ("acquire", PRI_DEFAULT + 10, acquire_thread_func, &lock);
-  msg ("Main thread should have priority %d.  Actual priority: %d.",
-       PRI_DEFAULT + 10, thread_get_priority ());
-
-  msg ("Lowering base priority...");
-  thread_set_priority (PRI_DEFAULT - 10);
-  msg ("Main thread should have priority %d.  Actual priority: %d.",
-       PRI_DEFAULT + 10, thread_get_priority ());
-  lock_release (&lock);
-  msg ("acquire must already have finished.");
-  msg ("Main thread should have priority %d.  Actual priority: %d.",
-       PRI_DEFAULT - 10, thread_get_priority ());
-}
-
-static void
-acquire_thread_func (void *lock_) 
-{
-  struct lock *lock = lock_;
-
-  lock_acquire (lock);
-  msg ("acquire: got the lock");
-  lock_release (lock);
-  msg ("acquire: done");
-}
diff --git a/src/tests/threads/priority-donate-lower.ck b/src/tests/threads/priority-donate-lower.ck
deleted file mode 100644
index c9bb61b..0000000
--- a/src/tests/threads/priority-donate-lower.ck
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(priority-donate-lower) begin
-(priority-donate-lower) Main thread should have priority 41.  Actual priority: 41.
-(priority-donate-lower) Lowering base priority...
-(priority-donate-lower) Main thread should have priority 41.  Actual priority: 41.
-(priority-donate-lower) acquire: got the lock
-(priority-donate-lower) acquire: done
-(priority-donate-lower) acquire must already have finished.
-(priority-donate-lower) Main thread should have priority 21.  Actual priority: 21.
-(priority-donate-lower) end
-EOF
-pass;
diff --git a/src/tests/threads/priority-donate-multiple.c b/src/tests/threads/priority-donate-multiple.c
deleted file mode 100644
index df4689c..0000000
--- a/src/tests/threads/priority-donate-multiple.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/* The main thread acquires locks A and B, then it creates two
-   higher-priority threads.  Each of these threads blocks
-   acquiring one of the locks and thus donate their priority to
-   the main thread.  The main thread releases the locks in turn
-   and relinquishes its donated priorities.
-   
-   Based on a test originally submitted for Stanford's CS 140 in
-   winter 1999 by Matt Franklin <startled@leland.stanford.edu>,
-   Greg Hutchins <gmh@leland.stanford.edu>, Yu Ping Hu
-   <yph@cs.stanford.edu>.  Modified by arens. */
-
-#include <stdio.h>
-#include "tests/threads/tests.h"
-#include "threads/init.h"
-#include "threads/synch.h"
-#include "threads/thread.h"
-
-static thread_func a_thread_func;
-static thread_func b_thread_func;
-
-void
-test_priority_donate_multiple (void) 
-{
-  struct lock a, b;
-
-  /* This test does not work with the MLFQS. */
-  ASSERT (!thread_mlfqs);
-
-  /* Make sure our priority is the default. */
-  ASSERT (thread_get_priority () == PRI_DEFAULT);
-
-  lock_init (&a);
-  lock_init (&b);
-
-  lock_acquire (&a);
-  lock_acquire (&b);
-
-  thread_create ("a", PRI_DEFAULT + 1, a_thread_func, &a);
-  msg ("Main thread should have priority %d.  Actual priority: %d.",
-       PRI_DEFAULT + 1, thread_get_priority ());
-
-  thread_create ("b", PRI_DEFAULT + 2, b_thread_func, &b);
-  msg ("Main thread should have priority %d.  Actual priority: %d.",
-       PRI_DEFAULT + 2, thread_get_priority ());
-
-  lock_release (&b);
-  msg ("Thread b should have just finished.");
-  msg ("Main thread should have priority %d.  Actual priority: %d.",
-       PRI_DEFAULT + 1, thread_get_priority ());
-
-  lock_release (&a);
-  msg ("Thread a should have just finished.");
-  msg ("Main thread should have priority %d.  Actual priority: %d.",
-       PRI_DEFAULT, thread_get_priority ());
-}
-
-static void
-a_thread_func (void *lock_) 
-{
-  struct lock *lock = lock_;
-
-  lock_acquire (lock);
-  msg ("Thread a acquired lock a.");
-  lock_release (lock);
-  msg ("Thread a finished.");
-}
-
-static void
-b_thread_func (void *lock_) 
-{
-  struct lock *lock = lock_;
-
-  lock_acquire (lock);
-  msg ("Thread b acquired lock b.");
-  lock_release (lock);
-  msg ("Thread b finished.");
-}
diff --git a/src/tests/threads/priority-donate-multiple.ck b/src/tests/threads/priority-donate-multiple.ck
deleted file mode 100644
index 0afd20b..0000000
--- a/src/tests/threads/priority-donate-multiple.ck
+++ /dev/null
@@ -1,19 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(priority-donate-multiple) begin
-(priority-donate-multiple) Main thread should have priority 32.  Actual priority: 32.
-(priority-donate-multiple) Main thread should have priority 33.  Actual priority: 33.
-(priority-donate-multiple) Thread b acquired lock b.
-(priority-donate-multiple) Thread b finished.
-(priority-donate-multiple) Thread b should have just finished.
-(priority-donate-multiple) Main thread should have priority 32.  Actual priority: 32.
-(priority-donate-multiple) Thread a acquired lock a.
-(priority-donate-multiple) Thread a finished.
-(priority-donate-multiple) Thread a should have just finished.
-(priority-donate-multiple) Main thread should have priority 31.  Actual priority: 31.
-(priority-donate-multiple) end
-EOF
-pass;
diff --git a/src/tests/threads/priority-donate-multiple2.c b/src/tests/threads/priority-donate-multiple2.c
deleted file mode 100644
index 7f65fef..0000000
--- a/src/tests/threads/priority-donate-multiple2.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/* The main thread acquires locks A and B, then it creates three
-   higher-priority threads.  The first two of these threads block
-   acquiring one of the locks and thus donate their priority to
-   the main thread.  The main thread releases the locks in turn
-   and relinquishes its donated priorities, allowing the third thread
-   to run.
-
-   In this test, the main thread releases the locks in a different
-   order compared to priority-donate-multiple.c.
-   
-   Written by Godmar Back <gback@cs.vt.edu>. 
-   Based on a test originally submitted for Stanford's CS 140 in
-   winter 1999 by Matt Franklin <startled@leland.stanford.edu>,
-   Greg Hutchins <gmh@leland.stanford.edu>, Yu Ping Hu
-   <yph@cs.stanford.edu>.  Modified by arens. */
-
-#include <stdio.h>
-#include "tests/threads/tests.h"
-#include "threads/init.h"
-#include "threads/synch.h"
-#include "threads/thread.h"
-
-static thread_func a_thread_func;
-static thread_func b_thread_func;
-static thread_func c_thread_func;
-
-void
-test_priority_donate_multiple2 (void) 
-{
-  struct lock a, b;
-
-  /* This test does not work with the MLFQS. */
-  ASSERT (!thread_mlfqs);
-
-  /* Make sure our priority is the default. */
-  ASSERT (thread_get_priority () == PRI_DEFAULT);
-
-  lock_init (&a);
-  lock_init (&b);
-
-  lock_acquire (&a);
-  lock_acquire (&b);
-
-  thread_create ("a", PRI_DEFAULT + 3, a_thread_func, &a);
-  msg ("Main thread should have priority %d.  Actual priority: %d.",
-       PRI_DEFAULT + 3, thread_get_priority ());
-
-  thread_create ("c", PRI_DEFAULT + 1, c_thread_func, NULL);
-
-  thread_create ("b", PRI_DEFAULT + 5, b_thread_func, &b);
-  msg ("Main thread should have priority %d.  Actual priority: %d.",
-       PRI_DEFAULT + 5, thread_get_priority ());
-
-  lock_release (&a);
-  msg ("Main thread should have priority %d.  Actual priority: %d.",
-       PRI_DEFAULT + 5, thread_get_priority ());
-
-  lock_release (&b);
-  msg ("Threads b, a, c should have just finished, in that order.");
-  msg ("Main thread should have priority %d.  Actual priority: %d.",
-       PRI_DEFAULT, thread_get_priority ());
-}
-
-static void
-a_thread_func (void *lock_) 
-{
-  struct lock *lock = lock_;
-
-  lock_acquire (lock);
-  msg ("Thread a acquired lock a.");
-  lock_release (lock);
-  msg ("Thread a finished.");
-}
-
-static void
-b_thread_func (void *lock_) 
-{
-  struct lock *lock = lock_;
-
-  lock_acquire (lock);
-  msg ("Thread b acquired lock b.");
-  lock_release (lock);
-  msg ("Thread b finished.");
-}
-
-static void
-c_thread_func (void *a_ UNUSED) 
-{
-  msg ("Thread c finished.");
-}
diff --git a/src/tests/threads/priority-donate-multiple2.ck b/src/tests/threads/priority-donate-multiple2.ck
deleted file mode 100644
index b23533a..0000000
--- a/src/tests/threads/priority-donate-multiple2.ck
+++ /dev/null
@@ -1,19 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(priority-donate-multiple2) begin
-(priority-donate-multiple2) Main thread should have priority 34.  Actual priority: 34.
-(priority-donate-multiple2) Main thread should have priority 36.  Actual priority: 36.
-(priority-donate-multiple2) Main thread should have priority 36.  Actual priority: 36.
-(priority-donate-multiple2) Thread b acquired lock b.
-(priority-donate-multiple2) Thread b finished.
-(priority-donate-multiple2) Thread a acquired lock a.
-(priority-donate-multiple2) Thread a finished.
-(priority-donate-multiple2) Thread c finished.
-(priority-donate-multiple2) Threads b, a, c should have just finished, in that order.
-(priority-donate-multiple2) Main thread should have priority 31.  Actual priority: 31.
-(priority-donate-multiple2) end
-EOF
-pass;
diff --git a/src/tests/threads/priority-donate-nest.c b/src/tests/threads/priority-donate-nest.c
deleted file mode 100644
index 3a3a9a5..0000000
--- a/src/tests/threads/priority-donate-nest.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/* Low-priority main thread L acquires lock A.  Medium-priority
-   thread M then acquires lock B then blocks on acquiring lock A.
-   High-priority thread H then blocks on acquiring lock B.  Thus,
-   thread H donates its priority to M, which in turn donates it
-   to thread L.
-   
-   Based on a test originally submitted for Stanford's CS 140 in
-   winter 1999 by Matt Franklin <startled@leland.stanford.edu>,
-   Greg Hutchins <gmh@leland.stanford.edu>, Yu Ping Hu
-   <yph@cs.stanford.edu>.  Modified by arens. */
-
-#include <stdio.h>
-#include "tests/threads/tests.h"
-#include "threads/init.h"
-#include "threads/synch.h"
-#include "threads/thread.h"
-
-struct locks 
-  {
-    struct lock *a;
-    struct lock *b;
-  };
-
-static thread_func medium_thread_func;
-static thread_func high_thread_func;
-
-void
-test_priority_donate_nest (void) 
-{
-  struct lock a, b;
-  struct locks locks;
-
-  /* This test does not work with the MLFQS. */
-  ASSERT (!thread_mlfqs);
-
-  /* Make sure our priority is the default. */
-  ASSERT (thread_get_priority () == PRI_DEFAULT);
-
-  lock_init (&a);
-  lock_init (&b);
-
-  lock_acquire (&a);
-
-  locks.a = &a;
-  locks.b = &b;
-  thread_create ("medium", PRI_DEFAULT + 1, medium_thread_func, &locks);
-  thread_yield ();
-  msg ("Low thread should have priority %d.  Actual priority: %d.",
-       PRI_DEFAULT + 1, thread_get_priority ());
-
-  thread_create ("high", PRI_DEFAULT + 2, high_thread_func, &b);
-  thread_yield ();
-  msg ("Low thread should have priority %d.  Actual priority: %d.",
-       PRI_DEFAULT + 2, thread_get_priority ());
-
-  lock_release (&a);
-  thread_yield ();
-  msg ("Medium thread should just have finished.");
-  msg ("Low thread should have priority %d.  Actual priority: %d.",
-       PRI_DEFAULT, thread_get_priority ());
-}
-
-static void
-medium_thread_func (void *locks_) 
-{
-  struct locks *locks = locks_;
-
-  lock_acquire (locks->b);
-  lock_acquire (locks->a);
-
-  msg ("Medium thread should have priority %d.  Actual priority: %d.",
-       PRI_DEFAULT + 2, thread_get_priority ());
-  msg ("Medium thread got the lock.");
-
-  lock_release (locks->a);
-  thread_yield ();
-
-  lock_release (locks->b);
-  thread_yield ();
-
-  msg ("High thread should have just finished.");
-  msg ("Middle thread finished.");
-}
-
-static void
-high_thread_func (void *lock_) 
-{
-  struct lock *lock = lock_;
-
-  lock_acquire (lock);
-  msg ("High thread got the lock.");
-  lock_release (lock);
-  msg ("High thread finished.");
-}
diff --git a/src/tests/threads/priority-donate-nest.ck b/src/tests/threads/priority-donate-nest.ck
deleted file mode 100644
index 923460e..0000000
--- a/src/tests/threads/priority-donate-nest.ck
+++ /dev/null
@@ -1,19 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(priority-donate-nest) begin
-(priority-donate-nest) Low thread should have priority 32.  Actual priority: 32.
-(priority-donate-nest) Low thread should have priority 33.  Actual priority: 33.
-(priority-donate-nest) Medium thread should have priority 33.  Actual priority: 33.
-(priority-donate-nest) Medium thread got the lock.
-(priority-donate-nest) High thread got the lock.
-(priority-donate-nest) High thread finished.
-(priority-donate-nest) High thread should have just finished.
-(priority-donate-nest) Middle thread finished.
-(priority-donate-nest) Medium thread should just have finished.
-(priority-donate-nest) Low thread should have priority 31.  Actual priority: 31.
-(priority-donate-nest) end
-EOF
-pass;
diff --git a/src/tests/threads/priority-donate-one.c b/src/tests/threads/priority-donate-one.c
deleted file mode 100644
index 3189f3a..0000000
--- a/src/tests/threads/priority-donate-one.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* The main thread acquires a lock.  Then it creates two
-   higher-priority threads that block acquiring the lock, causing
-   them to donate their priorities to the main thread.  When the
-   main thread releases the lock, the other threads should
-   acquire it in priority order.
-
-   Based on a test originally submitted for Stanford's CS 140 in
-   winter 1999 by Matt Franklin <startled@leland.stanford.edu>,
-   Greg Hutchins <gmh@leland.stanford.edu>, Yu Ping Hu
-   <yph@cs.stanford.edu>.  Modified by arens. */
-
-#include <stdio.h>
-#include "tests/threads/tests.h"
-#include "threads/init.h"
-#include "threads/synch.h"
-#include "threads/thread.h"
-
-static thread_func acquire1_thread_func;
-static thread_func acquire2_thread_func;
-
-void
-test_priority_donate_one (void) 
-{
-  struct lock lock;
-
-  /* This test does not work with the MLFQS. */
-  ASSERT (!thread_mlfqs);
-
-  /* Make sure our priority is the default. */
-  ASSERT (thread_get_priority () == PRI_DEFAULT);
-
-  lock_init (&lock);
-  lock_acquire (&lock);
-  thread_create ("acquire1", PRI_DEFAULT + 1, acquire1_thread_func, &lock);
-  msg ("This thread should have priority %d.  Actual priority: %d.",
-       PRI_DEFAULT + 1, thread_get_priority ());
-  thread_create ("acquire2", PRI_DEFAULT + 2, acquire2_thread_func, &lock);
-  msg ("This thread should have priority %d.  Actual priority: %d.",
-       PRI_DEFAULT + 2, thread_get_priority ());
-  lock_release (&lock);
-  msg ("acquire2, acquire1 must already have finished, in that order.");
-  msg ("This should be the last line before finishing this test.");
-}
-
-static void
-acquire1_thread_func (void *lock_) 
-{
-  struct lock *lock = lock_;
-
-  lock_acquire (lock);
-  msg ("acquire1: got the lock");
-  lock_release (lock);
-  msg ("acquire1: done");
-}
-
-static void
-acquire2_thread_func (void *lock_) 
-{
-  struct lock *lock = lock_;
-
-  lock_acquire (lock);
-  msg ("acquire2: got the lock");
-  lock_release (lock);
-  msg ("acquire2: done");
-}
diff --git a/src/tests/threads/priority-donate-one.ck b/src/tests/threads/priority-donate-one.ck
deleted file mode 100644
index b7c8e6f..0000000
--- a/src/tests/threads/priority-donate-one.ck
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(priority-donate-one) begin
-(priority-donate-one) This thread should have priority 32.  Actual priority: 32.
-(priority-donate-one) This thread should have priority 33.  Actual priority: 33.
-(priority-donate-one) acquire2: got the lock
-(priority-donate-one) acquire2: done
-(priority-donate-one) acquire1: got the lock
-(priority-donate-one) acquire1: done
-(priority-donate-one) acquire2, acquire1 must already have finished, in that order.
-(priority-donate-one) This should be the last line before finishing this test.
-(priority-donate-one) end
-EOF
-pass;
diff --git a/src/tests/threads/priority-donate-sema.c b/src/tests/threads/priority-donate-sema.c
deleted file mode 100644
index b33cb72..0000000
--- a/src/tests/threads/priority-donate-sema.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/* Low priority thread L acquires a lock, then blocks downing a
-   semaphore.  Medium priority thread M then blocks waiting on
-   the same semaphore.  Next, high priority thread H attempts to
-   acquire the lock, donating its priority to L.
-
-   Next, the main thread ups the semaphore, waking up L.  L
-   releases the lock, which wakes up H.  H "up"s the semaphore,
-   waking up M.  H terminates, then M, then L, and finally the
-   main thread.
-
-   Written by Godmar Back <gback@cs.vt.edu>. */
-
-#include <stdio.h>
-#include "tests/threads/tests.h"
-#include "threads/init.h"
-#include "threads/synch.h"
-#include "threads/thread.h"
-
-struct lock_and_sema 
-  {
-    struct lock lock;
-    struct semaphore sema;
-  };
-
-static thread_func l_thread_func;
-static thread_func m_thread_func;
-static thread_func h_thread_func;
-
-void
-test_priority_donate_sema (void) 
-{
-  struct lock_and_sema ls;
-
-  /* This test does not work with the MLFQS. */
-  ASSERT (!thread_mlfqs);
-
-  /* Make sure our priority is the default. */
-  ASSERT (thread_get_priority () == PRI_DEFAULT);
-
-  lock_init (&ls.lock);
-  sema_init (&ls.sema, 0);
-  thread_create ("low", PRI_DEFAULT + 1, l_thread_func, &ls);
-  thread_create ("med", PRI_DEFAULT + 3, m_thread_func, &ls);
-  thread_create ("high", PRI_DEFAULT + 5, h_thread_func, &ls);
-  sema_up (&ls.sema);
-  msg ("Main thread finished.");
-}
-
-static void
-l_thread_func (void *ls_) 
-{
-  struct lock_and_sema *ls = ls_;
-
-  lock_acquire (&ls->lock);
-  msg ("Thread L acquired lock.");
-  sema_down (&ls->sema);
-  msg ("Thread L downed semaphore.");
-  lock_release (&ls->lock);
-  msg ("Thread L finished.");
-}
-
-static void
-m_thread_func (void *ls_) 
-{
-  struct lock_and_sema *ls = ls_;
-
-  sema_down (&ls->sema);
-  msg ("Thread M finished.");
-}
-
-static void
-h_thread_func (void *ls_) 
-{
-  struct lock_and_sema *ls = ls_;
-
-  lock_acquire (&ls->lock);
-  msg ("Thread H acquired lock.");
-
-  sema_up (&ls->sema);
-  lock_release (&ls->lock);
-  msg ("Thread H finished.");
-}
diff --git a/src/tests/threads/priority-donate-sema.ck b/src/tests/threads/priority-donate-sema.ck
deleted file mode 100644
index 92b8d07..0000000
--- a/src/tests/threads/priority-donate-sema.ck
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(priority-donate-sema) begin
-(priority-donate-sema) Thread L acquired lock.
-(priority-donate-sema) Thread L downed semaphore.
-(priority-donate-sema) Thread H acquired lock.
-(priority-donate-sema) Thread H finished.
-(priority-donate-sema) Thread M finished.
-(priority-donate-sema) Thread L finished.
-(priority-donate-sema) Main thread finished.
-(priority-donate-sema) end
-EOF
-pass;
diff --git a/src/tests/threads/priority-fifo.c b/src/tests/threads/priority-fifo.c
deleted file mode 100644
index 3af98a3..0000000
--- a/src/tests/threads/priority-fifo.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/* Creates several threads all at the same priority and ensures
-   that they consistently run in the same round-robin order.
-
-   Based on a test originally submitted for Stanford's CS 140 in
-   winter 1999 by by Matt Franklin
-   <startled@leland.stanford.edu>, Greg Hutchins
-   <gmh@leland.stanford.edu>, Yu Ping Hu <yph@cs.stanford.edu>.
-   Modified by arens. */
-
-#include <stdio.h>
-#include "tests/threads/tests.h"
-#include "threads/init.h"
-#include "devices/timer.h"
-#include "threads/malloc.h"
-#include "threads/synch.h"
-#include "threads/thread.h"
-
-struct simple_thread_data 
-  {
-    int id;                     /* Sleeper ID. */
-    int iterations;             /* Iterations so far. */
-    struct lock *lock;          /* Lock on output. */
-    int **op;                   /* Output buffer position. */
-  };
-
-#define THREAD_CNT 16
-#define ITER_CNT 16
-
-static thread_func simple_thread_func;
-
-void
-test_priority_fifo (void) 
-{
-  struct simple_thread_data data[THREAD_CNT];
-  struct lock lock;
-  int *output, *op;
-  int i, cnt;
-
-  /* This test does not work with the MLFQS. */
-  ASSERT (!thread_mlfqs);
-
-  /* Make sure our priority is the default. */
-  ASSERT (thread_get_priority () == PRI_DEFAULT);
-
-  msg ("%d threads will iterate %d times in the same order each time.",
-       THREAD_CNT, ITER_CNT);
-  msg ("If the order varies then there is a bug.");
-
-  output = op = malloc (sizeof *output * THREAD_CNT * ITER_CNT * 2);
-  ASSERT (output != NULL);
-  lock_init (&lock);
-
-  thread_set_priority (PRI_DEFAULT + 2);
-  for (i = 0; i < THREAD_CNT; i++) 
-    {
-      char name[16];
-      struct simple_thread_data *d = data + i;
-      snprintf (name, sizeof name, "%d", i);
-      d->id = i;
-      d->iterations = 0;
-      d->lock = &lock;
-      d->op = &op;
-      thread_create (name, PRI_DEFAULT + 1, simple_thread_func, d);
-    }
-
-  thread_set_priority (PRI_DEFAULT);
-  /* All the other threads now run to termination here. */
-  ASSERT (lock.holder == NULL);
-
-  cnt = 0;
-  for (; output < op; output++) 
-    {
-      struct simple_thread_data *d;
-
-      ASSERT (*output >= 0 && *output < THREAD_CNT);
-      d = data + *output;
-      if (cnt % THREAD_CNT == 0)
-        printf ("(priority-fifo) iteration:");
-      printf (" %d", d->id);
-      if (++cnt % THREAD_CNT == 0)
-        printf ("\n");
-      d->iterations++;
-    }
-}
-
-static void 
-simple_thread_func (void *data_) 
-{
-  struct simple_thread_data *data = data_;
-  int i;
-  
-  for (i = 0; i < ITER_CNT; i++) 
-    {
-      lock_acquire (data->lock);
-      *(*data->op)++ = data->id;
-      lock_release (data->lock);
-      thread_yield ();
-    }
-}
diff --git a/src/tests/threads/priority-fifo.ck b/src/tests/threads/priority-fifo.ck
deleted file mode 100644
index 11f1dd3..0000000
--- a/src/tests/threads/priority-fifo.ck
+++ /dev/null
@@ -1,63 +0,0 @@
-# -*- perl -*-
-
-# The expected output looks like this:
-#
-# (priority-fifo) iteration: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-# (priority-fifo) iteration: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-# (priority-fifo) iteration: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-# (priority-fifo) iteration: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-# (priority-fifo) iteration: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-# (priority-fifo) iteration: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-# (priority-fifo) iteration: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-# (priority-fifo) iteration: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-# (priority-fifo) iteration: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-# (priority-fifo) iteration: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-# (priority-fifo) iteration: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-# (priority-fifo) iteration: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-# (priority-fifo) iteration: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-# (priority-fifo) iteration: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-# (priority-fifo) iteration: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-# (priority-fifo) iteration: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-#
-# A different permutation of 0...15 is acceptable, but every line must
-# be in the same order.
-
-use strict;
-use warnings;
-use tests::tests;
-
-our ($test);
-my (@output) = read_text_file ("$test.output");
-
-common_checks ("run", @output);
-
-my ($thread_cnt) = 16;
-my ($iter_cnt) = 16;
-my (@order);
-my (@t) = (-1) x $thread_cnt;
-
-my (@iterations) = grep (/iteration:/, @output);
-fail "No iterations found in output.\n" if !@iterations;
-
-my (@numbering) = $iterations[0] =~ /(\d+)/g;
-fail "First iteration does not list exactly $thread_cnt threads.\n"
-  if @numbering != $thread_cnt;
-
-my (@sorted_numbering) = sort { $a <=> $b } @numbering;
-for my $i (0...$#sorted_numbering) {
-    if ($sorted_numbering[$i] != $i) {
-	fail "First iteration does not list all threads "
-	  . "0...$#sorted_numbering\n";
-    }
-}
-
-for my $i (1...$#iterations) {
-    if ($iterations[$i] ne $iterations[0]) {
-	fail "Iteration $i differs from iteration 0\n";
-    }
-}
-
-fail "$iter_cnt iterations expected but " . scalar (@iterations)  . " found\n"
-  if $iter_cnt != @iterations;
-
-pass;
diff --git a/src/tests/threads/priority-preempt.c b/src/tests/threads/priority-preempt.c
deleted file mode 100644
index 3c3aacb..0000000
--- a/src/tests/threads/priority-preempt.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Ensures that a high-priority thread really preempts.
-
-   Based on a test originally submitted for Stanford's CS 140 in
-   winter 1999 by by Matt Franklin
-   <startled@leland.stanford.edu>, Greg Hutchins
-   <gmh@leland.stanford.edu>, Yu Ping Hu <yph@cs.stanford.edu>.
-   Modified by arens. */
-
-#include <stdio.h>
-#include "tests/threads/tests.h"
-#include "threads/init.h"
-#include "threads/synch.h"
-#include "threads/thread.h"
-
-static thread_func simple_thread_func;
-
-void
-test_priority_preempt (void) 
-{
-  /* This test does not work with the MLFQS. */
-  ASSERT (!thread_mlfqs);
-
-  /* Make sure our priority is the default. */
-  ASSERT (thread_get_priority () == PRI_DEFAULT);
-
-  thread_create ("high-priority", PRI_DEFAULT + 1, simple_thread_func, NULL);
-  msg ("The high-priority thread should have already completed.");
-}
-
-static void 
-simple_thread_func (void *aux UNUSED) 
-{
-  int i;
-  
-  for (i = 0; i < 5; i++) 
-    {
-      msg ("Thread %s iteration %d", thread_name (), i);
-      thread_yield ();
-    }
-  msg ("Thread %s done!", thread_name ());
-}
diff --git a/src/tests/threads/priority-preempt.ck b/src/tests/threads/priority-preempt.ck
deleted file mode 100644
index 43a26ee..0000000
--- a/src/tests/threads/priority-preempt.ck
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(priority-preempt) begin
-(priority-preempt) Thread high-priority iteration 0
-(priority-preempt) Thread high-priority iteration 1
-(priority-preempt) Thread high-priority iteration 2
-(priority-preempt) Thread high-priority iteration 3
-(priority-preempt) Thread high-priority iteration 4
-(priority-preempt) Thread high-priority done!
-(priority-preempt) The high-priority thread should have already completed.
-(priority-preempt) end
-EOF
-pass;
diff --git a/src/tests/threads/priority-sema.c b/src/tests/threads/priority-sema.c
deleted file mode 100644
index 2834a88..0000000
--- a/src/tests/threads/priority-sema.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Tests that the highest-priority thread waiting on a semaphore
-   is the first to wake up. */
-
-#include <stdio.h>
-#include "tests/threads/tests.h"
-#include "threads/init.h"
-#include "threads/malloc.h"
-#include "threads/synch.h"
-#include "threads/thread.h"
-#include "devices/timer.h"
-
-static thread_func priority_sema_thread;
-static struct semaphore sema;
-
-void
-test_priority_sema (void) 
-{
-  int i;
-  
-  /* This test does not work with the MLFQS. */
-  ASSERT (!thread_mlfqs);
-
-  sema_init (&sema, 0);
-  thread_set_priority (PRI_MIN);
-  for (i = 0; i < 10; i++) 
-    {
-      int priority = PRI_DEFAULT - (i + 3) % 10 - 1;
-      char name[16];
-      snprintf (name, sizeof name, "priority %d", priority);
-      thread_create (name, priority, priority_sema_thread, NULL);
-    }
-
-  for (i = 0; i < 10; i++) 
-    {
-      sema_up (&sema);
-      msg ("Back in main thread."); 
-    }
-}
-
-static void
-priority_sema_thread (void *aux UNUSED) 
-{
-  sema_down (&sema);
-  msg ("Thread %s woke up.", thread_name ());
-}
diff --git a/src/tests/threads/priority-sema.ck b/src/tests/threads/priority-sema.ck
deleted file mode 100644
index 559988d..0000000
--- a/src/tests/threads/priority-sema.ck
+++ /dev/null
@@ -1,29 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(priority-sema) begin
-(priority-sema) Thread priority 30 woke up.
-(priority-sema) Back in main thread.
-(priority-sema) Thread priority 29 woke up.
-(priority-sema) Back in main thread.
-(priority-sema) Thread priority 28 woke up.
-(priority-sema) Back in main thread.
-(priority-sema) Thread priority 27 woke up.
-(priority-sema) Back in main thread.
-(priority-sema) Thread priority 26 woke up.
-(priority-sema) Back in main thread.
-(priority-sema) Thread priority 25 woke up.
-(priority-sema) Back in main thread.
-(priority-sema) Thread priority 24 woke up.
-(priority-sema) Back in main thread.
-(priority-sema) Thread priority 23 woke up.
-(priority-sema) Back in main thread.
-(priority-sema) Thread priority 22 woke up.
-(priority-sema) Back in main thread.
-(priority-sema) Thread priority 21 woke up.
-(priority-sema) Back in main thread.
-(priority-sema) end
-EOF
-pass;
diff --git a/src/tests/threads/simplethreadtest.c b/src/tests/threads/simplethreadtest.c
deleted file mode 100644
index f9c058e..0000000
--- a/src/tests/threads/simplethreadtest.c
+++ /dev/null
@@ -1,68 +0,0 @@
-// threadtest.cc 
-//	Simple test case for the threads assignment.
-//
-//	Create two threads, and have them context switch
-//	back and forth between themselves by calling Thread::Yield, 
-//	to illustratethe inner workings of the thread system.
-//
-// Copyright (c) 1992-1993 The Regents of the University of California.
-// All rights reserved.  See copyright.h for copyright notice and limitation 
-// of liability and disclaimer of warranty provisions.
-//
-// Modified by Viacheslav Izosimov
-//   - transition from C++ to C (from Nachos to Pintos)
-
-
-//#include "copyright.h"
-//#include "system.h"
-#include "threads/boundedbuffer.h"
-#include "threads/malloc.h"
-#include "threads/synch.h"
-#include "threads/thread.h"
-#include "tests/threads/tests.h"
-#include <stdio.h>
-#include <string.h>
-
-//----------------------------------------------------------------------
-// SimpleThread
-// 	Loop 5 times, yielding the CPU to another ready thread 
-//	each iteration.
-//
-//	"which" is simply a number identifying the thread, for debugging
-//	purposes.
-//----------------------------------------------------------------------
-
-void SimpleThread(void *);
-
-void
-SimpleThread(void * which)
-{
-    int num;
-    
-    for (num = 0; num < 5; num++) {
-		printf("*** thread %d looped %d times\n", (int)which, num);
-		thread_yield();
-//        currentThread->Yield();
-    }
-}
-
-//----------------------------------------------------------------------
-// ThreadTest
-// 	Set up a ping-pong between two threads, by forking a thread 
-//	to call SimpleThread, and then calling SimpleThread ourselves.
-//----------------------------------------------------------------------
-
-void
-SimpleThreadTest(void)
-{
-//    DEBUG('t', "Entering SimpleTest");
-
-//    Thread *t = new Thread("forked thread");
-	char *t_name = "forked thread";
-	printf("Entering SimpleTest");
-
-	thread_create(t_name, PRI_MIN, SimpleThread, (void *)1);
-
-//    t->Fork(SimpleThread, 1);
-    SimpleThread((void *)0);
-}
diff --git a/src/tests/threads/tests.c b/src/tests/threads/tests.c
deleted file mode 100644
index b8d090d..0000000
--- a/src/tests/threads/tests.c
+++ /dev/null
@@ -1,104 +0,0 @@
-#include "tests/threads/tests.h"
-#include <debug.h>
-#include <string.h>
-#include <stdio.h>
-
-struct test 
-  {
-    const char *name;
-    test_func *function;
-  };
-
-static const struct test tests[] = 
-  {
-    {"alarm-single", test_alarm_single},
-    {"alarm-multiple", test_alarm_multiple},
-    {"alarm-simultaneous", test_alarm_simultaneous},
-    {"alarm-priority", test_alarm_priority},
-    {"alarm-zero", test_alarm_zero},
-    {"alarm-negative", test_alarm_negative},
-    {"priority-change", test_priority_change},
-    {"priority-donate-one", test_priority_donate_one},
-    {"priority-donate-multiple", test_priority_donate_multiple},
-    {"priority-donate-multiple2", test_priority_donate_multiple2},
-    {"priority-donate-nest", test_priority_donate_nest},
-    {"priority-donate-sema", test_priority_donate_sema},
-    {"priority-donate-lower", test_priority_donate_lower},
-    {"priority-donate-chain", test_priority_donate_chain},
-    {"priority-fifo", test_priority_fifo},
-    {"priority-preempt", test_priority_preempt},
-    {"priority-sema", test_priority_sema},
-    {"priority-condvar", test_priority_condvar},
-    {"mlfqs-load-1", test_mlfqs_load_1},
-    {"mlfqs-load-60", test_mlfqs_load_60},
-    {"mlfqs-load-avg", test_mlfqs_load_avg},
-    {"mlfqs-recent-1", test_mlfqs_recent_1},
-    {"mlfqs-fair-2", test_mlfqs_fair_2},
-    {"mlfqs-fair-20", test_mlfqs_fair_20},
-    {"mlfqs-nice-2", test_mlfqs_nice_2},
-    {"mlfqs-nice-10", test_mlfqs_nice_10},
-    {"mlfqs-block", test_mlfqs_block},
-    {"threadtest", ThreadTest},
-    {"simplethreadtest", SimpleThreadTest}
-  };
-
-static const char *test_name;
-
-/* Runs the test named NAME. */
-void
-run_test (const char *name) 
-{
-  const struct test *t;
-
-  for (t = tests; t < tests + sizeof tests / sizeof *tests; t++)
-    if (!strcmp (name, t->name))
-      {
-        test_name = name;
-        msg ("begin");
-        t->function ();
-        msg ("end");
-        return;
-      }
-  PANIC ("no test named \"%s\"", name);
-}
-
-/* Prints FORMAT as if with printf(),
-   prefixing the output by the name of the test
-   and following it with a new-line character. */
-void
-msg (const char *format, ...) 
-{
-  va_list args;
-  
-  printf ("(%s) ", test_name);
-  va_start (args, format);
-  vprintf (format, args);
-  va_end (args);
-  putchar ('\n');
-}
-
-/* Prints failure message FORMAT as if with printf(),
-   prefixing the output by the name of the test and FAIL:
-   and following it with a new-line character,
-   and then panics the kernel. */
-void
-fail (const char *format, ...) 
-{
-  va_list args;
-  
-  printf ("(%s) FAIL: ", test_name);
-  va_start (args, format);
-  vprintf (format, args);
-  va_end (args);
-  putchar ('\n');
-
-  PANIC ("test failed");
-}
-
-/* Prints a message indicating the current test passed. */
-void
-pass (void) 
-{
-  printf ("(%s) PASS\n", test_name);
-}
-
diff --git a/src/tests/threads/tests.h b/src/tests/threads/tests.h
deleted file mode 100644
index 1fe3582..0000000
--- a/src/tests/threads/tests.h
+++ /dev/null
@@ -1,43 +0,0 @@
-#ifndef TESTS_THREADS_TESTS_H
-#define TESTS_THREADS_TESTS_H
-
-void run_test (const char *);
-
-typedef void test_func (void);
-
-extern test_func test_alarm_single;
-extern test_func test_alarm_multiple;
-extern test_func test_alarm_simultaneous;
-extern test_func test_alarm_priority;
-extern test_func test_alarm_zero;
-extern test_func test_alarm_negative;
-extern test_func test_priority_change;
-extern test_func test_priority_donate_one;
-extern test_func test_priority_donate_multiple;
-extern test_func test_priority_donate_multiple2;
-extern test_func test_priority_donate_sema;
-extern test_func test_priority_donate_nest;
-extern test_func test_priority_donate_lower;
-extern test_func test_priority_donate_chain;
-extern test_func test_priority_fifo;
-extern test_func test_priority_preempt;
-extern test_func test_priority_sema;
-extern test_func test_priority_condvar;
-extern test_func test_mlfqs_load_1;
-extern test_func test_mlfqs_load_60;
-extern test_func test_mlfqs_load_avg;
-extern test_func test_mlfqs_recent_1;
-extern test_func test_mlfqs_fair_2;
-extern test_func test_mlfqs_fair_20;
-extern test_func test_mlfqs_nice_2;
-extern test_func test_mlfqs_nice_10;
-extern test_func test_mlfqs_block;
-extern test_func ThreadTest;
-extern test_func SimpleThreadTest;
-
-void msg (const char *, ...);
-void fail (const char *, ...);
-void pass (void);
-
-#endif /* tests/threads/tests.h */
-
diff --git a/src/tests/threads/threadtest.c b/src/tests/threads/threadtest.c
deleted file mode 100644
index 54f47cd..0000000
--- a/src/tests/threads/threadtest.c
+++ /dev/null
@@ -1,250 +0,0 @@
-// threadtest.c 
-//	Simple test case for the threads assignment.
-//
-//	Create seven threads, and have them context switch
-//	back and forth between themselves by calling Thread::Yield, 
-//	to illustrate the inner workings of the thread system.
-//
-// Copyright (c) 1992-1993 The Regents of the University of California.
-// All rights reserved.  See copyright.h for copyright notice and limitation 
-// of liability and disclaimer of warranty provisions.
-//
-// Modified by Levon Saldamli.
-// Modified by Andrzej Bednarski:
-//  - added #ifdef (do not require modification of Makefile)
-// Modified by Vlad Jahundovics:
-//  - transition from C++ to C (from Nachos to Pintos)
-
-//#ifdef THREADS
-
-//#include "copyright.h"
-//#include "system.h"
-//#include "synch.h"
-//#include "boundedbuffer.h"
-#include "threads/boundedbuffer.h"
-#include "threads/malloc.h"
-#include "threads/synch.h"
-#include "threads/thread.h"
-#include "tests/threads/tests.h"
-#include <stdio.h>
-#include <string.h>
-
-#define NBR_OF_PROD 50
-//const int nbr_of_prod = 50;
-#define NBR_OF_CON 50
-//const int nbr_of_con = 50;
-const int prod_switch = 30;
-const int con_switch = 20;
-
-char * prod_name[NBR_OF_PROD];
-char * con_name[NBR_OF_CON];
-
-char * msg_array[NBR_OF_PROD];
-
-char * received_msg_array[NBR_OF_PROD];
-int received_msg_pos[NBR_OF_PROD];
-
-
-struct bounded_buffer bounded_buffer[2];
-
-struct lock readlock[2];
-
-struct lock start_lock;
-struct condition start_cond;
-
-int started_threads;
-
-/*
-class Data
-{
-public:
-  Data(char ch, char* s, int i) {
-    c = ch;
-    sender = s;
-    sender_index = i;
-  }
-  char c;
-  char *sender;
-  int sender_index;
-};
-*/
-
-struct Data
-{
-  char c;
-  char *sender;
-  int sender_index;
-};
-
-void data_init(struct Data *data, char ch, char* s, int i);
-void WaitForStart(void);
-void Producer(void *index);
-void Consumer(void *index);
-
-void data_init(struct Data *data, char ch, char* s, int i) 
-{
-  data->c = ch;
-  data->sender = s;
-  data->sender_index = i;
-}
-
-void
-WaitForStart(void) {
-  lock_acquire(&start_lock);
-  printf("%s is waiting for start signal\n", thread_name());
-  cond_wait(&start_cond,&start_lock);
-  printf("%s is starting\n", thread_name());
-  started_threads++;
-  lock_release(&start_lock);
-}
-
-void
-Producer(void *index)
-{
-  char *sender_name;
-  size_t sender_name_length;
-  WaitForStart();
-  int buf=0;
-  if ((int) index >= prod_switch)
-    buf=1;
-
-  char *msg = msg_array[(int) index];
-  void *p;
-
-  for (; *msg != '\0'; ++msg) {
-    p = malloc(sizeof(struct Data));
-    sender_name_length = strlen(thread_name())+1;
-    sender_name = calloc(sizeof(char), sender_name_length);
-    strlcpy(sender_name,thread_name(), sender_name_length);
-    data_init(p, *msg, sender_name, (int) index);
-    bb_write(&bounded_buffer[buf],(int) p);
-    thread_yield();
-  }
-  p = malloc(sizeof(struct Data));
-  sender_name_length = strlen(thread_name())+1;
-  sender_name = calloc(sizeof(char), sender_name_length);
-  strlcpy(sender_name,thread_name(), sender_name_length);
-  data_init(p, 0, sender_name, (int) index);
-  bb_write(&bounded_buffer[buf],(int) p);
-  printf("%s has finished sending.\n", thread_name());
-}
-
-void
-Consumer(void *index)
-{
-  WaitForStart();
-
-  int buf=0;
-  if ((int) index >= con_switch)
-    buf=1;
-
-  while (true) {
-
-    lock_acquire(&readlock[buf]);
-    struct Data *data = (struct Data*) bb_read(&bounded_buffer[buf]);
-    int i=data->sender_index;
-    received_msg_array[i][received_msg_pos[i]] = data->c;
-    received_msg_pos[i]++;
-    lock_release(&readlock[buf]);
-
-    if (data->c != 0);
-      /*      DEBUG('c', "%s received from %s: %c\n", 
-	    currentThread->getName(), 
-	    data->sender,
-	    data->c);*/
-    else
-      printf("\n%s: %s's total message was: \n\"%s\"\n", 
-	     thread_name(),
-	     data->sender,
-	     received_msg_array[i]);
-    free(data->sender);
-    free(data);
-    thread_yield();
-  }
-}
-
-
-
-//----------------------------------------------------------------------
-// ThreadTest
-// 	Creates three consumers and three producers. The producers
-// 	write different messages to the buffer. The main thread also
-// 	calls Consumer, resulting in four consumers.
-//----------------------------------------------------------------------
-
-void
-ThreadTest(void)
-{
-  //DEBUG('t', "Entering SimpleTest\n");
-    const int nmsg = 5;
-    char *msg[nmsg];
-    msg[0] = "Computer, compute to the last digit the value of pi!";
-    msg[1] = "What is now proved was once only imagined.";
-    msg[2] = "Insufficient facts always invites danger, Captain.";
-    msg[3] = "The Federation's gone; the Borg is everywhere!";
-    msg[4] = "Live long and prosper, Spock.";
-
-    //    bounded_buffer[0] = new bounded_buffer(5);
-    //    bounded_buffer[1] = new bounded_buffer(5);
-
-    printf("ThreadTest has just started! It's thread name is %s.\n", thread_name());
-
-    bb_init(&bounded_buffer[0],5);
-    bb_init(&bounded_buffer[1],5);
-    lock_init(&readlock[0]);
-    lock_init(&readlock[1]);
-    //    readlock[0] = new Lock("Read lock 0");
-    //    readlock[1] = new Lock("Read lock 1");
-
-    lock_init(&start_lock);
-    //    start_lock = new Lock("Start lock");
-    cond_init(&start_cond);
-    //    start_cond = new Condition("Start cond");
-    started_threads = 0;
-
-    char pname[] = "Producer";
-    char cname[] = "Consumer";
-    int i;
-
-    for (i=0;i < NBR_OF_PROD; i++) {
-      //      char *str = new char[strlen(pname)+4];
-      char *str = (char *) calloc(sizeof(char), strlen(pname)+4);
-      snprintf(str,strlen(pname)+4,"%s %02d", pname, i);
-
-      prod_name[i] = str;
-      msg_array[i] = msg[i%nmsg];
-      received_msg_array[i] = (char *) calloc(sizeof(char),strlen(msg_array[i])+1);
-      //received_msg_array[i] = new char[strlen(msg_array[i])+1];
-      received_msg_pos[i] = 0;
-      //      printf("Creating thread with the name: %s\n",str);
-      thread_create(str, PRI_MIN, Producer, (void *) i);
-      free(str);
-      //      Thread *t = new Thread(str);
-      //      t->Fork(Producer, i);
-    }
-    for (i=0;i < NBR_OF_CON; i++) {
-      char *str = (char *) calloc(sizeof(char), strlen(cname)+4);
-      //char *str = new char[strlen(cname)+4];
-      snprintf(str, strlen(cname)+4,"%s %02d", cname, i);
-      //      printf("Creating thread with the name: %s\n",str);
-      thread_create(str, PRI_MIN, Consumer, (void *) i);
-      free(str);
-      //Thread *t = new Thread(str);
-      //t->Fork(Consumer, i);
-    }
-
-    thread_yield();
-
-    lock_acquire(&start_lock);
-    while (started_threads < (NBR_OF_PROD + NBR_OF_CON) ) {
-      printf("\n\n%s : All threads haven't started. Broadcasting start signal to all threads\n\n", thread_name());
-      cond_broadcast(&start_cond, &start_lock);
-      //      start_cond->Broadcast(start_lock);
-      lock_release(&start_lock);
-      thread_yield();
-      lock_acquire(&start_lock);
-    }
-    printf("\n\nAll threads have started. Finishing %s\n\n", thread_name());
-}
-
-//#endif // THREADS
diff --git a/src/tests/userprog/Grading b/src/tests/userprog/Grading
deleted file mode 100644
index f70dc99..0000000
--- a/src/tests/userprog/Grading
+++ /dev/null
@@ -1,11 +0,0 @@
-# Percentage of the testing point total designated for each set of
-# tests.
-
-# This project is primarily about implementing system calls.
-# If you do so properly, the base file system functionality
-# should come "for free".  Thus, the points emphasis below.
-
-35%	tests/userprog/Rubric.functionality
-25%	tests/userprog/Rubric.robustness
-10%	tests/userprog/no-vm/Rubric
-30%	tests/filesys/base/Rubric
diff --git a/src/tests/userprog/Make.tests b/src/tests/userprog/Make.tests
deleted file mode 100644
index c762af3..0000000
--- a/src/tests/userprog/Make.tests
+++ /dev/null
@@ -1,132 +0,0 @@
-# -*- makefile -*-
-
-tests/%.output: FSDISK = 2
-tests/%.output: PUTFILES = $(filter-out os.dsk, $^)
-
-tests/userprog_TESTS = $(addprefix tests/userprog/,args-none		\
-args-single args-multiple args-many args-dbl-space sc-bad-sp		\
-sc-bad-arg sc-boundary sc-boundary-2 halt exit create-normal		\
-create-empty create-null create-bad-ptr create-long create-exists	\
-create-bound open-normal open-missing open-boundary open-empty		\
-open-null open-bad-ptr open-twice close-normal close-stdin	\
-close-stdout close-bad-fd read-bad-ptr read-boundary	\
-read-zero read-stdout read-bad-fd write-normal write-bad-ptr		\
-write-boundary write-zero write-stdin write-bad-fd exec-once exec-arg	\
-exec-multiple exec-missing exec-bad-ptr wait-simple wait-twice		\
-wait-killed wait-bad-pid multi-recurse 	\
-)
-
-tests/userprog_PROGS = $(tests/userprog_TESTS) $(addprefix \
-tests/userprog/,child-simple child-args child-bad child-close child-rox)
-
-tests/userprog/args-none_SRC = tests/userprog/args.c
-tests/userprog/args-single_SRC = tests/userprog/args.c
-tests/userprog/args-multiple_SRC = tests/userprog/args.c
-tests/userprog/args-many_SRC = tests/userprog/args.c
-tests/userprog/args-dbl-space_SRC = tests/userprog/args.c
-tests/userprog/sc-bad-sp_SRC = tests/userprog/sc-bad-sp.c tests/main.c
-tests/userprog/sc-bad-arg_SRC = tests/userprog/sc-bad-arg.c tests/main.c
-tests/userprog/bad-read_SRC = tests/userprog/bad-read.c tests/main.c
-tests/userprog/bad-write_SRC = tests/userprog/bad-write.c tests/main.c
-tests/userprog/bad-jump_SRC = tests/userprog/bad-jump.c tests/main.c
-tests/userprog/bad-read2_SRC = tests/userprog/bad-read2.c tests/main.c
-tests/userprog/bad-write2_SRC = tests/userprog/bad-write2.c tests/main.c
-tests/userprog/bad-jump2_SRC = tests/userprog/bad-jump2.c tests/main.c
-tests/userprog/sc-boundary_SRC = tests/userprog/sc-boundary.c	\
-tests/userprog/boundary.c tests/main.c
-tests/userprog/sc-boundary-2_SRC = tests/userprog/sc-boundary-2.c	\
-tests/userprog/boundary.c tests/main.c
-tests/userprog/halt_SRC = tests/userprog/halt.c tests/main.c
-tests/userprog/exit_SRC = tests/userprog/exit.c tests/main.c
-tests/userprog/create-normal_SRC = tests/userprog/create-normal.c tests/main.c
-tests/userprog/create-empty_SRC = tests/userprog/create-empty.c tests/main.c
-tests/userprog/create-null_SRC = tests/userprog/create-null.c tests/main.c
-tests/userprog/create-bad-ptr_SRC = tests/userprog/create-bad-ptr.c	\
-tests/main.c
-tests/userprog/create-long_SRC = tests/userprog/create-long.c tests/main.c
-tests/userprog/create-exists_SRC = tests/userprog/create-exists.c tests/main.c
-tests/userprog/create-bound_SRC = tests/userprog/create-bound.c	\
-tests/userprog/boundary.c tests/main.c
-tests/userprog/open-normal_SRC = tests/userprog/open-normal.c tests/main.c
-tests/userprog/open-missing_SRC = tests/userprog/open-missing.c tests/main.c
-tests/userprog/open-boundary_SRC = tests/userprog/open-boundary.c	\
-tests/userprog/boundary.c tests/main.c
-tests/userprog/open-empty_SRC = tests/userprog/open-empty.c tests/main.c
-tests/userprog/open-null_SRC = tests/userprog/open-null.c tests/main.c
-tests/userprog/open-bad-ptr_SRC = tests/userprog/open-bad-ptr.c tests/main.c
-tests/userprog/open-twice_SRC = tests/userprog/open-twice.c tests/main.c
-tests/userprog/close-normal_SRC = tests/userprog/close-normal.c tests/main.c
-tests/userprog/close-twice_SRC = tests/userprog/close-twice.c tests/main.c
-tests/userprog/close-stdin_SRC = tests/userprog/close-stdin.c tests/main.c
-tests/userprog/close-stdout_SRC = tests/userprog/close-stdout.c tests/main.c
-tests/userprog/close-bad-fd_SRC = tests/userprog/close-bad-fd.c tests/main.c
-tests/userprog/read-normal_SRC = tests/userprog/read-normal.c tests/main.c
-tests/userprog/read-bad-ptr_SRC = tests/userprog/read-bad-ptr.c tests/main.c
-tests/userprog/read-boundary_SRC = tests/userprog/read-boundary.c	\
-tests/userprog/boundary.c tests/main.c
-tests/userprog/read-zero_SRC = tests/userprog/read-zero.c tests/main.c
-tests/userprog/read-stdout_SRC = tests/userprog/read-stdout.c tests/main.c
-tests/userprog/read-bad-fd_SRC = tests/userprog/read-bad-fd.c tests/main.c
-tests/userprog/write-normal_SRC = tests/userprog/write-normal.c tests/main.c
-tests/userprog/write-bad-ptr_SRC = tests/userprog/write-bad-ptr.c tests/main.c
-tests/userprog/write-boundary_SRC = tests/userprog/write-boundary.c	\
-tests/userprog/boundary.c tests/main.c
-tests/userprog/write-zero_SRC = tests/userprog/write-zero.c tests/main.c
-tests/userprog/write-stdin_SRC = tests/userprog/write-stdin.c tests/main.c
-tests/userprog/write-bad-fd_SRC = tests/userprog/write-bad-fd.c tests/main.c
-tests/userprog/exec-once_SRC = tests/userprog/exec-once.c tests/main.c
-tests/userprog/exec-arg_SRC = tests/userprog/exec-arg.c tests/main.c
-tests/userprog/exec-multiple_SRC = tests/userprog/exec-multiple.c tests/main.c
-tests/userprog/exec-missing_SRC = tests/userprog/exec-missing.c tests/main.c
-tests/userprog/exec-bad-ptr_SRC = tests/userprog/exec-bad-ptr.c tests/main.c
-tests/userprog/wait-simple_SRC = tests/userprog/wait-simple.c tests/main.c
-tests/userprog/wait-twice_SRC = tests/userprog/wait-twice.c tests/main.c
-tests/userprog/wait-killed_SRC = tests/userprog/wait-killed.c tests/main.c
-tests/userprog/wait-bad-pid_SRC = tests/userprog/wait-bad-pid.c tests/main.c
-tests/userprog/multi-recurse_SRC = tests/userprog/multi-recurse.c
-tests/userprog/multi-child-fd_SRC = tests/userprog/multi-child-fd.c	\
-tests/main.c
-tests/userprog/rox-simple_SRC = tests/userprog/rox-simple.c tests/main.c
-tests/userprog/rox-child_SRC = tests/userprog/rox-child.c tests/main.c
-tests/userprog/rox-multichild_SRC = tests/userprog/rox-multichild.c	\
-tests/main.c
-
-tests/userprog/child-simple_SRC = tests/userprog/child-simple.c
-tests/userprog/child-args_SRC = tests/userprog/args.c
-tests/userprog/child-bad_SRC = tests/userprog/child-bad.c tests/main.c
-tests/userprog/child-close_SRC = tests/userprog/child-close.c
-tests/userprog/child-rox_SRC = tests/userprog/child-rox.c
-
-$(foreach prog,$(tests/userprog_PROGS),$(eval $(prog)_SRC += tests/lib.c))
-
-tests/userprog/args-single_ARGS = onearg
-tests/userprog/args-multiple_ARGS = some arguments for you!
-tests/userprog/args-many_ARGS = a b c d e f g h i j k l m n o p q r s t u v
-tests/userprog/args-dbl-space_ARGS = two  spaces!
-tests/userprog/multi-recurse_ARGS = 15
-
-tests/userprog/open-normal_PUTFILES += tests/userprog/sample.txt
-tests/userprog/open-boundary_PUTFILES += tests/userprog/sample.txt
-tests/userprog/open-twice_PUTFILES += tests/userprog/sample.txt
-tests/userprog/close-normal_PUTFILES += tests/userprog/sample.txt
-tests/userprog/close-twice_PUTFILES += tests/userprog/sample.txt
-tests/userprog/read-normal_PUTFILES += tests/userprog/sample.txt
-tests/userprog/read-bad-ptr_PUTFILES += tests/userprog/sample.txt
-tests/userprog/read-boundary_PUTFILES += tests/userprog/sample.txt
-tests/userprog/read-zero_PUTFILES += tests/userprog/sample.txt
-tests/userprog/write-normal_PUTFILES += tests/userprog/sample.txt
-tests/userprog/write-bad-ptr_PUTFILES += tests/userprog/sample.txt
-tests/userprog/write-boundary_PUTFILES += tests/userprog/sample.txt
-tests/userprog/write-zero_PUTFILES += tests/userprog/sample.txt
-tests/userprog/multi-child-fd_PUTFILES += tests/userprog/sample.txt
-
-tests/userprog/exec-once_PUTFILES += tests/userprog/child-simple
-tests/userprog/exec-multiple_PUTFILES += tests/userprog/child-simple
-tests/userprog/wait-simple_PUTFILES += tests/userprog/child-simple
-tests/userprog/wait-twice_PUTFILES += tests/userprog/child-simple
-
-tests/userprog/exec-arg_PUTFILES += tests/userprog/child-args
-tests/userprog/multi-child-fd_PUTFILES += tests/userprog/child-close
-tests/userprog/wait-killed_PUTFILES += tests/userprog/child-bad
-tests/userprog/rox-child_PUTFILES += tests/userprog/child-rox
-tests/userprog/rox-multichild_PUTFILES += tests/userprog/child-rox
diff --git a/src/tests/userprog/Rubric.functionality b/src/tests/userprog/Rubric.functionality
deleted file mode 100644
index ea76c44..0000000
--- a/src/tests/userprog/Rubric.functionality
+++ /dev/null
@@ -1,52 +0,0 @@
-Functionality of system calls:
-- Test argument passing on Pintos command line.
-3	args-none
-3	args-single
-3	args-multiple
-3	args-many
-3	args-dbl-space
-
-- Test "create" system call.
-3	create-empty
-3	create-long
-3	create-normal
-3	create-exists
-
-- Test "open" system call.
-3	open-missing
-3	open-normal
-3	open-twice
-
-- Test "read" system call.
-3	read-normal
-3	read-zero
-
-- Test "write" system call.
-3	write-normal
-3	write-zero
-
-- Test "close" system call.
-3	close-normal
-
-- Test "exec" system call.
-5	exec-once
-5	exec-multiple
-5	exec-arg
-
-- Test "wait" system call.
-5	wait-simple
-5	wait-twice
-
-- Test "exit" system call.
-5	exit
-
-- Test "halt" system call.
-3	halt
-
-- Test recursive execution of user programs.
-15	multi-recurse
-
-- Test read-only executable feature.
-3	rox-simple
-3	rox-child
-3	rox-multichild
diff --git a/src/tests/userprog/Rubric.robustness b/src/tests/userprog/Rubric.robustness
deleted file mode 100644
index b7d1035..0000000
--- a/src/tests/userprog/Rubric.robustness
+++ /dev/null
@@ -1,48 +0,0 @@
-Robustness of system calls:
-- Test robustness of file descriptor handling.
-2	close-stdin
-2	close-stdout
-2	close-bad-fd
-2	close-twice
-2	read-bad-fd
-2	read-stdout
-2	write-bad-fd
-2	write-stdin
-2	multi-child-fd
-
-- Test robustness of pointer handling.
-3	create-bad-ptr
-3	exec-bad-ptr
-3	open-bad-ptr
-3	read-bad-ptr
-3	write-bad-ptr
-
-- Test robustness of buffer copying across page boundaries.
-3	create-bound
-3	open-boundary
-3	read-boundary
-3	write-boundary
-
-- Test handling of null pointer and empty strings.
-2	create-null
-2	open-null
-2	open-empty
-
-- Test robustness of system call implementation.
-3	sc-bad-arg
-3	sc-bad-sp
-5	sc-boundary
-5	sc-boundary-2
-
-- Test robustness of "exec" and "wait" system calls.
-5	exec-missing
-5	wait-bad-pid
-5	wait-killed
-
-- Test robustness of exception handling.
-1	bad-read
-1	bad-write
-1	bad-jump
-1	bad-read2
-1	bad-write2
-1	bad-jump2
diff --git a/src/tests/userprog/args-dbl-space.ck b/src/tests/userprog/args-dbl-space.ck
deleted file mode 100644
index dfbcf4b..0000000
--- a/src/tests/userprog/args-dbl-space.ck
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(args) begin
-(args) argc = 3
-(args) argv[0] = 'args-dbl-space'
-(args) argv[1] = 'two'
-(args) argv[2] = 'spaces!'
-(args) argv[3] = null
-(args) end
-args-dbl-space: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/args-many.ck b/src/tests/userprog/args-many.ck
deleted file mode 100644
index 214574a..0000000
--- a/src/tests/userprog/args-many.ck
+++ /dev/null
@@ -1,35 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(args) begin
-(args) argc = 23
-(args) argv[0] = 'args-many'
-(args) argv[1] = 'a'
-(args) argv[2] = 'b'
-(args) argv[3] = 'c'
-(args) argv[4] = 'd'
-(args) argv[5] = 'e'
-(args) argv[6] = 'f'
-(args) argv[7] = 'g'
-(args) argv[8] = 'h'
-(args) argv[9] = 'i'
-(args) argv[10] = 'j'
-(args) argv[11] = 'k'
-(args) argv[12] = 'l'
-(args) argv[13] = 'm'
-(args) argv[14] = 'n'
-(args) argv[15] = 'o'
-(args) argv[16] = 'p'
-(args) argv[17] = 'q'
-(args) argv[18] = 'r'
-(args) argv[19] = 's'
-(args) argv[20] = 't'
-(args) argv[21] = 'u'
-(args) argv[22] = 'v'
-(args) argv[23] = null
-(args) end
-args-many: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/args-multiple.ck b/src/tests/userprog/args-multiple.ck
deleted file mode 100644
index 227e6cc..0000000
--- a/src/tests/userprog/args-multiple.ck
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(args) begin
-(args) argc = 5
-(args) argv[0] = 'args-multiple'
-(args) argv[1] = 'some'
-(args) argv[2] = 'arguments'
-(args) argv[3] = 'for'
-(args) argv[4] = 'you!'
-(args) argv[5] = null
-(args) end
-args-multiple: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/args-none.ck b/src/tests/userprog/args-none.ck
deleted file mode 100644
index 146318e..0000000
--- a/src/tests/userprog/args-none.ck
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(args) begin
-(args) argc = 1
-(args) argv[0] = 'args-none'
-(args) argv[1] = null
-(args) end
-args-none: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/args-single.ck b/src/tests/userprog/args-single.ck
deleted file mode 100644
index 24582b4..0000000
--- a/src/tests/userprog/args-single.ck
+++ /dev/null
@@ -1,14 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(args) begin
-(args) argc = 2
-(args) argv[0] = 'args-single'
-(args) argv[1] = 'onearg'
-(args) argv[2] = null
-(args) end
-args-single: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/args.c b/src/tests/userprog/args.c
deleted file mode 100644
index 20eda44..0000000
--- a/src/tests/userprog/args.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Prints the command-line arguments.
-   This program is used for all of the args-* tests.  Grading is
-   done differently for each of the args-* tests based on the
-   output. */
-
-#include "tests/lib.h"
-
-int
-main (int argc, char *argv[]) 
-{
-  int i;
-
-  test_name = "args";
-
-  msg ("begin");
-  msg ("argc = %d", argc);
-  for (i = 0; i <= argc; i++)
-    if (argv[i] != NULL)
-      msg ("argv[%d] = '%s'", i, argv[i]);
-    else
-      msg ("argv[%d] = null", i);
-  msg ("end");
-
-  return 0;
-}
diff --git a/src/tests/userprog/bad-jump.c b/src/tests/userprog/bad-jump.c
deleted file mode 100644
index 51b7c9f..0000000
--- a/src/tests/userprog/bad-jump.c
+++ /dev/null
@@ -1,13 +0,0 @@
-/* This program attempts to execute code at address 0, which is not mapped.
-   This should terminate the process with a -1 exit code. */
-
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  msg ("Congratulations - you have successfully called NULL: %d", 
-        ((int (*)(void))NULL)());
-  fail ("should have exited with -1");
-}
diff --git a/src/tests/userprog/bad-jump.ck b/src/tests/userprog/bad-jump.ck
deleted file mode 100644
index e1c178b..0000000
--- a/src/tests/userprog/bad-jump.ck
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_USER_FAULTS => 1, [<<'EOF']);
-(bad-jump) begin
-bad-jump: exit(-1)
-EOF
-pass;
diff --git a/src/tests/userprog/bad-jump2.c b/src/tests/userprog/bad-jump2.c
deleted file mode 100644
index dc7c2a7..0000000
--- a/src/tests/userprog/bad-jump2.c
+++ /dev/null
@@ -1,13 +0,0 @@
-/* This program attempts to execute code at a kernel virtual address. 
-   This should terminate the process with a -1 exit code. */
-
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  msg ("Congratulations - you have successfully called kernel code: %d", 
-        ((int (*)(void))0xC0000000)());
-  fail ("should have exited with -1");
-}
diff --git a/src/tests/userprog/bad-jump2.ck b/src/tests/userprog/bad-jump2.ck
deleted file mode 100644
index 35f0f97..0000000
--- a/src/tests/userprog/bad-jump2.ck
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_USER_FAULTS => 1, [<<'EOF']);
-(bad-jump2) begin
-bad-jump2: exit(-1)
-EOF
-pass;
diff --git a/src/tests/userprog/bad-read.c b/src/tests/userprog/bad-read.c
deleted file mode 100644
index 904c278..0000000
--- a/src/tests/userprog/bad-read.c
+++ /dev/null
@@ -1,13 +0,0 @@
-/* This program attempts to read memory at an address that is not mapped.
-   This should terminate the process with a -1 exit code. */
-
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  msg ("Congratulations - you have successfully dereferenced NULL: %d", 
-        *(int *)NULL);
-  fail ("should have exited with -1");
-}
diff --git a/src/tests/userprog/bad-read.ck b/src/tests/userprog/bad-read.ck
deleted file mode 100644
index 4d4d926..0000000
--- a/src/tests/userprog/bad-read.ck
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_USER_FAULTS => 1, [<<'EOF']);
-(bad-read) begin
-bad-read: exit(-1)
-EOF
-pass;
diff --git a/src/tests/userprog/bad-read2.c b/src/tests/userprog/bad-read2.c
deleted file mode 100644
index a2fc237..0000000
--- a/src/tests/userprog/bad-read2.c
+++ /dev/null
@@ -1,13 +0,0 @@
-/* This program attempts to read kernel memory. 
-   This should terminate the process with a -1 exit code. */
-
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  msg ("Congratulations - you have successfully read kernel memory: %d", 
-        *(int *)0xC0000000);
-  fail ("should have exited with -1");
-}
diff --git a/src/tests/userprog/bad-read2.ck b/src/tests/userprog/bad-read2.ck
deleted file mode 100644
index fa27c7d..0000000
--- a/src/tests/userprog/bad-read2.ck
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_USER_FAULTS => 1, [<<'EOF']);
-(bad-read2) begin
-bad-read2: exit(-1)
-EOF
-pass;
diff --git a/src/tests/userprog/bad-write.c b/src/tests/userprog/bad-write.c
deleted file mode 100644
index 000c26b..0000000
--- a/src/tests/userprog/bad-write.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* This program attempts to write to memory at an address that is not mapped.
-   This should terminate the process with a -1 exit code. */
-
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  *(int *)NULL = 42;
-  fail ("should have exited with -1");
-}
diff --git a/src/tests/userprog/bad-write.ck b/src/tests/userprog/bad-write.ck
deleted file mode 100644
index d213b49..0000000
--- a/src/tests/userprog/bad-write.ck
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_USER_FAULTS => 1, [<<'EOF']);
-(bad-write) begin
-bad-write: exit(-1)
-EOF
-pass;
diff --git a/src/tests/userprog/bad-write2.c b/src/tests/userprog/bad-write2.c
deleted file mode 100644
index 753da1e..0000000
--- a/src/tests/userprog/bad-write2.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* This program attempts to write to kernel memory. 
-   This should terminate the process with a -1 exit code. */
-
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  *(int *)0xC0000000 = 42;
-  fail ("should have exited with -1");
-}
diff --git a/src/tests/userprog/bad-write2.ck b/src/tests/userprog/bad-write2.ck
deleted file mode 100644
index c6a3420..0000000
--- a/src/tests/userprog/bad-write2.ck
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_USER_FAULTS => 1, [<<'EOF']);
-(bad-write2) begin
-bad-write2: exit(-1)
-EOF
-pass;
diff --git a/src/tests/userprog/boundary.c b/src/tests/userprog/boundary.c
deleted file mode 100644
index 59907ec..0000000
--- a/src/tests/userprog/boundary.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Utility function for tests that try to break system calls by
-   passing them data that crosses from one virtual page to
-   another. */
-
-#include <inttypes.h>
-#include <round.h>
-#include <string.h>
-#include "tests/userprog/boundary.h"
-
-static char dst[8192];
-
-/* Returns the beginning of a page.  There are at least 2048
-   modifiable bytes on either side of the pointer returned. */
-void *
-get_boundary_area (void) 
-{
-  char *p = (char *) ROUND_UP ((uintptr_t) dst, 4096);
-  if (p - dst < 2048)
-    p += 4096;
-  return p;
-}
-
-/* Returns a copy of SRC split across the boundary between two
-   pages. */
-char *
-copy_string_across_boundary (const char *src) 
-{
-  char *p = get_boundary_area ();
-  p -= strlen (src) < 4096 ? strlen (src) / 2 : 4096;
-  strlcpy (p, src, 4096);
-  return p;
-}
-
diff --git a/src/tests/userprog/boundary.h b/src/tests/userprog/boundary.h
deleted file mode 100644
index c8e4b3b..0000000
--- a/src/tests/userprog/boundary.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef TESTS_USERPROG_BOUNDARY_H
-#define TESTS_USERPROG_BOUNDARY_H
-
-void *get_boundary_area (void);
-char *copy_string_across_boundary (const char *);
-
-#endif /* tests/userprog/boundary.h */
diff --git a/src/tests/userprog/child-bad.c b/src/tests/userprog/child-bad.c
deleted file mode 100644
index 77d7a69..0000000
--- a/src/tests/userprog/child-bad.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/* Child process run by wait-killed test.
-   Sets the stack pointer (%esp) to an invalid value and invokes
-   a system call, which should then terminate the process with a
-   -1 exit code. */
-
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  asm volatile ("movl $0x20101234, %esp; int $0x30");
-  fail ("should have exited with -1");
-}
diff --git a/src/tests/userprog/child-close.c b/src/tests/userprog/child-close.c
deleted file mode 100644
index ac948c8..0000000
--- a/src/tests/userprog/child-close.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Child process run by multi-child-fd test.
-
-   Attempts to close the file descriptor passed as the first
-   command-line argument.  This is invalid, because file
-   descriptors are not inherited in Pintos.  Two results are
-   allowed: either the system call should return without taking
-   any action, or the kernel should terminate the process with a
-   -1 exit code. */
-
-#include <ctype.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <syscall.h>
-#include "tests/lib.h"
-
-const char *test_name = "child-close";
-
-int
-main (int argc UNUSED, char *argv[]) 
-{
-  msg ("begin");
-  if (!isdigit (*argv[1]))
-    fail ("bad command-line arguments");
-  close (atoi (argv[1]));
-  msg ("end");
-
-  return 0;
-}
diff --git a/src/tests/userprog/child-rox.c b/src/tests/userprog/child-rox.c
deleted file mode 100644
index aba808b..0000000
--- a/src/tests/userprog/child-rox.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Child process run by rox-child and rox-multichild tests.
-   Opens and tries to write to its own executable, verifying that
-   that is disallowed.
-   Then recursively executes itself to the depth indicated by the
-   first command-line argument. */
-
-#include <ctype.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <syscall.h>
-#include "tests/lib.h"
-
-const char *test_name = "child-rox";
-
-static void
-try_write (void) 
-{
-  int handle;
-  char buffer[19];
-
-  quiet = true;
-  CHECK ((handle = open ("child-rox")) > 1, "open \"child-rox\"");
-  quiet = false;
-
-  CHECK (write (handle, buffer, sizeof buffer) == 0,
-         "try to write \"child-rox\"");
-  
-  close (handle);
-}
-
-int
-main (int argc UNUSED, char *argv[]) 
-{
-  msg ("begin");
-  try_write ();
-
-  if (!isdigit (*argv[1]))
-    fail ("bad command-line arguments");
-  if (atoi (argv[1]) > 1) 
-    {
-      char cmd[128];
-      int child;
-      
-      snprintf (cmd, sizeof cmd, "child-rox %d", atoi (argv[1]) - 1);
-      CHECK ((child = exec (cmd)) != -1, "exec \"%s\"", cmd);
-      quiet = true;
-      CHECK (wait (child) == 12, "wait for \"child-rox\"");
-      quiet = false;
-    }
-
-  try_write ();
-  msg ("end");
-
-  return 12;
-}
diff --git a/src/tests/userprog/child-simple.c b/src/tests/userprog/child-simple.c
deleted file mode 100644
index 0d2dacf..0000000
--- a/src/tests/userprog/child-simple.c
+++ /dev/null
@@ -1,15 +0,0 @@
-/* Child process run by exec-multiple, exec-one, wait-simple, and
-   wait-twice tests.
-   Just prints a single message and terminates. */
-
-#include <stdio.h>
-#include "tests/lib.h"
-
-const char *test_name = "child-simple";
-
-int
-main (void) 
-{
-  msg ("run");
-  return 81;
-}
diff --git a/src/tests/userprog/close-bad-fd.c b/src/tests/userprog/close-bad-fd.c
deleted file mode 100644
index f63bb9a..0000000
--- a/src/tests/userprog/close-bad-fd.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Tries to close an invalid fd, which must either fail silently
-   or terminate with exit code -1. */
-
-#include <syscall.h>
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  close (0x20101234);
-}
diff --git a/src/tests/userprog/close-bad-fd.ck b/src/tests/userprog/close-bad-fd.ck
deleted file mode 100644
index 497b17c..0000000
--- a/src/tests/userprog/close-bad-fd.ck
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF', <<'EOF']);
-(close-bad-fd) begin
-(close-bad-fd) end
-close-bad-fd: exit(0)
-EOF
-(close-bad-fd) begin
-close-bad-fd: exit(-1)
-EOF
-pass;
diff --git a/src/tests/userprog/close-normal.c b/src/tests/userprog/close-normal.c
deleted file mode 100644
index 8ce04e3..0000000
--- a/src/tests/userprog/close-normal.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/* Opens a file and then closes it. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  int handle;
-  CHECK ((handle = open ("sample.txt")) > 1, "open \"sample.txt\"");
-  msg ("close \"sample.txt\"");
-  close (handle);
-}
diff --git a/src/tests/userprog/close-normal.ck b/src/tests/userprog/close-normal.ck
deleted file mode 100644
index fe41342..0000000
--- a/src/tests/userprog/close-normal.ck
+++ /dev/null
@@ -1,12 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(close-normal) begin
-(close-normal) open "sample.txt"
-(close-normal) close "sample.txt"
-(close-normal) end
-close-normal: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/close-stdin.c b/src/tests/userprog/close-stdin.c
deleted file mode 100644
index 9bbf9f2..0000000
--- a/src/tests/userprog/close-stdin.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Tries to close the keyboard input stream, which must either
-   fail silently or terminate with exit code -1. */
-
-#include <syscall.h>
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  close (0);
-}
diff --git a/src/tests/userprog/close-stdin.ck b/src/tests/userprog/close-stdin.ck
deleted file mode 100644
index 3d28507..0000000
--- a/src/tests/userprog/close-stdin.ck
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF', <<'EOF']);
-(close-stdin) begin
-(close-stdin) end
-close-stdin: exit(0)
-EOF
-(close-stdin) begin
-close-stdin: exit(-1)
-EOF
-pass;
diff --git a/src/tests/userprog/close-stdout.c b/src/tests/userprog/close-stdout.c
deleted file mode 100644
index 886523f..0000000
--- a/src/tests/userprog/close-stdout.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Tries to close the console output stream, which must either
-   fail silently or terminate with exit code -1. */
-
-#include <syscall.h>
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  close (1);
-}
diff --git a/src/tests/userprog/close-stdout.ck b/src/tests/userprog/close-stdout.ck
deleted file mode 100644
index 3cbbcff..0000000
--- a/src/tests/userprog/close-stdout.ck
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF', <<'EOF']);
-(close-stdout) begin
-(close-stdout) end
-close-stdout: exit(0)
-EOF
-(close-stdout) begin
-close-stdout: exit(-1)
-EOF
-pass;
diff --git a/src/tests/userprog/close-twice.c b/src/tests/userprog/close-twice.c
deleted file mode 100644
index 830bccf..0000000
--- a/src/tests/userprog/close-twice.c
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Opens a file and then tries to close it twice.  The second
-   close must either fail silently or terminate with exit code
-   -1. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  int handle;
-  CHECK ((handle = open ("sample.txt")) > 1, "open \"sample.txt\"");
-  msg ("close \"sample.txt\"");
-  close (handle);
-  msg ("close \"sample.txt\" again");
-  close (handle);
-}
diff --git a/src/tests/userprog/close-twice.ck b/src/tests/userprog/close-twice.ck
deleted file mode 100644
index deb55a6..0000000
--- a/src/tests/userprog/close-twice.ck
+++ /dev/null
@@ -1,19 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF', <<'EOF']);
-(close-twice) begin
-(close-twice) open "sample.txt"
-(close-twice) close "sample.txt"
-(close-twice) close "sample.txt" again
-(close-twice) end
-close-twice: exit(0)
-EOF
-(close-twice) begin
-(close-twice) open "sample.txt"
-(close-twice) close "sample.txt"
-(close-twice) close "sample.txt" again
-close-twice: exit(-1)
-EOF
-pass;
diff --git a/src/tests/userprog/create-bad-ptr.c b/src/tests/userprog/create-bad-ptr.c
deleted file mode 100644
index 4a07bb3..0000000
--- a/src/tests/userprog/create-bad-ptr.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Passes a bad pointer to the create system call,
-   which must cause the process to be terminated with exit code
-   -1. */
-
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  msg ("create(0x20101234): %d", create ((char *) 0x20101234, 0));
-}
diff --git a/src/tests/userprog/create-bad-ptr.ck b/src/tests/userprog/create-bad-ptr.ck
deleted file mode 100644
index ac13405..0000000
--- a/src/tests/userprog/create-bad-ptr.ck
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(create-bad-ptr) begin
-create-bad-ptr: exit(-1)
-EOF
-pass;
diff --git a/src/tests/userprog/create-bound.c b/src/tests/userprog/create-bound.c
deleted file mode 100644
index 0a829f3..0000000
--- a/src/tests/userprog/create-bound.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/* Opens a file whose name spans the boundary between two pages.
-   This is valid, so it must succeed. */
-
-#include <syscall.h>
-#include "tests/userprog/boundary.h"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  msg ("create(\"quux.dat\"): %d",
-       create (copy_string_across_boundary ("quux.dat"), 0));
-}
diff --git a/src/tests/userprog/create-bound.ck b/src/tests/userprog/create-bound.ck
deleted file mode 100644
index 7656b7f..0000000
--- a/src/tests/userprog/create-bound.ck
+++ /dev/null
@@ -1,11 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(create-bound) begin
-(create-bound) create("quux.dat"): 1
-(create-bound) end
-create-bound: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/create-empty.c b/src/tests/userprog/create-empty.c
deleted file mode 100644
index fa26b43..0000000
--- a/src/tests/userprog/create-empty.c
+++ /dev/null
@@ -1,10 +0,0 @@
-/* Tries to create a file with the empty string as its name. */
-
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  msg ("create(\"\"): %d", create ("", 0));
-}
diff --git a/src/tests/userprog/create-empty.ck b/src/tests/userprog/create-empty.ck
deleted file mode 100644
index 93a1058..0000000
--- a/src/tests/userprog/create-empty.ck
+++ /dev/null
@@ -1,14 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF', <<'EOF']);
-(create-empty) begin
-(create-empty) create(""): 0
-(create-empty) end
-create-empty: exit(0)
-EOF
-(create-empty) begin
-create-empty: exit(-1)
-EOF
-pass;
diff --git a/src/tests/userprog/create-exists.c b/src/tests/userprog/create-exists.c
deleted file mode 100644
index d395008..0000000
--- a/src/tests/userprog/create-exists.c
+++ /dev/null
@@ -1,16 +0,0 @@
-/* Verifies that trying to create a file under a name that
-   already exists will fail. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  CHECK (create ("quux.dat", 0), "create quux.dat");
-  CHECK (create ("warble.dat", 0), "create warble.dat");
-  CHECK (!create ("quux.dat", 0), "try to re-create quux.dat");
-  CHECK (create ("baffle.dat", 0), "create baffle.dat");
-  CHECK (!create ("warble.dat", 0), "try to re-create quux.dat");
-}
diff --git a/src/tests/userprog/create-exists.ck b/src/tests/userprog/create-exists.ck
deleted file mode 100644
index 006885e..0000000
--- a/src/tests/userprog/create-exists.ck
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(create-exists) begin
-(create-exists) create quux.dat
-(create-exists) create warble.dat
-(create-exists) try to re-create quux.dat
-(create-exists) create baffle.dat
-(create-exists) try to re-create quux.dat
-(create-exists) end
-create-exists: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/create-long.c b/src/tests/userprog/create-long.c
deleted file mode 100644
index 16b31bd..0000000
--- a/src/tests/userprog/create-long.c
+++ /dev/null
@@ -1,17 +0,0 @@
-/* Tries to create a file with a name that is much too long,
-   which must fail. */
-
-#include <string.h>
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  static char name[512];
-  memset (name, 'x', sizeof name);
-  name[sizeof name - 1] = '\0';
-  
-  msg ("create(\"x...\"): %d", create (name, 0));
-}
diff --git a/src/tests/userprog/create-long.ck b/src/tests/userprog/create-long.ck
deleted file mode 100644
index 628411c..0000000
--- a/src/tests/userprog/create-long.ck
+++ /dev/null
@@ -1,11 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(create-long) begin
-(create-long) create("x..."): 0
-(create-long) end
-create-long: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/create-normal.c b/src/tests/userprog/create-normal.c
deleted file mode 100644
index 3cbc463..0000000
--- a/src/tests/userprog/create-normal.c
+++ /dev/null
@@ -1,10 +0,0 @@
-/* Creates an ordinary empty file. */
-
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  CHECK (create ("quux.dat", 0), "create quux.dat");
-}
diff --git a/src/tests/userprog/create-normal.ck b/src/tests/userprog/create-normal.ck
deleted file mode 100644
index ca74a6e..0000000
--- a/src/tests/userprog/create-normal.ck
+++ /dev/null
@@ -1,11 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(create-normal) begin
-(create-normal) create quux.dat
-(create-normal) end
-create-normal: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/create-null.c b/src/tests/userprog/create-null.c
deleted file mode 100644
index 287cb23..0000000
--- a/src/tests/userprog/create-null.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Tries to create a file with the null pointer as its name.
-   The process must be terminated with exit code -1. */
-
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  msg ("create(NULL): %d", create (NULL, 0));
-}
diff --git a/src/tests/userprog/create-null.ck b/src/tests/userprog/create-null.ck
deleted file mode 100644
index 09b7872..0000000
--- a/src/tests/userprog/create-null.ck
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(create-null) begin
-create-null: exit(-1)
-EOF
-pass;
diff --git a/src/tests/userprog/exec-arg.c b/src/tests/userprog/exec-arg.c
deleted file mode 100644
index 82d0744..0000000
--- a/src/tests/userprog/exec-arg.c
+++ /dev/null
@@ -1,10 +0,0 @@
-/* Tests argument passing to child processes. */
-
-#include <syscall.h>
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  wait (exec ("child-args childarg"));
-}
diff --git a/src/tests/userprog/exec-arg.ck b/src/tests/userprog/exec-arg.ck
deleted file mode 100644
index b7533ed..0000000
--- a/src/tests/userprog/exec-arg.ck
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(exec-arg) begin
-(args) begin
-(args) argc = 2
-(args) argv[0] = 'child-args'
-(args) argv[1] = 'childarg'
-(args) argv[2] = null
-(args) end
-child-args: exit(0)
-(exec-arg) end
-exec-arg: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/exec-bad-ptr.c b/src/tests/userprog/exec-bad-ptr.c
deleted file mode 100644
index 0abadd3..0000000
--- a/src/tests/userprog/exec-bad-ptr.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Passes an invalid pointer to the exec system call.
-   The process must be terminated with -1 exit code. */
-
-#include <syscall.h>
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  exec ((char *) 0x20101234);
-}
diff --git a/src/tests/userprog/exec-bad-ptr.ck b/src/tests/userprog/exec-bad-ptr.ck
deleted file mode 100644
index 63f5f78..0000000
--- a/src/tests/userprog/exec-bad-ptr.ck
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF', <<'EOF']);
-(exec-bad-ptr) begin
-(exec-bad-ptr) end
-exec-bad-ptr: exit(0)
-EOF
-(exec-bad-ptr) begin
-exec-bad-ptr: exit(-1)
-EOF
-pass;
diff --git a/src/tests/userprog/exec-missing.c b/src/tests/userprog/exec-missing.c
deleted file mode 100644
index bf08cad..0000000
--- a/src/tests/userprog/exec-missing.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Tries to execute a nonexistent process.
-   The exec system call must return -1. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  msg ("exec(\"no-such-file\"): %d", exec ("no-such-file"));
-}
diff --git a/src/tests/userprog/exec-missing.ck b/src/tests/userprog/exec-missing.ck
deleted file mode 100644
index 0ef7aaa..0000000
--- a/src/tests/userprog/exec-missing.ck
+++ /dev/null
@@ -1,31 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF', <<'EOF', <<'EOF', <<'EOF']);
-(exec-missing) begin
-load: no-such-file: open failed
-(exec-missing) exec("no-such-file"): -1
-(exec-missing) end
-exec-missing: exit(0)
-EOF
-(exec-missing) begin
-(exec-missing) exec("no-such-file"): -1
-(exec-missing) end
-exec-missing: exit(0)
-EOF
-(exec-missing) begin
-load: no-such-file: open failed
-no-such-file: exit(-1)
-(exec-missing) exec("no-such-file"): -1
-(exec-missing) end
-exec-missing: exit(0)
-EOF
-(exec-missing) begin
-load: no-such-file: open failed
-(exec-missing) exec("no-such-file"): -1
-no-such-file: exit(-1)
-(exec-missing) end
-exec-missing: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/exec-multiple.c b/src/tests/userprog/exec-multiple.c
deleted file mode 100644
index ba4c26e..0000000
--- a/src/tests/userprog/exec-multiple.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/* Executes and waits for multiple child processes. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  wait (exec ("child-simple"));
-  wait (exec ("child-simple"));
-  wait (exec ("child-simple"));
-  wait (exec ("child-simple"));
-}
diff --git a/src/tests/userprog/exec-multiple.ck b/src/tests/userprog/exec-multiple.ck
deleted file mode 100644
index 99624cd..0000000
--- a/src/tests/userprog/exec-multiple.ck
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(exec-multiple) begin
-(child-simple) run
-child-simple: exit(81)
-(child-simple) run
-child-simple: exit(81)
-(child-simple) run
-child-simple: exit(81)
-(child-simple) run
-child-simple: exit(81)
-(exec-multiple) end
-exec-multiple: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/exec-once.c b/src/tests/userprog/exec-once.c
deleted file mode 100644
index 7bae5a1..0000000
--- a/src/tests/userprog/exec-once.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Executes and waits for a single child process. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  wait (exec ("child-simple"));
-}
diff --git a/src/tests/userprog/exec-once.ck b/src/tests/userprog/exec-once.ck
deleted file mode 100644
index 00b59ed..0000000
--- a/src/tests/userprog/exec-once.ck
+++ /dev/null
@@ -1,12 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(exec-once) begin
-(child-simple) run
-child-simple: exit(81)
-(exec-once) end
-exec-once: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/exit.c b/src/tests/userprog/exit.c
deleted file mode 100644
index cb4eb8f..0000000
--- a/src/tests/userprog/exit.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Tests the exit system call. */
-
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  exit (57);
-  fail ("should have called exit(57)");
-}
diff --git a/src/tests/userprog/exit.ck b/src/tests/userprog/exit.ck
deleted file mode 100644
index a552702..0000000
--- a/src/tests/userprog/exit.ck
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(exit) begin
-exit: exit(57)
-EOF
-pass;
diff --git a/src/tests/userprog/halt.c b/src/tests/userprog/halt.c
deleted file mode 100644
index 4a99bce..0000000
--- a/src/tests/userprog/halt.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Tests the halt system call. */
-
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  halt ();
-  fail ("should have halted");
-}
diff --git a/src/tests/userprog/halt.ck b/src/tests/userprog/halt.ck
deleted file mode 100644
index 1b701ed..0000000
--- a/src/tests/userprog/halt.ck
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-
-our ($test);
-my (@output) = read_text_file ("$test.output");
-
-common_checks ("run", @output);
-
-fail "missing 'begin' message\n"
-  if !grep ($_ eq '(halt) begin', @output);
-fail "found 'fail' message--halt didn't really halt\n"
-  if grep ($_ eq '(halt) fail', @output);
-pass;
diff --git a/src/tests/userprog/lib/.gitignore b/src/tests/userprog/lib/.gitignore
deleted file mode 100644
index a438335..0000000
--- a/src/tests/userprog/lib/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.d
diff --git a/src/tests/userprog/lib/user/.dummy b/src/tests/userprog/lib/user/.dummy
deleted file mode 100644
index e69de29..0000000
diff --git a/src/tests/userprog/lib/user/.gitignore b/src/tests/userprog/lib/user/.gitignore
deleted file mode 100644
index a438335..0000000
--- a/src/tests/userprog/lib/user/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.d
diff --git a/src/tests/userprog/multi-child-fd.c b/src/tests/userprog/multi-child-fd.c
deleted file mode 100644
index 48de4b4..0000000
--- a/src/tests/userprog/multi-child-fd.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Opens a file and then runs a subprocess that tries to close
-   the file.  (Pintos does not have inheritance of file handles,
-   so this must fail.)  The parent process then attempts to use
-   the file handle, which must succeed. */
-
-#include <stdio.h>
-#include <syscall.h>
-#include "tests/userprog/sample.inc"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  char child_cmd[128];
-  int handle;
-
-  CHECK ((handle = open ("sample.txt")) > 1, "open \"sample.txt\"");
-
-  snprintf (child_cmd, sizeof child_cmd, "child-close %d", handle);
-  
-  msg ("wait(exec()) = %d", wait (exec (child_cmd)));
-
-  check_file_handle (handle, "sample.txt", sample, sizeof sample - 1);
-}
diff --git a/src/tests/userprog/multi-child-fd.ck b/src/tests/userprog/multi-child-fd.ck
deleted file mode 100644
index d0b3a33..0000000
--- a/src/tests/userprog/multi-child-fd.ck
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF', <<'EOF']);
-(multi-child-fd) begin
-(multi-child-fd) open "sample.txt"
-(child-close) begin
-(child-close) end
-child-close: exit(0)
-(multi-child-fd) wait(exec()) = 0
-(multi-child-fd) verified contents of "sample.txt"
-(multi-child-fd) end
-multi-child-fd: exit(0)
-EOF
-(multi-child-fd) begin
-(multi-child-fd) open "sample.txt"
-(child-close) begin
-child-close: exit(-1)
-(multi-child-fd) wait(exec()) = -1
-(multi-child-fd) verified contents of "sample.txt"
-(multi-child-fd) end
-multi-child-fd: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/multi-recurse.c b/src/tests/userprog/multi-recurse.c
deleted file mode 100644
index 7172ec3..0000000
--- a/src/tests/userprog/multi-recurse.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Executes itself recursively to the depth indicated by the
-   first command-line argument. */
-
-#include <debug.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <syscall.h>
-#include "tests/lib.h"
-
-const char *test_name = "multi-recurse";
-
-int
-main (int argc UNUSED, char *argv[]) 
-{
-  int n = atoi (argv[1]);
-
-  msg ("begin %d", n);
-  if (n != 0) 
-    {
-      char child_cmd[128];
-      pid_t child_pid;
-      int code;
-      
-      snprintf (child_cmd, sizeof child_cmd, "multi-recurse %d", n - 1);
-      CHECK ((child_pid = exec (child_cmd)) != -1, "exec(\"%s\")", child_cmd);
-
-      code = wait (child_pid);
-      if (code != n - 1)
-        fail ("wait(exec(\"%s\")) returned %d", child_cmd, code);
-    }
-  
-  msg ("end %d", n);
-  return n;
-}
diff --git a/src/tests/userprog/multi-recurse.ck b/src/tests/userprog/multi-recurse.ck
deleted file mode 100644
index 41eb4a6..0000000
--- a/src/tests/userprog/multi-recurse.ck
+++ /dev/null
@@ -1,70 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(multi-recurse) begin 15
-(multi-recurse) exec("multi-recurse 14")
-(multi-recurse) begin 14
-(multi-recurse) exec("multi-recurse 13")
-(multi-recurse) begin 13
-(multi-recurse) exec("multi-recurse 12")
-(multi-recurse) begin 12
-(multi-recurse) exec("multi-recurse 11")
-(multi-recurse) begin 11
-(multi-recurse) exec("multi-recurse 10")
-(multi-recurse) begin 10
-(multi-recurse) exec("multi-recurse 9")
-(multi-recurse) begin 9
-(multi-recurse) exec("multi-recurse 8")
-(multi-recurse) begin 8
-(multi-recurse) exec("multi-recurse 7")
-(multi-recurse) begin 7
-(multi-recurse) exec("multi-recurse 6")
-(multi-recurse) begin 6
-(multi-recurse) exec("multi-recurse 5")
-(multi-recurse) begin 5
-(multi-recurse) exec("multi-recurse 4")
-(multi-recurse) begin 4
-(multi-recurse) exec("multi-recurse 3")
-(multi-recurse) begin 3
-(multi-recurse) exec("multi-recurse 2")
-(multi-recurse) begin 2
-(multi-recurse) exec("multi-recurse 1")
-(multi-recurse) begin 1
-(multi-recurse) exec("multi-recurse 0")
-(multi-recurse) begin 0
-(multi-recurse) end 0
-multi-recurse: exit(0)
-(multi-recurse) end 1
-multi-recurse: exit(1)
-(multi-recurse) end 2
-multi-recurse: exit(2)
-(multi-recurse) end 3
-multi-recurse: exit(3)
-(multi-recurse) end 4
-multi-recurse: exit(4)
-(multi-recurse) end 5
-multi-recurse: exit(5)
-(multi-recurse) end 6
-multi-recurse: exit(6)
-(multi-recurse) end 7
-multi-recurse: exit(7)
-(multi-recurse) end 8
-multi-recurse: exit(8)
-(multi-recurse) end 9
-multi-recurse: exit(9)
-(multi-recurse) end 10
-multi-recurse: exit(10)
-(multi-recurse) end 11
-multi-recurse: exit(11)
-(multi-recurse) end 12
-multi-recurse: exit(12)
-(multi-recurse) end 13
-multi-recurse: exit(13)
-(multi-recurse) end 14
-multi-recurse: exit(14)
-(multi-recurse) end 15
-multi-recurse: exit(15)
-EOF
-pass;
diff --git a/src/tests/userprog/no-vm/Make.tests b/src/tests/userprog/no-vm/Make.tests
deleted file mode 100644
index a545e18..0000000
--- a/src/tests/userprog/no-vm/Make.tests
+++ /dev/null
@@ -1,8 +0,0 @@
-# -*- makefile -*-
-
-tests/userprog/no-vm_TESTS = tests/userprog/no-vm/multi-oom
-tests/userprog/no-vm_PROGS = $(tests/userprog/no-vm_TESTS)
-tests/userprog/no-vm/multi-oom_SRC = tests/userprog/no-vm/multi-oom.c	\
-tests/lib.c
-
-tests/userprog/no-vm/multi-oom.output: TIMEOUT = 360
diff --git a/src/tests/userprog/no-vm/Rubric b/src/tests/userprog/no-vm/Rubric
deleted file mode 100644
index c3816c6..0000000
--- a/src/tests/userprog/no-vm/Rubric
+++ /dev/null
@@ -1,3 +0,0 @@
-Functionality of features that VM might break:
-
-1	multi-oom
diff --git a/src/tests/userprog/no-vm/multi-oom.c b/src/tests/userprog/no-vm/multi-oom.c
deleted file mode 100644
index 6a4472d..0000000
--- a/src/tests/userprog/no-vm/multi-oom.c
+++ /dev/null
@@ -1,179 +0,0 @@
-/* Recursively executes itself until the child fails to execute.
-   We expect that at least 30 copies can run.
-
-   We count how many children your kernel was able to execute
-   before it fails to start a new process.  We require that,
-   if a process doesn't actually get to start, exec() must
-   return -1, not a valid PID.
-
-   We repeat this process 10 times, checking that your kernel
-   allows for the same level of depth every time.
-
-   In addition, some processes will spawn children that terminate
-   abnormally after allocating some resources.
-
-   Written by Godmar Back <godmar@gmail.com>
- */
-
-#include <debug.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdbool.h>
-#include <syscall.h>
-#include <random.h>
-#include "tests/lib.h"
-
-static const int EXPECTED_DEPTH_TO_PASS = 30;
-static const int EXPECTED_REPETITIONS = 10;
-
-const char *test_name = "multi-oom";
-
-enum child_termination_mode { RECURSE, CRASH };
-
-/* Spawn a recursive copy of ourselves, passing along instructions
-   for the child. */
-static pid_t
-spawn_child (int c, enum child_termination_mode mode)
-{
-  char child_cmd[128];
-  snprintf (child_cmd, sizeof child_cmd,
-            "%s %d %s", test_name, c, mode == CRASH ? "-k" : "");
-  return exec (child_cmd);
-}
-
-/* Open a number of files (and fail to close them).
-   The kernel must free any kernel resources associated
-   with these file descriptors. */
-static void
-consume_some_resources (void)
-{
-  int fd, fdmax = 126;
-
-  /* Open as many files as we can, up to fdmax.
-     Depending on how file descriptors are allocated inside
-     the kernel, open() may fail if the kernel is low on memory.
-     A low-memory condition in open() should not lead to the
-     termination of the process.  */
-  for (fd = 0; fd < fdmax; fd++)
-    if (open (test_name) == -1)
-      break;
-}
-
-/* Consume some resources, then terminate this process
-   in some abnormal way.  */
-static int NO_INLINE
-consume_some_resources_and_die (int seed)
-{
-  consume_some_resources ();
-  random_init (seed);
-  int *PHYS_BASE = (int *)0xC0000000;
-
-  switch (random_ulong () % 5)
-    {
-      case 0:
-        *(int *) NULL = 42;
-
-      case 1:
-        return *(int *) NULL;
-
-      case 2:
-        return *PHYS_BASE;
-
-      case 3:
-        *PHYS_BASE = 42;
-
-      case 4:
-        open ((char *)PHYS_BASE);
-        exit (-1);
-
-      default:
-        NOT_REACHED ();
-    }
-  return 0;
-}
-
-/* The first copy is invoked without command line arguments.
-   Subsequent copies are invoked with a parameter 'depth'
-   that describes how many parent processes preceded them.
-   Each process spawns one or multiple recursive copies of
-   itself, passing 'depth+1' as depth.
-
-   Some children are started with the '-k' flag, which will
-   result in abnormal termination.
- */
-int
-main (int argc, char *argv[])
-{
-  int n;
-
-  n = argc > 1 ? atoi (argv[1]) : 0;
-  bool is_at_root = (n == 0);
-  if (is_at_root)
-    msg ("begin");
-
-  /* If -k is passed, crash this process. */
-  if (argc > 2 && !strcmp(argv[2], "-k"))
-    {
-      consume_some_resources_and_die (n);
-      NOT_REACHED ();
-    }
-
-  int howmany = is_at_root ? EXPECTED_REPETITIONS : 1;
-  int i, expected_depth = -1;
-
-  for (i = 0; i < howmany; i++)
-    {
-      pid_t child_pid;
-
-      /* Spawn a child that will be abnormally terminated.
-         To speed the test up, do this only for processes
-         spawned at a certain depth. */
-      if (n > EXPECTED_DEPTH_TO_PASS/2)
-        {
-          child_pid = spawn_child (n + 1, CRASH);
-          if (child_pid != -1)
-            {
-              if (wait (child_pid) != -1)
-                fail ("crashed child should return -1.");
-            }
-          /* If spawning this child failed, so should
-             the next spawn_child below. */
-        }
-
-      /* Now spawn the child that will recurse. */
-      child_pid = spawn_child (n + 1, RECURSE);
-
-      /* If maximum depth is reached, return result. */
-      if (child_pid == -1)
-        return n;
-
-      /* Else wait for child to report how deeply it was able to recurse. */
-      int reached_depth = wait (child_pid);
-      if (reached_depth == -1)
-        fail ("wait returned -1.");
-
-      /* Record the depth reached during the first run; on subsequent
-         runs, fail if those runs do not match the depth achieved on the
-         first run. */
-      if (i == 0)
-        expected_depth = reached_depth;
-      else if (expected_depth != reached_depth)
-        fail ("after run %d/%d, expected depth %d, actual depth %d.",
-              i, howmany, expected_depth, reached_depth);
-      ASSERT (expected_depth == reached_depth);
-    }
-
-  consume_some_resources ();
-
-  if (n == 0)
-    {
-      if (expected_depth < EXPECTED_DEPTH_TO_PASS)
-        fail ("should have forked at least %d times.", EXPECTED_DEPTH_TO_PASS);
-      msg ("success. program forked %d times.", howmany);
-      msg ("end");
-    }
-
-  return expected_depth;
-}
-// vim: sw=2
diff --git a/src/tests/userprog/no-vm/multi-oom.ck b/src/tests/userprog/no-vm/multi-oom.ck
deleted file mode 100644
index 59a0bcd..0000000
--- a/src/tests/userprog/no-vm/multi-oom.ck
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_USER_FAULTS => 1, IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(multi-oom) begin
-(multi-oom) success. program forked 10 times.
-(multi-oom) end
-EOF
-pass;
diff --git a/src/tests/userprog/null.ck b/src/tests/userprog/null.ck
deleted file mode 100644
index 980de35..0000000
--- a/src/tests/userprog/null.ck
+++ /dev/null
@@ -1,8 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-system call!
-EOF
-pass;
diff --git a/src/tests/userprog/open-bad-ptr.c b/src/tests/userprog/open-bad-ptr.c
deleted file mode 100644
index 9cd4edf..0000000
--- a/src/tests/userprog/open-bad-ptr.c
+++ /dev/null
@@ -1,13 +0,0 @@
-/* Passes an invalid pointer to the open system call.
-   The process must be terminated with -1 exit code. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  msg ("open(0x20101234): %d", open ((char *) 0x20101234));
-  fail ("should have called exit(-1)");
-}
diff --git a/src/tests/userprog/open-bad-ptr.ck b/src/tests/userprog/open-bad-ptr.ck
deleted file mode 100644
index 45349e2..0000000
--- a/src/tests/userprog/open-bad-ptr.ck
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF', <<'EOF']);
-(open-bad-ptr) begin
-(open-bad-ptr) end
-open-bad-ptr: exit(0)
-EOF
-(open-bad-ptr) begin
-open-bad-ptr: exit(-1)
-EOF
-pass;
diff --git a/src/tests/userprog/open-boundary.c b/src/tests/userprog/open-boundary.c
deleted file mode 100644
index cc8ff8b..0000000
--- a/src/tests/userprog/open-boundary.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/* Creates a file whose name spans the boundary between two pages.
-   This is valid, so it must succeed. */
-
-#include <syscall.h>
-#include "tests/userprog/boundary.h"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  CHECK (open (copy_string_across_boundary ("sample.txt")) > 1,
-         "open \"sample.txt\"");
-}
diff --git a/src/tests/userprog/open-boundary.ck b/src/tests/userprog/open-boundary.ck
deleted file mode 100644
index 8060d22..0000000
--- a/src/tests/userprog/open-boundary.ck
+++ /dev/null
@@ -1,11 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(open-boundary) begin
-(open-boundary) open "sample.txt"
-(open-boundary) end
-open-boundary: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/open-empty.c b/src/tests/userprog/open-empty.c
deleted file mode 100644
index 3ea9907..0000000
--- a/src/tests/userprog/open-empty.c
+++ /dev/null
@@ -1,13 +0,0 @@
-/* Tries to open a file with the empty string as its name. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  int handle = open ("");
-  if (handle != -1)
-    fail ("open() returned %d instead of -1", handle);
-}
diff --git a/src/tests/userprog/open-empty.ck b/src/tests/userprog/open-empty.ck
deleted file mode 100644
index 885fb41..0000000
--- a/src/tests/userprog/open-empty.ck
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(open-empty) begin
-(open-empty) end
-open-empty: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/open-missing.c b/src/tests/userprog/open-missing.c
deleted file mode 100644
index 13ecbda..0000000
--- a/src/tests/userprog/open-missing.c
+++ /dev/null
@@ -1,13 +0,0 @@
-/* Tries to open a nonexistent file. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  int handle = open ("no-such-file");
-  if (handle != -1)
-    fail ("open() returned %d", handle);
-}
diff --git a/src/tests/userprog/open-missing.ck b/src/tests/userprog/open-missing.ck
deleted file mode 100644
index d72d878..0000000
--- a/src/tests/userprog/open-missing.ck
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(open-missing) begin
-(open-missing) end
-open-missing: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/open-normal.c b/src/tests/userprog/open-normal.c
deleted file mode 100644
index 5132465..0000000
--- a/src/tests/userprog/open-normal.c
+++ /dev/null
@@ -1,13 +0,0 @@
-/* Open a file. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  int handle = open ("sample.txt");
-  if (handle < 2)
-    fail ("open() returned %d", handle);
-}
diff --git a/src/tests/userprog/open-normal.ck b/src/tests/userprog/open-normal.ck
deleted file mode 100644
index 4f6c342..0000000
--- a/src/tests/userprog/open-normal.ck
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(open-normal) begin
-(open-normal) end
-open-normal: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/open-null.c b/src/tests/userprog/open-null.c
deleted file mode 100644
index bb418b8..0000000
--- a/src/tests/userprog/open-null.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Tries to open a file with the null pointer as its name.
-   The process must be terminated with exit code -1. */
-
-#include <stddef.h>
-#include <syscall.h>
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  open (NULL);
-}
diff --git a/src/tests/userprog/open-null.ck b/src/tests/userprog/open-null.ck
deleted file mode 100644
index b4a3bcb..0000000
--- a/src/tests/userprog/open-null.ck
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF', <<'EOF']);
-(open-null) begin
-(open-null) end
-open-null: exit(0)
-EOF
-(open-null) begin
-open-null: exit(-1)
-EOF
-pass;
diff --git a/src/tests/userprog/open-twice.c b/src/tests/userprog/open-twice.c
deleted file mode 100644
index dd333af..0000000
--- a/src/tests/userprog/open-twice.c
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Tries to open the same file twice,
-   which must succeed and must return a different file descriptor
-   in each case. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  int h1 = open ("sample.txt");
-  int h2 = open ("sample.txt");  
-
-  CHECK ((h1 = open ("sample.txt")) > 1, "open \"sample.txt\" once");
-  CHECK ((h2 = open ("sample.txt")) > 1, "open \"sample.txt\" again");
-  if (h1 == h2)
-    fail ("open() returned %d both times", h1);
-}
diff --git a/src/tests/userprog/open-twice.ck b/src/tests/userprog/open-twice.ck
deleted file mode 100644
index 64fa805..0000000
--- a/src/tests/userprog/open-twice.ck
+++ /dev/null
@@ -1,12 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(open-twice) begin
-(open-twice) open "sample.txt" once
-(open-twice) open "sample.txt" again
-(open-twice) end
-open-twice: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/read-bad-fd.c b/src/tests/userprog/read-bad-fd.c
deleted file mode 100644
index a8b190d..0000000
--- a/src/tests/userprog/read-bad-fd.c
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Tries to read from an invalid fd,
-   which must either fail silently or terminate the process with
-   exit code -1. */
-
-#include <limits.h>
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  char buf;
-  read (0x20101234, &buf, 1);
-  read (5, &buf, 1);
-  read (1234, &buf, 1);
-  read (-1, &buf, 1);
-  read (-1024, &buf, 1);
-  read (INT_MIN, &buf, 1);
-  read (INT_MAX, &buf, 1);
-}
diff --git a/src/tests/userprog/read-bad-fd.ck b/src/tests/userprog/read-bad-fd.ck
deleted file mode 100644
index 5fedcc7..0000000
--- a/src/tests/userprog/read-bad-fd.ck
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF', <<'EOF']);
-(read-bad-fd) begin
-(read-bad-fd) end
-read-bad-fd: exit(0)
-EOF
-(read-bad-fd) begin
-read-bad-fd: exit(-1)
-EOF
-pass;
diff --git a/src/tests/userprog/read-bad-ptr.c b/src/tests/userprog/read-bad-ptr.c
deleted file mode 100644
index 8fe756e..0000000
--- a/src/tests/userprog/read-bad-ptr.c
+++ /dev/null
@@ -1,16 +0,0 @@
-/* Passes an invalid pointer to the read system call.
-   The process must be terminated with -1 exit code. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  int handle;
-  CHECK ((handle = open ("sample.txt")) > 1, "open \"sample.txt\"");
-
-  read (handle, (char *) 0xc0100000, 123);
-  fail ("should not have survived read()");
-}
diff --git a/src/tests/userprog/read-bad-ptr.ck b/src/tests/userprog/read-bad-ptr.ck
deleted file mode 100644
index d10accf..0000000
--- a/src/tests/userprog/read-bad-ptr.ck
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF', <<'EOF']);
-(read-bad-ptr) begin
-(read-bad-ptr) open "sample.txt"
-(read-bad-ptr) end
-read-bad-ptr: exit(0)
-EOF
-(read-bad-ptr) begin
-(read-bad-ptr) open "sample.txt"
-read-bad-ptr: exit(-1)
-EOF
-pass;
diff --git a/src/tests/userprog/read-boundary.c b/src/tests/userprog/read-boundary.c
deleted file mode 100644
index 9c19966..0000000
--- a/src/tests/userprog/read-boundary.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Reads data spanning two pages in virtual address space,
-   which must succeed. */
-
-#include <string.h>
-#include <syscall.h>
-#include "tests/userprog/boundary.h"
-#include "tests/userprog/sample.inc"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  int handle;
-  int byte_cnt;
-  char *buffer;
-
-  CHECK ((handle = open ("sample.txt")) > 1, "open \"sample.txt\"");
-
-  buffer = get_boundary_area () - sizeof sample / 2;
-  byte_cnt = read (handle, buffer, sizeof sample - 1);
-  if (byte_cnt != sizeof sample - 1)
-    fail ("read() returned %d instead of %zu", byte_cnt, sizeof sample - 1);
-  else if (strcmp (sample, buffer)) 
-    {
-      msg ("expected text:\n%s", sample);
-      msg ("text actually read:\n%s", buffer);
-      fail ("expected text differs from actual");
-    }
-}
diff --git a/src/tests/userprog/read-boundary.ck b/src/tests/userprog/read-boundary.ck
deleted file mode 100644
index 08dc161..0000000
--- a/src/tests/userprog/read-boundary.ck
+++ /dev/null
@@ -1,11 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(read-boundary) begin
-(read-boundary) open "sample.txt"
-(read-boundary) end
-read-boundary: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/read-normal.c b/src/tests/userprog/read-normal.c
deleted file mode 100644
index 16d15cc..0000000
--- a/src/tests/userprog/read-normal.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Try reading a file in the most normal way. */
-
-#include "tests/userprog/sample.inc"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  check_file ("sample.txt", sample, sizeof sample - 1);
-}
diff --git a/src/tests/userprog/read-normal.ck b/src/tests/userprog/read-normal.ck
deleted file mode 100644
index 0ed2998..0000000
--- a/src/tests/userprog/read-normal.ck
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(read-normal) begin
-(read-normal) open "sample.txt" for verification
-(read-normal) verified contents of "sample.txt"
-(read-normal) close "sample.txt"
-(read-normal) end
-read-normal: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/read-stdout.c b/src/tests/userprog/read-stdout.c
deleted file mode 100644
index d0630b9..0000000
--- a/src/tests/userprog/read-stdout.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/* Try reading from fd 1 (stdout), 
-   which may just fail or terminate the process with -1 exit
-   code. */
-
-#include <stdio.h>
-#include <syscall.h>
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  char buf;
-  read (STDOUT_FILENO, &buf, 1);
-}
diff --git a/src/tests/userprog/read-stdout.ck b/src/tests/userprog/read-stdout.ck
deleted file mode 100644
index 7d87b52..0000000
--- a/src/tests/userprog/read-stdout.ck
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF', <<'EOF']);
-(read-stdout) begin
-(read-stdout) end
-read-stdout: exit(0)
-EOF
-(read-stdout) begin
-read-stdout: exit(-1)
-EOF
-pass;
diff --git a/src/tests/userprog/read-zero.c b/src/tests/userprog/read-zero.c
deleted file mode 100644
index e441817..0000000
--- a/src/tests/userprog/read-zero.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Try a 0-byte read, which should return 0 without reading
-   anything. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  int handle, byte_cnt;
-  char buf;
-
-  CHECK ((handle = open ("sample.txt")) > 1, "open \"sample.txt\"");
-
-  buf = 123;
-  byte_cnt = read (handle, &buf, 0);
-  if (byte_cnt != 0)
-    fail ("read() returned %d instead of 0", byte_cnt);
-  else if (buf != 123)
-    fail ("0-byte read() modified buffer");
-}
diff --git a/src/tests/userprog/read-zero.ck b/src/tests/userprog/read-zero.ck
deleted file mode 100644
index 8346dbc..0000000
--- a/src/tests/userprog/read-zero.ck
+++ /dev/null
@@ -1,11 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(read-zero) begin
-(read-zero) open "sample.txt"
-(read-zero) end
-read-zero: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/rox-child.c b/src/tests/userprog/rox-child.c
deleted file mode 100644
index 30afba2..0000000
--- a/src/tests/userprog/rox-child.c
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Ensure that the executable of a running process cannot be
-   modified, even by a child process. */
-
-#define CHILD_CNT "1"
-#include "tests/userprog/rox-child.inc"
diff --git a/src/tests/userprog/rox-child.ck b/src/tests/userprog/rox-child.ck
deleted file mode 100644
index e6363fb..0000000
--- a/src/tests/userprog/rox-child.ck
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(rox-child) begin
-(rox-child) open "child-rox"
-(rox-child) read "child-rox"
-(rox-child) write "child-rox"
-(rox-child) exec "child-rox 1"
-(child-rox) begin
-(child-rox) try to write "child-rox"
-(child-rox) try to write "child-rox"
-(child-rox) end
-child-rox: exit(12)
-(rox-child) write "child-rox"
-(rox-child) end
-rox-child: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/rox-child.inc b/src/tests/userprog/rox-child.inc
deleted file mode 100644
index 1e2ade9..0000000
--- a/src/tests/userprog/rox-child.inc
+++ /dev/null
@@ -1,33 +0,0 @@
-/* -*- c -*- */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  const char *child_cmd = "child-rox " CHILD_CNT;
-  int handle;
-  pid_t child;
-  char buffer[16];
-
-  /* Open child-rox, read from it, write back same data. */
-  CHECK ((handle = open ("child-rox")) > 1, "open \"child-rox\"");
-  CHECK (read (handle, buffer, sizeof buffer) == (int) sizeof buffer,
-         "read \"child-rox\"");
-  seek (handle, 0);
-  CHECK (write (handle, buffer, sizeof buffer) == (int) sizeof buffer,
-         "write \"child-rox\"");
-
-  /* Execute child-rox and wait for it. */
-  CHECK ((child = exec (child_cmd)) != -1, "exec \"%s\"", child_cmd);
-  quiet = true;
-  CHECK (wait (child) == 12, "wait for child");
-  quiet = false;
-
-  /* Write to child-rox again. */
-  seek (handle, 0);
-  CHECK (write (handle, buffer, sizeof buffer) == (int) sizeof buffer,
-         "write \"child-rox\"");
-}
diff --git a/src/tests/userprog/rox-multichild.c b/src/tests/userprog/rox-multichild.c
deleted file mode 100644
index 8e74dab..0000000
--- a/src/tests/userprog/rox-multichild.c
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Ensure that the executable of a running process cannot be
-   modified, even in the presence of multiple children. */
-
-#define CHILD_CNT "5"
-#include "tests/userprog/rox-child.inc"
diff --git a/src/tests/userprog/rox-multichild.ck b/src/tests/userprog/rox-multichild.ck
deleted file mode 100644
index 14b27db..0000000
--- a/src/tests/userprog/rox-multichild.ck
+++ /dev/null
@@ -1,44 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(rox-multichild) begin
-(rox-multichild) open "child-rox"
-(rox-multichild) read "child-rox"
-(rox-multichild) write "child-rox"
-(rox-multichild) exec "child-rox 5"
-(child-rox) begin
-(child-rox) try to write "child-rox"
-(child-rox) exec "child-rox 4"
-(child-rox) begin
-(child-rox) try to write "child-rox"
-(child-rox) exec "child-rox 3"
-(child-rox) begin
-(child-rox) try to write "child-rox"
-(child-rox) exec "child-rox 2"
-(child-rox) begin
-(child-rox) try to write "child-rox"
-(child-rox) exec "child-rox 1"
-(child-rox) begin
-(child-rox) try to write "child-rox"
-(child-rox) try to write "child-rox"
-(child-rox) end
-child-rox: exit(12)
-(child-rox) try to write "child-rox"
-(child-rox) end
-child-rox: exit(12)
-(child-rox) try to write "child-rox"
-(child-rox) end
-child-rox: exit(12)
-(child-rox) try to write "child-rox"
-(child-rox) end
-child-rox: exit(12)
-(child-rox) try to write "child-rox"
-(child-rox) end
-child-rox: exit(12)
-(rox-multichild) write "child-rox"
-(rox-multichild) end
-rox-multichild: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/rox-simple.c b/src/tests/userprog/rox-simple.c
deleted file mode 100644
index e84a064..0000000
--- a/src/tests/userprog/rox-simple.c
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Ensure that the executable of a running process cannot be
-   modified. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  int handle;
-  char buffer[16];
-  
-  CHECK ((handle = open ("rox-simple")) > 1, "open \"rox-simple\"");
-  CHECK (read (handle, buffer, sizeof buffer) == (int) sizeof buffer,
-         "read \"rox-simple\"");
-  CHECK (write (handle, buffer, sizeof buffer) == 0,
-         "try to write \"rox-simple\"");
-}
diff --git a/src/tests/userprog/rox-simple.ck b/src/tests/userprog/rox-simple.ck
deleted file mode 100644
index c9dcc66..0000000
--- a/src/tests/userprog/rox-simple.ck
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(rox-simple) begin
-(rox-simple) open "rox-simple"
-(rox-simple) read "rox-simple"
-(rox-simple) try to write "rox-simple"
-(rox-simple) end
-rox-simple: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/sample.inc b/src/tests/userprog/sample.inc
deleted file mode 100644
index 59f2bcb..0000000
--- a/src/tests/userprog/sample.inc
+++ /dev/null
@@ -1,6 +0,0 @@
-char sample[] = {
-  "\"Amazing Electronic Fact: If you scuffed your feet long enough without\n"
-  " touching anything, you would build up so many electrons that your\n"
-  " finger would explode!  But this is nothing to worry about unless you\n"
-  " have carpeting.\" --Dave Barry\n" 
-};
diff --git a/src/tests/userprog/sample.txt b/src/tests/userprog/sample.txt
deleted file mode 100644
index 5050fec..0000000
--- a/src/tests/userprog/sample.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-"Amazing Electronic Fact: If you scuffed your feet long enough without
- touching anything, you would build up so many electrons that your
- finger would explode!  But this is nothing to worry about unless you
- have carpeting." --Dave Barry
diff --git a/src/tests/userprog/sc-bad-arg.c b/src/tests/userprog/sc-bad-arg.c
deleted file mode 100644
index 0b512a0..0000000
--- a/src/tests/userprog/sc-bad-arg.c
+++ /dev/null
@@ -1,17 +0,0 @@
-/* Sticks a system call number (SYS_EXIT) at the very top of the
-   stack, then invokes a system call with the stack pointer
-   (%esp) set to its address.  The process must be terminated
-   with -1 exit code because the argument to the system call
-   would be above the top of the user address space. */
-
-#include <syscall-nr.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  asm volatile ("movl $0xbffffffc, %%esp; movl %0, (%%esp); int $0x30"
-                : : "i" (SYS_EXIT));
-  fail ("should have called exit(-1)");
-}
diff --git a/src/tests/userprog/sc-bad-arg.ck b/src/tests/userprog/sc-bad-arg.ck
deleted file mode 100644
index 8981105..0000000
--- a/src/tests/userprog/sc-bad-arg.ck
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(sc-bad-arg) begin
-sc-bad-arg: exit(-1)
-EOF
-pass;
diff --git a/src/tests/userprog/sc-bad-sp.c b/src/tests/userprog/sc-bad-sp.c
deleted file mode 100644
index 39cce84..0000000
--- a/src/tests/userprog/sc-bad-sp.c
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Invokes a system call with the stack pointer (%esp) set to a
-   bad address.  The process must be terminated with -1 exit
-   code. 
-
-   For Project 3: The bad address lies approximately 64MB below
-   the code segment, so there is no ambiguity that this attempt
-   must be rejected even after stack growth is implemented.
-   Moreover, a good stack growth heuristics should probably not
-   grow the stack for the purpose of reading the system call
-   number and arguments. */
-
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  asm volatile ("movl $.-(64*1024*1024), %esp; int $0x30");
-  fail ("should have called exit(-1)");
-}
diff --git a/src/tests/userprog/sc-bad-sp.ck b/src/tests/userprog/sc-bad-sp.ck
deleted file mode 100644
index 498cec1..0000000
--- a/src/tests/userprog/sc-bad-sp.ck
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(sc-bad-sp) begin
-sc-bad-sp: exit(-1)
-EOF
-pass;
diff --git a/src/tests/userprog/sc-boundary-2.c b/src/tests/userprog/sc-boundary-2.c
deleted file mode 100644
index 8acf036..0000000
--- a/src/tests/userprog/sc-boundary-2.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Invokes a system call with one byte of the system call's
-   argument on a separate page from the rest of the bytes.  This
-   must work. */
-
-#include <syscall-nr.h>
-#include "tests/userprog/boundary.h"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  /* Make one byte of a syscall argument hang over into a second
-     page. */
-  int *p = (int *) ((char *) get_boundary_area () - 7);
-  p[0] = SYS_EXIT;
-  p[1] = 67;
-
-  /* Invoke the system call. */
-  asm volatile ("movl %0, %%esp; int $0x30" : : "g" (p));
-  fail ("should have called exit(67)");
-}
diff --git a/src/tests/userprog/sc-boundary-2.ck b/src/tests/userprog/sc-boundary-2.ck
deleted file mode 100644
index 43766bf..0000000
--- a/src/tests/userprog/sc-boundary-2.ck
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(sc-boundary-2) begin
-sc-boundary-2: exit(67)
-EOF
-pass;
diff --git a/src/tests/userprog/sc-boundary.c b/src/tests/userprog/sc-boundary.c
deleted file mode 100644
index d889535..0000000
--- a/src/tests/userprog/sc-boundary.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Invokes a system call with the system call number and its
-   argument on separate pages.  This must work. */
-
-#include <syscall-nr.h>
-#include "tests/userprog/boundary.h"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  /* Put a syscall number at the end of one page
-     and its argument at the beginning of another. */
-  int *p = get_boundary_area ();
-  p--;
-  p[0] = SYS_EXIT;
-  p[1] = 42;
-
-  /* Invoke the system call. */
-  asm volatile ("movl %0, %%esp; int $0x30" : : "g" (p));
-  fail ("should have called exit(42)");
-}
diff --git a/src/tests/userprog/sc-boundary.ck b/src/tests/userprog/sc-boundary.ck
deleted file mode 100644
index 3f7cbaf..0000000
--- a/src/tests/userprog/sc-boundary.ck
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(sc-boundary) begin
-sc-boundary: exit(42)
-EOF
-pass;
diff --git a/src/tests/userprog/wait-bad-pid.c b/src/tests/userprog/wait-bad-pid.c
deleted file mode 100644
index 3fe8ee4..0000000
--- a/src/tests/userprog/wait-bad-pid.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Waits for an invalid pid.  This may fail or terminate the
-   process with -1 exit code. */
-
-#include <syscall.h>
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  wait ((pid_t) 0x0c020301);
-}
diff --git a/src/tests/userprog/wait-bad-pid.ck b/src/tests/userprog/wait-bad-pid.ck
deleted file mode 100644
index db63fb9..0000000
--- a/src/tests/userprog/wait-bad-pid.ck
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF', <<'EOF']);
-(wait-bad-pid) begin
-(wait-bad-pid) end
-wait-bad-pid: exit(0)
-EOF
-(wait-bad-pid) begin
-wait-bad-pid: exit(-1)
-EOF
-pass;
diff --git a/src/tests/userprog/wait-killed.c b/src/tests/userprog/wait-killed.c
deleted file mode 100644
index 6a2a6b5..0000000
--- a/src/tests/userprog/wait-killed.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Wait for a process that will be killed for bad behavior. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  msg ("wait(exec()) = %d", wait (exec ("child-bad")));
-}
diff --git a/src/tests/userprog/wait-killed.ck b/src/tests/userprog/wait-killed.ck
deleted file mode 100644
index 5df0e9c..0000000
--- a/src/tests/userprog/wait-killed.ck
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(wait-killed) begin
-(child-bad) begin
-child-bad: exit(-1)
-(wait-killed) wait(exec()) = -1
-(wait-killed) end
-wait-killed: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/wait-simple.c b/src/tests/userprog/wait-simple.c
deleted file mode 100644
index d3afcf3..0000000
--- a/src/tests/userprog/wait-simple.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Wait for a subprocess to finish. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  msg ("wait(exec()) = %d", wait (exec ("child-simple")));
-}
diff --git a/src/tests/userprog/wait-simple.ck b/src/tests/userprog/wait-simple.ck
deleted file mode 100644
index 93dd577..0000000
--- a/src/tests/userprog/wait-simple.ck
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(wait-simple) begin
-(child-simple) run
-child-simple: exit(81)
-(wait-simple) wait(exec()) = 81
-(wait-simple) end
-wait-simple: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/wait-twice.c b/src/tests/userprog/wait-twice.c
deleted file mode 100644
index 785e684..0000000
--- a/src/tests/userprog/wait-twice.c
+++ /dev/null
@@ -1,15 +0,0 @@
-/* Wait for a subprocess to finish, twice.
-   The first call must wait in the usual way and return the exit code.
-   The second wait call must return -1 immediately. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  pid_t child = exec ("child-simple");
-  msg ("wait(exec()) = %d", wait (child));
-  msg ("wait(exec()) = %d", wait (child));
-}
diff --git a/src/tests/userprog/wait-twice.ck b/src/tests/userprog/wait-twice.ck
deleted file mode 100644
index 6d53843..0000000
--- a/src/tests/userprog/wait-twice.ck
+++ /dev/null
@@ -1,14 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(wait-twice) begin
-(child-simple) run
-child-simple: exit(81)
-(wait-twice) wait(exec()) = 81
-(wait-twice) wait(exec()) = -1
-(wait-twice) end
-wait-twice: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/write-bad-fd.c b/src/tests/userprog/write-bad-fd.c
deleted file mode 100644
index f3b1151..0000000
--- a/src/tests/userprog/write-bad-fd.c
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Tries to write to an invalid fd,
-   which must either fail silently or terminate the process with
-   exit code -1. */
-
-#include <limits.h>
-#include <syscall.h>
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  char buf = 123;
-  write (0x01012342, &buf, 1);
-  write (7, &buf, 1);
-  write (2546, &buf, 1);
-  write (-5, &buf, 1);
-  write (-8192, &buf, 1);
-  write (INT_MIN + 1, &buf, 1);
-  write (INT_MAX - 1, &buf, 1);
-}
diff --git a/src/tests/userprog/write-bad-fd.ck b/src/tests/userprog/write-bad-fd.ck
deleted file mode 100644
index 8da7a8b..0000000
--- a/src/tests/userprog/write-bad-fd.ck
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF', <<'EOF']);
-(write-bad-fd) begin
-(write-bad-fd) end
-write-bad-fd: exit(0)
-EOF
-(write-bad-fd) begin
-write-bad-fd: exit(-1)
-EOF
-pass;
diff --git a/src/tests/userprog/write-bad-ptr.c b/src/tests/userprog/write-bad-ptr.c
deleted file mode 100644
index 5336479..0000000
--- a/src/tests/userprog/write-bad-ptr.c
+++ /dev/null
@@ -1,16 +0,0 @@
-/* Passes an invalid pointer to the write system call.
-   The process must be terminated with -1 exit code. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  int handle;
-  CHECK ((handle = open ("sample.txt")) > 1, "open \"sample.txt\"");
-
-  write (handle, (char *) 0x10123420, 123);
-  fail ("should have exited with -1");
-}
diff --git a/src/tests/userprog/write-bad-ptr.ck b/src/tests/userprog/write-bad-ptr.ck
deleted file mode 100644
index ad9f399..0000000
--- a/src/tests/userprog/write-bad-ptr.ck
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF', <<'EOF']);
-(write-bad-ptr) begin
-(write-bad-ptr) open "sample.txt"
-(write-bad-ptr) end
-write-bad-ptr: exit(0)
-EOF
-(write-bad-ptr) begin
-(write-bad-ptr) open "sample.txt"
-write-bad-ptr: exit(-1)
-EOF
-pass;
diff --git a/src/tests/userprog/write-boundary.c b/src/tests/userprog/write-boundary.c
deleted file mode 100644
index d2de1d4..0000000
--- a/src/tests/userprog/write-boundary.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Writes data spanning two pages in virtual address space,
-   which must succeed. */
-
-#include <string.h>
-#include <syscall.h>
-#include "tests/userprog/boundary.h"
-#include "tests/userprog/sample.inc"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  int handle;
-  int byte_cnt;
-  char *sample_p;
-
-  sample_p = copy_string_across_boundary (sample);
-
-  CHECK ((handle = open ("sample.txt")) > 1, "open \"sample.txt\"");
-
-  byte_cnt = write (handle, sample_p, sizeof sample - 1);
-  if (byte_cnt != sizeof sample - 1)
-    fail ("write() returned %d instead of %zu", byte_cnt, sizeof sample - 1);
-}
diff --git a/src/tests/userprog/write-boundary.ck b/src/tests/userprog/write-boundary.ck
deleted file mode 100644
index 7883781..0000000
--- a/src/tests/userprog/write-boundary.ck
+++ /dev/null
@@ -1,11 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(write-boundary) begin
-(write-boundary) open "sample.txt"
-(write-boundary) end
-write-boundary: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/write-normal.c b/src/tests/userprog/write-normal.c
deleted file mode 100644
index e0297aa..0000000
--- a/src/tests/userprog/write-normal.c
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Try writing a file in the most normal way. */
-
-#include <syscall.h>
-#include "tests/userprog/sample.inc"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  int handle, byte_cnt;
-
-  CHECK (create ("test.txt", sizeof sample - 1), "create \"test.txt\"");
-  CHECK ((handle = open ("test.txt")) > 1, "open \"test.txt\"");
-
-  byte_cnt = write (handle, sample, sizeof sample - 1);
-  if (byte_cnt != sizeof sample - 1)
-    fail ("write() returned %d instead of %zu", byte_cnt, sizeof sample - 1);
-}
-
diff --git a/src/tests/userprog/write-normal.ck b/src/tests/userprog/write-normal.ck
deleted file mode 100644
index 9fa6024..0000000
--- a/src/tests/userprog/write-normal.ck
+++ /dev/null
@@ -1,12 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(write-normal) begin
-(write-normal) create "test.txt"
-(write-normal) open "test.txt"
-(write-normal) end
-write-normal: exit(0)
-EOF
-pass;
diff --git a/src/tests/userprog/write-stdin.c b/src/tests/userprog/write-stdin.c
deleted file mode 100644
index 491ea53..0000000
--- a/src/tests/userprog/write-stdin.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/* Try writing to fd 0 (stdin), 
-   which may just fail or terminate the process with -1 exit
-   code. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  char buf = 123;
-  write (0, &buf, 1);
-}
diff --git a/src/tests/userprog/write-stdin.ck b/src/tests/userprog/write-stdin.ck
deleted file mode 100644
index a6caf81..0000000
--- a/src/tests/userprog/write-stdin.ck
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF', <<'EOF']);
-(write-stdin) begin
-(write-stdin) end
-write-stdin: exit(0)
-EOF
-(write-stdin) begin
-write-stdin: exit(-1)
-EOF
-pass;
diff --git a/src/tests/userprog/write-zero.c b/src/tests/userprog/write-zero.c
deleted file mode 100644
index d8dac9b..0000000
--- a/src/tests/userprog/write-zero.c
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Try a 0-byte write, which should return 0 without writing
-   anything. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  int handle, byte_cnt;
-  char buf;
-
-  CHECK ((handle = open ("sample.txt")) > 1, "open \"sample.txt\"");
-
-  buf = 123;
-  byte_cnt = write (handle, &buf, 0);
-  if (byte_cnt != 0)
-    fail("write() returned %d instead of 0", byte_cnt);
-}
diff --git a/src/tests/userprog/write-zero.ck b/src/tests/userprog/write-zero.ck
deleted file mode 100644
index cc4cd60..0000000
--- a/src/tests/userprog/write-zero.ck
+++ /dev/null
@@ -1,11 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(write-zero) begin
-(write-zero) open "sample.txt"
-(write-zero) end
-write-zero: exit(0)
-EOF
-pass;
diff --git a/src/tests/vm/Grading b/src/tests/vm/Grading
deleted file mode 100644
index f0c2c13..0000000
--- a/src/tests/vm/Grading
+++ /dev/null
@@ -1,12 +0,0 @@
-# Percentage of the testing point total designated for each set of
-# tests.
-
-# This project is primarily about virtual memory, but all the previous
-# functionality should work too, and it's easy to screw it up, thus
-# the equal weight placed on each.
-
-50%	tests/vm/Rubric.functionality
-15%	tests/vm/Rubric.robustness
-10%	tests/userprog/Rubric.functionality
-5%	tests/userprog/Rubric.robustness
-20%	tests/filesys/base/Rubric
diff --git a/src/tests/vm/Make.tests b/src/tests/vm/Make.tests
deleted file mode 100644
index 04b1b81..0000000
--- a/src/tests/vm/Make.tests
+++ /dev/null
@@ -1,103 +0,0 @@
-# -*- makefile -*-
-
-tests/vm_TESTS = $(addprefix tests/vm/,pt-grow-stack pt-grow-pusha	\
-pt-grow-bad pt-big-stk-obj pt-bad-addr pt-bad-read pt-write-code	\
-pt-write-code2 pt-grow-stk-sc page-linear page-parallel page-merge-seq	\
-page-merge-par page-merge-stk page-merge-mm page-shuffle mmap-read	\
-mmap-close mmap-unmap mmap-overlap mmap-twice mmap-write mmap-exit	\
-mmap-shuffle mmap-bad-fd mmap-clean mmap-inherit mmap-misalign		\
-mmap-null mmap-over-code mmap-over-data mmap-over-stk mmap-remove	\
-mmap-zero)
-
-tests/vm_PROGS = $(tests/vm_TESTS) $(addprefix tests/vm/,child-linear	\
-child-sort child-qsort child-qsort-mm child-mm-wrt child-inherit)
-
-tests/vm/pt-grow-stack_SRC = tests/vm/pt-grow-stack.c tests/arc4.c	\
-tests/cksum.c tests/lib.c tests/main.c
-tests/vm/pt-grow-pusha_SRC = tests/vm/pt-grow-pusha.c tests/lib.c	\
-tests/main.c
-tests/vm/pt-grow-bad_SRC = tests/vm/pt-grow-bad.c tests/lib.c tests/main.c
-tests/vm/pt-big-stk-obj_SRC = tests/vm/pt-big-stk-obj.c tests/arc4.c	\
-tests/cksum.c tests/lib.c tests/main.c
-tests/vm/pt-bad-addr_SRC = tests/vm/pt-bad-addr.c tests/lib.c tests/main.c
-tests/vm/pt-bad-read_SRC = tests/vm/pt-bad-read.c tests/lib.c tests/main.c
-tests/vm/pt-write-code_SRC = tests/vm/pt-write-code.c tests/lib.c tests/main.c
-tests/vm/pt-write-code2_SRC = tests/vm/pt-write-code-2.c tests/lib.c tests/main.c
-tests/vm/pt-grow-stk-sc_SRC = tests/vm/pt-grow-stk-sc.c tests/lib.c tests/main.c
-tests/vm/page-linear_SRC = tests/vm/page-linear.c tests/arc4.c	\
-tests/lib.c tests/main.c
-tests/vm/page-parallel_SRC = tests/vm/page-parallel.c tests/lib.c tests/main.c
-tests/vm/page-merge-seq_SRC = tests/vm/page-merge-seq.c tests/arc4.c	\
-tests/lib.c tests/main.c
-tests/vm/page-merge-par_SRC = tests/vm/page-merge-par.c \
-tests/vm/parallel-merge.c tests/arc4.c tests/lib.c tests/main.c
-tests/vm/page-merge-stk_SRC = tests/vm/page-merge-stk.c \
-tests/vm/parallel-merge.c tests/arc4.c tests/lib.c tests/main.c
-tests/vm/page-merge-mm_SRC = tests/vm/page-merge-mm.c \
-tests/vm/parallel-merge.c tests/arc4.c tests/lib.c tests/main.c
-tests/vm/page-shuffle_SRC = tests/vm/page-shuffle.c tests/arc4.c	\
-tests/cksum.c tests/lib.c tests/main.c
-tests/vm/mmap-read_SRC = tests/vm/mmap-read.c tests/lib.c tests/main.c
-tests/vm/mmap-close_SRC = tests/vm/mmap-close.c tests/lib.c tests/main.c
-tests/vm/mmap-unmap_SRC = tests/vm/mmap-unmap.c tests/lib.c tests/main.c
-tests/vm/mmap-overlap_SRC = tests/vm/mmap-overlap.c tests/lib.c tests/main.c
-tests/vm/mmap-twice_SRC = tests/vm/mmap-twice.c tests/lib.c tests/main.c
-tests/vm/mmap-write_SRC = tests/vm/mmap-write.c tests/lib.c tests/main.c
-tests/vm/mmap-exit_SRC = tests/vm/mmap-exit.c tests/lib.c tests/main.c
-tests/vm/mmap-shuffle_SRC = tests/vm/mmap-shuffle.c tests/arc4.c	\
-tests/cksum.c tests/lib.c tests/main.c
-tests/vm/mmap-bad-fd_SRC = tests/vm/mmap-bad-fd.c tests/lib.c tests/main.c
-tests/vm/mmap-clean_SRC = tests/vm/mmap-clean.c tests/lib.c tests/main.c
-tests/vm/mmap-inherit_SRC = tests/vm/mmap-inherit.c tests/lib.c tests/main.c
-tests/vm/mmap-misalign_SRC = tests/vm/mmap-misalign.c tests/lib.c	\
-tests/main.c
-tests/vm/mmap-null_SRC = tests/vm/mmap-null.c tests/lib.c tests/main.c
-tests/vm/mmap-over-code_SRC = tests/vm/mmap-over-code.c tests/lib.c	\
-tests/main.c
-tests/vm/mmap-over-data_SRC = tests/vm/mmap-over-data.c tests/lib.c	\
-tests/main.c
-tests/vm/mmap-over-stk_SRC = tests/vm/mmap-over-stk.c tests/lib.c tests/main.c
-tests/vm/mmap-remove_SRC = tests/vm/mmap-remove.c tests/lib.c tests/main.c
-tests/vm/mmap-zero_SRC = tests/vm/mmap-zero.c tests/lib.c tests/main.c
-
-tests/vm/child-linear_SRC = tests/vm/child-linear.c tests/arc4.c tests/lib.c
-tests/vm/child-qsort_SRC = tests/vm/child-qsort.c tests/vm/qsort.c tests/lib.c
-tests/vm/child-qsort-mm_SRC = tests/vm/child-qsort-mm.c tests/vm/qsort.c \
-tests/lib.c
-tests/vm/child-sort_SRC = tests/vm/child-sort.c tests/lib.c
-tests/vm/child-mm-wrt_SRC = tests/vm/child-mm-wrt.c tests/lib.c tests/main.c
-tests/vm/child-inherit_SRC = tests/vm/child-inherit.c tests/lib.c tests/main.c
-
-tests/vm/pt-bad-read_PUTFILES = tests/vm/sample.txt
-tests/vm/pt-write-code2_PUTFILES = tests/vm/sample.txt
-tests/vm/mmap-close_PUTFILES = tests/vm/sample.txt
-tests/vm/mmap-read_PUTFILES = tests/vm/sample.txt
-tests/vm/mmap-unmap_PUTFILES = tests/vm/sample.txt
-tests/vm/mmap-twice_PUTFILES = tests/vm/sample.txt
-tests/vm/mmap-overlap_PUTFILES = tests/vm/zeros
-tests/vm/mmap-exit_PUTFILES = tests/vm/child-mm-wrt
-tests/vm/page-parallel_PUTFILES = tests/vm/child-linear
-tests/vm/page-merge-seq_PUTFILES = tests/vm/child-sort
-tests/vm/page-merge-par_PUTFILES = tests/vm/child-sort
-tests/vm/page-merge-stk_PUTFILES = tests/vm/child-qsort
-tests/vm/page-merge-mm_PUTFILES = tests/vm/child-qsort-mm
-tests/vm/mmap-clean_PUTFILES = tests/vm/sample.txt
-tests/vm/mmap-inherit_PUTFILES = tests/vm/sample.txt tests/vm/child-inherit
-tests/vm/mmap-misalign_PUTFILES = tests/vm/sample.txt
-tests/vm/mmap-null_PUTFILES = tests/vm/sample.txt
-tests/vm/mmap-over-code_PUTFILES = tests/vm/sample.txt
-tests/vm/mmap-over-data_PUTFILES = tests/vm/sample.txt
-tests/vm/mmap-over-stk_PUTFILES = tests/vm/sample.txt
-tests/vm/mmap-remove_PUTFILES = tests/vm/sample.txt
-
-tests/vm/page-linear.output: TIMEOUT = 300
-tests/vm/page-shuffle.output: TIMEOUT = 600
-tests/vm/mmap-shuffle.output: TIMEOUT = 600
-tests/vm/page-merge-seq.output: TIMEOUT = 600
-tests/vm/page-merge-par.output: TIMEOUT = 600
-
-tests/vm/zeros:
-	dd if=/dev/zero of=$@ bs=1024 count=6
-
-clean::
-	rm -f tests/vm/zeros
diff --git a/src/tests/vm/Rubric.functionality b/src/tests/vm/Rubric.functionality
deleted file mode 100644
index 8a86612..0000000
--- a/src/tests/vm/Rubric.functionality
+++ /dev/null
@@ -1,30 +0,0 @@
-Functionality of virtual memory subsystem:
-- Test stack growth.
-3	pt-grow-stack
-3	pt-grow-stk-sc
-3	pt-big-stk-obj
-3	pt-grow-pusha
-
-- Test paging behavior.
-3	page-linear
-3	page-parallel
-3	page-shuffle
-4	page-merge-seq
-4	page-merge-par
-4	page-merge-mm
-4	page-merge-stk
-
-- Test "mmap" system call.
-2	mmap-read
-2	mmap-write
-2	mmap-shuffle
-
-2	mmap-twice
-
-2	mmap-unmap
-1	mmap-exit
-
-3	mmap-clean
-
-2	mmap-close
-2	mmap-remove
diff --git a/src/tests/vm/Rubric.robustness b/src/tests/vm/Rubric.robustness
deleted file mode 100644
index 0b2552f..0000000
--- a/src/tests/vm/Rubric.robustness
+++ /dev/null
@@ -1,21 +0,0 @@
-Robustness of virtual memory subsystem:
-- Test robustness of page table support.
-2	pt-bad-addr
-3	pt-bad-read
-2	pt-write-code
-3	pt-write-code2
-4	pt-grow-bad
-
-- Test robustness of "mmap" system call.
-1	mmap-bad-fd
-1	mmap-inherit
-1	mmap-null
-1	mmap-zero
-
-2	mmap-misalign
-
-2	mmap-over-code
-2	mmap-over-data
-2	mmap-over-stk
-2	mmap-overlap
-
diff --git a/src/tests/vm/child-inherit.c b/src/tests/vm/child-inherit.c
deleted file mode 100644
index d3186a1..0000000
--- a/src/tests/vm/child-inherit.c
+++ /dev/null
@@ -1,16 +0,0 @@
-/* Child process for mmap-inherit test.
-   Tries to write to a mapping present in the parent.
-   The process must be terminated with -1 exit code. */
-
-#include <string.h>
-#include "tests/vm/sample.inc"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void)
-{
-  memset ((char *) 0x54321000, 0, 4096);
-  fail ("child can modify parent's memory mappings");
-}
-
diff --git a/src/tests/vm/child-linear.c b/src/tests/vm/child-linear.c
deleted file mode 100644
index eca3e3f..0000000
--- a/src/tests/vm/child-linear.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Child process of page-parallel.
-   Encrypts 1 MB of zeros, then decrypts it, and ensures that
-   the zeros are back. */
-
-#include <string.h>
-#include "tests/arc4.h"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-const char *test_name = "child-linear";
-
-#define SIZE (1024 * 1024)
-static char buf[SIZE];
-
-int
-main (int argc, char *argv[])
-{
-  const char *key = argv[argc - 1];
-  struct arc4 arc4;
-  size_t i;
-
-  /* Encrypt zeros. */
-  arc4_init (&arc4, key, strlen (key));
-  arc4_crypt (&arc4, buf, SIZE);
-
-  /* Decrypt back to zeros. */
-  arc4_init (&arc4, key, strlen (key));
-  arc4_crypt (&arc4, buf, SIZE);
-
-  /* Check that it's all zeros. */
-  for (i = 0; i < SIZE; i++)
-    if (buf[i] != '\0')
-      fail ("byte %zu != 0", i);
-
-  return 0x42;
-}
diff --git a/src/tests/vm/child-mm-wrt.c b/src/tests/vm/child-mm-wrt.c
deleted file mode 100644
index 8419788..0000000
--- a/src/tests/vm/child-mm-wrt.c
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Child process of mmap-exit.
-   Mmaps a file and writes to it via the mmap'ing, then exits
-   without calling munmap.  The data in the mapped region must be
-   written out at program termination. */
-
-#include <string.h>
-#include <syscall.h>
-#include "tests/vm/sample.inc"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-#define ACTUAL ((void *) 0x10000000)
-
-void
-test_main (void)
-{
-  int handle;
-
-  CHECK (create ("sample.txt", sizeof sample), "create \"sample.txt\"");
-  CHECK ((handle = open ("sample.txt")) > 1, "open \"sample.txt\"");
-  CHECK (mmap (handle, ACTUAL) != MAP_FAILED, "mmap \"sample.txt\"");
-  memcpy (ACTUAL, sample, sizeof sample);
-}
-
diff --git a/src/tests/vm/child-qsort-mm.c b/src/tests/vm/child-qsort-mm.c
deleted file mode 100644
index db45499..0000000
--- a/src/tests/vm/child-qsort-mm.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Mmaps a 128 kB file "sorts" the bytes in it, using quick sort,
-   a multi-pass divide and conquer algorithm.  */
-
-#include <debug.h>
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-#include "tests/vm/qsort.h"
-
-const char *test_name = "child-qsort-mm";
-
-int
-main (int argc UNUSED, char *argv[]) 
-{
-  int handle;
-  unsigned char *p = (unsigned char *) 0x10000000;
-
-  quiet = true;
-
-  CHECK ((handle = open (argv[1])) > 1, "open \"%s\"", argv[1]);
-  CHECK (mmap (handle, p) != MAP_FAILED, "mmap \"%s\"", argv[1]);
-  qsort_bytes (p, 1024 * 128);
-  
-  return 80;
-}
diff --git a/src/tests/vm/child-qsort.c b/src/tests/vm/child-qsort.c
deleted file mode 100644
index 355f4eb..0000000
--- a/src/tests/vm/child-qsort.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Reads a 128 kB file onto the stack and "sorts" the bytes in
-   it, using quick sort, a multi-pass divide and conquer
-   algorithm.  The sorted data is written back to the same file
-   in-place. */
-
-#include <debug.h>
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-#include "tests/vm/qsort.h"
-
-const char *test_name = "child-qsort";
-
-int
-main (int argc UNUSED, char *argv[]) 
-{
-  int handle;
-  unsigned char buf[128 * 1024];
-  size_t size;
-
-  quiet = true;
-
-  CHECK ((handle = open (argv[1])) > 1, "open \"%s\"", argv[1]);
-
-  size = read (handle, buf, sizeof buf);
-  qsort_bytes (buf, sizeof buf);
-  seek (handle, 0);
-  write (handle, buf, size);
-  close (handle);
-  
-  return 72;
-}
diff --git a/src/tests/vm/child-sort.c b/src/tests/vm/child-sort.c
deleted file mode 100644
index dff2c77..0000000
--- a/src/tests/vm/child-sort.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Reads a 128 kB file into static data and "sorts" the bytes in
-   it, using counting sort, a single-pass algorithm.  The sorted
-   data is written back to the same file in-place. */
-
-#include <debug.h>
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-const char *test_name = "child-sort";
-
-unsigned char buf[128 * 1024];
-size_t histogram[256];
-
-int
-main (int argc UNUSED, char *argv[]) 
-{
-  int handle;
-  unsigned char *p;
-  size_t size;
-  size_t i;
-
-  quiet = true;
-
-  CHECK ((handle = open (argv[1])) > 1, "open \"%s\"", argv[1]);
-
-  size = read (handle, buf, sizeof buf);
-  for (i = 0; i < size; i++)
-    histogram[buf[i]]++;
-  p = buf;
-  for (i = 0; i < sizeof histogram / sizeof *histogram; i++) 
-    {
-      size_t j = histogram[i];
-      while (j-- > 0)
-        *p++ = i;
-    }
-  seek (handle, 0);
-  write (handle, buf, size);
-  close (handle);
-  
-  return 123;
-}
diff --git a/src/tests/vm/mmap-bad-fd.c b/src/tests/vm/mmap-bad-fd.c
deleted file mode 100644
index 76a7b50..0000000
--- a/src/tests/vm/mmap-bad-fd.c
+++ /dev/null
@@ -1,15 +0,0 @@
-/* Tries to mmap an invalid fd,
-   which must either fail silently or terminate the process with
-   exit code -1. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  CHECK (mmap (0x5678, (void *) 0x10000000) == MAP_FAILED,
-         "try to mmap invalid fd");
-}
-
diff --git a/src/tests/vm/mmap-bad-fd.ck b/src/tests/vm/mmap-bad-fd.ck
deleted file mode 100644
index f3f58d5..0000000
--- a/src/tests/vm/mmap-bad-fd.ck
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF', <<'EOF']);
-(mmap-bad-fd) begin
-(mmap-bad-fd) try to mmap invalid fd
-(mmap-bad-fd) end
-mmap-bad-fd: exit(0)
-EOF
-(mmap-bad-fd) begin
-(mmap-bad-fd) try to mmap invalid fd
-mmap-bad-fd: exit(-1)
-EOF
-pass;
diff --git a/src/tests/vm/mmap-clean.c b/src/tests/vm/mmap-clean.c
deleted file mode 100644
index ea1dc9c..0000000
--- a/src/tests/vm/mmap-clean.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Verifies that mmap'd regions are only written back on munmap
-   if the data was actually modified in memory. */
-
-#include <string.h>
-#include <syscall.h>
-#include "tests/vm/sample.inc"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void)
-{
-  static const char overwrite[] = "Now is the time for all good...";
-  static char buffer[sizeof sample - 1];
-  char *actual = (char *) 0x54321000;
-  int handle;
-  mapid_t map;
-
-  /* Open file, map, verify data. */
-  CHECK ((handle = open ("sample.txt")) > 1, "open \"sample.txt\"");
-  CHECK ((map = mmap (handle, actual)) != MAP_FAILED, "mmap \"sample.txt\"");
-  if (memcmp (actual, sample, strlen (sample)))
-    fail ("read of mmap'd file reported bad data");
-
-  /* Modify file. */
-  CHECK (write (handle, overwrite, strlen (overwrite))
-         == (int) strlen (overwrite),
-         "write \"sample.txt\"");
-
-  /* Close mapping.  Data should not be written back, because we
-     didn't modify it via the mapping. */
-  msg ("munmap \"sample.txt\"");
-  munmap (map);
-
-  /* Read file back. */
-  msg ("seek \"sample.txt\"");
-  seek (handle, 0);
-  CHECK (read (handle, buffer, sizeof buffer) == sizeof buffer,
-         "read \"sample.txt\"");
-
-  /* Verify that file overwrite worked. */
-  if (memcmp (buffer, overwrite, strlen (overwrite))
-      || memcmp (buffer + strlen (overwrite), sample + strlen (overwrite),
-                 strlen (sample) - strlen (overwrite))) 
-    {
-      if (!memcmp (buffer, sample, strlen (sample)))
-        fail ("munmap wrote back clean page");
-      else
-        fail ("read surprising data from file"); 
-    }
-  else
-    msg ("file change was retained after munmap");
-}
diff --git a/src/tests/vm/mmap-clean.ck b/src/tests/vm/mmap-clean.ck
deleted file mode 100644
index 1666d6c..0000000
--- a/src/tests/vm/mmap-clean.ck
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(mmap-clean) begin
-(mmap-clean) open "sample.txt"
-(mmap-clean) mmap "sample.txt"
-(mmap-clean) write "sample.txt"
-(mmap-clean) munmap "sample.txt"
-(mmap-clean) seek "sample.txt"
-(mmap-clean) read "sample.txt"
-(mmap-clean) file change was retained after munmap
-(mmap-clean) end
-EOF
-pass;
diff --git a/src/tests/vm/mmap-close.c b/src/tests/vm/mmap-close.c
deleted file mode 100644
index d016ee3..0000000
--- a/src/tests/vm/mmap-close.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Verifies that memory mappings persist after file close. */
-
-#include <string.h>
-#include <syscall.h>
-#include "tests/vm/sample.inc"
-#include "tests/arc4.h"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-#define ACTUAL ((void *) 0x10000000)
-
-void
-test_main (void)
-{
-  int handle;
-  mapid_t map;
-
-  CHECK ((handle = open ("sample.txt")) > 1, "open \"sample.txt\"");
-  CHECK ((map = mmap (handle, ACTUAL)) != MAP_FAILED, "mmap \"sample.txt\"");
-
-  close (handle);
-
-  if (memcmp (ACTUAL, sample, strlen (sample)))
-    fail ("read of mmap'd file reported bad data");
-
-  munmap (map);
-}
diff --git a/src/tests/vm/mmap-close.ck b/src/tests/vm/mmap-close.ck
deleted file mode 100644
index d15e41a..0000000
--- a/src/tests/vm/mmap-close.ck
+++ /dev/null
@@ -1,11 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(mmap-close) begin
-(mmap-close) open "sample.txt"
-(mmap-close) mmap "sample.txt"
-(mmap-close) end
-EOF
-pass;
diff --git a/src/tests/vm/mmap-exit.c b/src/tests/vm/mmap-exit.c
deleted file mode 100644
index 7a2278a..0000000
--- a/src/tests/vm/mmap-exit.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Executes child-mm-wrt and verifies that the writes that should
-   have occurred really did. */
-
-#include <syscall.h>
-#include "tests/vm/sample.inc"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void)
-{
-  pid_t child;
-
-  /* Make child write file. */
-  quiet = true;
-  CHECK ((child = exec ("child-mm-wrt")) != -1, "exec \"child-mm-wrt\"");
-  CHECK (wait (child) == 0, "wait for child (should return 0)");
-  quiet = false;
-
-  /* Check file contents. */
-  check_file ("sample.txt", sample, sizeof sample);
-}
diff --git a/src/tests/vm/mmap-exit.ck b/src/tests/vm/mmap-exit.ck
deleted file mode 100644
index 457d34a..0000000
--- a/src/tests/vm/mmap-exit.ck
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(mmap-exit) begin
-(child-mm-wrt) begin
-(child-mm-wrt) create "sample.txt"
-(child-mm-wrt) open "sample.txt"
-(child-mm-wrt) mmap "sample.txt"
-(child-mm-wrt) end
-(mmap-exit) open "sample.txt" for verification
-(mmap-exit) verified contents of "sample.txt"
-(mmap-exit) close "sample.txt"
-(mmap-exit) end
-EOF
-pass;
diff --git a/src/tests/vm/mmap-inherit.c b/src/tests/vm/mmap-inherit.c
deleted file mode 100644
index 7fa9607..0000000
--- a/src/tests/vm/mmap-inherit.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Maps a file into memory and runs child-inherit to verify that
-   mappings are not inherited. */
-
-#include <string.h>
-#include <syscall.h>
-#include "tests/vm/sample.inc"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void)
-{
-  char *actual = (char *) 0x54321000;
-  int handle;
-  pid_t child;
-
-  /* Open file, map, verify data. */
-  CHECK ((handle = open ("sample.txt")) > 1, "open \"sample.txt\"");
-  CHECK (mmap (handle, actual) != MAP_FAILED, "mmap \"sample.txt\"");
-  if (memcmp (actual, sample, strlen (sample)))
-    fail ("read of mmap'd file reported bad data");
-
-  /* Spawn child and wait. */
-  CHECK ((child = exec ("child-inherit")) != -1, "exec \"child-inherit\"");
-  quiet = true;
-  CHECK (wait (child) == -1, "wait for child (should return -1)");
-  quiet = false;
-
-  /* Verify data again. */
-  CHECK (!memcmp (actual, sample, strlen (sample)),
-         "checking that mmap'd file still has same data");
-}
diff --git a/src/tests/vm/mmap-inherit.ck b/src/tests/vm/mmap-inherit.ck
deleted file mode 100644
index 7e69122..0000000
--- a/src/tests/vm/mmap-inherit.ck
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ( [<<'EOF']);
-(mmap-inherit) begin
-(mmap-inherit) open "sample.txt"
-(mmap-inherit) mmap "sample.txt"
-(mmap-inherit) exec "child-inherit"
-(child-inherit) begin
-child-inherit: exit(-1)
-(mmap-inherit) checking that mmap'd file still has same data
-(mmap-inherit) end
-mmap-inherit: exit(0)
-EOF
-pass;
diff --git a/src/tests/vm/mmap-misalign.c b/src/tests/vm/mmap-misalign.c
deleted file mode 100644
index 34141a9..0000000
--- a/src/tests/vm/mmap-misalign.c
+++ /dev/null
@@ -1,16 +0,0 @@
-/* Verifies that misaligned memory mappings are disallowed. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  int handle;
-  
-  CHECK ((handle = open ("sample.txt")) > 1, "open \"sample.txt\"");
-  CHECK (mmap (handle, (void *) 0x10001234) == MAP_FAILED,
-         "try to mmap at misaligned address");
-}
-
diff --git a/src/tests/vm/mmap-misalign.ck b/src/tests/vm/mmap-misalign.ck
deleted file mode 100644
index 145a2e8..0000000
--- a/src/tests/vm/mmap-misalign.ck
+++ /dev/null
@@ -1,11 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(mmap-misalign) begin
-(mmap-misalign) open "sample.txt"
-(mmap-misalign) try to mmap at misaligned address
-(mmap-misalign) end
-EOF
-pass;
diff --git a/src/tests/vm/mmap-null.c b/src/tests/vm/mmap-null.c
deleted file mode 100644
index f8ef075..0000000
--- a/src/tests/vm/mmap-null.c
+++ /dev/null
@@ -1,15 +0,0 @@
-/* Verifies that memory mappings at address 0 are disallowed. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  int handle;
-  
-  CHECK ((handle = open ("sample.txt")) > 1, "open \"sample.txt\"");
-  CHECK (mmap (handle, NULL) == MAP_FAILED, "try to mmap at address 0");
-}
-
diff --git a/src/tests/vm/mmap-null.ck b/src/tests/vm/mmap-null.ck
deleted file mode 100644
index aacdd65..0000000
--- a/src/tests/vm/mmap-null.ck
+++ /dev/null
@@ -1,11 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(mmap-null) begin
-(mmap-null) open "sample.txt"
-(mmap-null) try to mmap at address 0
-(mmap-null) end
-EOF
-pass;
diff --git a/src/tests/vm/mmap-over-code.c b/src/tests/vm/mmap-over-code.c
deleted file mode 100644
index d3619a3..0000000
--- a/src/tests/vm/mmap-over-code.c
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Verifies that mapping over the code segment is disallowed. */
-
-#include <stdint.h>
-#include <round.h>
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  uintptr_t test_main_page = ROUND_DOWN ((uintptr_t) test_main, 4096);
-  int handle;
-  
-  CHECK ((handle = open ("sample.txt")) > 1, "open \"sample.txt\"");
-  CHECK (mmap (handle, (void *) test_main_page) == MAP_FAILED,
-         "try to mmap over code segment");
-}
-
diff --git a/src/tests/vm/mmap-over-code.ck b/src/tests/vm/mmap-over-code.ck
deleted file mode 100644
index b5b23c7..0000000
--- a/src/tests/vm/mmap-over-code.ck
+++ /dev/null
@@ -1,11 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(mmap-over-code) begin
-(mmap-over-code) open "sample.txt"
-(mmap-over-code) try to mmap over code segment
-(mmap-over-code) end
-EOF
-pass;
diff --git a/src/tests/vm/mmap-over-data.c b/src/tests/vm/mmap-over-data.c
deleted file mode 100644
index 9ea5d49..0000000
--- a/src/tests/vm/mmap-over-data.c
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Verifies that mapping over the data segment is disallowed. */
-
-#include <stdint.h>
-#include <round.h>
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-static char x;
-
-void
-test_main (void) 
-{
-  uintptr_t x_page = ROUND_DOWN ((uintptr_t) &x, 4096);
-  int handle;
-  
-  CHECK ((handle = open ("sample.txt")) > 1, "open \"sample.txt\"");
-  CHECK (mmap (handle, (void *) x_page) == MAP_FAILED,
-         "try to mmap over data segment");
-}
-
diff --git a/src/tests/vm/mmap-over-data.ck b/src/tests/vm/mmap-over-data.ck
deleted file mode 100644
index 98770cc..0000000
--- a/src/tests/vm/mmap-over-data.ck
+++ /dev/null
@@ -1,11 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(mmap-over-data) begin
-(mmap-over-data) open "sample.txt"
-(mmap-over-data) try to mmap over data segment
-(mmap-over-data) end
-EOF
-pass;
diff --git a/src/tests/vm/mmap-over-stk.c b/src/tests/vm/mmap-over-stk.c
deleted file mode 100644
index 4e241e8..0000000
--- a/src/tests/vm/mmap-over-stk.c
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Verifies that mapping over the stack segment is disallowed. */
-
-#include <stdint.h>
-#include <round.h>
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  int handle;
-  uintptr_t handle_page = ROUND_DOWN ((uintptr_t) &handle, 4096);
-  
-  CHECK ((handle = open ("sample.txt")) > 1, "open \"sample.txt\"");
-  CHECK (mmap (handle, (void *) handle_page) == MAP_FAILED,
-         "try to mmap over stack segment");
-}
-
diff --git a/src/tests/vm/mmap-over-stk.ck b/src/tests/vm/mmap-over-stk.ck
deleted file mode 100644
index e6880cf..0000000
--- a/src/tests/vm/mmap-over-stk.ck
+++ /dev/null
@@ -1,11 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(mmap-over-stk) begin
-(mmap-over-stk) open "sample.txt"
-(mmap-over-stk) try to mmap over stack segment
-(mmap-over-stk) end
-EOF
-pass;
diff --git a/src/tests/vm/mmap-overlap.c b/src/tests/vm/mmap-overlap.c
deleted file mode 100644
index 668ae5f..0000000
--- a/src/tests/vm/mmap-overlap.c
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Verifies that overlapping memory mappings are disallowed. */
-
-#include <syscall.h>
-#include "tests/vm/sample.inc"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void)
-{
-  char *start = (char *) 0x10000000;
-  int fd[2];
-
-  CHECK ((fd[0] = open ("zeros")) > 1, "open \"zeros\" once");
-  CHECK (mmap (fd[0], start) != MAP_FAILED, "mmap \"zeros\"");
-  CHECK ((fd[1] = open ("zeros")) > 1 && fd[0] != fd[1],
-         "open \"zeros\" again");
-  CHECK (mmap (fd[1], start + 4096) == MAP_FAILED,
-         "try to mmap \"zeros\" again");
-}
diff --git a/src/tests/vm/mmap-overlap.ck b/src/tests/vm/mmap-overlap.ck
deleted file mode 100644
index f13801e..0000000
--- a/src/tests/vm/mmap-overlap.ck
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(mmap-overlap) begin
-(mmap-overlap) open "zeros" once
-(mmap-overlap) mmap "zeros"
-(mmap-overlap) open "zeros" again
-(mmap-overlap) try to mmap "zeros" again
-(mmap-overlap) end
-EOF
-pass;
diff --git a/src/tests/vm/mmap-read.c b/src/tests/vm/mmap-read.c
deleted file mode 100644
index c0f23a1..0000000
--- a/src/tests/vm/mmap-read.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Uses a memory mapping to read a file. */
-
-#include <string.h>
-#include <syscall.h>
-#include "tests/vm/sample.inc"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void)
-{
-  char *actual = (char *) 0x10000000;
-  int handle;
-  mapid_t map;
-  size_t i;
-
-  CHECK ((handle = open ("sample.txt")) > 1, "open \"sample.txt\"");
-  CHECK ((map = mmap (handle, actual)) != MAP_FAILED, "mmap \"sample.txt\"");
-
-  /* Check that data is correct. */
-  if (memcmp (actual, sample, strlen (sample)))
-    fail ("read of mmap'd file reported bad data");
-
-  /* Verify that data is followed by zeros. */
-  for (i = strlen (sample); i < 4096; i++)
-    if (actual[i] != 0)
-      fail ("byte %zu of mmap'd region has value %02hhx (should be 0)",
-            i, actual[i]);
-
-  munmap (map);
-  close (handle);
-}
diff --git a/src/tests/vm/mmap-read.ck b/src/tests/vm/mmap-read.ck
deleted file mode 100644
index 95ab790..0000000
--- a/src/tests/vm/mmap-read.ck
+++ /dev/null
@@ -1,11 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(mmap-read) begin
-(mmap-read) open "sample.txt"
-(mmap-read) mmap "sample.txt"
-(mmap-read) end
-EOF
-pass;
diff --git a/src/tests/vm/mmap-remove.c b/src/tests/vm/mmap-remove.c
deleted file mode 100644
index 5f7444d..0000000
--- a/src/tests/vm/mmap-remove.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Deletes and closes file that is mapped into memory
-   and verifies that it can still be read through the mapping. */
-
-#include <string.h>
-#include <syscall.h>
-#include "tests/vm/sample.inc"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void)
-{
-  char *actual = (char *) 0x10000000;
-  int handle;
-  mapid_t map;
-  size_t i;
-
-  /* Map file. */
-  CHECK ((handle = open ("sample.txt")) > 1, "open \"sample.txt\"");
-  CHECK ((map = mmap (handle, actual)) != MAP_FAILED, "mmap \"sample.txt\"");
-
-  /* Close file and delete it. */
-  close (handle);
-  CHECK (remove ("sample.txt"), "remove \"sample.txt\"");
-  CHECK (open ("sample.txt") == -1, "try to open \"sample.txt\"");
-
-  /* Create a new file in hopes of overwriting data from the old
-     one, in case the file system has incorrectly freed the
-     file's data. */
-  CHECK (create ("another", 4096 * 10), "create \"another\"");
-
-  /* Check that mapped data is correct. */
-  if (memcmp (actual, sample, strlen (sample)))
-    fail ("read of mmap'd file reported bad data");
-
-  /* Verify that data is followed by zeros. */
-  for (i = strlen (sample); i < 4096; i++)
-    if (actual[i] != 0)
-      fail ("byte %zu of mmap'd region has value %02hhx (should be 0)",
-            i, actual[i]);
-
-  munmap (map);
-}
diff --git a/src/tests/vm/mmap-remove.ck b/src/tests/vm/mmap-remove.ck
deleted file mode 100644
index d3cc938..0000000
--- a/src/tests/vm/mmap-remove.ck
+++ /dev/null
@@ -1,14 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(mmap-remove) begin
-(mmap-remove) open "sample.txt"
-(mmap-remove) mmap "sample.txt"
-(mmap-remove) remove "sample.txt"
-(mmap-remove) try to open "sample.txt"
-(mmap-remove) create "another"
-(mmap-remove) end
-EOF
-pass;
diff --git a/src/tests/vm/mmap-shuffle.c b/src/tests/vm/mmap-shuffle.c
deleted file mode 100644
index 29921ad..0000000
--- a/src/tests/vm/mmap-shuffle.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Creates a 128 kB file and repeatedly shuffles data in it
-   through a memory mapping. */
-
-#include <stdio.h>
-#include <string.h>
-#include <syscall.h>
-#include "tests/arc4.h"
-#include "tests/cksum.h"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-#define SIZE (128 * 1024)
-
-static char *buf = (char *) 0x10000000;
-
-void
-test_main (void)
-{
-  size_t i;
-  int handle;
-
-  /* Create file, mmap. */
-  CHECK (create ("buffer", SIZE), "create \"buffer\"");
-  CHECK ((handle = open ("buffer")) > 1, "open \"buffer\"");
-  CHECK (mmap (handle, buf) != MAP_FAILED, "mmap \"buffer\"");
-
-  /* Initialize. */
-  for (i = 0; i < SIZE; i++)
-    buf[i] = i * 257;
-  msg ("init: cksum=%lu", cksum (buf, SIZE));
-    
-  /* Shuffle repeatedly. */
-  for (i = 0; i < 10; i++)
-    {
-      shuffle (buf, SIZE, 1);
-      msg ("shuffle %zu: cksum=%lu", i, cksum (buf, SIZE));
-    }
-}
diff --git a/src/tests/vm/mmap-shuffle.ck b/src/tests/vm/mmap-shuffle.ck
deleted file mode 100644
index c158301..0000000
--- a/src/tests/vm/mmap-shuffle.ck
+++ /dev/null
@@ -1,47 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-use tests::cksum;
-use tests::lib;
-
-my ($init, @shuffle);
-if (1) {
-    # Use precalculated values.
-    $init = 3115322833;
-    @shuffle = (1691062564, 1973575879, 1647619479, 96566261, 3885786467,
-		3022003332, 3614934266, 2704001777, 735775156, 1864109763);
-} else {
-    # Recalculate values.
-    my ($buf) = "";
-    for my $i (0...128 * 1024 - 1) {
-	$buf .= chr (($i * 257) & 0xff);
-    }
-    $init = cksum ($buf);
-
-    random_init (0);
-    for my $i (1...10) {
-	$buf = shuffle ($buf, length ($buf), 1);
-	push (@shuffle, cksum ($buf));
-    }
-}
-
-check_expected (IGNORE_EXIT_CODES => 1, [<<EOF]);
-(mmap-shuffle) begin
-(mmap-shuffle) create "buffer"
-(mmap-shuffle) open "buffer"
-(mmap-shuffle) mmap "buffer"
-(mmap-shuffle) init: cksum=$init
-(mmap-shuffle) shuffle 0: cksum=$shuffle[0]
-(mmap-shuffle) shuffle 1: cksum=$shuffle[1]
-(mmap-shuffle) shuffle 2: cksum=$shuffle[2]
-(mmap-shuffle) shuffle 3: cksum=$shuffle[3]
-(mmap-shuffle) shuffle 4: cksum=$shuffle[4]
-(mmap-shuffle) shuffle 5: cksum=$shuffle[5]
-(mmap-shuffle) shuffle 6: cksum=$shuffle[6]
-(mmap-shuffle) shuffle 7: cksum=$shuffle[7]
-(mmap-shuffle) shuffle 8: cksum=$shuffle[8]
-(mmap-shuffle) shuffle 9: cksum=$shuffle[9]
-(mmap-shuffle) end
-EOF
-pass;
diff --git a/src/tests/vm/mmap-twice.c b/src/tests/vm/mmap-twice.c
deleted file mode 100644
index d277a37..0000000
--- a/src/tests/vm/mmap-twice.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Maps the same file into memory twice and verifies that the
-   same data is readable in both. */
-
-#include <string.h>
-#include <syscall.h>
-#include "tests/vm/sample.inc"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void)
-{
-  char *actual[2] = {(char *) 0x10000000, (char *) 0x20000000};
-  size_t i;
-  int handle[2];
-
-  for (i = 0; i < 2; i++) 
-    {
-      CHECK ((handle[i] = open ("sample.txt")) > 1,
-             "open \"sample.txt\" #%zu", i);
-      CHECK (mmap (handle[i], actual[i]) != MAP_FAILED,
-             "mmap \"sample.txt\" #%zu at %p", i, (void *) actual[i]);
-    }
-
-  for (i = 0; i < 2; i++)
-    CHECK (!memcmp (actual[i], sample, strlen (sample)),
-           "compare mmap'd file %zu against data", i);
-}
diff --git a/src/tests/vm/mmap-twice.ck b/src/tests/vm/mmap-twice.ck
deleted file mode 100644
index 05e9724..0000000
--- a/src/tests/vm/mmap-twice.ck
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(mmap-twice) begin
-(mmap-twice) open "sample.txt" #0
-(mmap-twice) mmap "sample.txt" #0 at 0x10000000
-(mmap-twice) open "sample.txt" #1
-(mmap-twice) mmap "sample.txt" #1 at 0x20000000
-(mmap-twice) compare mmap'd file 0 against data
-(mmap-twice) compare mmap'd file 1 against data
-(mmap-twice) end
-EOF
-pass;
diff --git a/src/tests/vm/mmap-unmap.c b/src/tests/vm/mmap-unmap.c
deleted file mode 100644
index d35a79e..0000000
--- a/src/tests/vm/mmap-unmap.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Maps and unmaps a file and verifies that the mapped region is
-   inaccessible afterward. */
-
-#include <syscall.h>
-#include "tests/vm/sample.inc"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-#define ACTUAL ((void *) 0x10000000)
-
-void
-test_main (void)
-{
-  int handle;
-  mapid_t map;
-
-  CHECK ((handle = open ("sample.txt")) > 1, "open \"sample.txt\"");
-  CHECK ((map = mmap (handle, ACTUAL)) != MAP_FAILED, "mmap \"sample.txt\"");
-
-  munmap (map);
-
-  fail ("unmapped memory is readable (%d)", *(int *) ACTUAL);
-}
diff --git a/src/tests/vm/mmap-unmap.ck b/src/tests/vm/mmap-unmap.ck
deleted file mode 100644
index 119658c..0000000
--- a/src/tests/vm/mmap-unmap.ck
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-use tests::vm::process_death;
-
-check_process_death ('mmap-unmap');
diff --git a/src/tests/vm/mmap-write.c b/src/tests/vm/mmap-write.c
deleted file mode 100644
index 46e8043..0000000
--- a/src/tests/vm/mmap-write.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Writes to a file through a mapping, and unmaps the file,
-   then reads the data in the file back using the read system
-   call to verify. */
-
-#include <string.h>
-#include <syscall.h>
-#include "tests/vm/sample.inc"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-#define ACTUAL ((void *) 0x10000000)
-
-void
-test_main (void)
-{
-  int handle;
-  mapid_t map;
-  char buf[1024];
-
-  /* Write file via mmap. */
-  CHECK (create ("sample.txt", strlen (sample)), "create \"sample.txt\"");
-  CHECK ((handle = open ("sample.txt")) > 1, "open \"sample.txt\"");
-  CHECK ((map = mmap (handle, ACTUAL)) != MAP_FAILED, "mmap \"sample.txt\"");
-  memcpy (ACTUAL, sample, strlen (sample));
-  munmap (map);
-
-  /* Read back via read(). */
-  read (handle, buf, strlen (sample));
-  CHECK (!memcmp (buf, sample, strlen (sample)),
-         "compare read data against written data");
-  close (handle);
-}
diff --git a/src/tests/vm/mmap-write.ck b/src/tests/vm/mmap-write.ck
deleted file mode 100644
index d2c9cc5..0000000
--- a/src/tests/vm/mmap-write.ck
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(mmap-write) begin
-(mmap-write) create "sample.txt"
-(mmap-write) open "sample.txt"
-(mmap-write) mmap "sample.txt"
-(mmap-write) compare read data against written data
-(mmap-write) end
-EOF
-pass;
diff --git a/src/tests/vm/mmap-zero.c b/src/tests/vm/mmap-zero.c
deleted file mode 100644
index 368b759..0000000
--- a/src/tests/vm/mmap-zero.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Tries to map a zero-length file, which may or may not work but
-   should not terminate the process or crash.
-   Then dereferences the address that we tried to map,
-   and the process must be terminated with -1 exit code. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void) 
-{
-  char *data = (char *) 0x7f000000;
-  int handle;
-
-  CHECK (create ("empty", 0), "create empty file \"empty\"");
-  CHECK ((handle = open ("empty")) > 1, "open \"empty\"");
-
-  /* Calling mmap() might succeed or fail.  We don't care. */
-  msg ("mmap \"empty\"");
-  mmap (handle, data);
-
-  /* Regardless of whether the call worked, *data should cause
-     the process to be terminated. */
-  fail ("unmapped memory is readable (%d)", *data);
-}
-
diff --git a/src/tests/vm/mmap-zero.ck b/src/tests/vm/mmap-zero.ck
deleted file mode 100644
index 0130fbd..0000000
--- a/src/tests/vm/mmap-zero.ck
+++ /dev/null
@@ -1,12 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(mmap-zero) begin
-(mmap-zero) create empty file "empty"
-(mmap-zero) open "empty"
-(mmap-zero) mmap "empty"
-mmap-zero: exit(-1)
-EOF
-pass;
diff --git a/src/tests/vm/page-linear.c b/src/tests/vm/page-linear.c
deleted file mode 100644
index 652a47b..0000000
--- a/src/tests/vm/page-linear.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Encrypts, then decrypts, 2 MB of memory and verifies that the
-   values are as they should be. */
-
-#include <string.h>
-#include "tests/arc4.h"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-#define SIZE (2 * 1024 * 1024)
-
-static char buf[SIZE];
-
-void
-test_main (void)
-{
-  struct arc4 arc4;
-  size_t i;
-
-  /* Initialize to 0x5a. */
-  msg ("initialize");
-  memset (buf, 0x5a, sizeof buf);
-
-  /* Check that it's all 0x5a. */
-  msg ("read pass");
-  for (i = 0; i < SIZE; i++)
-    if (buf[i] != 0x5a)
-      fail ("byte %zu != 0x5a", i);
-
-  /* Encrypt zeros. */
-  msg ("read/modify/write pass one");
-  arc4_init (&arc4, "foobar", 6);
-  arc4_crypt (&arc4, buf, SIZE);
-
-  /* Decrypt back to zeros. */
-  msg ("read/modify/write pass two");
-  arc4_init (&arc4, "foobar", 6);
-  arc4_crypt (&arc4, buf, SIZE);
-
-  /* Check that it's all 0x5a. */
-  msg ("read pass");
-  for (i = 0; i < SIZE; i++)
-    if (buf[i] != 0x5a)
-      fail ("byte %zu != 0x5a", i);
-}
diff --git a/src/tests/vm/page-linear.ck b/src/tests/vm/page-linear.ck
deleted file mode 100644
index dcbc884..0000000
--- a/src/tests/vm/page-linear.ck
+++ /dev/null
@@ -1,14 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(page-linear) begin
-(page-linear) initialize
-(page-linear) read pass
-(page-linear) read/modify/write pass one
-(page-linear) read/modify/write pass two
-(page-linear) read pass
-(page-linear) end
-EOF
-pass;
diff --git a/src/tests/vm/page-merge-mm.c b/src/tests/vm/page-merge-mm.c
deleted file mode 100644
index 908c71c..0000000
--- a/src/tests/vm/page-merge-mm.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#include "tests/main.h"
-#include "tests/vm/parallel-merge.h"
-
-void
-test_main (void) 
-{
-  parallel_merge ("child-qsort-mm", 80);
-}
diff --git a/src/tests/vm/page-merge-mm.ck b/src/tests/vm/page-merge-mm.ck
deleted file mode 100644
index 74fa980..0000000
--- a/src/tests/vm/page-merge-mm.ck
+++ /dev/null
@@ -1,29 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(page-merge-mm) begin
-(page-merge-mm) init
-(page-merge-mm) sort chunk 0
-(page-merge-mm) sort chunk 1
-(page-merge-mm) sort chunk 2
-(page-merge-mm) sort chunk 3
-(page-merge-mm) sort chunk 4
-(page-merge-mm) sort chunk 5
-(page-merge-mm) sort chunk 6
-(page-merge-mm) sort chunk 7
-(page-merge-mm) wait for child 0
-(page-merge-mm) wait for child 1
-(page-merge-mm) wait for child 2
-(page-merge-mm) wait for child 3
-(page-merge-mm) wait for child 4
-(page-merge-mm) wait for child 5
-(page-merge-mm) wait for child 6
-(page-merge-mm) wait for child 7
-(page-merge-mm) merge
-(page-merge-mm) verify
-(page-merge-mm) success, buf_idx=1,048,576
-(page-merge-mm) end
-EOF
-pass;
diff --git a/src/tests/vm/page-merge-par.c b/src/tests/vm/page-merge-par.c
deleted file mode 100644
index e7e1609..0000000
--- a/src/tests/vm/page-merge-par.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#include "tests/main.h"
-#include "tests/vm/parallel-merge.h"
-
-void
-test_main (void) 
-{
-  parallel_merge ("child-sort", 123);
-}
diff --git a/src/tests/vm/page-merge-par.ck b/src/tests/vm/page-merge-par.ck
deleted file mode 100644
index 31f8aa7..0000000
--- a/src/tests/vm/page-merge-par.ck
+++ /dev/null
@@ -1,29 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(page-merge-par) begin
-(page-merge-par) init
-(page-merge-par) sort chunk 0
-(page-merge-par) sort chunk 1
-(page-merge-par) sort chunk 2
-(page-merge-par) sort chunk 3
-(page-merge-par) sort chunk 4
-(page-merge-par) sort chunk 5
-(page-merge-par) sort chunk 6
-(page-merge-par) sort chunk 7
-(page-merge-par) wait for child 0
-(page-merge-par) wait for child 1
-(page-merge-par) wait for child 2
-(page-merge-par) wait for child 3
-(page-merge-par) wait for child 4
-(page-merge-par) wait for child 5
-(page-merge-par) wait for child 6
-(page-merge-par) wait for child 7
-(page-merge-par) merge
-(page-merge-par) verify
-(page-merge-par) success, buf_idx=1,048,576
-(page-merge-par) end
-EOF
-pass;
diff --git a/src/tests/vm/page-merge-seq.c b/src/tests/vm/page-merge-seq.c
deleted file mode 100644
index 12e3880..0000000
--- a/src/tests/vm/page-merge-seq.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/* Generates about 1 MB of random data that is then divided into
-   16 chunks.  A separate subprocess sorts each chunk in
-   sequence.  Then we merge the chunks and verify that the result
-   is what it should be. */
-
-#include <syscall.h>
-#include "tests/arc4.h"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-/* This is the max file size for an older version of the Pintos
-   file system that had 126 direct blocks each pointing to a
-   single disk sector.  We could raise it now. */
-#define CHUNK_SIZE (126 * 512)
-#define CHUNK_CNT 16                            /* Number of chunks. */
-#define DATA_SIZE (CHUNK_CNT * CHUNK_SIZE)      /* Buffer size. */
-
-unsigned char buf1[DATA_SIZE], buf2[DATA_SIZE];
-size_t histogram[256];
-
-/* Initialize buf1 with random data,
-   then count the number of instances of each value within it. */
-static void
-init (void) 
-{
-  struct arc4 arc4;
-  size_t i;
-
-  msg ("init");
-
-  arc4_init (&arc4, "foobar", 6);
-  arc4_crypt (&arc4, buf1, sizeof buf1);
-  for (i = 0; i < sizeof buf1; i++)
-    histogram[buf1[i]]++;
-}
-
-/* Sort each chunk of buf1 using a subprocess. */
-static void
-sort_chunks (void)
-{
-  size_t i;
-
-  create ("buffer", CHUNK_SIZE);
-  for (i = 0; i < CHUNK_CNT; i++) 
-    {
-      pid_t child;
-      int handle;
-
-      msg ("sort chunk %zu", i);
-
-      /* Write this chunk to a file. */
-      quiet = true;
-      CHECK ((handle = open ("buffer")) > 1, "open \"buffer\"");
-      write (handle, buf1 + CHUNK_SIZE * i, CHUNK_SIZE);
-      close (handle);
-
-      /* Sort with subprocess. */
-      CHECK ((child = exec ("child-sort buffer")) != -1,
-             "exec \"child-sort buffer\"");
-      CHECK (wait (child) == 123, "wait for child-sort");
-
-      /* Read chunk back from file. */
-      CHECK ((handle = open ("buffer")) > 1, "open \"buffer\"");
-      read (handle, buf1 + CHUNK_SIZE * i, CHUNK_SIZE);
-      close (handle);
-
-      quiet = false;
-    }
-}
-
-/* Merge the sorted chunks in buf1 into a fully sorted buf2. */
-static void
-merge (void) 
-{
-  unsigned char *mp[CHUNK_CNT];
-  size_t mp_left;
-  unsigned char *op;
-  size_t i;
-
-  msg ("merge");
-
-  /* Initialize merge pointers. */
-  mp_left = CHUNK_CNT;
-  for (i = 0; i < CHUNK_CNT; i++)
-    mp[i] = buf1 + CHUNK_SIZE * i;
-
-  /* Merge. */
-  op = buf2;
-  while (mp_left > 0) 
-    {
-      /* Find smallest value. */
-      size_t min = 0;
-      for (i = 1; i < mp_left; i++)
-        if (*mp[i] < *mp[min])
-          min = i;
-
-      /* Append value to buf2. */
-      *op++ = *mp[min];
-
-      /* Advance merge pointer.
-         Delete this chunk from the set if it's emptied. */ 
-      if ((++mp[min] - buf1) % CHUNK_SIZE == 0)
-        mp[min] = mp[--mp_left]; 
-    }
-}
-
-static void
-verify (void) 
-{
-  size_t buf_idx;
-  size_t hist_idx;
-
-  msg ("verify");
-
-  buf_idx = 0;
-  for (hist_idx = 0; hist_idx < sizeof histogram / sizeof *histogram;
-       hist_idx++)
-    {
-      while (histogram[hist_idx]-- > 0) 
-        {
-          if (buf2[buf_idx] != hist_idx)
-            fail ("bad value %d in byte %zu", buf2[buf_idx], buf_idx);
-          buf_idx++;
-        } 
-    }
-
-  msg ("success, buf_idx=%'zu", buf_idx);
-}
-
-void
-test_main (void)
-{
-  init ();
-  sort_chunks ();
-  merge ();
-  verify ();
-}
diff --git a/src/tests/vm/page-merge-seq.ck b/src/tests/vm/page-merge-seq.ck
deleted file mode 100644
index d78f69d..0000000
--- a/src/tests/vm/page-merge-seq.ck
+++ /dev/null
@@ -1,29 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(page-merge-seq) begin
-(page-merge-seq) init
-(page-merge-seq) sort chunk 0
-(page-merge-seq) sort chunk 1
-(page-merge-seq) sort chunk 2
-(page-merge-seq) sort chunk 3
-(page-merge-seq) sort chunk 4
-(page-merge-seq) sort chunk 5
-(page-merge-seq) sort chunk 6
-(page-merge-seq) sort chunk 7
-(page-merge-seq) sort chunk 8
-(page-merge-seq) sort chunk 9
-(page-merge-seq) sort chunk 10
-(page-merge-seq) sort chunk 11
-(page-merge-seq) sort chunk 12
-(page-merge-seq) sort chunk 13
-(page-merge-seq) sort chunk 14
-(page-merge-seq) sort chunk 15
-(page-merge-seq) merge
-(page-merge-seq) verify
-(page-merge-seq) success, buf_idx=1,032,192
-(page-merge-seq) end
-EOF
-pass;
diff --git a/src/tests/vm/page-merge-stk.c b/src/tests/vm/page-merge-stk.c
deleted file mode 100644
index 5eb1069..0000000
--- a/src/tests/vm/page-merge-stk.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#include "tests/main.h"
-#include "tests/vm/parallel-merge.h"
-
-void
-test_main (void) 
-{
-  parallel_merge ("child-qsort", 72);
-}
diff --git a/src/tests/vm/page-merge-stk.ck b/src/tests/vm/page-merge-stk.ck
deleted file mode 100644
index c5bc1ae..0000000
--- a/src/tests/vm/page-merge-stk.ck
+++ /dev/null
@@ -1,29 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(page-merge-stk) begin
-(page-merge-stk) init
-(page-merge-stk) sort chunk 0
-(page-merge-stk) sort chunk 1
-(page-merge-stk) sort chunk 2
-(page-merge-stk) sort chunk 3
-(page-merge-stk) sort chunk 4
-(page-merge-stk) sort chunk 5
-(page-merge-stk) sort chunk 6
-(page-merge-stk) sort chunk 7
-(page-merge-stk) wait for child 0
-(page-merge-stk) wait for child 1
-(page-merge-stk) wait for child 2
-(page-merge-stk) wait for child 3
-(page-merge-stk) wait for child 4
-(page-merge-stk) wait for child 5
-(page-merge-stk) wait for child 6
-(page-merge-stk) wait for child 7
-(page-merge-stk) merge
-(page-merge-stk) verify
-(page-merge-stk) success, buf_idx=1,048,576
-(page-merge-stk) end
-EOF
-pass;
diff --git a/src/tests/vm/page-parallel.c b/src/tests/vm/page-parallel.c
deleted file mode 100644
index 9d619e0..0000000
--- a/src/tests/vm/page-parallel.c
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Runs 4 child-linear processes at once. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-#define CHILD_CNT 4
-
-void
-test_main (void)
-{
-  pid_t children[CHILD_CNT];
-  int i;
-
-  for (i = 0; i < CHILD_CNT; i++) 
-    CHECK ((children[i] = exec ("child-linear")) != -1,
-           "exec \"child-linear\"");
-
-  for (i = 0; i < CHILD_CNT; i++) 
-    CHECK (wait (children[i]) == 0x42, "wait for child %d", i);
-}
diff --git a/src/tests/vm/page-parallel.ck b/src/tests/vm/page-parallel.ck
deleted file mode 100644
index 90c14ef..0000000
--- a/src/tests/vm/page-parallel.ck
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(page-parallel) begin
-(page-parallel) exec "child-linear"
-(page-parallel) exec "child-linear"
-(page-parallel) exec "child-linear"
-(page-parallel) exec "child-linear"
-(page-parallel) wait for child 0
-(page-parallel) wait for child 1
-(page-parallel) wait for child 2
-(page-parallel) wait for child 3
-(page-parallel) end
-EOF
-pass;
diff --git a/src/tests/vm/page-shuffle.c b/src/tests/vm/page-shuffle.c
deleted file mode 100644
index 095a9da..0000000
--- a/src/tests/vm/page-shuffle.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Shuffles a 128 kB data buffer 10 times, printing the checksum
-   after each time. */
-
-#include <stdbool.h>
-#include "tests/arc4.h"
-#include "tests/cksum.h"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-#define SIZE (128 * 1024)
-
-static char buf[SIZE];
-
-void
-test_main (void)
-{
-  size_t i;
-
-  /* Initialize. */
-  for (i = 0; i < sizeof buf; i++)
-    buf[i] = i * 257;
-  msg ("init: cksum=%lu", cksum (buf, sizeof buf));
-    
-  /* Shuffle repeatedly. */
-  for (i = 0; i < 10; i++)
-    {
-      shuffle (buf, sizeof buf, 1);
-      msg ("shuffle %zu: cksum=%lu", i, cksum (buf, sizeof buf));
-    }
-}
diff --git a/src/tests/vm/page-shuffle.ck b/src/tests/vm/page-shuffle.ck
deleted file mode 100644
index 6447d38..0000000
--- a/src/tests/vm/page-shuffle.ck
+++ /dev/null
@@ -1,44 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-use tests::cksum;
-use tests::lib;
-
-my ($init, @shuffle);
-if (1) {
-    # Use precalculated values.
-    $init = 3115322833;
-    @shuffle = (1691062564, 1973575879, 1647619479, 96566261, 3885786467,
-		3022003332, 3614934266, 2704001777, 735775156, 1864109763);
-} else {
-    # Recalculate values.
-    my ($buf) = "";
-    for my $i (0...128 * 1024 - 1) {
-	$buf .= chr (($i * 257) & 0xff);
-    }
-    $init = cksum ($buf);
-
-    random_init (0);
-    for my $i (1...10) {
-	$buf = shuffle ($buf, length ($buf), 1);
-	push (@shuffle, cksum ($buf));
-    }
-}
-
-check_expected (IGNORE_EXIT_CODES => 1, [<<EOF]);
-(page-shuffle) begin
-(page-shuffle) init: cksum=$init
-(page-shuffle) shuffle 0: cksum=$shuffle[0]
-(page-shuffle) shuffle 1: cksum=$shuffle[1]
-(page-shuffle) shuffle 2: cksum=$shuffle[2]
-(page-shuffle) shuffle 3: cksum=$shuffle[3]
-(page-shuffle) shuffle 4: cksum=$shuffle[4]
-(page-shuffle) shuffle 5: cksum=$shuffle[5]
-(page-shuffle) shuffle 6: cksum=$shuffle[6]
-(page-shuffle) shuffle 7: cksum=$shuffle[7]
-(page-shuffle) shuffle 8: cksum=$shuffle[8]
-(page-shuffle) shuffle 9: cksum=$shuffle[9]
-(page-shuffle) end
-EOF
-pass;
diff --git a/src/tests/vm/parallel-merge.c b/src/tests/vm/parallel-merge.c
deleted file mode 100644
index cc09bb1..0000000
--- a/src/tests/vm/parallel-merge.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/* Generates about 1 MB of random data that is then divided into
-   16 chunks.  A separate subprocess sorts each chunk; the
-   subprocesses run in parallel.  Then we merge the chunks and
-   verify that the result is what it should be. */
-
-#include "tests/vm/parallel-merge.h"
-#include <stdio.h>
-#include <syscall.h>
-#include "tests/arc4.h"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-#define CHUNK_SIZE (128 * 1024)
-#define CHUNK_CNT 8                             /* Number of chunks. */
-#define DATA_SIZE (CHUNK_CNT * CHUNK_SIZE)      /* Buffer size. */
-
-unsigned char buf1[DATA_SIZE], buf2[DATA_SIZE];
-size_t histogram[256];
-
-/* Initialize buf1 with random data,
-   then count the number of instances of each value within it. */
-static void
-init (void) 
-{
-  struct arc4 arc4;
-  size_t i;
-
-  msg ("init");
-
-  arc4_init (&arc4, "foobar", 6);
-  arc4_crypt (&arc4, buf1, sizeof buf1);
-  for (i = 0; i < sizeof buf1; i++)
-    histogram[buf1[i]]++;
-}
-
-/* Sort each chunk of buf1 using SUBPROCESS,
-   which is expected to return EXIT_STATUS. */
-static void
-sort_chunks (const char *subprocess, int exit_status)
-{
-  pid_t children[CHUNK_CNT];
-  size_t i;
-
-  for (i = 0; i < CHUNK_CNT; i++) 
-    {
-      char fn[128];
-      char cmd[128];
-      int handle;
-
-      msg ("sort chunk %zu", i);
-
-      /* Write this chunk to a file. */
-      snprintf (fn, sizeof fn, "buf%zu", i);
-      create (fn, CHUNK_SIZE);
-      quiet = true;
-      CHECK ((handle = open (fn)) > 1, "open \"%s\"", fn);
-      write (handle, buf1 + CHUNK_SIZE * i, CHUNK_SIZE);
-      close (handle);
-
-      /* Sort with subprocess. */
-      snprintf (cmd, sizeof cmd, "%s %s", subprocess, fn);
-      CHECK ((children[i] = exec (cmd)) != -1, "exec \"%s\"", cmd);
-      quiet = false;
-    }
-
-  for (i = 0; i < CHUNK_CNT; i++) 
-    {
-      char fn[128];
-      int handle;
-
-      CHECK (wait (children[i]) == exit_status, "wait for child %zu", i);
-
-      /* Read chunk back from file. */
-      quiet = true;
-      snprintf (fn, sizeof fn, "buf%zu", i);
-      CHECK ((handle = open (fn)) > 1, "open \"%s\"", fn);
-      read (handle, buf1 + CHUNK_SIZE * i, CHUNK_SIZE);
-      close (handle);
-      quiet = false;
-    }
-}
-
-/* Merge the sorted chunks in buf1 into a fully sorted buf2. */
-static void
-merge (void) 
-{
-  unsigned char *mp[CHUNK_CNT];
-  size_t mp_left;
-  unsigned char *op;
-  size_t i;
-
-  msg ("merge");
-
-  /* Initialize merge pointers. */
-  mp_left = CHUNK_CNT;
-  for (i = 0; i < CHUNK_CNT; i++)
-    mp[i] = buf1 + CHUNK_SIZE * i;
-
-  /* Merge. */
-  op = buf2;
-  while (mp_left > 0) 
-    {
-      /* Find smallest value. */
-      size_t min = 0;
-      for (i = 1; i < mp_left; i++)
-        if (*mp[i] < *mp[min])
-          min = i;
-
-      /* Append value to buf2. */
-      *op++ = *mp[min];
-
-      /* Advance merge pointer.
-         Delete this chunk from the set if it's emptied. */
-      if ((++mp[min] - buf1) % CHUNK_SIZE == 0) 
-        mp[min] = mp[--mp_left];
-    }
-}
-
-static void
-verify (void) 
-{
-  size_t buf_idx;
-  size_t hist_idx;
-
-  msg ("verify");
-
-  buf_idx = 0;
-  for (hist_idx = 0; hist_idx < sizeof histogram / sizeof *histogram;
-       hist_idx++)
-    {
-      while (histogram[hist_idx]-- > 0) 
-        {
-          if (buf2[buf_idx] != hist_idx)
-            fail ("bad value %d in byte %zu", buf2[buf_idx], buf_idx);
-          buf_idx++;
-        } 
-    }
-
-  msg ("success, buf_idx=%'zu", buf_idx);
-}
-
-void
-parallel_merge (const char *child_name, int exit_status)
-{
-  init ();
-  sort_chunks (child_name, exit_status);
-  merge ();
-  verify ();
-}
diff --git a/src/tests/vm/parallel-merge.h b/src/tests/vm/parallel-merge.h
deleted file mode 100644
index a6b6431..0000000
--- a/src/tests/vm/parallel-merge.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef TESTS_VM_PARALLEL_MERGE
-#define TESTS_VM_PARALLEL_MERGE 1
-
-void parallel_merge (const char *child_name, int exit_status);
-
-#endif /* tests/vm/parallel-merge.h */
diff --git a/src/tests/vm/process_death.pm b/src/tests/vm/process_death.pm
deleted file mode 100644
index 52039a1..0000000
--- a/src/tests/vm/process_death.pm
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-
-sub check_process_death {
-    my ($proc_name) = @_;
-    our ($test);
-    my (@output) = read_text_file ("$test.output");
-
-    common_checks ("run", @output);
-    @output = get_core_output ("run", @output);
-    fail "First line of output is not `($proc_name) begin' message.\n"
-      if $output[0] ne "($proc_name) begin";
-    fail "Output missing '$proc_name: exit(-1)' message.\n"
-      if !grep ("$proc_name: exit(-1)" eq $_, @output);
-    fail "Output contains '($proc_name) end' message.\n"
-      if grep (/\($proc_name\) end/, @output);
-    pass;
-}
-
-1;
diff --git a/src/tests/vm/pt-bad-addr.c b/src/tests/vm/pt-bad-addr.c
deleted file mode 100644
index 3ca4084..0000000
--- a/src/tests/vm/pt-bad-addr.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Accesses a bad address.
-   The process must be terminated with -1 exit code. */
-
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void)
-{
-  fail ("bad addr read as %d", *(int *) 0x04000000);
-}
diff --git a/src/tests/vm/pt-bad-addr.ck b/src/tests/vm/pt-bad-addr.ck
deleted file mode 100644
index 09ea039..0000000
--- a/src/tests/vm/pt-bad-addr.ck
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-use tests::vm::process_death;
-
-check_process_death ('pt-bad-addr');
diff --git a/src/tests/vm/pt-bad-read.c b/src/tests/vm/pt-bad-read.c
deleted file mode 100644
index ee791ff..0000000
--- a/src/tests/vm/pt-bad-read.c
+++ /dev/null
@@ -1,16 +0,0 @@
-/* Reads from a file into a bad address.
-   The process must be terminated with -1 exit code. */
-
-#include <syscall.h>
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void)
-{
-  int handle;
-
-  CHECK ((handle = open ("sample.txt")) > 1, "open \"sample.txt\"");
-  read (handle, (char *) &handle - 4096, 1);
-  fail ("survived reading data into bad address");
-}
diff --git a/src/tests/vm/pt-bad-read.ck b/src/tests/vm/pt-bad-read.ck
deleted file mode 100644
index 1f96bb4..0000000
--- a/src/tests/vm/pt-bad-read.ck
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(pt-bad-read) begin
-(pt-bad-read) open "sample.txt"
-pt-bad-read: exit(-1)
-EOF
-pass;
diff --git a/src/tests/vm/pt-big-stk-obj.c b/src/tests/vm/pt-big-stk-obj.c
deleted file mode 100644
index 6b630ec..0000000
--- a/src/tests/vm/pt-big-stk-obj.c
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Allocates and writes to a 64 kB object on the stack.
-   This must succeed. */
-
-#include <string.h>
-#include "tests/arc4.h"
-#include "tests/cksum.h"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void)
-{
-  char stk_obj[65536];
-  struct arc4 arc4;
-
-  arc4_init (&arc4, "foobar", 6);
-  memset (stk_obj, 0, sizeof stk_obj);
-  arc4_crypt (&arc4, stk_obj, sizeof stk_obj);
-  msg ("cksum: %lu", cksum (stk_obj, sizeof stk_obj));
-}
diff --git a/src/tests/vm/pt-big-stk-obj.ck b/src/tests/vm/pt-big-stk-obj.ck
deleted file mode 100644
index eb5853a..0000000
--- a/src/tests/vm/pt-big-stk-obj.ck
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(pt-big-stk-obj) begin
-(pt-big-stk-obj) cksum: 3256410166
-(pt-big-stk-obj) end
-EOF
-pass;
diff --git a/src/tests/vm/pt-grow-bad.c b/src/tests/vm/pt-grow-bad.c
deleted file mode 100644
index d4beba2..0000000
--- a/src/tests/vm/pt-grow-bad.c
+++ /dev/null
@@ -1,14 +0,0 @@
-/* Read from an address 4,096 bytes below the stack pointer.
-   The process must be terminated with -1 exit code. */
-
-#include <string.h>
-#include "tests/arc4.h"
-#include "tests/cksum.h"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void)
-{
-  asm volatile ("movl -4096(%esp), %eax");
-}
diff --git a/src/tests/vm/pt-grow-bad.ck b/src/tests/vm/pt-grow-bad.ck
deleted file mode 100644
index 4c0ab8a..0000000
--- a/src/tests/vm/pt-grow-bad.ck
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_USER_FAULTS => 1, [<<'EOF']);
-(pt-grow-bad) begin
-pt-grow-bad: exit(-1)
-EOF
-pass;
diff --git a/src/tests/vm/pt-grow-pusha.c b/src/tests/vm/pt-grow-pusha.c
deleted file mode 100644
index f9762a5..0000000
--- a/src/tests/vm/pt-grow-pusha.c
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Expand the stack by 32 bytes all at once using the PUSHA
-   instruction.
-   This must succeed. */
-
-#include <string.h>
-#include "tests/arc4.h"
-#include "tests/cksum.h"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void)
-{
-  asm volatile
-    ("movl %%esp, %%eax;"        /* Save a copy of the stack pointer. */
-     "andl $0xfffff000, %%esp;"  /* Move stack pointer to bottom of page. */
-     "pushal;"                   /* Push 32 bytes on stack at once. */
-     "movl %%eax, %%esp"         /* Restore copied stack pointer. */
-     : : : "eax");               /* Tell GCC we destroyed eax. */
-}
diff --git a/src/tests/vm/pt-grow-pusha.ck b/src/tests/vm/pt-grow-pusha.ck
deleted file mode 100644
index 5000966..0000000
--- a/src/tests/vm/pt-grow-pusha.ck
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(pt-grow-pusha) begin
-(pt-grow-pusha) end
-EOF
-pass;
diff --git a/src/tests/vm/pt-grow-stack.c b/src/tests/vm/pt-grow-stack.c
deleted file mode 100644
index 0997a00..0000000
--- a/src/tests/vm/pt-grow-stack.c
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Demonstrate that the stack can grow.
-   This must succeed. */
-
-#include <string.h>
-#include "tests/arc4.h"
-#include "tests/cksum.h"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void)
-{
-  char stack_obj[4096];
-  struct arc4 arc4;
-
-  arc4_init (&arc4, "foobar", 6);
-  memset (stack_obj, 0, sizeof stack_obj);
-  arc4_crypt (&arc4, stack_obj, sizeof stack_obj);
-  msg ("cksum: %lu", cksum (stack_obj, sizeof stack_obj));
-}
diff --git a/src/tests/vm/pt-grow-stack.ck b/src/tests/vm/pt-grow-stack.ck
deleted file mode 100644
index 1e669db..0000000
--- a/src/tests/vm/pt-grow-stack.ck
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(pt-grow-stack) begin
-(pt-grow-stack) cksum: 3424492700
-(pt-grow-stack) end
-EOF
-pass;
diff --git a/src/tests/vm/pt-grow-stk-sc.c b/src/tests/vm/pt-grow-stk-sc.c
deleted file mode 100644
index 3efbb5f..0000000
--- a/src/tests/vm/pt-grow-stk-sc.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* This test checks that the stack is properly extended even if
-   the first access to a stack location occurs inside a system
-   call.
-
-   From Godmar Back. */
-
-#include <string.h>
-#include <syscall.h>
-#include "tests/vm/sample.inc"
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void)
-{
-  int handle;
-  int slen = strlen (sample);
-  char buf2[65536];
-
-  /* Write file via write(). */
-  CHECK (create ("sample.txt", slen), "create \"sample.txt\"");
-  CHECK ((handle = open ("sample.txt")) > 1, "open \"sample.txt\"");
-  CHECK (write (handle, sample, slen) == slen, "write \"sample.txt\"");
-  close (handle);
-
-  /* Read back via read(). */
-  CHECK ((handle = open ("sample.txt")) > 1, "2nd open \"sample.txt\"");
-  CHECK (read (handle, buf2 + 32768, slen) == slen, "read \"sample.txt\"");
-
-  CHECK (!memcmp (sample, buf2 + 32768, slen), "compare written data against read data");
-  close (handle);
-}
diff --git a/src/tests/vm/pt-grow-stk-sc.ck b/src/tests/vm/pt-grow-stk-sc.ck
deleted file mode 100644
index 23d3b02..0000000
--- a/src/tests/vm/pt-grow-stk-sc.ck
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']);
-(pt-grow-stk-sc) begin
-(pt-grow-stk-sc) create "sample.txt"
-(pt-grow-stk-sc) open "sample.txt"
-(pt-grow-stk-sc) write "sample.txt"
-(pt-grow-stk-sc) 2nd open "sample.txt"
-(pt-grow-stk-sc) read "sample.txt"
-(pt-grow-stk-sc) compare written data against read data
-(pt-grow-stk-sc) end
-EOF
-pass;
diff --git a/src/tests/vm/pt-write-code-2.c b/src/tests/vm/pt-write-code-2.c
deleted file mode 100644
index 83bcc2c..0000000
--- a/src/tests/vm/pt-write-code-2.c
+++ /dev/null
@@ -1,15 +0,0 @@
-/* Try to write to the code segment using a system call.
-   The process must be terminated with -1 exit code. */
-
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void)
-{
-  int handle;
-
-  CHECK ((handle = open ("sample.txt")) > 1, "open \"sample.txt\"");
-  read (handle, (void *) test_main, 1);
-  fail ("survived reading data into code segment");
-}
diff --git a/src/tests/vm/pt-write-code.c b/src/tests/vm/pt-write-code.c
deleted file mode 100644
index 5072cec..0000000
--- a/src/tests/vm/pt-write-code.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Try to write to the code segment.
-   The process must be terminated with -1 exit code. */
-
-#include "tests/lib.h"
-#include "tests/main.h"
-
-void
-test_main (void)
-{
-  *(int *) test_main = 0;
-  fail ("writing the code segment succeeded");
-}
diff --git a/src/tests/vm/pt-write-code.ck b/src/tests/vm/pt-write-code.ck
deleted file mode 100644
index 65610fb..0000000
--- a/src/tests/vm/pt-write-code.ck
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-use tests::vm::process_death;
-
-check_process_death ('pt-write-code');
diff --git a/src/tests/vm/pt-write-code2.ck b/src/tests/vm/pt-write-code2.ck
deleted file mode 100644
index 69ffc77..0000000
--- a/src/tests/vm/pt-write-code2.ck
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use tests::tests;
-check_expected ([<<'EOF']);
-(pt-write-code2) begin
-(pt-write-code2) open "sample.txt"
-pt-write-code2: exit(-1)
-EOF
-pass;
diff --git a/src/tests/vm/qsort.c b/src/tests/vm/qsort.c
deleted file mode 100644
index 922572c..0000000
--- a/src/tests/vm/qsort.c
+++ /dev/null
@@ -1,136 +0,0 @@
-#include "tests/vm/qsort.h"
-#include <stdbool.h>
-#include <debug.h>
-#include <random.h>
-
-/* Picks a pivot for the quicksort from the SIZE bytes in BUF. */
-static unsigned char
-pick_pivot (unsigned char *buf, size_t size) 
-{
-  ASSERT (size >= 1);
-  return buf[random_ulong () % size];
-}
-
-/* Checks whether the SIZE bytes in ARRAY are divided into an
-   initial LEFT_SIZE elements all less than PIVOT followed by
-   SIZE - LEFT_SIZE elements all greater than or equal to
-   PIVOT. */
-static bool
-is_partitioned (const unsigned char *array, size_t size,
-                unsigned char pivot, size_t left_size) 
-{
-  size_t i;
-  
-  for (i = 0; i < left_size; i++)
-    if (array[i] >= pivot)
-      return false;
-
-  for (; i < size; i++)
-    if (array[i] < pivot)
-      return false;
-
-  return true;
-}
-
-/* Swaps the bytes at *A and *B. */
-static void
-swap (unsigned char *a, unsigned char *b) 
-{
-  unsigned char t = *a;
-  *a = *b;
-  *b = t;
-}
-
-/* Partitions ARRAY in-place in an initial run of bytes all less
-   than PIVOT, followed by a run of bytes all greater than or
-   equal to PIVOT.  Returns the length of the initial run. */
-static size_t
-partition (unsigned char *array, size_t size, int pivot) 
-{
-  size_t left_size = size;
-  unsigned char *first = array;
-  unsigned char *last = first + left_size;
-
-  for (;;)
-    {
-      /* Move FIRST forward to point to first element greater than
-         PIVOT. */
-      for (;;)
-        {
-          if (first == last)
-            {
-              ASSERT (is_partitioned (array, size, pivot, left_size));
-              return left_size;
-            }
-          else if (*first >= pivot)
-            break;
-
-          first++;
-        }
-      left_size--;
-
-      /* Move LAST backward to point to last element no bigger
-         than PIVOT. */
-      for (;;)
-        {
-          last--;
-
-          if (first == last)
-            {
-              ASSERT (is_partitioned (array, size, pivot, left_size));
-              return left_size;
-            }
-          else if (*last < pivot)
-            break;
-          else
-            left_size--;
-        }
-
-      /* By swapping FIRST and LAST we extend the starting and
-         ending sequences that pass and fail, respectively,
-         PREDICATE. */
-      swap (first, last);
-      first++;
-    }
-}
-
-/* Returns true if the SIZE bytes in BUF are in nondecreasing
-   order, false otherwise. */
-static bool
-is_sorted (const unsigned char *buf, size_t size) 
-{
-  size_t i;
-
-  for (i = 1; i < size; i++)
-    if (buf[i - 1] > buf[i])
-      return false;
-
-  return true;
-}
-
-/* Sorts the SIZE bytes in BUF into nondecreasing order, using
-   the quick-sort algorithm. */
-void
-qsort_bytes (unsigned char *buf, size_t size) 
-{
-  if (!is_sorted (buf, size)) 
-    {
-      int pivot = pick_pivot (buf, size);
-
-      unsigned char *left_half = buf;
-      size_t left_size = partition (buf, size, pivot);
-      unsigned char *right_half = left_half + left_size;
-      size_t right_size = size - left_size;
-  
-      if (left_size <= right_size) 
-        {
-          qsort_bytes (left_half, left_size);
-          qsort_bytes (right_half, right_size); 
-        }
-      else
-        {
-          qsort_bytes (right_half, right_size); 
-          qsort_bytes (left_half, left_size);
-        }
-    } 
-}
diff --git a/src/tests/vm/qsort.h b/src/tests/vm/qsort.h
deleted file mode 100644
index 61b65f3..0000000
--- a/src/tests/vm/qsort.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef TESTS_VM_QSORT_H
-#define TESTS_VM_QSORT_H 1
-
-#include <stddef.h>
-
-void qsort_bytes (unsigned char *buf, size_t size);
-
-#endif /* tests/vm/qsort.h */
diff --git a/src/tests/vm/sample.inc b/src/tests/vm/sample.inc
deleted file mode 100644
index a60a139..0000000
--- a/src/tests/vm/sample.inc
+++ /dev/null
@@ -1,19 +0,0 @@
-char sample[] = {
-  "===  ALL USERS PLEASE NOTE  ========================\n"
-  "\n"
-  "CAR and CDR now return extra values.\n"
-  "\n"
-  "The function CAR now returns two values.  Since it has to go to the\n"
-  "trouble to figure out if the object is carcdr-able anyway, we figured\n"
-  "you might as well get both halves at once.  For example, the following\n"
-  "code shows how to destructure a cons (SOME-CONS) into its two slots\n"
-  "(THE-CAR and THE-CDR):\n"
-  "\n"
-  "        (MULTIPLE-VALUE-BIND (THE-CAR THE-CDR) (CAR SOME-CONS) ...)\n"
-  "\n"
-  "For symmetry with CAR, CDR returns a second value which is the CAR of\n"
-  "the object.  In a related change, the functions MAKE-ARRAY and CONS\n"
-  "have been fixed so they don't allocate any storage except on the\n"
-  "stack.  This should hopefully help people who don't like using the\n"
-  "garbage collector because it cold boots the machine so often.\n"
-};
diff --git a/src/tests/vm/sample.txt b/src/tests/vm/sample.txt
deleted file mode 100644
index c446830..0000000
--- a/src/tests/vm/sample.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-===  ALL USERS PLEASE NOTE  ========================
-
-CAR and CDR now return extra values.
-
-The function CAR now returns two values.  Since it has to go to the
-trouble to figure out if the object is carcdr-able anyway, we figured
-you might as well get both halves at once.  For example, the following
-code shows how to destructure a cons (SOME-CONS) into its two slots
-(THE-CAR and THE-CDR):
-
-        (MULTIPLE-VALUE-BIND (THE-CAR THE-CDR) (CAR SOME-CONS) ...)
-
-For symmetry with CAR, CDR returns a second value which is the CAR of
-the object.  In a related change, the functions MAKE-ARRAY and CONS
-have been fixed so they don't allocate any storage except on the
-stack.  This should hopefully help people who don't like using the
-garbage collector because it cold boots the machine so often.
diff --git a/src/threads/interrupt.h b/src/threads/interrupt.h
deleted file mode 100644
index d43e06d..0000000
--- a/src/threads/interrupt.h
+++ /dev/null
@@ -1,70 +0,0 @@
-#ifndef THREADS_INTERRUPT_H
-#define THREADS_INTERRUPT_H
-
-#include <stdbool.h>
-#include <stdint.h>
-
-/* Interrupts on or off? */
-enum intr_level 
-  {
-    INTR_OFF,             /* Interrupts disabled. */
-    INTR_ON               /* Interrupts enabled. */
-  };
-
-enum intr_level intr_get_level (void);
-enum intr_level intr_set_level (enum intr_level);
-enum intr_level intr_enable (void);
-enum intr_level intr_disable (void);
-
-/* Interrupt stack frame. */
-struct intr_frame
-  {
-    /* Pushed by intr_entry in intr-stubs.S.
-       These are the interrupted task's saved registers. */
-    uint32_t edi;               /* Saved EDI. */
-    uint32_t esi;               /* Saved ESI. */
-    uint32_t ebp;               /* Saved EBP. */
-    uint32_t esp_dummy;         /* Not used. */
-    uint32_t ebx;               /* Saved EBX. */
-    uint32_t edx;               /* Saved EDX. */
-    uint32_t ecx;               /* Saved ECX. */
-    uint32_t eax;               /* Saved EAX. */
-    uint16_t gs, :16;           /* Saved GS segment register. */
-    uint16_t fs, :16;           /* Saved FS segment register. */
-    uint16_t es, :16;           /* Saved ES segment register. */
-    uint16_t ds, :16;           /* Saved DS segment register. */
-
-    /* Pushed by intrNN_stub in intr-stubs.S. */
-    uint32_t vec_no;            /* Interrupt vector number. */
-
-    /* Sometimes pushed by the CPU,
-       otherwise for consistency pushed as 0 by intrNN_stub.
-       The CPU puts it just under `eip', but we move it here. */
-    uint32_t error_code;        /* Error code. */
-
-    /* Pushed by intrNN_stub in intr-stubs.S.
-       This frame pointer eases interpretation of backtraces. */
-    void *frame_pointer;        /* Saved EBP (frame pointer). */
-
-    /* Pushed by the CPU.
-       These are the interrupted task's saved registers. */
-    void (*eip) (void);         /* Next instruction to execute. */
-    uint16_t cs, :16;           /* Code segment for eip. */
-    uint32_t eflags;            /* Saved CPU flags. */
-    void *esp;                  /* Saved stack pointer. */
-    uint16_t ss, :16;           /* Data segment for esp. */
-  };
-
-typedef void intr_handler_func (struct intr_frame *);
-
-void intr_init (void);
-void intr_register_ext (uint8_t vec, intr_handler_func *, const char *name);
-void intr_register_int (uint8_t vec, int dpl, enum intr_level,
-                        intr_handler_func *, const char *name);
-bool intr_context (void);
-void intr_yield_on_return (void);
-
-void intr_dump_frame (const struct intr_frame *);
-const char *intr_name (uint8_t vec);
-
-#endif /* threads/interrupt.h */
diff --git a/src/threads/intr-stubs.S b/src/threads/intr-stubs.S
deleted file mode 100644
index b34c142..0000000
--- a/src/threads/intr-stubs.S
+++ /dev/null
@@ -1,204 +0,0 @@
-#include "threads/loader.h"
-
-        .text
-
-/* Main interrupt entry point.
-
-   An internal or external interrupt starts in one of the
-   intrNN_stub routines, which push the `struct intr_frame'
-   frame_pointer, error_code, and vec_no members on the stack,
-   then jump here.
-
-   We save the rest of the `struct intr_frame' members to the
-   stack, set up some registers as needed by the kernel, and then
-   call intr_handler(), which actually handles the interrupt.
-
-   We "fall through" to intr_exit to return from the interrupt.
-*/
-.func intr_entry
-intr_entry:
-	/* Save caller's registers. */
-	pushl %ds
-	pushl %es
-	pushl %fs
-	pushl %gs
-	pushal
-        
-	/* Set up kernel environment. */
-	cld			/* String instructions go upward. */
-	mov $SEL_KDSEG, %eax	/* Initialize segment registers. */
-	mov %eax, %ds
-	mov %eax, %es
-	leal 56(%esp), %ebp	/* Set up frame pointer. */
-
-	/* Call interrupt handler. */
-	pushl %esp
-.globl intr_handler
-	call intr_handler
-	addl $4, %esp
-.endfunc
-
-/* Interrupt exit.
-
-   Restores the caller's registers, discards extra data on the
-   stack, and returns to the caller.
-
-   This is a separate function because it is called directly when
-   we launch a new user process (see execute_thread() in
-   userprog/process.c). */
-.globl intr_exit
-.func intr_exit
-intr_exit:
-        /* Restore caller's registers. */
-	popal
-	popl %gs
-	popl %fs
-	popl %es
-	popl %ds
-
-        /* Discard `struct intr_frame' vec_no, error_code,
-           frame_pointer members. */
-	addl $12, %esp
-
-        /* Return to caller. */
-	iret
-.endfunc
-
-/* Interrupt stubs.
-
-   This defines 256 fragments of code, named `intr00_stub'
-   through `intrff_stub', each of which is used as the entry
-   point for the corresponding interrupt vector.  It also puts
-   the address of each of these functions in the correct spot in
-   `intr_stubs', an array of function pointers.
-
-   Most of the stubs do this:
-
-        1. Push %ebp on the stack (frame_pointer in `struct intr_frame').
-
-        2. Push 0 on the stack (error_code).
-
-        3. Push the interrupt number on the stack (vec_no).
-
-   The CPU pushes an extra "error code" on the stack for a few
-   interrupts.  Because we want %ebp to be where the error code
-   is, we follow a different path:
-
-        1. Push a duplicate copy of the error code on the stack.
-
-        2. Replace the original copy of the error code by %ebp.
-
-        3. Push the interrupt number on the stack. */
-
-	.data
-.globl intr_stubs
-intr_stubs:
-
-/* This implements steps 1 and 2, described above, in the common
-   case where we just push a 0 error code. */
-#define zero                                    \
-	pushl %ebp;                             \
-	pushl $0
-
-/* This implements steps 1 and 2, described above, in the case
-   where the CPU already pushed an error code. */
-#define REAL                                    \
-        pushl (%esp);                           \
-        movl %ebp, 4(%esp)
-
-/* Emits a stub for interrupt vector NUMBER.
-   TYPE is `zero', for the case where we push a 0 error code,
-   or `REAL', if the CPU pushes an error code for us. */
-#define STUB(NUMBER, TYPE)                      \
-	.text;                                  \
-.globl intr##NUMBER##_stub;                     \
-.func intr##NUMBER##_stub;			\
-intr##NUMBER##_stub:                            \
-	TYPE;                                   \
-	push $0x##NUMBER;                       \
-        jmp intr_entry;                         \
-.endfunc;					\
-                                                \
-	.data;                                  \
-	.long intr##NUMBER##_stub;
-
-/* All the stubs. */
-STUB(00, zero) STUB(01, zero) STUB(02, zero) STUB(03, zero)
-STUB(04, zero) STUB(05, zero) STUB(06, zero) STUB(07, zero)
-STUB(08, REAL) STUB(09, zero) STUB(0a, REAL) STUB(0b, REAL)
-STUB(0c, zero) STUB(0d, REAL) STUB(0e, REAL) STUB(0f, zero)
-
-STUB(10, zero) STUB(11, REAL) STUB(12, zero) STUB(13, zero)
-STUB(14, zero) STUB(15, zero) STUB(16, zero) STUB(17, zero)
-STUB(18, REAL) STUB(19, zero) STUB(1a, REAL) STUB(1b, REAL)
-STUB(1c, zero) STUB(1d, REAL) STUB(1e, REAL) STUB(1f, zero)
-
-STUB(20, zero) STUB(21, zero) STUB(22, zero) STUB(23, zero)
-STUB(24, zero) STUB(25, zero) STUB(26, zero) STUB(27, zero)
-STUB(28, zero) STUB(29, zero) STUB(2a, zero) STUB(2b, zero)
-STUB(2c, zero) STUB(2d, zero) STUB(2e, zero) STUB(2f, zero)
-
-STUB(30, zero) STUB(31, zero) STUB(32, zero) STUB(33, zero)
-STUB(34, zero) STUB(35, zero) STUB(36, zero) STUB(37, zero)
-STUB(38, zero) STUB(39, zero) STUB(3a, zero) STUB(3b, zero)
-STUB(3c, zero) STUB(3d, zero) STUB(3e, zero) STUB(3f, zero)
-
-STUB(40, zero) STUB(41, zero) STUB(42, zero) STUB(43, zero)
-STUB(44, zero) STUB(45, zero) STUB(46, zero) STUB(47, zero)
-STUB(48, zero) STUB(49, zero) STUB(4a, zero) STUB(4b, zero)
-STUB(4c, zero) STUB(4d, zero) STUB(4e, zero) STUB(4f, zero)
-
-STUB(50, zero) STUB(51, zero) STUB(52, zero) STUB(53, zero)
-STUB(54, zero) STUB(55, zero) STUB(56, zero) STUB(57, zero)
-STUB(58, zero) STUB(59, zero) STUB(5a, zero) STUB(5b, zero)
-STUB(5c, zero) STUB(5d, zero) STUB(5e, zero) STUB(5f, zero)
-
-STUB(60, zero) STUB(61, zero) STUB(62, zero) STUB(63, zero)
-STUB(64, zero) STUB(65, zero) STUB(66, zero) STUB(67, zero)
-STUB(68, zero) STUB(69, zero) STUB(6a, zero) STUB(6b, zero)
-STUB(6c, zero) STUB(6d, zero) STUB(6e, zero) STUB(6f, zero)
-
-STUB(70, zero) STUB(71, zero) STUB(72, zero) STUB(73, zero)
-STUB(74, zero) STUB(75, zero) STUB(76, zero) STUB(77, zero)
-STUB(78, zero) STUB(79, zero) STUB(7a, zero) STUB(7b, zero)
-STUB(7c, zero) STUB(7d, zero) STUB(7e, zero) STUB(7f, zero)
-
-STUB(80, zero) STUB(81, zero) STUB(82, zero) STUB(83, zero)
-STUB(84, zero) STUB(85, zero) STUB(86, zero) STUB(87, zero)
-STUB(88, zero) STUB(89, zero) STUB(8a, zero) STUB(8b, zero)
-STUB(8c, zero) STUB(8d, zero) STUB(8e, zero) STUB(8f, zero)
-
-STUB(90, zero) STUB(91, zero) STUB(92, zero) STUB(93, zero)
-STUB(94, zero) STUB(95, zero) STUB(96, zero) STUB(97, zero)
-STUB(98, zero) STUB(99, zero) STUB(9a, zero) STUB(9b, zero)
-STUB(9c, zero) STUB(9d, zero) STUB(9e, zero) STUB(9f, zero)
-
-STUB(a0, zero) STUB(a1, zero) STUB(a2, zero) STUB(a3, zero)
-STUB(a4, zero) STUB(a5, zero) STUB(a6, zero) STUB(a7, zero)
-STUB(a8, zero) STUB(a9, zero) STUB(aa, zero) STUB(ab, zero)
-STUB(ac, zero) STUB(ad, zero) STUB(ae, zero) STUB(af, zero)
-
-STUB(b0, zero) STUB(b1, zero) STUB(b2, zero) STUB(b3, zero)
-STUB(b4, zero) STUB(b5, zero) STUB(b6, zero) STUB(b7, zero)
-STUB(b8, zero) STUB(b9, zero) STUB(ba, zero) STUB(bb, zero)
-STUB(bc, zero) STUB(bd, zero) STUB(be, zero) STUB(bf, zero)
-
-STUB(c0, zero) STUB(c1, zero) STUB(c2, zero) STUB(c3, zero)
-STUB(c4, zero) STUB(c5, zero) STUB(c6, zero) STUB(c7, zero)
-STUB(c8, zero) STUB(c9, zero) STUB(ca, zero) STUB(cb, zero)
-STUB(cc, zero) STUB(cd, zero) STUB(ce, zero) STUB(cf, zero)
-
-STUB(d0, zero) STUB(d1, zero) STUB(d2, zero) STUB(d3, zero)
-STUB(d4, zero) STUB(d5, zero) STUB(d6, zero) STUB(d7, zero)
-STUB(d8, zero) STUB(d9, zero) STUB(da, zero) STUB(db, zero)
-STUB(dc, zero) STUB(dd, zero) STUB(de, zero) STUB(df, zero)
-
-STUB(e0, zero) STUB(e1, zero) STUB(e2, zero) STUB(e3, zero)
-STUB(e4, zero) STUB(e5, zero) STUB(e6, zero) STUB(e7, zero)
-STUB(e8, zero) STUB(e9, zero) STUB(ea, zero) STUB(eb, zero)
-STUB(ec, zero) STUB(ed, zero) STUB(ee, zero) STUB(ef, zero)
-
-STUB(f0, zero) STUB(f1, zero) STUB(f2, zero) STUB(f3, zero)
-STUB(f4, zero) STUB(f5, zero) STUB(f6, zero) STUB(f7, zero)
-STUB(f8, zero) STUB(f9, zero) STUB(fa, zero) STUB(fb, zero)
-STUB(fc, zero) STUB(fd, zero) STUB(fe, zero) STUB(ff, zero)
diff --git a/src/threads/intr-stubs.h b/src/threads/intr-stubs.h
deleted file mode 100644
index 9ceba15..0000000
--- a/src/threads/intr-stubs.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#ifndef THREADS_INTR_STUBS_H
-#define THREADS_INTR_STUBS_H
-
-/* Interrupt stubs.
-
-   These are little snippets of code in intr-stubs.S, one for
-   each of the 256 possible x86 interrupts.  Each one does a
-   little bit of stack manipulation, then jumps to intr_entry().
-   See intr-stubs.S for more information.
-
-   This array points to each of the interrupt stub entry points
-   so that intr_init() can easily find them. */
-typedef void intr_stub_func (void);
-extern intr_stub_func *intr_stubs[256];
-
-/* Interrupt return path. */
-void intr_exit (void);
-
-#endif /* threads/intr-stubs.h */
diff --git a/src/threads/io.h b/src/threads/io.h
deleted file mode 100644
index b493299..0000000
--- a/src/threads/io.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/* This file is derived from source code used in MIT's 6.828
-   course.  The original copyright notice is reproduced in full
-   below. */
-
-/*
- * Copyright (C) 1997 Massachusetts Institute of Technology 
- *
- * This software is being provided by the copyright holders under the
- * following license. By obtaining, using and/or copying this software,
- * you agree that you have read, understood, and will comply with the
- * following terms and conditions:
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose and without fee or royalty is
- * hereby granted, provided that the full text of this NOTICE appears on
- * ALL copies of the software and documentation or portions thereof,
- * including modifications, that you make.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO
- * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE,
- * BUT NOT LIMITATION, COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR
- * WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR
- * THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY
- * THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. COPYRIGHT
- * HOLDERS WILL BEAR NO LIABILITY FOR ANY USE OF THIS SOFTWARE OR
- * DOCUMENTATION.
- *
- * The name and trademarks of copyright holders may NOT be used in
- * advertising or publicity pertaining to the software without specific,
- * written prior permission. Title to copyright in this software and any
- * associated documentation will at all times remain with copyright
- * holders. See the file AUTHORS which should have accompanied this software
- * for a list of all copyright holders.
- *
- * This file may be derived from previously copyrighted software. This
- * copyright applies only to those changes made by the copyright
- * holders listed in the AUTHORS file. The rest of this file is covered by
- * the copyright notices, if any, listed below.
- */
-
-#ifndef THREADS_IO_H
-#define THREADS_IO_H
-
-#include <stddef.h>
-#include <stdint.h>
-
-/* Reads and returns a byte from PORT. */
-static inline uint8_t
-inb (uint16_t port)
-{
-  /* See [IA32-v2a] "IN". */
-  uint8_t data;
-  asm volatile ("inb %w1,%0" : "=a" (data) : "d" (port));
-  return data;
-}
-
-/* Reads CNT bytes from PORT, one after another, and stores them
-   into the buffer starting at ADDR. */
-static inline void
-insb (uint16_t port, void *addr, size_t cnt)
-{
-  /* See [IA32-v2a] "INS". */
-  asm volatile ("cld; repne; insb"
-                : "=D" (addr), "=c" (cnt)
-                : "d" (port), "0" (addr), "1" (cnt)
-                : "memory", "cc");
-}
-
-/* Reads and returns 16 bits from PORT. */
-static inline uint16_t
-inw (uint16_t port)
-{
-  uint16_t data;
-  /* See [IA32-v2a] "IN". */
-  asm volatile ("inw %w1,%0" : "=a" (data) : "d" (port));
-  return data;
-}
-
-/* Reads CNT 16-bit (halfword) units from PORT, one after
-   another, and stores them into the buffer starting at ADDR. */
-static inline void
-insw (uint16_t port, void *addr, size_t cnt)
-{
-  /* See [IA32-v2a] "INS". */
-  asm volatile ("cld; repne; insw"
-                : "=D" (addr), "=c" (cnt)
-                : "d" (port), "0" (addr), "1" (cnt)
-                : "memory", "cc");
-}
-
-/* Reads and returns 32 bits from PORT. */
-static inline uint32_t
-inl (uint16_t port)
-{
-  /* See [IA32-v2a] "IN". */
-  uint32_t data;
-  asm volatile ("inl %w1,%0" : "=a" (data) : "d" (port));
-  return data;
-}
-
-/* Reads CNT 32-bit (word) units from PORT, one after another,
-   and stores them into the buffer starting at ADDR. */
-static inline void
-insl (uint16_t port, void *addr, size_t cnt)
-{
-  /* See [IA32-v2a] "INS". */
-  asm volatile ("cld; repne; insl"
-                : "=D" (addr), "=c" (cnt)
-                : "d" (port), "0" (addr), "1" (cnt)
-                : "memory", "cc");
-}
-
-/* Writes byte DATA to PORT. */
-static inline void
-outb (uint16_t port, uint8_t data)
-{
-  /* See [IA32-v2b] "OUT". */
-  asm volatile ("outb %0,%w1" : : "a" (data), "d" (port));
-}
-
-/* Writes to PORT each byte of data in the CNT-byte buffer
-   starting at ADDR. */
-static inline void
-outsb (uint16_t port, const void *addr, size_t cnt)
-{
-  /* See [IA32-v2b] "OUTS". */
-  asm volatile ("cld; repne; outsb"
-                : "=S" (addr), "=c" (cnt)
-                : "d" (port), "0" (addr), "1" (cnt)
-                : "cc");
-}
-
-/* Writes the 16-bit DATA to PORT. */
-static inline void
-outw (uint16_t port, uint16_t data)
-{
-  /* See [IA32-v2b] "OUT". */
-  asm volatile ("outw %0,%w1" : : "a" (data), "d" (port));
-}
-
-/* Writes to PORT each 16-bit unit (halfword) of data in the
-   CNT-halfword buffer starting at ADDR. */
-static inline void
-outsw (uint16_t port, const void *addr, size_t cnt)
-{
-  /* See [IA32-v2b] "OUTS". */
-  asm volatile ("cld; repne; outsw"
-                : "=S" (addr), "=c" (cnt)
-                : "d" (port), "0" (addr), "1" (cnt)
-                : "cc");
-}
-
-/* Writes the 32-bit DATA to PORT. */
-static inline void
-outl (uint16_t port, uint32_t data)
-{
-  /* See [IA32-v2b] "OUT". */
-  asm volatile ("outl %0,%w1" : : "a" (data), "d" (port));
-}
-
-/* Writes to PORT each 32-bit unit (word) of data in the CNT-word
-   buffer starting at ADDR. */
-static inline void
-outsl (uint16_t port, const void *addr, size_t cnt)
-{
-  /* See [IA32-v2b] "OUTS". */
-  asm volatile ("cld; repne; outsl"
-                : "=S" (addr), "=c" (cnt)
-                : "d" (port), "0" (addr), "1" (cnt)
-                : "cc");
-}
-
-#endif /* threads/io.h */
diff --git a/src/threads/kernel.lds.S b/src/threads/kernel.lds.S
deleted file mode 100644
index 6154d08..0000000
--- a/src/threads/kernel.lds.S
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "threads/loader.h"
-
-OUTPUT_FORMAT("elf32-i386")
-OUTPUT_ARCH("i386")
-ENTRY(start)			/* Kernel starts at "start" symbol. */
-SECTIONS
-{
-  /* Specifies the virtual address for the kernel base. */
-  . = LOADER_PHYS_BASE + LOADER_KERN_BASE;
-
-  _start = .;
-
-  /* Kernel starts with code, followed by read-only data and writable data. */
-  .text : { *(.start) *(.text) } = 0x90
-  .rodata : { *(.rodata) *(.rodata.*) 
-	      . = ALIGN(0x1000); 
-	      _end_kernel_text = .; }
-  .data : { *(.data) }
-
-  /* BSS (zero-initialized data) is after everything else. */
-  _start_bss = .;
-  .bss : { *(.bss) }
-  _end_bss = .;
-
-  _end = .;
-}
diff --git a/src/threads/loader.S b/src/threads/loader.S
deleted file mode 100644
index b7842d3..0000000
--- a/src/threads/loader.S
+++ /dev/null
@@ -1,349 +0,0 @@
-/* This file is derived from source code used in MIT's 6.828
-   course.  The original copyright notice is reproduced in full
-   below. */
-
-/*
- * Copyright (C) 1997 Massachusetts Institute of Technology 
- *
- * This software is being provided by the copyright holders under the
- * following license. By obtaining, using and/or copying this software,
- * you agree that you have read, understood, and will comply with the
- * following terms and conditions:
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose and without fee or royalty is
- * hereby granted, provided that the full text of this NOTICE appears on
- * ALL copies of the software and documentation or portions thereof,
- * including modifications, that you make.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO
- * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE,
- * BUT NOT LIMITATION, COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR
- * WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR
- * THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY
- * THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. COPYRIGHT
- * HOLDERS WILL BEAR NO LIABILITY FOR ANY USE OF THIS SOFTWARE OR
- * DOCUMENTATION.
- *
- * The name and trademarks of copyright holders may NOT be used in
- * advertising or publicity pertaining to the software without specific,
- * written prior permission. Title to copyright in this software and any
- * associated documentation will at all times remain with copyright
- * holders. See the file AUTHORS which should have accompanied this software
- * for a list of all copyright holders.
- *
- * This file may be derived from previously copyrighted software. This
- * copyright applies only to those changes made by the copyright
- * holders listed in the AUTHORS file. The rest of this file is covered by
- * the copyright notices, if any, listed below.
- */
-
-#include "threads/loader.h"
-	
-#### Kernel loader.
-
-#### This code should be stored in the first sector of the hard disk.
-#### When the BIOS runs, it loads this code at physical address
-#### 0x7c00-0x7e00 (512 bytes).  Then it jumps to the beginning of it,
-#### in real mode.  This code switches into protected mode (32-bit
-#### mode) so that all of memory can accessed, loads the kernel into
-#### memory, and jumps to the first byte of the kernel, where start.S
-#### is linked.
-	
-/* Flags in control register 0. */
-#define CR0_PE 0x00000001      /* Protection Enable. */
-#define CR0_EM 0x00000004      /* (Floating-point) Emulation. */
-#define CR0_PG 0x80000000      /* Paging. */
-#define CR0_WP 0x00010000      /* Write-Protect enable in kernel mode. */
-
-
-.globl start
-start:
-	
-# Code runs in real mode, which is a 16-bit segment.
-	.code16
-
-# Disable interrupts, because we will not be prepared to handle them
-# in protected mode until much later.
-# String instructions go upward (e.g. for "rep stosl" below).
-
-	cli
-	cld
-
-# Set up data segments.
-
-	subw %ax, %ax
-	movw %ax, %es
-	movw %ax, %ds
-
-# Set up stack segment.
-# Stack grows downward starting from us.
-# We don't ever use the stack, but we call into the BIOS,
-# which might.
-
-	movw %ax, %ss
-	movw $0x7c00, %sp
-	
-#### Enable A20.  Address line 20 is tied to low when the machine
-#### boots, which prevents addressing memory about 1 MB.  This code
-#### fixes it.
-	
-# Poll status register while busy.
-
-1:	inb $0x64, %al
-	testb $0x2, %al
-	jnz 1b
-
-# Send command for writing output port.
-
-	movb $0xd1, %al
-	outb %al, $0x64
-
-# Poll status register while busy.
-
-1:	inb $0x64, %al
-	testb $0x2, %al
-	jnz 1b
-
-# Enable A20 line.
-
-	movb $0xdf, %al
-	outb %al, $0x60
-
-#### Get memory size, via interrupt 15h function 88h.  Returns CF
-#### clear if successful, with AX = (kB of physical memory) - 1024.
-#### This only works for memory sizes <= 65 MB, which should be fine
-#### for our purposes.  We cap memory at 64 MB because that's all we
-#### prepare page tables for, below.
-	
-	movb $0x88, %ah
-	int $0x15
-	jc panic
-	cli			# BIOS might have enabled interrupts
-	addl $1024, %eax	# Total kB memory
-	cmp $0x10000, %eax	# Cap at 64 MB
-	jbe 1f
-	mov $0x10000, %eax
-1:	shrl $2, %eax		# Total 4 kB pages
-	movl %eax, ram_pgs
-	
-#### Create temporary page directory and page table and set page
-#### directory base register.
-
-# Create page directory at 64 kB and fill with zeroes.
-	mov $0x1000, %ax
-	mov %ax, %es
-	subl %eax, %eax
-	subl %edi, %edi
-	movl $0x400, %ecx
-	rep stosl
-
-# Add PDEs to point to PTEs for the first 64 MB of RAM.
-# Also add identical PDEs starting at LOADER_PHYS_BASE.
-# See [IA32-v3a] section 3.7.6 "Page-Directory and Page-Table Entries"
-# for a description of the bits in %eax.
-	
-
-	movl $0x11007, %eax
-	movl $0x11, %ecx
-	subl %edi, %edi
-1:	movl %eax, %es:(%di)
-	movl %eax, %es:LOADER_PHYS_BASE >> 20(%di)
-	addw $4, %di
-	addl $0x1000, %eax
-	loop 1b
-
-# Set up one-to-map linear to physical map for the first 64 MB of RAM.
-# See [IA32-v3a] section 3.7.6 "Page-Directory and Page-Table Entries"
-# for a description of the bits in %eax.
-
-	movw $0x1100, %ax
-	movw %ax, %es
-	movl $0x7, %eax
-	movl $0x4000, %ecx
-	subl %edi, %edi
-1:	movl %eax, %es:(%di)
-	addw $4, %di
-	addl $0x1000, %eax
-	loop 1b
-
-# Set page directory base register.
-
-	movl $0x10000, %eax
-	movl %eax, %cr3
-	
-#### Switch to protected mode.
-
-# Note that interrupts are still off.
-
-# Point the GDTR to our GDT.  Protected mode requires a GDT.
-# We need a data32 prefix to ensure that all 32 bits of the GDT
-# descriptor are loaded (default is to load only 24 bits).
-
-	data32 lgdt gdtdesc
-
-# Then we turn on the following bits in CR0:
-#    PE (Protect Enable): this turns on protected mode.
-#    PG (Paging): turns on paging.
-#    WP (Write Protect): if unset, ring 0 code ignores
-#       write-protect bits in page tables (!).
-#    EM (Emulation): forces floating-point instructions to trap.
-#       We don't support floating point. 
-	
-	movl %cr0, %eax
-	orl $CR0_PE | CR0_PG | CR0_WP | CR0_EM, %eax
-	movl %eax, %cr0
-	
-# We're now in protected mode in a 16-bit segment.  The CPU still has
-# the real-mode code segment cached in %cs's segment descriptor.  We
-# need to reload %cs, and the easiest way is to use a far jump.
-# Because we're not in a 32-bit segment the data32 prefix is needed to
-# jump to a 32-bit offset.
-
-	data32 ljmp $SEL_KCSEG, $1f + LOADER_PHYS_BASE
-	
-# We're now in protected mode in a 32-bit segment.
-
-	.code32
-
-# Reload all the other segment registers and the stack pointer to
-# point into our new GDT.
-
-1:	movw $SEL_KDSEG, %ax
-	movw %ax, %ds		
-	movw %ax, %es		
-	movw %ax, %fs		
-	movw %ax, %gs		
-	movw %ax, %ss
-	movl $LOADER_PHYS_BASE + 0x30000, %esp
-
-#### Load kernel starting at physical address LOADER_KERN_BASE by
-#### frobbing the IDE controller directly.
-
-	movl $1, %ebx
-	movl $LOADER_KERN_BASE + LOADER_PHYS_BASE, %edi
-
-# Disable interrupt delivery by IDE controller, because we will be
-# polling for data.
-# (If we don't do this, Bochs 2.2.6 will never deliver any IDE
-# interrupt to us later after we reset the interrupt controller during
-# boot, even if we also reset the IDE controller.)
-
-	movw $0x3f6, %dx
-	movb $0x02, %al
-	outb %al, %dx
-	
-read_sector:
-
-# Poll status register while controller busy.
-
-	movl $0x1f7, %edx
-1:	inb %dx, %al
-	testb $0x80, %al
-	jnz 1b
-
-# Read a single sector.
-
-	movl $0x1f2, %edx
-	movb $1, %al
-	outb %al, %dx
-
-# Sector number to write in low 28 bits.
-# LBA mode, device 0 in top 4 bits.
-
-	movl %ebx, %eax
-	andl $0x0fffffff, %eax
-	orl $0xe0000000, %eax
-
-# Dump %eax to ports 0x1f3...0x1f6.
-
-	movl $4, %ecx
-1:	incw %dx
-	outb %al, %dx
-	shrl $8, %eax
-	loop 1b
-
-# READ command to command register.
-
-	incw %dx
-	movb $0x20, %al
-	outb %al, %dx
-
-# Poll status register while controller busy.
-
-1:	inb %dx, %al
-	testb $0x80, %al
-	jnz 1b
-
-# Poll status register until data ready.
-
-1:	inb %dx, %al
-	testb $0x08, %al
-	jz 1b
-
-# Transfer sector.
-
-	movl $256, %ecx
-	movl $0x1f0, %edx
-	rep insw
-
-# Next sector.
-
-	incl %ebx
-	cmpl $KERNEL_LOAD_PAGES*8 + 1, %ebx
-	jnz read_sector
-
-#### Jump to kernel entry point.
-
-	movl $LOADER_PHYS_BASE + LOADER_KERN_BASE, %eax
-	call *%eax
-	jmp panic
-
-#### GDT
-
-gdt:
-	.quad 0x0000000000000000	# null seg
-	.quad 0x00cf9a000000ffff	# code seg
-	.quad 0x00cf92000000ffff        # data seg
-	
-gdtdesc:
-	.word	0x17			# sizeof (gdt) - 1
-	.long	gdt + LOADER_PHYS_BASE	# address gdt
-
-#### Fatal error.
-#### Print panic_message (with help from the BIOS) and spin.
-
-panic:  .code16			# We only panic in real mode.
-	movw $panic_message, %si
-	movb $0xe, %ah
-	subb %bh, %bh
-1:	lodsb
-	test %al, %al
-2:	jz 2b			# Spin.
-	int $0x10
-	jmp 1b
-
-panic_message:
-	.ascii "Panic!"
-	.byte 0
-
-#### Physical memory size in 4 kB pages.
-#### This is initialized by the loader and read by the kernel.
-	.org LOADER_RAM_PGS - LOADER_BASE
-ram_pgs:
-	.long 0
-
-#### Command-line arguments and their count.
-#### This is written by the `pintos' utility and read by the kernel.
-#### The loader itself does not do anything with the command line.
-	.org LOADER_ARG_CNT - LOADER_BASE
-arg_cnt:
-	.long 0
-	.org LOADER_ARGS - LOADER_BASE
-args:
-	.fill 0x80, 1, 0
-
-#### Boot-sector signature.
-#### The BIOS checks that this is set properly.
-	.org LOADER_SIG - LOADER_BASE
-	.word 0xaa55
diff --git a/src/threads/loader.h b/src/threads/loader.h
deleted file mode 100644
index 5bd9813..0000000
--- a/src/threads/loader.h
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef THREADS_LOADER_H
-#define THREADS_LOADER_H
-
-/* Constants fixed by the PC BIOS. */
-#define LOADER_BASE 0x7c00      /* Physical address of loader's base. */
-#define LOADER_END  0x7e00      /* Physical address of end of loader. */
-
-/* Physical address of kernel base. */
-#define LOADER_KERN_BASE 0x100000       /* 1 MB. */
-
-/* Kernel virtual address at which all physical memory is mapped.
-
-   The loader maps the 4 MB at the bottom of physical memory to
-   this virtual base address.  Later, paging_init() adds the rest
-   of physical memory to the mapping.
-
-   This must be aligned on a 4 MB boundary. */
-#define LOADER_PHYS_BASE 0xc0000000     /* 3 GB. */
-
-/* Important loader physical addresses. */
-#define LOADER_SIG (LOADER_END - LOADER_SIG_LEN)   /* 0xaa55 BIOS signature. */
-#define LOADER_ARGS (LOADER_SIG - LOADER_ARGS_LEN)     /* Command-line args. */
-#define LOADER_ARG_CNT (LOADER_ARGS - LOADER_ARG_CNT_LEN) /* Number of args. */
-#define LOADER_RAM_PGS (LOADER_ARG_CNT - LOADER_RAM_PGS_LEN) /* # RAM pages. */
-
-/* Sizes of loader data structures. */
-#define LOADER_SIG_LEN 2
-#define LOADER_ARGS_LEN 128
-#define LOADER_ARG_CNT_LEN 4
-#define LOADER_RAM_PGS_LEN 4
-
-/* GDT selectors defined by loader.
-   More selectors are defined by userprog/gdt.h. */
-#define SEL_NULL        0x00    /* Null selector. */
-#define SEL_KCSEG       0x08    /* Kernel code selector. */
-#define SEL_KDSEG       0x10    /* Kernel data selector. */
-
-#endif /* threads/loader.h */
diff --git a/src/threads/malloc.c b/src/threads/malloc.c
deleted file mode 100644
index f6f803b..0000000
--- a/src/threads/malloc.c
+++ /dev/null
@@ -1,294 +0,0 @@
-#include "threads/malloc.h"
-#include <debug.h>
-#include <list.h>
-#include <round.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <string.h>
-#include "threads/palloc.h"
-#include "threads/synch.h"
-#include "threads/vaddr.h"
-
-/* A simple implementation of malloc().
-
-   The size of each request, in bytes, is rounded up to a power
-   of 2 and assigned to the "descriptor" that manages blocks of
-   that size.  The descriptor keeps a list of free blocks.  If
-   the free list is nonempty, one of its blocks is used to
-   satisfy the request.
-
-   Otherwise, a new page of memory, called an "arena", is
-   obtained from the page allocator (if none is available,
-   malloc() returns a null pointer).  The new arena is divided
-   into blocks, all of which are added to the descriptor's free
-   list.  Then we return one of the new blocks.
-
-   When we free a block, we add it to its descriptor's free list.
-   But if the arena that the block was in now has no in-use
-   blocks, we remove all of the arena's blocks from the free list
-   and give the arena back to the page allocator.
-
-   We can't handle blocks bigger than 2 kB using this scheme,
-   because they're too big to fit in a single page with a
-   descriptor.  We handle those by allocating contiguous pages
-   with the page allocator and sticking the allocation size at
-   the beginning of the allocated block's arena header. */
-
-/* Descriptor. */
-struct desc
-  {
-    size_t block_size;          /* Size of each element in bytes. */
-    size_t blocks_per_arena;    /* Number of blocks in an arena. */
-    struct list free_list;      /* List of free blocks. */
-    struct lock lock;           /* Lock. */
-  };
-
-/* Magic number for detecting arena corruption. */
-#define ARENA_MAGIC 0x9a548eed
-
-/* Arena. */
-struct arena 
-  {
-    unsigned magic;             /* Always set to ARENA_MAGIC. */
-    struct desc *desc;          /* Owning descriptor, null for big block. */
-    size_t free_cnt;            /* Free blocks; pages in big block. */
-  };
-
-/* Free block. */
-struct block 
-  {
-    struct list_elem free_elem; /* Free list element. */
-  };
-
-/* Our set of descriptors. */
-static struct desc descs[10];   /* Descriptors. */
-static size_t desc_cnt;         /* Number of descriptors. */
-
-static struct arena *block_to_arena (struct block *);
-static struct block *arena_to_block (struct arena *, size_t idx);
-
-/* Initializes the malloc() descriptors. */
-void
-malloc_init (void) 
-{
-  size_t block_size;
-
-  for (block_size = 16; block_size < PGSIZE / 2; block_size *= 2)
-    {
-      struct desc *d = &descs[desc_cnt++];
-      ASSERT (desc_cnt <= sizeof descs / sizeof *descs);
-      d->block_size = block_size;
-      d->blocks_per_arena = (PGSIZE - sizeof (struct arena)) / block_size;
-      list_init (&d->free_list);
-      lock_init (&d->lock);
-    }
-}
-
-/* Obtains and returns a new block of at least SIZE bytes.
-   Returns a null pointer if memory is not available. */
-void *
-malloc (size_t size) 
-{
-  struct desc *d;
-  struct block *b;
-  struct arena *a;
-
-  /* A null pointer satisfies a request for 0 bytes. */
-  if (size == 0)
-    return NULL;
-
-  /* Find the smallest descriptor that satisfies a SIZE-byte
-     request. */
-  for (d = descs; d < descs + desc_cnt; d++)
-    if (d->block_size >= size)
-      break;
-  if (d == descs + desc_cnt) 
-    {
-      /* SIZE is too big for any descriptor.
-         Allocate enough pages to hold SIZE plus an arena. */
-      size_t page_cnt = DIV_ROUND_UP (size + sizeof *a, PGSIZE);
-      a = palloc_get_multiple (0, page_cnt);
-      if (a == NULL)
-        return NULL;
-
-      /* Initialize the arena to indicate a big block of PAGE_CNT
-         pages, and return it. */
-      a->magic = ARENA_MAGIC;
-      a->desc = NULL;
-      a->free_cnt = page_cnt;
-      return a + 1;
-    }
-
-  lock_acquire (&d->lock);
-
-  /* If the free list is empty, create a new arena. */
-  if (list_empty (&d->free_list))
-    {
-      size_t i;
-
-      /* Allocate a page. */
-      a = palloc_get_page (0);
-      if (a == NULL) 
-        {
-          lock_release (&d->lock);
-          return NULL; 
-        }
-
-      /* Initialize arena and add its blocks to the free list. */
-      a->magic = ARENA_MAGIC;
-      a->desc = d;
-      a->free_cnt = d->blocks_per_arena;
-      for (i = 0; i < d->blocks_per_arena; i++) 
-        {
-          struct block *b = arena_to_block (a, i);
-          list_push_back (&d->free_list, &b->free_elem);
-        }
-    }
-
-  /* Get a block from free list and return it. */
-  b = list_entry (list_pop_front (&d->free_list), struct block, free_elem);
-  a = block_to_arena (b);
-  a->free_cnt--;
-  lock_release (&d->lock);
-  return b;
-}
-
-/* Allocates and return A times B bytes initialized to zeroes.
-   Returns a null pointer if memory is not available. */
-void *
-calloc (size_t a, size_t b) 
-{
-  void *p;
-  size_t size;
-
-  /* Calculate block size and make sure it fits in size_t. */
-  size = a * b;
-  if (size < a || size < b)
-    return NULL;
-
-  /* Allocate and zero memory. */
-  p = malloc (size);
-  if (p != NULL)
-    memset (p, 0, size);
-
-  return p;
-}
-
-/* Returns the number of bytes allocated for BLOCK. */
-static size_t
-block_size (void *block) 
-{
-  struct block *b = block;
-  struct arena *a = block_to_arena (b);
-  struct desc *d = a->desc;
-
-  return d != NULL ? d->block_size : PGSIZE * a->free_cnt - pg_ofs (block);
-}
-
-/* Attempts to resize OLD_BLOCK to NEW_SIZE bytes, possibly
-   moving it in the process.
-   If successful, returns the new block; on failure, returns a
-   null pointer.
-   A call with null OLD_BLOCK is equivalent to malloc(NEW_SIZE).
-   A call with zero NEW_SIZE is equivalent to free(OLD_BLOCK). */
-void *
-realloc (void *old_block, size_t new_size) 
-{
-  if (new_size == 0) 
-    {
-      free (old_block);
-      return NULL;
-    }
-  else 
-    {
-      void *new_block = malloc (new_size);
-      if (old_block != NULL && new_block != NULL)
-        {
-          size_t old_size = block_size (old_block);
-          size_t min_size = new_size < old_size ? new_size : old_size;
-          memcpy (new_block, old_block, min_size);
-          free (old_block);
-        }
-      return new_block;
-    }
-}
-
-/* Frees block P, which must have been previously allocated with
-   malloc(), calloc(), or realloc(). */
-void
-free (void *p) 
-{
-  if (p != NULL)
-    {
-      struct block *b = p;
-      struct arena *a = block_to_arena (b);
-      struct desc *d = a->desc;
-      
-      if (d != NULL) 
-        {
-          /* It's a normal block.  We handle it here. */
-
-#ifndef NDEBUG
-          /* Clear the block to help detect use-after-free bugs. */
-          memset (b, 0xcc, d->block_size);
-#endif
-  
-          lock_acquire (&d->lock);
-
-          /* Add block to free list. */
-          list_push_front (&d->free_list, &b->free_elem);
-
-          /* If the arena is now entirely unused, free it. */
-          if (++a->free_cnt >= d->blocks_per_arena) 
-            {
-              size_t i;
-
-              ASSERT (a->free_cnt == d->blocks_per_arena);
-              for (i = 0; i < d->blocks_per_arena; i++) 
-                {
-                  struct block *b = arena_to_block (a, i);
-                  list_remove (&b->free_elem);
-                }
-              palloc_free_page (a);
-            }
-
-          lock_release (&d->lock);
-        }
-      else
-        {
-          /* It's a big block.  Free its pages. */
-          palloc_free_multiple (a, a->free_cnt);
-          return;
-        }
-    }
-}
-
-/* Returns the arena that block B is inside. */
-static struct arena *
-block_to_arena (struct block *b)
-{
-  struct arena *a = pg_round_down (b);
-
-  /* Check that the arena is valid. */
-  ASSERT (a != NULL);
-  ASSERT (a->magic == ARENA_MAGIC);
-
-  /* Check that the block is properly aligned for the arena. */
-  ASSERT (a->desc == NULL
-          || (pg_ofs (b) - sizeof *a) % a->desc->block_size == 0);
-  ASSERT (a->desc != NULL || pg_ofs (b) == sizeof *a);
-
-  return a;
-}
-
-/* Returns the (IDX - 1)'th block within arena A. */
-static struct block *
-arena_to_block (struct arena *a, size_t idx) 
-{
-  ASSERT (a != NULL);
-  ASSERT (a->magic == ARENA_MAGIC);
-  ASSERT (idx < a->desc->blocks_per_arena);
-  return (struct block *) ((uint8_t *) a
-                           + sizeof *a
-                           + idx * a->desc->block_size);
-}
diff --git a/src/threads/malloc.h b/src/threads/malloc.h
deleted file mode 100644
index bc55d36..0000000
--- a/src/threads/malloc.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef THREADS_MALLOC_H
-#define THREADS_MALLOC_H
-
-#include <debug.h>
-#include <stddef.h>
-
-void malloc_init (void);
-void *malloc (size_t) __attribute__ ((malloc));
-void *calloc (size_t, size_t) __attribute__ ((malloc));
-void *realloc (void *, size_t);
-void free (void *);
-
-#endif /* threads/malloc.h */
diff --git a/src/threads/palloc.c b/src/threads/palloc.c
deleted file mode 100644
index eab41e4..0000000
--- a/src/threads/palloc.c
+++ /dev/null
@@ -1,189 +0,0 @@
-#include "threads/palloc.h"
-#include <bitmap.h>
-#include <debug.h>
-#include <inttypes.h>
-#include <round.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <string.h>
-#include "threads/init.h"
-#include "threads/loader.h"
-#include "threads/synch.h"
-#include "threads/vaddr.h"
-
-/* Page allocator.  Hands out memory in page-size (or
-   page-multiple) chunks.  See malloc.h for an allocator that
-   hands out smaller chunks.
-
-   System memory is divided into two "pools" called the kernel
-   and user pools.  The user pool is for user (virtual) memory
-   pages, the kernel pool for everything else.  The idea here is
-   that the kernel needs to have memory for its own operations
-   even if user processes are swapping like mad.
-
-   By default, half of system RAM is given to the kernel pool and
-   half to the user pool.  That should be huge overkill for the
-   kernel pool, but that's just fine for demonstration purposes. */
-
-/* A memory pool. */
-struct pool
-  {
-    struct lock lock;                   /* Mutual exclusion. */
-    struct bitmap *used_map;            /* Bitmap of free pages. */
-    uint8_t *base;                      /* Base of pool. */
-  };
-
-/* Two pools: one for kernel data, one for user pages. */
-struct pool kernel_pool, user_pool;
-
-/* Maximum number of pages to put in user pool. */
-size_t user_page_limit = SIZE_MAX;
-
-static void init_pool (struct pool *, void *base, size_t page_cnt,
-                       const char *name);
-static bool page_from_pool (const struct pool *, void *page);
-
-/* Initializes the page allocator. */
-void
-palloc_init (void) 
-{
-  /* End of the kernel as recorded by the linker.
-     See kernel.lds.S. */
-  extern char _end;
-
-  /* Free memory. */
-  uint8_t *free_start = pg_round_up (&_end);
-  uint8_t *free_end = ptov (ram_pages * PGSIZE);
-  size_t free_pages = (free_end - free_start) / PGSIZE;
-  size_t user_pages = free_pages / 2;
-  size_t kernel_pages;
-  if (user_pages > user_page_limit)
-    user_pages = user_page_limit;
-  kernel_pages = free_pages - user_pages;
-
-  /* Give half of memory to kernel, half to user. */
-  init_pool (&kernel_pool, free_start, kernel_pages, "kernel pool");
-  init_pool (&user_pool, free_start + kernel_pages * PGSIZE,
-             user_pages, "user pool");
-}
-
-/* Obtains and returns a group of PAGE_CNT contiguous free pages.
-   If PAL_USER is set, the pages are obtained from the user pool,
-   otherwise from the kernel pool.  If PAL_ZERO is set in FLAGS,
-   then the pages are filled with zeros.  If too few pages are
-   available, returns a null pointer, unless PAL_ASSERT is set in
-   FLAGS, in which case the kernel panics. */
-void *
-palloc_get_multiple (enum palloc_flags flags, size_t page_cnt)
-{
-  struct pool *pool = flags & PAL_USER ? &user_pool : &kernel_pool;
-  void *pages;
-  size_t page_idx;
-
-  if (page_cnt == 0)
-    return NULL;
-
-  lock_acquire (&pool->lock);
-  page_idx = bitmap_scan_and_flip (pool->used_map, 0, page_cnt, false);
-  lock_release (&pool->lock);
-
-  if (page_idx != BITMAP_ERROR)
-    pages = pool->base + PGSIZE * page_idx;
-  else
-    pages = NULL;
-
-  if (pages != NULL) 
-    {
-      if (flags & PAL_ZERO)
-        memset (pages, 0, PGSIZE * page_cnt);
-    }
-  else 
-    {
-      if (flags & PAL_ASSERT)
-        PANIC ("palloc_get: out of pages");
-    }
-
-  return pages;
-}
-
-/* Obtains a single free page and returns its kernel virtual
-   address.
-   If PAL_USER is set, the page is obtained from the user pool,
-   otherwise from the kernel pool.  If PAL_ZERO is set in FLAGS,
-   then the page is filled with zeros.  If no pages are
-   available, returns a null pointer, unless PAL_ASSERT is set in
-   FLAGS, in which case the kernel panics. */
-void *
-palloc_get_page (enum palloc_flags flags) 
-{
-  return palloc_get_multiple (flags, 1);
-}
-
-/* Frees the PAGE_CNT pages starting at PAGES. */
-void
-palloc_free_multiple (void *pages, size_t page_cnt) 
-{
-  struct pool *pool;
-  size_t page_idx;
-
-  ASSERT (pg_ofs (pages) == 0);
-  if (pages == NULL || page_cnt == 0)
-    return;
-
-  if (page_from_pool (&kernel_pool, pages))
-    pool = &kernel_pool;
-  else if (page_from_pool (&user_pool, pages))
-    pool = &user_pool;
-  else
-    NOT_REACHED ();
-
-  page_idx = pg_no (pages) - pg_no (pool->base);
-
-#ifndef NDEBUG
-  memset (pages, 0xcc, PGSIZE * page_cnt);
-#endif
-
-  ASSERT (bitmap_all (pool->used_map, page_idx, page_cnt));
-  bitmap_set_multiple (pool->used_map, page_idx, page_cnt, false);
-}
-
-/* Frees the page at PAGE. */
-void
-palloc_free_page (void *page) 
-{
-  palloc_free_multiple (page, 1);
-}
-
-/* Initializes pool P as starting at START and ending at END,
-   naming it NAME for debugging purposes. */
-static void
-init_pool (struct pool *p, void *base, size_t page_cnt, const char *name) 
-{
-  /* We'll put the pool's used_map at its base.
-     Calculate the space needed for the bitmap
-     and subtract it from the pool's size. */
-  size_t bm_pages = DIV_ROUND_UP (bitmap_buf_size (page_cnt), PGSIZE);
-  if (bm_pages > page_cnt)
-    PANIC ("Not enough memory in %s for bitmap.", name);
-  page_cnt -= bm_pages;
-
-  printf ("%zu pages available in %s.\n", page_cnt, name);
-
-  /* Initialize the pool. */
-  lock_init (&p->lock);
-  p->used_map = bitmap_create_in_buf (page_cnt, base, bm_pages * PGSIZE);
-  p->base = base + bm_pages * PGSIZE;
-}
-
-/* Returns true if PAGE was allocated from POOL,
-   false otherwise. */
-static bool
-page_from_pool (const struct pool *pool, void *page) 
-{
-  size_t page_no = pg_no (page);
-  size_t start_page = pg_no (pool->base);
-  size_t end_page = start_page + bitmap_size (pool->used_map);
-
-  return page_no >= start_page && page_no < end_page;
-}
diff --git a/src/threads/palloc.h b/src/threads/palloc.h
deleted file mode 100644
index 2d41cf6..0000000
--- a/src/threads/palloc.h
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifndef THREADS_PALLOC_H
-#define THREADS_PALLOC_H
-
-#include <stddef.h>
-
-/* How to allocate pages. */
-enum palloc_flags
-  {
-    PAL_ASSERT = 001,           /* Panic on failure. */
-    PAL_ZERO = 002,             /* Zero page contents. */
-    PAL_USER = 004              /* User page. */
-  };
-
-/* Maximum number of pages to put in user pool. */
-extern size_t user_page_limit;
-
-void palloc_init (void);
-void *palloc_get_page (enum palloc_flags);
-void *palloc_get_multiple (enum palloc_flags, size_t page_cnt);
-void palloc_free_page (void *);
-void palloc_free_multiple (void *, size_t page_cnt);
-
-#endif /* threads/palloc.h */
diff --git a/src/threads/pte.h b/src/threads/pte.h
deleted file mode 100644
index 1660727..0000000
--- a/src/threads/pte.h
+++ /dev/null
@@ -1,107 +0,0 @@
-#ifndef THREADS_PTE_H
-#define THREADS_PTE_H
-
-#include "threads/vaddr.h"
-
-/* Functions and macros for working with x86 hardware page
-   tables.
-
-   See vaddr.h for more generic functions and macros for virtual
-   addresses.
-   
-   Virtual addresses are structured as follows:
-
-    31                  22 21                  12 11                   0
-   +----------------------+----------------------+----------------------+
-   | Page Directory Index |   Page Table Index   |    Page Offset       |
-   +----------------------+----------------------+----------------------+
-*/
-
-/* Page table index (bits 12:21). */
-#define	PTSHIFT PGBITS		           /* First page table bit. */
-#define PTBITS  10                         /* Number of page table bits. */
-#define PTSPAN  (1 << PTBITS << PGBITS)    /* Bytes covered by a page table. */
-#define PTMASK  BITMASK(PTSHIFT, PTBITS)   /* Page table bits (12:21). */
-
-/* Page directory index (bits 22:31). */
-#define PDSHIFT (PTSHIFT + PTBITS)         /* First page directory bit. */
-#define PDBITS  10                         /* Number of page dir bits. */
-#define PDMASK  BITMASK(PDSHIFT, PDBITS)   /* Page directory bits (22:31). */
-
-/* Obtains page table index from a virtual address. */
-static inline unsigned pt_no (const void *va) {
-  return ((uintptr_t) va & PTMASK) >> PTSHIFT;
-}
-
-/* Obtains page directory index from a virtual address. */
-static inline uintptr_t pd_no (const void *va) {
-  return (uintptr_t) va >> PDSHIFT;
-}
-
-/* Page directory and page table entries.
-
-   For more information see the section on page tables in the
-   Pintos reference guide chapter, or [IA32-v3a] 3.7.6
-   "Page-Directory and Page-Table Entries".
-
-   PDEs and PTEs share a common format:
-
-   31                                 12 11                     0
-   +------------------------------------+------------------------+
-   |         Physical Address           |         Flags          |
-   +------------------------------------+------------------------+
-
-   In a PDE, the physical address points to a page table.
-   In a PTE, the physical address points to a data or code page.
-   The important flags are listed below.
-   When a PDE or PTE is not "present", the other flags are
-   ignored.
-   A PDE or PTE that is initialized to 0 will be interpreted as
-   "not present", which is just fine. */
-#define PTE_FLAGS 0x00000fff    /* Flag bits. */
-#define PTE_ADDR  0xfffff000    /* Address bits. */
-#define PTE_AVL   0x00000e00    /* Bits available for OS use. */
-#define PTE_P 0x1               /* 1=present, 0=not present. */
-#define PTE_W 0x2               /* 1=read/write, 0=read-only. */
-#define PTE_U 0x4               /* 1=user/kernel, 0=kernel only. */
-#define PTE_A 0x20              /* 1=accessed, 0=not acccessed. */
-#define PTE_D 0x40              /* 1=dirty, 0=not dirty (PTEs only). */
-
-/* Returns a PDE that points to page table PT. */
-static inline uint32_t pde_create (uint32_t *pt) {
-  ASSERT (pg_ofs (pt) == 0);
-  return vtop (pt) | PTE_U | PTE_P | PTE_W;
-}
-
-/* Returns a pointer to the page table that page directory entry
-   PDE, which must "present", points to. */
-static inline uint32_t *pde_get_pt (uint32_t pde) {
-  ASSERT (pde & PTE_P);
-  return ptov (pde & PTE_ADDR);
-}
-
-/* Returns a PTE that points to PAGE.
-   The PTE's page is readable.
-   If WRITABLE is true then it will be writable as well.
-   The page will be usable only by ring 0 code (the kernel). */
-static inline uint32_t pte_create_kernel (void *page, bool writable) {
-  ASSERT (pg_ofs (page) == 0);
-  return vtop (page) | PTE_P | (writable ? PTE_W : 0);
-}
-
-/* Returns a PTE that points to PAGE.
-   The PTE's page is readable.
-   If WRITABLE is true then it will be writable as well.
-   The page will be usable by both user and kernel code. */
-static inline uint32_t pte_create_user (void *page, bool writable) {
-  return pte_create_kernel (page, writable) | PTE_U;
-}
-
-/* Returns a pointer to the page that page table entry PTE points
-   to. */
-static inline void *pte_get_page (uint32_t pte) {
-  return ptov (pte & PTE_ADDR);
-}
-
-#endif /* threads/pte.h */
-
diff --git a/src/threads/start.S b/src/threads/start.S
deleted file mode 100644
index 5a495c4..0000000
--- a/src/threads/start.S
+++ /dev/null
@@ -1,16 +0,0 @@
-#### The loader needs to have some way to know the kernel's entry
-#### point, that is, the address to which it should jump to start the
-#### kernel.  We handle this by writing the linker script kernel.lds.S
-#### so that this module appears at the very beginning of the kernel
-#### image, and then using that as the entry point.
-
-.section .start
-	
-.globl start
-.func start
-	# Call main.
-start:	call main
-
-	# main() should not return, but if it does, spin.
-1:	jmp 1b
-.endfunc
diff --git a/src/threads/switch.S b/src/threads/switch.S
deleted file mode 100644
index 244249e..0000000
--- a/src/threads/switch.S
+++ /dev/null
@@ -1,65 +0,0 @@
-#include "threads/switch.h"
-
-#### struct thread *switch_threads (struct thread *cur, struct thread *next);
-####
-#### Switches from CUR, which must be the running thread, to NEXT,
-#### which must also be running switch_threads(), returning CUR in
-#### NEXT's context.
-####
-#### This function works by assuming that the thread we're switching
-#### into is also running switch_threads().  Thus, all it has to do is
-#### preserve a few registers on the stack, then switch stacks and
-#### restore the registers.  As part of switching stacks we record the
-#### current stack pointer in CUR's thread structure.
-
-.globl switch_threads
-.func switch_threads
-switch_threads:
-	# Save caller's register state.
-	#
-	# Note that the SVR4 ABI allows us to destroy %eax, %ecx, %edx,
-	# but requires us to preserve %ebx, %ebp, %esi, %edi.  See
-	# [SysV-ABI-386] pages 3-11 and 3-12 for details.
-	#
-	# This stack frame must match the one set up by thread_create()
-	# in size.
-	pushl %ebx
-	pushl %ebp
-	pushl %esi
-	pushl %edi
-
-	# Get offsetof (struct thread, stack).
-.globl thread_stack_ofs
-	mov thread_stack_ofs, %edx
-
-	# Save current stack pointer to old thread's stack, if any.
-	movl SWITCH_CUR(%esp), %eax
-	movl %esp, (%eax,%edx,1)
-
-	# Restore stack pointer from new thread's stack.
-	movl SWITCH_NEXT(%esp), %ecx
-	movl (%ecx,%edx,1), %esp
-
-	# Restore caller's register state.
-	popl %edi
-	popl %esi
-	popl %ebp
-	popl %ebx
-        ret
-.endfunc
-
-.globl switch_entry
-.func switch_entry
-switch_entry:
-	# Discard switch_threads() arguments.
-	addl $8, %esp
-
-	# Call schedule_tail(prev).
-	pushl %eax
-.globl schedule_tail
-	call schedule_tail
-	addl $4, %esp
-
-	# Start thread proper.
-	ret
-.endfunc
diff --git a/src/threads/switch.h b/src/threads/switch.h
deleted file mode 100644
index cc156b6..0000000
--- a/src/threads/switch.h
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef THREADS_SWITCH_H
-#define THREADS_SWITCH_H
-
-#ifndef __ASSEMBLER__
-/* switch_thread()'s stack frame. */
-struct switch_threads_frame 
-  {
-    uint32_t edi;               /*  0: Saved %edi. */
-    uint32_t esi;               /*  4: Saved %esi. */
-    uint32_t ebp;               /*  8: Saved %ebp. */
-    uint32_t ebx;               /* 12: Saved %ebx. */
-    void (*eip) (void);         /* 16: Return address. */
-    struct thread *cur;         /* 20: switch_threads()'s CUR argument. */
-    struct thread *next;        /* 24: switch_threads()'s NEXT argument. */
-  };
-
-/* Switches from CUR, which must be the running thread, to NEXT,
-   which must also be running switch_threads(), returning CUR in
-   NEXT's context. */
-struct thread *switch_threads (struct thread *cur, struct thread *next);
-
-/* Stack frame for switch_entry(). */
-struct switch_entry_frame
-  {
-    void (*eip) (void);
-  };
-
-void switch_entry (void);
-
-/* Pops the CUR and NEXT arguments off the stack, for use in
-   initializing threads. */
-void switch_thunk (void);
-#endif
-
-/* Offsets used by switch.S. */
-#define SWITCH_CUR      20
-#define SWITCH_NEXT     24
-
-#endif /* threads/switch.h */
diff --git a/src/threads/synch.c b/src/threads/synch.c
deleted file mode 100644
index 317c68a..0000000
--- a/src/threads/synch.c
+++ /dev/null
@@ -1,338 +0,0 @@
-/* This file is derived from source code for the Nachos
-   instructional operating system.  The Nachos copyright notice
-   is reproduced in full below. */
-
-/* Copyright (c) 1992-1996 The Regents of the University of California.
-   All rights reserved.
-
-   Permission to use, copy, modify, and distribute this software
-   and its documentation for any purpose, without fee, and
-   without written agreement is hereby granted, provided that the
-   above copyright notice and the following two paragraphs appear
-   in all copies of this software.
-
-   IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO
-   ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR
-   CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE
-   AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA
-   HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-   THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY
-   WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-   PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS"
-   BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
-   PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
-   MODIFICATIONS.
-*/
-
-#include "threads/synch.h"
-#include <stdio.h>
-#include <string.h>
-#include "threads/interrupt.h"
-#include "threads/thread.h"
-
-/* Initializes semaphore SEMA to VALUE.  A semaphore is a
-   nonnegative integer along with two atomic operators for
-   manipulating it:
-
-   - down or "P": wait for the value to become positive, then
-     decrement it.
-
-   - up or "V": increment the value (and wake up one waiting
-     thread, if any). */
-void
-sema_init (struct semaphore *sema, unsigned value) 
-{
-  ASSERT (sema != NULL);
-
-  sema->value = value;
-  list_init (&sema->waiters);
-}
-
-/* Down or "P" operation on a semaphore.  Waits for SEMA's value
-   to become positive and then atomically decrements it.
-
-   This function may sleep, so it must not be called within an
-   interrupt handler.  This function may be called with
-   interrupts disabled, but if it sleeps then the next scheduled
-   thread will probably turn interrupts back on. */
-void
-sema_down (struct semaphore *sema) 
-{
-  enum intr_level old_level;
-
-  ASSERT (sema != NULL);
-  ASSERT (!intr_context ());
-
-  old_level = intr_disable ();
-  while (sema->value == 0) 
-    {
-      list_push_back (&sema->waiters, &thread_current ()->elem);
-      thread_block ();
-    }
-  sema->value--;
-  intr_set_level (old_level);
-}
-
-/* Down or "P" operation on a semaphore, but only if the
-   semaphore is not already 0.  Returns true if the semaphore is
-   decremented, false otherwise.
-
-   This function may be called from an interrupt handler. */
-bool
-sema_try_down (struct semaphore *sema) 
-{
-  enum intr_level old_level;
-  bool success;
-
-  ASSERT (sema != NULL);
-
-  old_level = intr_disable ();
-  if (sema->value > 0) 
-    {
-      sema->value--;
-      success = true; 
-    }
-  else
-    success = false;
-  intr_set_level (old_level);
-
-  return success;
-}
-
-/* Up or "V" operation on a semaphore.  Increments SEMA's value
-   and wakes up one thread of those waiting for SEMA, if any.
-
-   This function may be called from an interrupt handler. */
-void
-sema_up (struct semaphore *sema) 
-{
-  enum intr_level old_level;
-
-  ASSERT (sema != NULL);
-
-  old_level = intr_disable ();
-  if (!list_empty (&sema->waiters)) 
-    thread_unblock (list_entry (list_pop_front (&sema->waiters),
-                                struct thread, elem));
-  sema->value++;
-  intr_set_level (old_level);
-}
-
-static void sema_test_helper (void *sema_);
-
-/* Self-test for semaphores that makes control "ping-pong"
-   between a pair of threads.  Insert calls to printf() to see
-   what's going on. */
-void
-sema_self_test (void) 
-{
-  struct semaphore sema[2];
-  int i;
-
-  printf ("Testing semaphores...");
-  sema_init (&sema[0], 0);
-  sema_init (&sema[1], 0);
-  thread_create ("sema-test", PRI_DEFAULT, sema_test_helper, &sema);
-  for (i = 0; i < 10; i++) 
-    {
-      sema_up (&sema[0]);
-      sema_down (&sema[1]);
-    }
-  printf ("done.\n");
-}
-
-/* Thread function used by sema_self_test(). */
-static void
-sema_test_helper (void *sema_) 
-{
-  struct semaphore *sema = sema_;
-  int i;
-
-  for (i = 0; i < 10; i++) 
-    {
-      sema_down (&sema[0]);
-      sema_up (&sema[1]);
-    }
-}
-
-/* Initializes LOCK.  A lock can be held by at most a single
-   thread at any given time.  Our locks are not "recursive", that
-   is, it is an error for the thread currently holding a lock to
-   try to acquire that lock.
-
-   A lock is a specialization of a semaphore with an initial
-   value of 1.  The difference between a lock and such a
-   semaphore is twofold.  First, a semaphore can have a value
-   greater than 1, but a lock can only be owned by a single
-   thread at a time.  Second, a semaphore does not have an owner,
-   meaning that one thread can "down" the semaphore and then
-   another one "up" it, but with a lock the same thread must both
-   acquire and release it.  When these restrictions prove
-   onerous, it's a good sign that a semaphore should be used,
-   instead of a lock. */
-void
-lock_init (struct lock *lock)
-{
-  ASSERT (lock != NULL);
-
-  lock->holder = NULL;
-  sema_init (&lock->semaphore, 1);
-}
-
-/* Acquires LOCK, sleeping until it becomes available if
-   necessary.  The lock must not already be held by the current
-   thread.
-
-   This function may sleep, so it must not be called within an
-   interrupt handler.  This function may be called with
-   interrupts disabled, but interrupts will be turned back on if
-   we need to sleep. */
-void
-lock_acquire (struct lock *lock)
-{
-  ASSERT (lock != NULL);
-  ASSERT (!intr_context ());
-  ASSERT (!lock_held_by_current_thread (lock));
-
-  sema_down (&lock->semaphore);
-  lock->holder = thread_current ();
-}
-
-/* Tries to acquires LOCK and returns true if successful or false
-   on failure.  The lock must not already be held by the current
-   thread.
-
-   This function will not sleep, so it may be called within an
-   interrupt handler. */
-bool
-lock_try_acquire (struct lock *lock)
-{
-  bool success;
-
-  ASSERT (lock != NULL);
-  ASSERT (!lock_held_by_current_thread (lock));
-
-  success = sema_try_down (&lock->semaphore);
-  if (success)
-    lock->holder = thread_current ();
-  return success;
-}
-
-/* Releases LOCK, which must be owned by the current thread.
-
-   An interrupt handler cannot acquire a lock, so it does not
-   make sense to try to release a lock within an interrupt
-   handler. */
-void
-lock_release (struct lock *lock) 
-{
-  ASSERT (lock != NULL);
-  ASSERT (lock_held_by_current_thread (lock));
-
-  lock->holder = NULL;
-  sema_up (&lock->semaphore);
-}
-
-/* Returns true if the current thread holds LOCK, false
-   otherwise.  (Note that testing whether some other thread holds
-   a lock would be racy.) */
-bool
-lock_held_by_current_thread (const struct lock *lock) 
-{
-  ASSERT (lock != NULL);
-
-  return lock->holder == thread_current ();
-}
-
-/* One semaphore in a list. */
-struct semaphore_elem 
-  {
-    struct list_elem elem;              /* List element. */
-    struct semaphore semaphore;         /* This semaphore. */
-  };
-
-/* Initializes condition variable COND.  A condition variable
-   allows one piece of code to signal a condition and cooperating
-   code to receive the signal and act upon it. */
-void
-cond_init (struct condition *cond)
-{
-  ASSERT (cond != NULL);
-
-  list_init (&cond->waiters);
-}
-
-/* Atomically releases LOCK and waits for COND to be signaled by
-   some other piece of code.  After COND is signaled, LOCK is
-   reacquired before returning.  LOCK must be held before calling
-   this function.
-
-   The monitor implemented by this function is "Mesa" style, not
-   "Hoare" style, that is, sending and receiving a signal are not
-   an atomic operation.  Thus, typically the caller must recheck
-   the condition after the wait completes and, if necessary, wait
-   again.
-
-   A given condition variable is associated with only a single
-   lock, but one lock may be associated with any number of
-   condition variables.  That is, there is a one-to-many mapping
-   from locks to condition variables.
-
-   This function may sleep, so it must not be called within an
-   interrupt handler.  This function may be called with
-   interrupts disabled, but interrupts will be turned back on if
-   we need to sleep. */
-void
-cond_wait (struct condition *cond, struct lock *lock) 
-{
-  struct semaphore_elem waiter;
-
-  ASSERT (cond != NULL);
-  ASSERT (lock != NULL);
-  ASSERT (!intr_context ());
-  ASSERT (lock_held_by_current_thread (lock));
-  
-  sema_init (&waiter.semaphore, 0);
-  list_push_back (&cond->waiters, &waiter.elem);
-  lock_release (lock);
-  sema_down (&waiter.semaphore);
-  lock_acquire (lock);
-}
-
-/* If any threads are waiting on COND (protected by LOCK), then
-   this function signals one of them to wake up from its wait.
-   LOCK must be held before calling this function.
-
-   An interrupt handler cannot acquire a lock, so it does not
-   make sense to try to signal a condition variable within an
-   interrupt handler. */
-void
-cond_signal (struct condition *cond, struct lock *lock UNUSED) 
-{
-  ASSERT (cond != NULL);
-  ASSERT (lock != NULL);
-  ASSERT (!intr_context ());
-  ASSERT (lock_held_by_current_thread (lock));
-
-  if (!list_empty (&cond->waiters)) 
-    sema_up (&list_entry (list_pop_front (&cond->waiters),
-                          struct semaphore_elem, elem)->semaphore);
-}
-
-/* Wakes up all threads, if any, waiting on COND (protected by
-   LOCK).  LOCK must be held before calling this function.
-
-   An interrupt handler cannot acquire a lock, so it does not
-   make sense to try to signal a condition variable within an
-   interrupt handler. */
-void
-cond_broadcast (struct condition *cond, struct lock *lock) 
-{
-  ASSERT (cond != NULL);
-  ASSERT (lock != NULL);
-
-  while (!list_empty (&cond->waiters))
-    cond_signal (cond, lock);
-}
diff --git a/src/threads/synch.h b/src/threads/synch.h
deleted file mode 100644
index a19e88b..0000000
--- a/src/threads/synch.h
+++ /dev/null
@@ -1,51 +0,0 @@
-#ifndef THREADS_SYNCH_H
-#define THREADS_SYNCH_H
-
-#include <list.h>
-#include <stdbool.h>
-
-/* A counting semaphore. */
-struct semaphore 
-  {
-    unsigned value;             /* Current value. */
-    struct list waiters;        /* List of waiting threads. */
-  };
-
-void sema_init (struct semaphore *, unsigned value);
-void sema_down (struct semaphore *);
-bool sema_try_down (struct semaphore *);
-void sema_up (struct semaphore *);
-void sema_self_test (void);
-
-/* Lock. */
-struct lock 
-  {
-    struct thread *holder;      /* Thread holding lock (for debugging). */
-    struct semaphore semaphore; /* Binary semaphore controlling access. */
-  };
-
-void lock_init (struct lock *);
-void lock_acquire (struct lock *);
-bool lock_try_acquire (struct lock *);
-void lock_release (struct lock *);
-bool lock_held_by_current_thread (const struct lock *);
-
-/* Condition variable. */
-struct condition 
-  {
-    struct list waiters;        /* List of waiting threads. */
-  };
-
-void cond_init (struct condition *);
-void cond_wait (struct condition *, struct lock *);
-void cond_signal (struct condition *, struct lock *);
-void cond_broadcast (struct condition *, struct lock *);
-
-/* Optimization barrier.
-
-   The compiler will not reorder operations across an
-   optimization barrier.  See "Optimization Barriers" in the
-   reference guide for more information.*/
-#define barrier() asm volatile ("" : : : "memory")
-
-#endif /* threads/synch.h */
diff --git a/src/threads/synchlist.c b/src/threads/synchlist.c
deleted file mode 100644
index cc1e570..0000000
--- a/src/threads/synchlist.c
+++ /dev/null
@@ -1,98 +0,0 @@
-// synchlist.cc
-//	Routines for synchronized access to a list.
-//
-//	Implemented by surrounding the List abstraction
-//	with synchronization routines.
-//
-// 	Implemented in "monitor"-style -- surround each procedure with a
-// 	lock acquire and release pair, using condition signal and wait for
-// 	synchronization.
-//
-// Copyright (c) 1992-1993 The Regents of the University of California.
-// All rights reserved.  See copyright.h for copyright notice and limitation 
-// of liability and disclaimer of warranty provisions.
-//
-// modified by Vlad Jahundovics for Pintos (translation from C++ to C)
-
-
-#include "copyright.h"
-#include "synchlist.h"
-#include "threads/malloc.h"
-
-//----------------------------------------------------------------------
-// SynchList::SynchList
-//	Initialize the data structures needed for a 
-//	synchronized list, empty to start with.
-//	Elements can now be added to the list.
-//----------------------------------------------------------------------
-
-void sl_init(struct SynchList *sl)
-{
-  list_init(&sl->sl_list);
-  lock_init(&sl->sl_lock);
-  cond_init(&sl->sl_empty);
-}
-
-
-//----------------------------------------------------------------------
-// SynchList::~SynchList
-//	Remove and de-allocate all elements of the synchronized list
-//----------------------------------------------------------------------
-
-void sl_destroy(struct SynchList *sl)
-{
-  struct list_elem *e;
-  struct SL_element *sl_elem;
-  while(!list_empty(&sl->sl_list)){
-    e = list_pop_front(&sl->sl_list);
-    sl_elem = list_entry(e, struct SL_element, elem);
-    free(sl_elem);
-  }
-}
-
-
-//----------------------------------------------------------------------
-// SynchList::Append
-//      Append an "item" to the end of the list.  Wake up anyone
-//	waiting for an element to be appended.
-//
-//	"item" is the thing to put on the list, it can be a pointer to 
-//		anything.
-//----------------------------------------------------------------------
-
-void sl_append(struct SynchList *sl, void *item)
-{
-  lock_acquire(&sl->sl_lock);                // enforce mutual exclusive access to the list 
-  struct SL_element *sl_elem = malloc(sizeof(struct SL_element));
-  sl_elem->item = item;
-  list_push_back(&sl->sl_list, &sl_elem->elem);
-  cond_signal(&sl->sl_empty,&sl->sl_lock);  // wake up a waiter, if any
-  lock_release(&sl->sl_lock);              
-  return;
-}
-
-
-//----------------------------------------------------------------------
-// SynchList::Remove
-//      Remove an "item" from the beginning of the list.  Wait if
-//	the list is empty.
-// Returns:
-//	The removed item. 
-//----------------------------------------------------------------------
-
-void *sl_remove(struct SynchList *sl)
-{
-  struct list_elem *e;
-  void *item;
-  lock_acquire(&sl->sl_lock);                // enforce mutual exclusion
-  while(list_empty(&sl->sl_list)){
-    cond_wait(&sl->sl_empty, &sl->sl_lock);  // wait until list isn't empty
-  }
-  e = list_pop_front(&sl->sl_list);
-  struct SL_element *sl_elem = list_entry(e, struct SL_element, elem);
-  item = sl_elem->item;
-  free(sl_elem);
-  lock_release(&sl->sl_lock);
-  return item;
-}
-
diff --git a/src/userprog/.gitignore b/src/userprog/.gitignore
deleted file mode 100644
index 6d5357c..0000000
--- a/src/userprog/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-build
-bochsrc.txt
-bochsout.txt
diff --git a/src/userprog/Make.vars b/src/userprog/Make.vars
deleted file mode 100644
index eebac65..0000000
--- a/src/userprog/Make.vars
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- makefile -*-
-
-os.dsk: DEFINES = -DUSERPROG -DFILESYS
-KERNEL_SUBDIRS = threads devices lib lib/kernel userprog filesys
-TEST_SUBDIRS = tests/userprog #tests/userprog/no-vm tests/filesys/base
-GRADING_FILE = $(SRCDIR)/tests/userprog/Grading
-SIMULATOR = --qemu
diff --git a/src/userprog/Makefile b/src/userprog/Makefile
deleted file mode 100644
index 34c10aa..0000000
--- a/src/userprog/Makefile
+++ /dev/null
@@ -1 +0,0 @@
-include ../Makefile.kernel
diff --git a/src/userprog/exception.c b/src/userprog/exception.c
deleted file mode 100644
index 19aca12..0000000
--- a/src/userprog/exception.c
+++ /dev/null
@@ -1,161 +0,0 @@
-#include "userprog/exception.h"
-#include <inttypes.h>
-#include <stdio.h>
-#include "userprog/gdt.h"
-#include "threads/interrupt.h"
-#include "threads/thread.h"
-
-/* Number of page faults processed. */
-static long long page_fault_cnt;
-
-static void kill (struct intr_frame *);
-static void page_fault (struct intr_frame *);
-
-/* Registers handlers for interrupts that can be caused by user
-   programs.
-
-   In a real Unix-like OS, most of these interrupts would be
-   passed along to the user process in the form of signals, as
-   described in [SV-386] 3-24 and 3-25, but we don't implement
-   signals.  Instead, we'll make them simply kill the user
-   process.
-
-   Page faults are an exception.  Here they are treated the same
-   way as other exceptions, but this will need to change to
-   implement virtual memory.
-
-   Refer to [IA32-v3a] section 5.15 "Exception and Interrupt
-   Reference" for a description of each of these exceptions. */
-void
-exception_init (void) 
-{
-  /* These exceptions can be raised explicitly by a user program,
-     e.g. via the INT, INT3, INTO, and BOUND instructions.  Thus,
-     we set DPL==3, meaning that user programs are allowed to
-     invoke them via these instructions. */
-  intr_register_int (3, 3, INTR_ON, kill, "#BP Breakpoint Exception");
-  intr_register_int (4, 3, INTR_ON, kill, "#OF Overflow Exception");
-  intr_register_int (5, 3, INTR_ON, kill,
-                     "#BR BOUND Range Exceeded Exception");
-
-  /* These exceptions have DPL==0, preventing user processes from
-     invoking them via the INT instruction.  They can still be
-     caused indirectly, e.g. #DE can be caused by dividing by
-     0.  */
-  intr_register_int (0, 0, INTR_ON, kill, "#DE Divide Error");
-  intr_register_int (1, 0, INTR_ON, kill, "#DB Debug Exception");
-  intr_register_int (6, 0, INTR_ON, kill, "#UD Invalid Opcode Exception");
-  intr_register_int (7, 0, INTR_ON, kill,
-                     "#NM Device Not Available Exception");
-  intr_register_int (11, 0, INTR_ON, kill, "#NP Segment Not Present");
-  intr_register_int (12, 0, INTR_ON, kill, "#SS Stack Fault Exception");
-  intr_register_int (13, 0, INTR_ON, kill, "#GP General Protection Exception");
-  intr_register_int (16, 0, INTR_ON, kill, "#MF x87 FPU Floating-Point Error");
-  intr_register_int (19, 0, INTR_ON, kill,
-                     "#XF SIMD Floating-Point Exception");
-
-  /* Most exceptions can be handled with interrupts turned on.
-     We need to disable interrupts for page faults because the
-     fault address is stored in CR2 and needs to be preserved. */
-  intr_register_int (14, 0, INTR_OFF, page_fault, "#PF Page-Fault Exception");
-}
-
-/* Prints exception statistics. */
-void
-exception_print_stats (void) 
-{
-  printf ("Exception: %lld page faults\n", page_fault_cnt);
-}
-
-/* Handler for an exception (probably) caused by a user process. */
-static void
-kill (struct intr_frame *f) 
-{
-  /* This interrupt is one (probably) caused by a user process.
-     For example, the process might have tried to access unmapped
-     virtual memory (a page fault).  For now, we simply kill the
-     user process.  Later, we'll want to handle page faults in
-     the kernel.  Real Unix-like operating systems pass most
-     exceptions back to the process via signals, but we don't
-     implement them. */
-     
-  /* The interrupt frame's code segment value tells us where the
-     exception originated. */
-  switch (f->cs)
-    {
-    case SEL_UCSEG:
-      /* User's code segment, so it's a user exception, as we
-         expected.  Kill the user process.  */
-      printf ("%s: dying due to interrupt %#04x (%s).\n",
-              thread_name (), f->vec_no, intr_name (f->vec_no));
-      intr_dump_frame (f);
-      thread_exit (); 
-
-    case SEL_KCSEG:
-      /* Kernel's code segment, which indicates a kernel bug.
-         Kernel code shouldn't throw exceptions.  (Page faults
-         may cause kernel exceptions--but they shouldn't arrive
-         here.)  Panic the kernel to make the point.  */
-      intr_dump_frame (f);
-      PANIC ("Kernel bug - unexpected interrupt in kernel"); 
-
-    default:
-      /* Some other code segment?  Shouldn't happen.  Panic the
-         kernel. */
-      printf ("Interrupt %#04x (%s) in unknown segment %04x\n",
-             f->vec_no, intr_name (f->vec_no), f->cs);
-      thread_exit ();
-    }
-}
-
-/* Page fault handler.  This is a skeleton that must be filled in
-   to implement virtual memory.  Some solutions to project 2 may
-   also require modifying this code.
-
-   At entry, the address that faulted is in CR2 (Control Register
-   2) and information about the fault, formatted as described in
-   the PF_* macros in exception.h, is in F's error_code member.  The
-   example code here shows how to parse that information.  You
-   can find more information about both of these in the
-   description of "Interrupt 14--Page Fault Exception (#PF)" in
-   [IA32-v3a] section 5.15 "Exception and Interrupt Reference". */
-static void
-page_fault (struct intr_frame *f) 
-{
-  bool not_present;  /* True: not-present page, false: writing r/o page. */
-  bool write;        /* True: access was write, false: access was read. */
-  bool user;         /* True: access by user, false: access by kernel. */
-  void *fault_addr;  /* Fault address. */
-
-  /* Obtain faulting address, the virtual address that was
-     accessed to cause the fault.  It may point to code or to
-     data.  It is not necessarily the address of the instruction
-     that caused the fault (that's f->eip).
-     See [IA32-v2a] "MOV--Move to/from Control Registers" and
-     [IA32-v3a] 5.15 "Interrupt 14--Page Fault Exception
-     (#PF)". */
-  asm ("movl %%cr2, %0" : "=r" (fault_addr));
-
-  /* Turn interrupts back on (they were only off so that we could
-     be assured of reading CR2 before it changed). */
-  intr_enable ();
-
-  /* Count page faults. */
-  page_fault_cnt++;
-
-  /* Determine cause. */
-  not_present = (f->error_code & PF_P) == 0;
-  write = (f->error_code & PF_W) != 0;
-  user = (f->error_code & PF_U) != 0;
-
-  /* To implement virtual memory, delete the rest of the function
-     body, and replace it with code that brings in the page to
-     which fault_addr refers. */
-  printf ("Page fault at %p: %s error %s page in %s context.\n",
-          fault_addr,
-          not_present ? "not present" : "rights violation",
-          write ? "writing" : "reading",
-          user ? "user" : "kernel");
-  kill (f);
-}
-
diff --git a/src/userprog/exception.h b/src/userprog/exception.h
deleted file mode 100644
index f83e615..0000000
--- a/src/userprog/exception.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef USERPROG_EXCEPTION_H
-#define USERPROG_EXCEPTION_H
-
-/* Page fault error code bits that describe the cause of the exception.  */
-#define PF_P 0x1    /* 0: not-present page. 1: access rights violation. */
-#define PF_W 0x2    /* 0: read, 1: write. */
-#define PF_U 0x4    /* 0: kernel, 1: user process. */
-
-void exception_init (void);
-void exception_print_stats (void);
-
-#endif /* userprog/exception.h */
diff --git a/src/userprog/gdt.c b/src/userprog/gdt.c
deleted file mode 100644
index a7423b7..0000000
--- a/src/userprog/gdt.c
+++ /dev/null
@@ -1,146 +0,0 @@
-#include "userprog/gdt.h"
-#include <debug.h>
-#include "userprog/tss.h"
-#include "threads/palloc.h"
-#include "threads/vaddr.h"
-
-/* The Global Descriptor Table (GDT).
-
-   The GDT, an x86-specific structure, defines segments that can
-   potentially be used by all processes in a system, subject to
-   their permissions.  There is also a per-process Local
-   Descriptor Table (LDT) but that is not used by modern
-   operating systems.
-
-   Each entry in the GDT, which is known by its byte offset in
-   the table, identifies a segment.  For our purposes only three
-   types of segments are of interest: code, data, and TSS or
-   Task-State Segment descriptors.  The former two types are
-   exactly what they sound like.  The TSS is used primarily for
-   stack switching on interrupts.
-
-   For more information on the GDT as used here, refer to
-   [IA32-v3a] 3.2 "Using Segments" through 3.5 "System Descriptor
-   Types". */
-static uint64_t gdt[SEL_CNT];
-
-/* GDT helpers. */
-static uint64_t make_code_desc (int dpl);
-static uint64_t make_data_desc (int dpl);
-static uint64_t make_tss_desc (void *laddr);
-static uint64_t make_gdtr_operand (uint16_t limit, void *base);
-
-/* Sets up a proper GDT.  The bootstrap loader's GDT didn't
-   include user-mode selectors or a TSS, but we need both now. */
-void
-gdt_init (void)
-{
-  uint64_t gdtr_operand;
-
-  /* Initialize GDT. */
-  gdt[SEL_NULL / sizeof *gdt] = 0;
-  gdt[SEL_KCSEG / sizeof *gdt] = make_code_desc (0);
-  gdt[SEL_KDSEG / sizeof *gdt] = make_data_desc (0);
-  gdt[SEL_UCSEG / sizeof *gdt] = make_code_desc (3);
-  gdt[SEL_UDSEG / sizeof *gdt] = make_data_desc (3);
-  gdt[SEL_TSS / sizeof *gdt] = make_tss_desc (tss_get ());
-
-  /* Load GDTR, TR.  See [IA32-v3a] 2.4.1 "Global Descriptor
-     Table Register (GDTR)", 2.4.4 "Task Register (TR)", and
-     6.2.4 "Task Register".  */
-  gdtr_operand = make_gdtr_operand (sizeof gdt - 1, gdt);
-  asm volatile ("lgdt %0" : : "m" (gdtr_operand));
-  asm volatile ("ltr %w0" : : "r" (SEL_TSS));
-}
-
-/* System segment or code/data segment? */
-enum seg_class
-  {
-    CLS_SYSTEM = 0,             /* System segment. */
-    CLS_CODE_DATA = 1           /* Code or data segment. */
-  };
-
-/* Limit has byte or 4 kB page granularity? */
-enum seg_granularity
-  {
-    GRAN_BYTE = 0,              /* Limit has 1-byte granularity. */
-    GRAN_PAGE = 1               /* Limit has 4 kB granularity. */
-  };
-
-/* Returns a segment descriptor with the given 32-bit BASE and
-   20-bit LIMIT (whose interpretation depends on GRANULARITY).
-   The descriptor represents a system or code/data segment
-   according to CLASS, and TYPE is its type (whose interpretation
-   depends on the class).
-
-   The segment has descriptor privilege level DPL, meaning that
-   it can be used in rings numbered DPL or lower.  In practice,
-   DPL==3 means that user processes can use the segment and
-   DPL==0 means that only the kernel can use the segment.  See
-   [IA32-v3a] 4.5 "Privilege Levels" for further discussion. */
-static uint64_t
-make_seg_desc (uint32_t base,
-               uint32_t limit,
-               enum seg_class class,
-               int type,
-               int dpl,
-               enum seg_granularity granularity)
-{
-  uint32_t e0, e1;
-
-  ASSERT (limit <= 0xfffff);
-  ASSERT (class == CLS_SYSTEM || class == CLS_CODE_DATA);
-  ASSERT (type >= 0 && type <= 15);
-  ASSERT (dpl >= 0 && dpl <= 3);
-  ASSERT (granularity == GRAN_BYTE || granularity == GRAN_PAGE);
-
-  e0 = ((limit & 0xffff)             /* Limit 15:0. */
-        | (base << 16));             /* Base 15:0. */
-
-  e1 = (((base >> 16) & 0xff)        /* Base 23:16. */
-        | (type << 8)                /* Segment type. */
-        | (class << 12)              /* 0=system, 1=code/data. */
-        | (dpl << 13)                /* Descriptor privilege. */
-        | (1 << 15)                  /* Present. */
-        | (limit & 0xf0000)          /* Limit 16:19. */
-        | (1 << 22)                  /* 32-bit segment. */
-        | (granularity << 23)        /* Byte/page granularity. */
-        | (base & 0xff000000));      /* Base 31:24. */
-
-  return e0 | ((uint64_t) e1 << 32);
-}
-
-/* Returns a descriptor for a readable code segment with base at
-   0, a limit of 4 GB, and the given DPL. */
-static uint64_t
-make_code_desc (int dpl)
-{
-  return make_seg_desc (0, 0xfffff, CLS_CODE_DATA, 10, dpl, GRAN_PAGE);
-}
-
-/* Returns a descriptor for a writable data segment with base at
-   0, a limit of 4 GB, and the given DPL. */
-static uint64_t
-make_data_desc (int dpl)
-{
-  return make_seg_desc (0, 0xfffff, CLS_CODE_DATA, 2, dpl, GRAN_PAGE);
-}
-
-/* Returns a descriptor for an "available" 32-bit Task-State
-   Segment with its base at the given linear address, a limit of
-   0x67 bytes (the size of a 32-bit TSS), and a DPL of 0.
-   See [IA32-v3a] 6.2.2 "TSS Descriptor". */
-static uint64_t
-make_tss_desc (void *laddr)
-{
-  return make_seg_desc ((uint32_t) laddr, 0x67, CLS_SYSTEM, 9, 0, GRAN_BYTE);
-}
-
-
-/* Returns a descriptor that yields the given LIMIT and BASE when
-   used as an operand for the LGDT instruction. */
-static uint64_t
-make_gdtr_operand (uint16_t limit, void *base)
-{
-  return limit | ((uint64_t) (uint32_t) base << 16);
-}
diff --git a/src/userprog/gdt.h b/src/userprog/gdt.h
deleted file mode 100644
index 81fe50c..0000000
--- a/src/userprog/gdt.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef USERPROG_GDT_H
-#define USERPROG_GDT_H
-
-#include "threads/loader.h"
-
-/* Segment selectors.
-   More selectors are defined by the loader in loader.h. */
-#define SEL_UCSEG       0x1B    /* User code selector. */
-#define SEL_UDSEG       0x23    /* User data selector. */
-#define SEL_TSS         0x28    /* Task-state segment. */
-#define SEL_CNT         6       /* Number of segments. */
-
-void gdt_init (void);
-
-#endif /* userprog/gdt.h */
diff --git a/src/userprog/pagedir.c b/src/userprog/pagedir.c
deleted file mode 100644
index 30bdfe2..0000000
--- a/src/userprog/pagedir.c
+++ /dev/null
@@ -1,263 +0,0 @@
-#include "userprog/pagedir.h"
-#include <stdbool.h>
-#include <stddef.h>
-#include <string.h>
-#include "threads/init.h"
-#include "threads/pte.h"
-#include "threads/palloc.h"
-
-static uint32_t *active_pd (void);
-static void invalidate_pagedir (uint32_t *);
-
-/* Creates a new page directory that has mappings for kernel
-   virtual addresses, but none for user virtual addresses.
-   Returns the new page directory, or a null pointer if memory
-   allocation fails. */
-uint32_t *
-pagedir_create (void) 
-{
-  uint32_t *pd = palloc_get_page (0);
-  if (pd != NULL)
-    memcpy (pd, base_page_dir, PGSIZE);
-  return pd;
-}
-
-/* Destroys page directory PD, freeing all the pages it
-   references. */
-void
-pagedir_destroy (uint32_t *pd) 
-{
-  uint32_t *pde;
-
-  if (pd == NULL)
-    return;
-
-  ASSERT (pd != base_page_dir);
-  for (pde = pd; pde < pd + pd_no (PHYS_BASE); pde++)
-    if (*pde & PTE_P) 
-      {
-        uint32_t *pt = pde_get_pt (*pde);
-        uint32_t *pte;
-        
-        for (pte = pt; pte < pt + PGSIZE / sizeof *pte; pte++)
-          if (*pte & PTE_P) 
-            palloc_free_page (pte_get_page (*pte));
-        palloc_free_page (pt);
-      }
-  palloc_free_page (pd);
-}
-
-/* Returns the address of the page table entry for virtual
-   address VADDR in page directory PD.
-   If PD does not have a page table for VADDR, behavior depends
-   on CREATE.  If CREATE is true, then a new page table is
-   created and a pointer into it is returned.  Otherwise, a null
-   pointer is returned. */
-static uint32_t *
-lookup_page (uint32_t *pd, const void *vaddr, bool create)
-{
-  uint32_t *pt, *pde;
-
-  ASSERT (pd != NULL);
-
-  /* Shouldn't create new kernel virtual mappings. */
-  ASSERT (!create || is_user_vaddr (vaddr));
-
-  /* Check for a page table for VADDR.
-     If one is missing, create one if requested. */
-  pde = pd + pd_no (vaddr);
-  if (*pde == 0) 
-    {
-      if (create)
-        {
-          pt = palloc_get_page (PAL_ZERO);
-          if (pt == NULL) 
-            return NULL; 
-      
-          *pde = pde_create (pt);
-        }
-      else
-        return NULL;
-    }
-
-  /* Return the page table entry. */
-  pt = pde_get_pt (*pde);
-  return &pt[pt_no (vaddr)];
-}
-
-/* Adds a mapping in page directory PD from user virtual page
-   UPAGE to the physical frame identified by kernel virtual
-   address KPAGE.
-   UPAGE must not already be mapped.
-   KPAGE should probably be a page obtained from the user pool
-   with palloc_get_page().
-   If WRITABLE is true, the new page is read/write;
-   otherwise it is read-only.
-   Returns true if successful, false if memory allocation
-   failed. */
-bool
-pagedir_set_page (uint32_t *pd, void *upage, void *kpage, bool writable)
-{
-  uint32_t *pte;
-
-  ASSERT (pg_ofs (upage) == 0);
-  ASSERT (pg_ofs (kpage) == 0);
-  ASSERT (is_user_vaddr (upage));
-  ASSERT (vtop (kpage) >> PTSHIFT < ram_pages);
-  ASSERT (pd != base_page_dir);
-
-  pte = lookup_page (pd, upage, true);
-
-  if (pte != NULL) 
-    {
-      ASSERT ((*pte & PTE_P) == 0);
-      *pte = pte_create_user (kpage, writable);
-      return true;
-    }
-  else
-    return false;
-}
-
-/* Looks up the physical address that corresponds to user virtual
-   address UADDR in PD.  Returns the kernel virtual address
-   corresponding to that physical address, or a null pointer if
-   UADDR is unmapped. */
-void *
-pagedir_get_page (uint32_t *pd, const void *uaddr) 
-{
-  uint32_t *pte;
-
-  ASSERT (is_user_vaddr (uaddr));
-  
-  pte = lookup_page (pd, uaddr, false);
-  if (pte != NULL && (*pte & PTE_P) != 0)
-    return pte_get_page (*pte) + pg_ofs (uaddr);
-  else
-    return NULL;
-}
-
-/* Marks user virtual page UPAGE "not present" in page
-   directory PD.  Later accesses to the page will fault.  Other
-   bits in the page table entry are preserved.
-   UPAGE need not be mapped. */
-void
-pagedir_clear_page (uint32_t *pd, void *upage) 
-{
-  uint32_t *pte;
-
-  ASSERT (pg_ofs (upage) == 0);
-  ASSERT (is_user_vaddr (upage));
-
-  pte = lookup_page (pd, upage, false);
-  if (pte != NULL && (*pte & PTE_P) != 0)
-    {
-      *pte &= ~PTE_P;
-      invalidate_pagedir (pd);
-    }
-}
-
-/* Returns true if the PTE for virtual page VPAGE in PD is dirty,
-   that is, if the page has been modified since the PTE was
-   installed.
-   Returns false if PD contains no PTE for VPAGE. */
-bool
-pagedir_is_dirty (uint32_t *pd, const void *vpage) 
-{
-  uint32_t *pte = lookup_page (pd, vpage, false);
-  return pte != NULL && (*pte & PTE_D) != 0;
-}
-
-/* Set the dirty bit to DIRTY in the PTE for virtual page VPAGE
-   in PD. */
-void
-pagedir_set_dirty (uint32_t *pd, const void *vpage, bool dirty) 
-{
-  uint32_t *pte = lookup_page (pd, vpage, false);
-  if (pte != NULL) 
-    {
-      if (dirty)
-        *pte |= PTE_D;
-      else 
-        {
-          *pte &= ~(uint32_t) PTE_D;
-          invalidate_pagedir (pd);
-        }
-    }
-}
-
-/* Returns true if the PTE for virtual page VPAGE in PD has been
-   accessed recently, that is, between the time the PTE was
-   installed and the last time it was cleared.  Returns false if
-   PD contains no PTE for VPAGE. */
-bool
-pagedir_is_accessed (uint32_t *pd, const void *vpage) 
-{
-  uint32_t *pte = lookup_page (pd, vpage, false);
-  return pte != NULL && (*pte & PTE_A) != 0;
-}
-
-/* Sets the accessed bit to ACCESSED in the PTE for virtual page
-   VPAGE in PD. */
-void
-pagedir_set_accessed (uint32_t *pd, const void *vpage, bool accessed) 
-{
-  uint32_t *pte = lookup_page (pd, vpage, false);
-  if (pte != NULL) 
-    {
-      if (accessed)
-        *pte |= PTE_A;
-      else 
-        {
-          *pte &= ~(uint32_t) PTE_A; 
-          invalidate_pagedir (pd);
-        }
-    }
-}
-
-/* Loads page directory PD into the CPU's page directory base
-   register. */
-void
-pagedir_activate (uint32_t *pd) 
-{
-  if (pd == NULL)
-    pd = base_page_dir;
-
-  /* Store the physical address of the page directory into CR3
-     aka PDBR (page directory base register).  This activates our
-     new page tables immediately.  See [IA32-v2a] "MOV--Move
-     to/from Control Registers" and [IA32-v3a] 3.7.5 "Base
-     Address of the Page Directory". */
-  asm volatile ("movl %0, %%cr3" : : "r" (vtop (pd)) : "memory");
-}
-
-/* Returns the currently active page directory. */
-static uint32_t *
-active_pd (void) 
-{
-  /* Copy CR3, the page directory base register (PDBR), into
-     `pd'.
-     See [IA32-v2a] "MOV--Move to/from Control Registers" and
-     [IA32-v3a] 3.7.5 "Base Address of the Page Directory". */
-  uintptr_t pd;
-  asm volatile ("movl %%cr3, %0" : "=r" (pd));
-  return ptov (pd);
-}
-
-/* Seom page table changes can cause the CPU's translation
-   lookaside buffer (TLB) to become out-of-sync with the page
-   table.  When this happens, we have to "invalidate" the TLB by
-   re-activating it.
-
-   This function invalidates the TLB if PD is the active page
-   directory.  (If PD is not active then its entries are not in
-   the TLB, so there is no need to invalidate anything.) */
-static void
-invalidate_pagedir (uint32_t *pd) 
-{
-  if (active_pd () == pd) 
-    {
-      /* Re-activating PD clears the TLB.  See [IA32-v3a] 3.12
-         "Translation Lookaside Buffers (TLBs)". */
-      pagedir_activate (pd);
-    } 
-}
diff --git a/src/userprog/pagedir.h b/src/userprog/pagedir.h
deleted file mode 100644
index cd92447..0000000
--- a/src/userprog/pagedir.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef USERPROG_PAGEDIR_H
-#define USERPROG_PAGEDIR_H
-
-#include <stdbool.h>
-#include <stdint.h>
-
-uint32_t *pagedir_create (void);
-void pagedir_destroy (uint32_t *pd);
-bool pagedir_set_page (uint32_t *pd, void *upage, void *kpage, bool rw);
-void *pagedir_get_page (uint32_t *pd, const void *upage);
-void pagedir_clear_page (uint32_t *pd, void *upage);
-bool pagedir_is_dirty (uint32_t *pd, const void *upage);
-void pagedir_set_dirty (uint32_t *pd, const void *upage, bool dirty);
-bool pagedir_is_accessed (uint32_t *pd, const void *upage);
-void pagedir_set_accessed (uint32_t *pd, const void *upage, bool accessed);
-void pagedir_activate (uint32_t *pd);
-
-#endif /* userprog/pagedir.h */
diff --git a/src/userprog/process.c b/src/userprog/process.c
deleted file mode 100644
index 25bc553..0000000
--- a/src/userprog/process.c
+++ /dev/null
@@ -1,522 +0,0 @@
-#include "userprog/process.h"
-#include <debug.h>
-#include <inttypes.h>
-#include <round.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "userprog/gdt.h"
-#include "userprog/pagedir.h"
-#include "userprog/tss.h"
-#include "filesys/directory.h"
-#include "filesys/file.h"
-#include "filesys/filesys.h"
-#include "threads/flags.h"
-#include "threads/init.h"
-#include "threads/interrupt.h"
-#include "threads/palloc.h"
-#include "threads/thread.h"
-#include "threads/vaddr.h"
-
-static thread_func start_process NO_RETURN;
-static bool load (const char *cmdline, void (**eip) (void), void **esp);
-
-/* Starts a new thread running a user program loaded from
-   FILENAME.  The new thread may be scheduled (and may even exit)
-   before process_execute() returns.  Returns the new process's
-   thread id, or TID_ERROR if the thread cannot be created. */
-tid_t
-process_execute (const char *file_name) 
-{
-  char *fn_copy;
-  tid_t tid;
-
-  /* Make a copy of FILE_NAME.
-     Otherwise there's a race between the caller and load(). */
-  fn_copy = palloc_get_page (0);
-  if (fn_copy == NULL)
-    return TID_ERROR;
-  strlcpy (fn_copy, file_name, PGSIZE);
-
-  /* Create a new thread to execute FILE_NAME. */
-  tid = thread_create (file_name, PRI_DEFAULT, start_process, fn_copy);
-  if (tid == TID_ERROR)
-    palloc_free_page (fn_copy); 
-  return tid;
-}
-
-/* A thread function that loads a user process and starts it
-   running. */
-static void
-start_process (void *file_name_)
-{
-  char *file_name = file_name_;
-  struct intr_frame if_;
-  bool success;
-
-  /* Initialize interrupt frame and load executable. */
-  memset (&if_, 0, sizeof if_);
-  if_.gs = if_.fs = if_.es = if_.ds = if_.ss = SEL_UDSEG;
-  if_.cs = SEL_UCSEG;
-  if_.eflags = FLAG_IF | FLAG_MBS;
-  success = load (file_name, &if_.eip, &if_.esp);
-
-  /* If load failed, quit. */
-  palloc_free_page (file_name);
-  if (!success) 
-    thread_exit ();
-
-  /* Start the user process by simulating a return from an
-     interrupt, implemented by intr_exit (in
-     threads/intr-stubs.S).  Because intr_exit takes all of its
-     arguments on the stack in the form of a `struct intr_frame',
-     we just point the stack pointer (%esp) to our stack frame
-     and jump to it. */
-  asm volatile ("movl %0, %%esp; jmp intr_exit" : : "g" (&if_) : "memory");
-  NOT_REACHED ();
-}
-
-/* Waits for thread TID to die and returns its exit status.  If
-   it was terminated by the kernel (i.e. killed due to an
-   exception), returns -1.  If TID is invalid or if it was not a
-   child of the calling process, or if process_wait() has already
-   been successfully called for the given TID, returns -1
-   immediately, without waiting.
-
-   This function will be implemented in problem 2-2.  For now, it
-   does nothing. */
-int
-process_wait (tid_t child_tid UNUSED) 
-{
-  return -1;
-}
-
-/* Free the current process's resources. */
-void
-process_exit (void)
-{
-  struct thread *cur = thread_current ();
-  uint32_t *pd;
-
-  /* Destroy the current process's page directory and switch back
-     to the kernel-only page directory. */
-  pd = cur->pagedir;
-  if (pd != NULL) 
-    {
-      /* Correct ordering here is crucial.  We must set
-         cur->pagedir to NULL before switching page directories,
-         so that a timer interrupt can't switch back to the
-         process page directory.  We must activate the base page
-         directory before destroying the process's page
-         directory, or our active page directory will be one
-         that's been freed (and cleared). */
-      cur->pagedir = NULL;
-      pagedir_activate (NULL);
-      pagedir_destroy (pd);
-    }
-}
-
-/* Sets up the CPU for running user code in the current
-   thread.
-   This function is called on every context switch. */
-void
-process_activate (void)
-{
-  struct thread *t = thread_current ();
-
-  /* Activate thread's page tables. */
-  pagedir_activate (t->pagedir);
-
-  /* Set thread's kernel stack for use in processing
-     interrupts. */
-  tss_update ();
-}
-
-/* We load ELF binaries.  The following definitions are taken
-   from the ELF specification, [ELF1], more-or-less verbatim.  */
-
-/* ELF types.  See [ELF1] 1-2. */
-typedef uint32_t Elf32_Word, Elf32_Addr, Elf32_Off;
-typedef uint16_t Elf32_Half;
-
-/* For use with ELF types in printf(). */
-#define PE32Wx PRIx32   /* Print Elf32_Word in hexadecimal. */
-#define PE32Ax PRIx32   /* Print Elf32_Addr in hexadecimal. */
-#define PE32Ox PRIx32   /* Print Elf32_Off in hexadecimal. */
-#define PE32Hx PRIx16   /* Print Elf32_Half in hexadecimal. */
-
-/* Executable header.  See [ELF1] 1-4 to 1-8.
-   This appears at the very beginning of an ELF binary. */
-struct Elf32_Ehdr
-  {
-    unsigned char e_ident[16];
-    Elf32_Half    e_type;
-    Elf32_Half    e_machine;
-    Elf32_Word    e_version;
-    Elf32_Addr    e_entry;
-    Elf32_Off     e_phoff;
-    Elf32_Off     e_shoff;
-    Elf32_Word    e_flags;
-    Elf32_Half    e_ehsize;
-    Elf32_Half    e_phentsize;
-    Elf32_Half    e_phnum;
-    Elf32_Half    e_shentsize;
-    Elf32_Half    e_shnum;
-    Elf32_Half    e_shstrndx;
-  };
-
-/* Program header.  See [ELF1] 2-2 to 2-4.
-   There are e_phnum of these, starting at file offset e_phoff
-   (see [ELF1] 1-6). */
-struct Elf32_Phdr
-  {
-    Elf32_Word p_type;
-    Elf32_Off  p_offset;
-    Elf32_Addr p_vaddr;
-    Elf32_Addr p_paddr;
-    Elf32_Word p_filesz;
-    Elf32_Word p_memsz;
-    Elf32_Word p_flags;
-    Elf32_Word p_align;
-  };
-
-/* Values for p_type.  See [ELF1] 2-3. */
-#define PT_NULL    0            /* Ignore. */
-#define PT_LOAD    1            /* Loadable segment. */
-#define PT_DYNAMIC 2            /* Dynamic linking info. */
-#define PT_INTERP  3            /* Name of dynamic loader. */
-#define PT_NOTE    4            /* Auxiliary info. */
-#define PT_SHLIB   5            /* Reserved. */
-#define PT_PHDR    6            /* Program header table. */
-#define PT_STACK   0x6474e551   /* Stack segment. */
-
-/* Flags for p_flags.  See [ELF3] 2-3 and 2-4. */
-#define PF_X 1          /* Executable. */
-#define PF_W 2          /* Writable. */
-#define PF_R 4          /* Readable. */
-
-static bool setup_stack (void **esp);
-static bool validate_segment (const struct Elf32_Phdr *, struct file *);
-static bool load_segment (struct file *file, off_t ofs, uint8_t *upage, uint32_t uoffset,
-                          uint32_t read_bytes, uint32_t zero_bytes,
-                          bool writable);
-
-/* Loads an ELF executable from FILE_NAME into the current thread.
-   Stores the executable's entry point into *EIP
-   and its initial stack pointer into *ESP.
-   Returns true if successful, false otherwise. */
-bool
-load (const char *file_name, void (**eip) (void), void **esp) 
-{
-  struct thread *t = thread_current ();
-  struct Elf32_Ehdr ehdr;
-  struct file *file = NULL;
-  off_t file_ofs;
-  bool success = false;
-  int i;
-
-  /* Allocate and activate page directory. */
-  t->pagedir = pagedir_create ();
-  if (t->pagedir == NULL) 
-    goto done;
-  process_activate ();
-
-  /* Set up stack. */
-  if (!setup_stack (esp)){
-    goto done;
-  }
-
-   /* Uncomment the following line to print some debug
-     information. This will be useful when you debug the program
-     stack.*/
-/*#define STACK_DEBUG*/
-
-#ifdef STACK_DEBUG
-  printf("*esp is %p\nstack contents:\n", *esp);
-  hex_dump((int)*esp , *esp, PHYS_BASE-*esp+16, true);
-  /* The same information, only more verbose: */
-  /* It prints every byte as if it was a char and every 32-bit aligned
-     data as if it was a pointer. */
-  void * ptr_save = PHYS_BASE;
-  i=-15;
-  while(ptr_save - i >= *esp) {
-    char *whats_there = (char *)(ptr_save - i);
-    // show the address ...
-    printf("%x\t", (uint32_t)whats_there);
-    // ... printable byte content ...
-    if(*whats_there >= 32 && *whats_there < 127)
-      printf("%c\t", *whats_there);
-    else
-      printf(" \t");
-    // ... and 32-bit aligned content 
-    if(i % 4 == 0) {
-      uint32_t *wt_uint32 = (uint32_t *)(ptr_save - i);
-      printf("%x\t", *wt_uint32);
-      printf("\n-------");
-      if(i != 0)
-        printf("------------------------------------------------");
-      else
-        printf(" the border between KERNEL SPACE and USER SPACE ");
-      printf("-------");
-    }
-    printf("\n");
-    i++;
-  }
-#endif
-
-  /* Open executable file. */
-  file = filesys_open (file_name);
-  if (file == NULL) 
-    {
-      printf ("load: %s: open failed\n", file_name);
-      goto done; 
-    }
-
-  /* Read and verify executable header. */
-  if (file_read (file, &ehdr, sizeof ehdr) != sizeof ehdr
-      || memcmp (ehdr.e_ident, "\177ELF\1\1\1", 7)
-      || ehdr.e_type != 2
-      || ehdr.e_machine != 3
-      || ehdr.e_version != 1
-      || ehdr.e_phentsize != sizeof (struct Elf32_Phdr)
-      || ehdr.e_phnum > 1024) 
-    {
-      printf ("load: %s: error loading executable\n", file_name);
-      goto done; 
-    }
-
-  /* Read program headers. */
-  file_ofs = ehdr.e_phoff;
-  for (i = 0; i < ehdr.e_phnum; i++) 
-    {
-      struct Elf32_Phdr phdr;
-
-      if (file_ofs < 0 || file_ofs > file_length (file))
-        goto done;
-      file_seek (file, file_ofs);
-
-      if (file_read (file, &phdr, sizeof phdr) != sizeof phdr)
-        goto done;
-      file_ofs += sizeof phdr;
-      switch (phdr.p_type) 
-        {
-        case PT_NULL:
-        case PT_NOTE:
-        case PT_PHDR:
-        case PT_STACK:
-        default:
-          /* Ignore this segment. */
-          break;
-        case PT_DYNAMIC:
-        case PT_INTERP:
-        case PT_SHLIB:
-          goto done;
-        case PT_LOAD:
-          if (validate_segment (&phdr, file)) 
-            {
-              bool writable = (phdr.p_flags & PF_W) != 0;
-              uint32_t file_offset = phdr.p_offset;
-              uint32_t mem_page = phdr.p_vaddr & ~PGMASK;
-              uint32_t page_offset = phdr.p_vaddr & PGMASK;
-              uint32_t read_bytes, zero_bytes;
-              if (phdr.p_filesz > 0)
-                {
-                  /* Normal segment.
-                     Read initial part from disk and zero the rest. */
-
-                  read_bytes = phdr.p_filesz;
-                  zero_bytes = (ROUND_UP (page_offset + phdr.p_memsz, PGSIZE)
-                                - read_bytes - page_offset);
-                }
-              else 
-                {
-                  /* Entirely zero.
-                     Don't read anything from disk. */
-                  read_bytes = 0;
-                  zero_bytes = ROUND_UP (page_offset + phdr.p_memsz, PGSIZE) - page_offset;
-                }
-              if (!load_segment (file, file_offset, (void *) mem_page, page_offset,
-                                 read_bytes, zero_bytes, writable))
-                goto done;
-            }
-          else
-            goto done;
-          break;
-        }
-    }
-
-  /* Start address. */
-  *eip = (void (*) (void)) ehdr.e_entry;
-
-  success = true;
-
- done:
-  /* We arrive here whether the load is successful or not. */
-  file_close (file);
-  return success;
-}
-
-/* load() helpers. */
-
-static bool install_page (void *upage, void *kpage, bool writable);
-
-/* Checks whether PHDR describes a valid, loadable segment in
-   FILE and returns true if so, false otherwise. */
-static bool
-validate_segment (const struct Elf32_Phdr *phdr, struct file *file) 
-{
-  /* p_offset and p_vaddr must have the same page offset. */
-  if ((phdr->p_offset & PGMASK) != (phdr->p_vaddr & PGMASK)) 
-    return false; 
-
-  /* p_offset must point within FILE. */
-  if (phdr->p_offset > (Elf32_Off) file_length (file)) 
-    return false;
-
-  /* p_memsz must be at least as big as p_filesz. */
-  if (phdr->p_memsz < phdr->p_filesz) 
-    return false; 
-
-  /* The segment must not be empty. */
-  if (phdr->p_memsz == 0)
-    return false;
-  
-  /* The virtual memory region must both start and end within the
-     user address space range. */
-  if (!is_user_vaddr ((void *) phdr->p_vaddr))
-    return false;
-  if (!is_user_vaddr ((void *) (phdr->p_vaddr + phdr->p_memsz)))
-    return false;
-
-  /* The region cannot "wrap around" across the kernel virtual
-     address space. */
-  if (phdr->p_vaddr + phdr->p_memsz < phdr->p_vaddr)
-    return false;
-
-  /* Disallow mapping page 0.
-     Not only is it a bad idea to map page 0, but if we allowed
-     it then user code that passed a null pointer to system calls
-     could quite likely panic the kernel by way of null pointer
-     assertions in memcpy(), etc. */
-  if (phdr->p_vaddr < PGSIZE)
-    return false;
-
-  /* It's okay. */
-  return true;
-}
-
-/* Loads a segment starting at offset OFS in FILE at address
-   UPAGE.  In total, READ_BYTES + ZERO_BYTES bytes of virtual
-   memory are initialized, as follows:
-
-        - READ_BYTES bytes at UPAGE must be read from FILE
-          starting at offset OFS.
-
-        - ZERO_BYTES bytes at UPAGE + READ_BYTES must be zeroed.
-
-   The pages initialized by this function must be writable by the
-   user process if WRITABLE is true, read-only otherwise.
-
-   Return true if successful, false if a memory allocation error
-   or disk read error occurs. */
-static bool
-load_segment (struct file *file, off_t ofs, uint8_t *upage, uint32_t page_offset,
-              uint32_t read_bytes, uint32_t zero_bytes, bool writable) 
-{
-  ASSERT ((page_offset + read_bytes + zero_bytes) % PGSIZE == 0);
-  ASSERT (pg_ofs (upage) == 0);
-
-  struct thread *t = thread_current();
-  
-  file_seek (file, ofs);
-  while (read_bytes > 0 || zero_bytes > 0) 
-    {
-      /* Calculate how to fill this page.
-         We will read PAGE_READ_BYTES bytes from FILE
-         and zero the final PAGE_ZERO_BYTES bytes. */
-      size_t page_read_bytes = page_offset + read_bytes;
-      if (page_read_bytes > PGSIZE)
-            page_read_bytes = PGSIZE;
-
-      size_t page_zero_bytes = PGSIZE - page_read_bytes;
-
-      /* Get a page of memory. */
-      bool new_kpage = false;
-      uint8_t *kpage = pagedir_get_page (t->pagedir, upage);
-      if (!kpage)
-      {
-            new_kpage = true;
-            kpage = palloc_get_page (PAL_USER);
-      }
-
-      if (kpage == NULL)
-        return false;
-
-      /* Load this page. */
-      if (file_read (file, kpage + page_offset, page_read_bytes - page_offset) != (int) (page_read_bytes - page_offset))
-      {
-        if (new_kpage)
-		palloc_free_page (kpage);
-        return false;
-
-      }
-      memset (kpage + page_read_bytes, 0, page_zero_bytes);
-
-      /* Add the page to the process's address space. */       
-      if (new_kpage)
-      {
-            if (!install_page (upage, kpage, writable))
-            {
-                  palloc_free_page (kpage);
-                  return false;
-            }
-      }
-
-      /* Advance. */
-      read_bytes -= page_read_bytes - page_offset;
-      zero_bytes -= page_zero_bytes;
-      page_offset = 0;		
-      upage += PGSIZE;
-    }
-  return true;
-}
-
-/* Create a minimal stack by mapping a zeroed page at the top of
-   user virtual memory. */
-static bool
-setup_stack (void **esp) 
-{
-  uint8_t *kpage;
-  bool success = false;
-
-  kpage = palloc_get_page (PAL_USER | PAL_ZERO);
-  if (kpage != NULL) 
-    {
-      success = install_page (((uint8_t *) PHYS_BASE) - PGSIZE, kpage, true);
-      if (success)
-        *esp = PHYS_BASE - 12;
-      else
-        palloc_free_page (kpage);
-    }
-  return success;
-}
-
-/* Adds a mapping from user virtual address UPAGE to kernel
-   virtual address KPAGE to the page table.
-   If WRITABLE is true, the user process may modify the page;
-   otherwise, it is read-only.
-   UPAGE must not already be mapped.
-   KPAGE should probably be a page obtained from the user pool
-   with palloc_get_page().
-   Returns true on success, false if UPAGE is already mapped or
-   if memory allocation fails. */
-static bool
-install_page (void *upage, void *kpage, bool writable)
-{
-  struct thread *t = thread_current ();
-
-  /* Verify that there's not already a page at that virtual
-     address, then map our page there. */
-  return (pagedir_get_page (t->pagedir, upage) == NULL
-          && pagedir_set_page (t->pagedir, upage, kpage, writable));
-}
diff --git a/src/userprog/process.h b/src/userprog/process.h
deleted file mode 100644
index 688cd2a..0000000
--- a/src/userprog/process.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef USERPROG_PROCESS_H
-#define USERPROG_PROCESS_H
-
-#include "threads/thread.h"
-
-tid_t process_execute (const char *file_name);
-int process_wait (tid_t);
-void process_exit (void);
-void process_activate (void);
-
-#endif /* userprog/process.h */
diff --git a/src/userprog/start_pfs.sh b/src/userprog/start_pfs.sh
deleted file mode 100644
index 6ae76ad..0000000
--- a/src/userprog/start_pfs.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-make -j4
-cd build
-pintos-mkdisk fs.dsk 800
-dd if=/dev/urandom of=random bs=1 count=100
-pintos --qemu -v -- -f -q
-pintos --qemu -v -p random -a random --  -q
-pintos --qemu -v -p ../../examples/pfs -a pfs --  -q
-pintos --qemu -v -p ../../examples/pfs_writer -a pfs_writer --  -q
-pintos --qemu -v -p ../../examples/pfs_reader -a pfs_reader --  -q
-pintos --qemu -v -- run pfs
diff --git a/src/userprog/start_recursor.sh b/src/userprog/start_recursor.sh
deleted file mode 100644
index 22a69ac..0000000
--- a/src/userprog/start_recursor.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-make -j4
-cd  build
-pintos-mkdisk fs.dsk 400
-pintos --qemu -v -- -f -q
-pintos --qemu -v -p ../../examples/recursor_ng -a recursor_ng --  -q
-pintos --qemu -v -m 128 -- run "recursor_ng pintosmaster 6 1"
diff --git a/src/userprog/syscall.h b/src/userprog/syscall.h
deleted file mode 100644
index 9059096..0000000
--- a/src/userprog/syscall.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef USERPROG_SYSCALL_H
-#define USERPROG_SYSCALL_H
-
-void syscall_init (void);
-
-#endif /* userprog/syscall.h */
diff --git a/src/userprog/syscall.h.gch b/src/userprog/syscall.h.gch
deleted file mode 100644
index 0ad7bb35a7ff863192224a280014174e761d7098..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1708464
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%0D51H162P8XnIH2
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
XA?80dXwI}<{Y&=hKYzvw5k(~d|2AR+

diff --git a/src/userprog/tss.c b/src/userprog/tss.c
deleted file mode 100644
index 435c780..0000000
--- a/src/userprog/tss.c
+++ /dev/null
@@ -1,106 +0,0 @@
-#include "userprog/tss.h"
-#include <debug.h>
-#include <stddef.h>
-#include "userprog/gdt.h"
-#include "threads/palloc.h"
-#include "threads/vaddr.h"
-#include "threads/thread.h"
-
-/* The Task-State Segment (TSS).
-
-   Instances of the TSS, an x86-specific structure, are used to
-   define "tasks", a form of support for multitasking built right
-   into the processor.  However, for various reasons including
-   portability, speed, and flexibility, most x86 OSes almost
-   completely ignore the TSS.  We are no exception.
-
-   Unfortunately, there is one thing that can only be done using
-   a TSS: stack switching for interrupts that occur in user mode.
-   When an interrupt occurs in user mode (ring 3), the processor
-   consults the ss0 and esp0 members of the current TSS to
-   determine the stack to use for handling the interrupt.  Thus,
-   we must create a TSS and initialize at least these fields, and
-   this is precisely what this file does.
-
-   When an interrupt is handled by an interrupt or trap gate
-   (which applies to all interrupts we handle), an x86 processor
-   works like this:
-
-     - If the code interrupted by the interrupt is in the same
-       ring as the interrupt handler, then no stack switch takes
-       place.  This is the case for interrupts that happen when
-       we're running in the kernel.  The contents of the TSS are
-       irrelevant for this case.
-
-     - If the interrupted code is in a different ring from the
-       handler, then the processor switches to the stack
-       specified in the TSS for the new ring.  This is the case
-       for interrupts that happen when we're in user space.  It's
-       important that we switch to a stack that's not already in
-       use, to avoid corruption.  Because we're running in user
-       space, we know that the current process's kernel stack is
-       not in use, so we can always use that.  Thus, when the
-       scheduler switches threads, it also changes the TSS's
-       stack pointer to point to the new thread's kernel stack.
-       (The call is in schedule_tail() in thread.c.)
-
-   See [IA32-v3a] 6.2.1 "Task-State Segment (TSS)" for a
-   description of the TSS.  See [IA32-v3a] 5.12.1 "Exception- or
-   Interrupt-Handler Procedures" for a description of when and
-   how stack switching occurs during an interrupt. */
-struct tss
-  {
-    uint16_t back_link, :16;
-    void *esp0;                         /* Ring 0 stack virtual address. */
-    uint16_t ss0, :16;                  /* Ring 0 stack segment selector. */
-    void *esp1;
-    uint16_t ss1, :16;
-    void *esp2;
-    uint16_t ss2, :16;
-    uint32_t cr3;
-    void (*eip) (void);
-    uint32_t eflags;
-    uint32_t eax, ecx, edx, ebx;
-    uint32_t esp, ebp, esi, edi;
-    uint16_t es, :16;
-    uint16_t cs, :16;
-    uint16_t ss, :16;
-    uint16_t ds, :16;
-    uint16_t fs, :16;
-    uint16_t gs, :16;
-    uint16_t ldt, :16;
-    uint16_t trace, bitmap;
-  };
-
-/* Kernel TSS. */
-static struct tss *tss;
-
-/* Initializes the kernel TSS. */
-void
-tss_init (void) 
-{
-  /* Our TSS is never used in a call gate or task gate, so only a
-     few fields of it are ever referenced, and those are the only
-     ones we initialize. */
-  tss = palloc_get_page (PAL_ASSERT | PAL_ZERO);
-  tss->ss0 = SEL_KDSEG;
-  tss->bitmap = 0xdfff;
-  tss_update ();
-}
-
-/* Returns the kernel TSS. */
-struct tss *
-tss_get (void) 
-{
-  ASSERT (tss != NULL);
-  return tss;
-}
-
-/* Sets the ring 0 stack pointer in the TSS to point to the end
-   of the thread stack. */
-void
-tss_update (void) 
-{
-  ASSERT (tss != NULL);
-  tss->esp0 = (uint8_t *) thread_current () + PGSIZE;
-}
diff --git a/src/userprog/tss.h b/src/userprog/tss.h
deleted file mode 100644
index 467bd19..0000000
--- a/src/userprog/tss.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef USERPROG_TSS_H
-#define USERPROG_TSS_H
-
-#include <stdint.h>
-
-struct tss;
-void tss_init (void);
-struct tss *tss_get (void);
-void tss_update (void);
-
-#endif /* userprog/tss.h */
diff --git a/src/utils/.gitignore b/src/utils/.gitignore
deleted file mode 100644
index de91916..0000000
--- a/src/utils/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-setitimer-helper
-squish-pty
-squish-unix
-qemu
diff --git a/src/utils/Makefile b/src/utils/Makefile
deleted file mode 100644
index 3e72ef4..0000000
--- a/src/utils/Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
-all: setitimer-helper squish-pty squish-unix
-
-CC = gcc
-CFLAGS = -Wall -W -D_XOPEN_SOURCE=500 -D__EXTENSIONS__
-#LDFLAGS = -lm -lxnet
-LDLIBS = -lm
-setitimer-helper: setitimer-helper.o
-squish-pty: squish-pty.o
-squish-unix: squish-unix.o
-
-clean: 
-	rm -f *.o setitimer-helper squish-pty squish-unix
diff --git a/src/utils/backtrace b/src/utils/backtrace
deleted file mode 100755
index 95e422f..0000000
--- a/src/utils/backtrace
+++ /dev/null
@@ -1,106 +0,0 @@
-#! /usr/bin/perl -w
-
-use strict;
-
-# Check command line.
-if (grep ($_ eq '-h' || $_ eq '--help', @ARGV)) {
-    print <<'EOF';
-backtrace, for converting raw addresses into symbolic backtraces
-usage: backtrace [BINARY]... ADDRESS...
-where BINARY is the binary file or files from which to obtain symbols
- and ADDRESS is a raw address to convert to a symbol name.
-
-If no BINARY is unspecified, the default is the first of kernel.o or
-build/kernel.o that exists.  If multiple binaries are specified, each
-symbol printed is from the first binary that contains a match.
-
-The ADDRESS list should be taken from the "Call stack:" printed by the
-kernel.  Read "Backtraces" in the "Debugging Tools" chapter of the
-Pintos documentation for more information.
-EOF
-    exit 0;
-}
-die "backtrace: at least one argument required (use --help for help)\n"
-    if @ARGV == 0;
-
-# Drop garbage inserted by kernel.
-@ARGV = grep (!/^(call|stack:?|[-+])$/i, @ARGV);
-s/\.$// foreach @ARGV;
-
-# Find binaries.
-my (@binaries);
-while ($ARGV[0] !~ /^0x/) {
-    my ($bin) = shift @ARGV;
-    die "backtrace: $bin: not found (use --help for help)\n" if ! -e $bin;
-    push (@binaries, $bin);
-}
-if (!@binaries) {
-    my ($bin);
-    if (-e 'kernel.o') {
-	$bin = 'kernel.o';
-    } elsif (-e 'build/kernel.o') {
-	$bin = 'build/kernel.o';
-    } else {
-	die "backtrace: no binary specified and neither \"kernel.o\" nor \"build/kernel.o\" exists (use --help for help)\n";
-    }
-    push (@binaries, $bin);
-}
-
-# Find addr2line.
-my ($a2l) = search_path ("i386-elf-addr2line") || search_path ("addr2line");
-if (!$a2l) {
-    die "backtrace: neither `i386-elf-addr2line' nor `addr2line' in PATH\n";
-}
-sub search_path {
-    my ($target) = @_;
-    for my $dir (split (':', $ENV{PATH})) {
-	my ($file) = "$dir/$target";
-	return $file if -e $file;
-    }
-    return undef;
-}
-
-# Figure out backtrace.
-my (@locs) = map ({ADDR => $_}, @ARGV);
-for my $bin (@binaries) {
-    open (A2L, "$a2l -fe $bin " . join (' ', map ($_->{ADDR}, @locs)) . "|");
-    for (my ($i) = 0; <A2L>; $i++) {
-	my ($function, $line);
-	chomp ($function = $_);
-	chomp ($line = <A2L>);
-	next if defined $locs[$i]{BINARY};
-
-	if ($function ne '??' || $line ne '??:0') {
-	    $locs[$i]{FUNCTION} = $function;
-	    $locs[$i]{LINE} = $line;
-	    $locs[$i]{BINARY} = $bin;
-	}
-    }
-    close (A2L);
-}
-
-# Print backtrace.
-my ($cur_binary);
-for my $loc (@locs) {
-    if (defined ($loc->{BINARY})
-	&& @binaries > 1
-	&& (!defined ($cur_binary) || $loc->{BINARY} ne $cur_binary)) {
-	$cur_binary = $loc->{BINARY};
-	print "In $cur_binary:\n";
-    }
-
-    my ($addr) = $loc->{ADDR};
-    $addr = sprintf ("0x%08x", hex ($addr)) if $addr =~ /^0x[0-9a-f]+$/i;
-
-    print $addr, ": ";
-    if (defined ($loc->{BINARY})) {
-	my ($function) = $loc->{FUNCTION};
-	my ($line) = $loc->{LINE};
-	$line =~ s/^(\.\.\/)*//;
-	$line = "..." . substr ($line, -25) if length ($line) > 28;
-	print "$function ($line)";
-    } else {
-	print "(unknown)";
-    }
-    print "\n";
-}
diff --git a/src/utils/pintos b/src/utils/pintos
deleted file mode 100755
index a3af3f8..0000000
--- a/src/utils/pintos
+++ /dev/null
@@ -1,905 +0,0 @@
-#! /usr/bin/perl -w
-
-use strict;
-use POSIX;
-use Fcntl;
-use File::Temp 'tempfile';
-use Getopt::Long qw(:config bundling);
-
-# Command-line options.
-our ($start_time) = time ();
-our ($sim);			# Simulator: bochs, qemu, or player.
-our ($debug) = "none";		# Debugger: none, monitor, or gdb.
-our ($mem) = 4;			# Physical RAM in MB.
-our ($serial) = 1;		# Use serial port for input and output?
-our ($vga);			# VGA output: window, terminal, or none.
-our ($jitter);			# Seed for random timer interrupts, if set.
-our ($realtime);		# Synchronize timer interrupts with real time?
-our ($timeout);			# Maximum runtime in seconds, if set.
-our ($kill_on_failure);		# Abort quickly on test failure?
-our (@puts);			# Files to copy into the VM.
-our (@gets);			# Files to copy out of the VM.
-our ($as_ref);			# Reference to last addition to @gets or @puts.
-our (@kernel_args);		# Arguments to pass to kernel.
-our (%disks) = (OS => {DEF_FN => 'os.dsk'},		# Disks to give VM.
-		FS => {DEF_FN => 'fs.dsk'},
-		SCRATCH => {DEF_FN => 'scratch.dsk'},
-		SWAP => {DEF_FN => 'swap.dsk'});
-our (@disks_by_iface) = @disks{qw (OS FS SCRATCH SWAP)};
-
-parse_command_line ();
-find_disks ();
-prepare_scratch_disk ();
-prepare_arguments ();
-run_vm ();
-finish_scratch_disk ();
-
-exit 0;
-
-# Parses the command line.
-sub parse_command_line {
-    usage (0) if @ARGV == 0 || (@ARGV == 1 && $ARGV[0] eq '--help');
-    
-    @kernel_args = @ARGV;
-    if (grep ($_ eq '--', @kernel_args)) {
-	@ARGV = ();
-	while ((my $arg = shift (@kernel_args)) ne '--') {
-	    push (@ARGV, $arg);
-	}
-	GetOptions ("sim=s" => sub { set_sim (@_) },
-		    "bochs" => sub { set_sim ("bochs") },
-		    "qemu" => sub { set_sim ("qemu") },
-		    "player" => sub { set_sim ("player") },
-
-		    "debug=s" => sub { set_debug (@_) },
-		    "no-debug" => sub { set_debug ("none") },
-		    "monitor" => sub { set_debug ("monitor") },
-		    "gdb" => sub { set_debug ("gdb") },
-
-		    "m|memory=i" => \$mem,
-		    "j|jitter=i" => sub { set_jitter ($_[1]) },
-		    "r|realtime" => sub { set_realtime () },
-
-		    "T|timeout=i" => \$timeout,
-		    "k|kill-on-failure" => \$kill_on_failure,
-
-		    "v|no-vga" => sub { set_vga ('none'); },
-		    "s|no-serial" => sub { $serial = 0; },
-		    "t|terminal" => sub { set_vga ('terminal'); },
-
-		    "p|put-file=s" => sub { add_file (\@puts, $_[1]); },
-		    "g|get-file=s" => sub { add_file (\@gets, $_[1]); },
-		    "a|as=s" => sub { set_as ($_[1]); },
-
-		    "h|help" => sub { usage (0); },
-
-		    "os-disk=s" => \$disks{OS}{FILE_NAME},
-		    "fs-disk=s" => \$disks{FS}{FILE_NAME},
-		    "scratch-disk=s" => \$disks{SCRATCH}{FILE_NAME},
-		    "swap-disk=s" => \$disks{SWAP}{FILE_NAME},
-
-		    "0|disk-0|hda=s" => \$disks_by_iface[0]{FILE_NAME},
-		    "1|disk-1|hdb=s" => \$disks_by_iface[1]{FILE_NAME},
-		    "2|disk-2|hdc=s" => \$disks_by_iface[2]{FILE_NAME},
-		    "3|disk-3|hdd=s" => \$disks_by_iface[3]{FILE_NAME})
-	  or exit 1;
-    }
-
-    $sim = "bochs" if !defined $sim;
-    $debug = "none" if !defined $debug;
-    $vga = "window" if !defined $vga;
-
-    undef $timeout, print "warning: disabling timeout with --$debug\n"
-      if defined ($timeout) && $debug ne 'none';
-
-    print "warning: enabling serial port for -k or --kill-on-failure\n"
-      if $kill_on_failure && !$serial;
-}
-
-# usage($exitcode).
-# Prints a usage message and exits with $exitcode.
-sub usage {
-    my ($exitcode) = @_;
-    $exitcode = 1 unless defined $exitcode;
-    print <<'EOF';
-pintos, a utility for running Pintos in a simulator
-Usage: pintos [OPTION...] -- [ARGUMENT...]
-where each OPTION is one of the following options
-  and each ARGUMENT is passed to Pintos kernel verbatim.
-Simulator selection:
-  --bochs                  (default) Use Bochs as simulator
-  --qemu                   Use QEMU as simulator
-  --player                 Use VMware Player as simulator
-Debugger selection:
-  --no-debug               (default) No debugger
-  --monitor                Debug with simulator's monitor
-  --gdb                    Debug with gdb
-Display options: (default is both VGA and serial)
-  -v, --no-vga             No VGA display or keyboard
-  -s, --no-serial          No serial input or output
-  -t, --terminal           Display VGA in terminal (Bochs only)
-Timing options: (Bochs only)
-  -j SEED                  Randomize timer interrupts
-  -r, --realtime           Use realistic, not reproducible, timings
-Testing options:
-  -T, --timeout=N          Kill Pintos after N seconds CPU time or N*load_avg
-                           seconds wall-clock time (whichever comes first)
-  -k, --kill-on-failure    Kill Pintos a few seconds after a kernel or user
-                           panic, test failure, or triple fault
-Configuration options:
-  -m, --mem=N              Give Pintos N MB physical RAM (default: 4)
-File system commands (for `run' command):
-  -p, --put-file=HOSTFN    Copy HOSTFN into VM, by default under same name
-  -g, --get-file=GUESTFN   Copy GUESTFN out of VM, by default under same name
-  -a, --as=FILENAME        Specifies guest (for -p) or host (for -g) file name
-Disk options: (name an existing FILE or specify SIZE in MB for a temp disk)
-  --os-disk=FILE           Set OS disk file (default: os.dsk)
-  --fs-disk=FILE|SIZE      Set FS disk file (default: fs.dsk)
-  --scratch-disk=FILE|SIZE Set scratch disk (default: scratch.dsk)
-  --swap-disk=FILE|SIZE    Set swap disk file (default: swap.dsk)
-Other options:
-  -h, --help               Display this help message.
-EOF
-    exit $exitcode;
-}
-
-# Sets the simulator.
-sub set_sim {
-    my ($new_sim) = @_;
-    die "--$new_sim conflicts with --$sim\n"
-	if defined ($sim) && $sim ne $new_sim;
-    $sim = $new_sim;
-}
-
-# Sets the debugger.
-sub set_debug {
-    my ($new_debug) = @_;
-    die "--$new_debug conflicts with --$debug\n"
-	if $debug ne 'none' && $new_debug ne 'none' && $debug ne $new_debug;
-    $debug = $new_debug;
-}
-
-# Sets VGA output destination.
-sub set_vga {
-    my ($new_vga) = @_;
-    if (defined ($vga) && $vga ne $new_vga) {
-	print "warning: conflicting vga display options\n";
-    }
-    $vga = $new_vga;
-}
-
-# Sets randomized timer interrupts.
-sub set_jitter {
-    my ($new_jitter) = @_;
-    die "--realtime conflicts with --jitter\n" if defined $realtime;
-    die "different --jitter already defined\n"
-	if defined $jitter && $jitter != $new_jitter;
-    $jitter = $new_jitter;
-}
-
-# Sets real-time timer interrupts.
-sub set_realtime {
-    die "--realtime conflicts with --jitter\n" if defined $jitter;
-    $realtime = 1;
-}
-
-# add_file(\@list, $file)
-#
-# Adds [$file] to @list, which should be @puts or @gets.
-# Sets $as_ref to point to the added element.
-sub add_file {
-    my ($list, $file) = @_;
-    $as_ref = [$file];
-    push (@$list, $as_ref);
-}
-
-# Sets the guest/host name for the previous put/get.
-sub set_as {
-    my ($as) = @_;
-    die "-a (or --as) is only allowed after -p or -g\n" if !defined $as_ref;
-    die "Only one -a (or --as) is allowed after -p or -g\n"
-      if defined $as_ref->[1];
-    $as_ref->[1] = $as;
-}
-
-# Locates the files used to back each of the virtual disks,
-# and creates temporary disks.
-sub find_disks {
-    for my $disk (values %disks) {
-	# If there's no assigned file name but the default file exists,
-	# try to assign a default file name.
-	if (!defined ($disk->{FILE_NAME})) {
-	    for my $try_fn ($disk->{DEF_FN}, "build/" . $disk->{DEF_FN}) {
-		$disk->{FILE_NAME} = $try_fn, last
-		  if -e $try_fn;
-	    }
-	}
-
-	# If there's no file name, we're done.
-	next if !defined ($disk->{FILE_NAME});
-
-	if ($disk->{FILE_NAME} =~ /^\d+(\.\d+)?|\.\d+$/) {
-	    # Create a temporary disk of approximately the specified
-	    # size in megabytes.
-	    die "OS disk can't be temporary\n" if $disk == $disks{OS};
-
-	    my ($mb) = $disk->{FILE_NAME};
-	    undef $disk->{FILE_NAME};
-
-	    my ($cyl_size) = 512 * 16 * 63;
-	    extend_disk ($disk, ceil ($mb * 2) * $cyl_size);
-	} else {
-	    # The file must exist and have nonzero size.
-	    -e $disk->{FILE_NAME} or die "$disk->{FILE_NAME}: stat: $!\n";
-	    -s _ or die "$disk->{FILE_NAME}: disk has zero size\n";
-	}
-    }
-
-    # Warn about (potentially) missing disks.
-    die "Cannot find OS disk\n" if !defined $disks{OS}{FILE_NAME};
-    if (my ($project) = `pwd` =~ /\b(threads|userprog|vm|filesys)\b/) {
-	if ((grep ($project eq $_, qw (userprog vm filesys)))
-	    && !defined ($disks{FS}{FILE_NAME})) {
-	    print STDERR "warning: it looks like you're running the $project ";
-	    print STDERR "project, but no file system disk is present\n";
-	}
-	if ($project eq 'vm' && !defined $disks{SWAP}{FILE_NAME}) {
-	    print STDERR "warning: it looks like you're running the $project ";
-	    print STDERR "project, but no swap disk is present\n";
-	}
-    }
-}
-
-# Prepare the scratch disk for gets and puts.
-sub prepare_scratch_disk {
-    # Copy the files to put onto the scratch disk.
-    put_scratch_file ($_->[0]) foreach @puts;
-
-    # Make sure the scratch disk is big enough to get big files.
-    extend_disk ($disks{SCRATCH}, @gets * 1024 * 1024) if @gets;
-}
-
-# Read "get" files from the scratch disk.
-sub finish_scratch_disk {
-    # We need to start reading the scratch disk from the beginning again.
-    if (@gets) {
-	close ($disks{SCRATCH}{HANDLE});
-	undef ($disks{SCRATCH}{HANDLE});
-    }
-
-    # Read each file.
-    # If reading fails, delete that file and all subsequent files.
-    my ($ok) = 1;
-    foreach my $get (@gets) {
-	my ($name) = defined ($get->[1]) ? $get->[1] : $get->[0];
-	$ok &&= get_scratch_file ($name);
-	if (!$ok) {
-	    die "$name: unlink: $!\n" if !unlink ($name) && !$!{ENOENT};
-	}
-    }
-}
-
-# put_scratch_file($file).
-#
-# Copies $file into the scratch disk.
-sub put_scratch_file {
-    my ($put_file_name) = @_;
-    my ($disk_handle, $disk_file_name) = open_disk ($disks{SCRATCH});
-
-    print "Copying $put_file_name into $disk_file_name...\n";
-
-    # Write metadata sector, which consists of a 4-byte signature
-    # followed by the file size.
-    stat $put_file_name or die "$put_file_name: stat: $!\n";
-    my ($size) = -s _;
-    my ($metadata) = pack ("a4 V x504", "PUT\0", $size);
-    write_fully ($disk_handle, $disk_file_name, $metadata);
-
-    # Copy file data.
-    my ($put_handle);
-    sysopen ($put_handle, $put_file_name, O_RDONLY)
-      or die "$put_file_name: open: $!\n";
-    copy_file ($put_handle, $put_file_name, $disk_handle, $disk_file_name,
-	       $size);
-    close ($put_handle);
-
-    # Round up disk data to beginning of next sector.
-    write_fully ($disk_handle, $disk_file_name, "\0" x (512 - $size % 512))
-      if $size % 512;
-}
-
-# get_scratch_file($file).
-#
-# Copies from the scratch disk to $file.
-# Returns 1 if successful, 0 on failure.
-sub get_scratch_file {
-    my ($get_file_name) = @_;
-    my ($disk_handle, $disk_file_name) = open_disk ($disks{SCRATCH});
-
-    print "Copying $get_file_name out of $disk_file_name...\n";
-
-    # Read metadata sector, which has a 4-byte signature followed by
-    # the file size.
-    my ($metadata) = read_fully ($disk_handle, $disk_file_name, 512);
-    my ($signature, $size) = unpack ("a4 V", $metadata);
-    (print STDERR "bad signature on scratch disk--did Pintos run fail?\n"),
-      return 0
-	if $signature ne "GET\0";
-
-    # Copy file data.
-    my ($get_handle);
-    sysopen ($get_handle, $get_file_name, O_WRONLY | O_CREAT, 0666)
-      or die "$get_file_name: create: $!\n";
-    copy_file ($disk_handle, $disk_file_name, $get_handle, $get_file_name,
-	       $size);
-    close ($get_handle);
-
-    # Skip forward in disk up to beginning of next sector.
-    read_fully ($disk_handle, $disk_file_name, 512 - $size % 512)
-      if $size % 512;
-
-    return 1;
-}
-
-# Prepares the arguments to pass to the Pintos kernel,
-# and then write them into Pintos bootloader.
-sub prepare_arguments {
-    my (@args);
-    push (@args, shift (@kernel_args))
-      while @kernel_args && $kernel_args[0] =~ /^-/;
-    push (@args, 'put', defined $_->[1] ? $_->[1] : $_->[0]) foreach @puts;
-    push (@args, @kernel_args);
-    push (@args, 'get', $_->[0]) foreach @gets;
-    write_cmd_line ($disks{OS}, @args);
-}
-
-# Writes @args into the Pintos bootloader at the beginning of $disk.
-sub write_cmd_line {
-    my ($disk, @args) = @_;
-
-    # Figure out command line to write.
-    my ($arg_cnt) = pack ("V", scalar (@args));
-    my ($args) = join ('', map ("$_\0", @args));
-    die "command line exceeds 128 bytes" if length ($args) > 128;
-    $args .= "\0" x (128 - length ($args));
-
-    # Write command line.
-    my ($handle, $file_name) = open_disk_copy ($disk);
-    print "Writing command line to $file_name...\n";
-    sysseek ($handle, 0x17a, 0) == 0x17a or die "$file_name: seek: $!\n";
-    syswrite ($handle, "$arg_cnt$args") or die "$file_name: write: $!\n";
-}
-
-# Running simulators.
-
-# Runs the selected simulator.
-sub run_vm {
-    if ($sim eq 'bochs') {
-	run_bochs ();
-    } elsif ($sim eq 'qemu') {
-	run_qemu ();
-    } elsif ($sim eq 'player') {
-	run_player ();
-    } else {
-	die "unknown simulator `$sim'\n";
-    }
-}
-
-# Runs Bochs.
-sub run_bochs {
-    # Select Bochs binary based on the chosen debugger.
-    my ($bin) = $debug eq 'monitor' ? 'bochs-dbg' : 'bochs';
-
-    my ($squish_pty);
-    if ($serial) {
-	$squish_pty = find_in_path ("squish-pty");
-	print "warning: can't find squish-pty, so terminal input will fail\n"
-	  if !defined $squish_pty;
-    }
-
-    # Write bochsrc.txt configuration file.
-    open (BOCHSRC, ">", "bochsrc.txt") or die "bochsrc.txt: create: $!\n";
-    print BOCHSRC <<EOF;
-romimage: file=\$BXSHARE/BIOS-bochs-latest, address=0xf0000
-vgaromimage: file=\$BXSHARE/VGABIOS-lgpl-latest
-boot: disk
-cpu: ips=1000000
-megs: $mem
-log: bochsout.txt
-panic: action=fatal
-EOF
-    print BOCHSRC "gdbstub: enabled=1\n" if $debug eq 'gdb';
-    print BOCHSRC "clock: sync=", $realtime ? 'realtime' : 'none',
-      ", time0=0\n";
-    print_bochs_disk_line ("ata0-master", 0);
-    print_bochs_disk_line ("ata0-slave", 1);
-    if (defined ($disks_by_iface[2]{FILE_NAME})
-	|| defined ($disks_by_iface[3]{FILE_NAME})) {
-	print BOCHSRC "ata1: enabled=1, ioaddr1=0x170, ",
-	  "ioaddr2=0x370, irq=15\n";
-	print_bochs_disk_line ("ata1-master", 2);
-	print_bochs_disk_line ("ata1-slave", 3);
-    }
-    if ($vga ne 'terminal') {
-	if ($serial) {
-	    my $mode = defined ($squish_pty) ? "term" : "file";
-	    print BOCHSRC "com1: enabled=1, mode=$mode, dev=/dev/stdout\n";
-	}
-	print BOCHSRC "display_library: nogui\n" if $vga eq 'none';
-    } else {
-	print BOCHSRC "display_library: term\n";
-    }
-    close (BOCHSRC);
-
-    # Compose Bochs command line.
-    my (@cmd) = ($bin, '-q');
-    unshift (@cmd, $squish_pty) if defined $squish_pty;
-    push (@cmd, '-j', $jitter) if defined $jitter;
-
-    # Run Bochs.
-    print join (' ', @cmd), "\n";
-    my ($exit) = xsystem (@cmd);
-    if (WIFEXITED ($exit)) {
-	# Bochs exited normally.
-	# Ignore the exit code; Bochs normally exits with status 1,
-	# which is weird.
-    } elsif (WIFSIGNALED ($exit)) {
-	die "Bochs died with signal ", WTERMSIG ($exit), "\n";
-    } else {
-	die "Bochs died: code $exit\n";
-    }
-}
-
-# print_bochs_disk_line($device, $iface)
-#
-# If IDE interface $iface has a disk attached, prints a bochsrc.txt
-# line for attaching it to $device.
-sub print_bochs_disk_line {
-    my ($device, $iface) = @_;
-    my ($disk) = $disks_by_iface[$iface];
-    my ($file) = $disk->{FILE_NAME};
-    if (defined $file) {
-	my (%geom) = disk_geometry ($disk);
-	print BOCHSRC "$device: type=disk, path=$file, mode=flat, ";
-	print BOCHSRC "cylinders=$geom{C}, heads=$geom{H}, spt=$geom{S}, ";
-	print BOCHSRC "translation=none\n";
-    }
-}
-
-# Runs QEMU.
-sub run_qemu {
-    print "warning: qemu doesn't support --terminal\n"
-      if $vga eq 'terminal';
-    print "warning: qemu doesn't support jitter\n"
-      if defined $jitter;
-    my (@cmd) = ('qemu');
-    for my $iface (0...3) {
-	my ($option) = ('-hda', '-hdb', '-hdc', '-hdd')[$iface];
-	push (@cmd, '-drive', "file=" . $disks_by_iface[$iface]{FILE_NAME} . ",index=$iface,format=raw")
-	  if defined $disks_by_iface[$iface]{FILE_NAME};
-    }
-    push (@cmd, '-m', $mem);
-    push (@cmd, '-net', 'none');
-    push (@cmd, '-nographic') if $vga eq 'none';
-    push (@cmd, '-serial', 'stdio') if $serial && $vga ne 'none';
-    push (@cmd, '-S') if $debug eq 'monitor';
-    push (@cmd, '-s', '-S') if $debug eq 'gdb';
-    push (@cmd, '-monitor', 'null') if $vga eq 'none' && $debug eq 'none';
-
-    # Insert a device that lets us shutdown Pintos. See https://wiki.osdev.org/Shutdown for details
-    push (@cmd, '-device', 'isa-debug-exit,iobase=0xf4,iosize=0x04');
-
-    # When using isa-debug-exit, we can not exit QEMU cleanly. We exit with 0x30, which will make QEMU exit
-    # with the code 0x30*2 + 1 = 97, and therefore we treat 97 as success as well.
-    my ($exit) = xsystem (@cmd);
-    if (WIFEXITED($exit)) {
-	$exit = WEXITSTATUS($exit);
-	if ($exit == 97) {
-	    # We use this code to exit cleanly from within Pintos (see https://wiki.osdev.org/Shutdown)
-	    # since we can not exit with code 0 using the debug shutdown device in QEMU.
-	    $exit = 0;
-	}
-    }
-    die "command failed\n" if $exit;
-
-}
-
-# player_unsup($flag)
-#
-# Prints a message that $flag is unsupported by VMware Player.
-sub player_unsup {
-    my ($flag) = @_;
-    print "warning: no support for $flag with VMware Player\n";
-}
-
-# Runs VMware Player.
-sub run_player {
-    player_unsup ("--$debug") if $debug ne 'none';
-    player_unsup ("--no-vga") if $vga eq 'none';
-    player_unsup ("--terminal") if $vga eq 'terminal';
-    player_unsup ("--jitter") if defined $jitter;
-    player_unsup ("--timeout"), undef $timeout if defined $timeout;
-    player_unsup ("--kill-on-failure"), undef $kill_on_failure
-      if defined $kill_on_failure;
-
-    # Memory size must be multiple of 4.
-    $mem = int (($mem + 3) / 4) * 4;
-
-    open (VMX, ">", "pintos.vmx") or die "pintos.vmx: create: $!\n";
-    chmod 0777 & ~umask, "pintos.vmx";
-    print VMX <<EOF;
-#! /usr/bin/vmware -G
-config.version = 8
-guestOS = "linux"
-memsize = $mem
-floppy0.present = FALSE
-usb.present = FALSE
-sound.present = FALSE
-gui.exitAtPowerOff = TRUE
-gui.exitOnCLIHLT = TRUE
-gui.powerOnAtStartUp = TRUE
-EOF
-
-
-
-    print VMX <<EOF if $serial;
-serial0.present = TRUE
-serial0.fileType = "pipe"
-serial0.fileName = "pintos.socket"
-serial0.pipe.endPoint = "client"
-serial0.tryNoRxLoss = "TRUE"
-EOF
-
-    for (my ($i) = 0; $i < 4; $i++) {
-	my ($disk) = $disks_by_iface[$i];
-	my ($dsk) = $disk->{FILE_NAME};
-	next if !defined $dsk;
-
-	my ($device) = "ide" . int ($i / 2) . ":" . ($i % 2);
-	my ($pln) = "$device.pln";
-	print VMX <<EOF;
-
-$device.present = TRUE
-$device.deviceType = "plainDisk"
-$device.fileName = "$pln"
-EOF
-
-	open (URANDOM, '<', '/dev/urandom') or die "/dev/urandom: open: $!\n";
-	my ($bytes);
-	sysread (URANDOM, $bytes, 4) == 4 or die "/dev/urandom: read: $!\n";
-	close (URANDOM);
-	my ($cid) = unpack ("L", $bytes);
-
-	my (%geom) = disk_geometry ($disk);
-	open (PLN, ">", $pln) or die "$pln: create: $!\n";
-	print PLN <<EOF;
-version=1
-CID=$cid
-parentCID=ffffffff
-createType="monolithicFlat"
-
-RW $geom{CAPACITY} FLAT "$dsk" 0
-
-# The Disk Data Base
-#DDB
-
-ddb.adapterType = "ide"
-ddb.virtualHWVersion = "4"
-ddb.toolsVersion = "2"
-ddb.geometry.cylinders = "$geom{C}"
-ddb.geometry.heads = "$geom{H}"
-ddb.geometry.sectors = "$geom{S}"
-EOF
-	close (PLN);
-    }
-    close (VMX);
-
-    my ($squish_unix);
-    if ($serial) {
-	$squish_unix = find_in_path ("squish-unix");
-	print "warning: can't find squish-unix, so terminal input ",
-	  "and output will fail\n" if !defined $squish_unix;
-    }
-
-    my ($vmx) = getcwd () . "/pintos.vmx";
-    my (@cmd) = ("vmplayer", $vmx);
-    unshift (@cmd, $squish_unix, "pintos.socket") if $squish_unix;
-    print join (' ', @cmd), "\n";
-    xsystem (@cmd);
-}
-
-# Disk utilities.
-
-# open_disk($disk)
-#
-# Opens $disk, if it is not already open, and returns its file handle
-# and file name.
-sub open_disk {
-    my ($disk) = @_;
-    if (!defined ($disk->{HANDLE})) {
-	if ($disk->{FILE_NAME}) {
-	    sysopen ($disk->{HANDLE}, $disk->{FILE_NAME}, O_RDWR)
-	      or die "$disk->{FILE_NAME}: open: $!\n";
-	} else {
-	    ($disk->{HANDLE}, $disk->{FILE_NAME}) = tempfile (UNLINK => 1,
-							     SUFFIX => '.dsk');
-	}
-    }
-    return ($disk->{HANDLE}, $disk->{FILE_NAME});
-}
-
-# open_disk_copy($disk)
-#
-# Makes a temporary copy of $disk and returns its file handle and file name.
-sub open_disk_copy {
-    my ($disk) = @_;
-    die if !$disk->{FILE_NAME};
-
-    my ($orig_handle, $orig_file_name) = open_disk ($disk);
-    my ($cp_handle, $cp_file_name) = tempfile (UNLINK => 1, SUFFIX => '.dsk');
-    copy_file ($orig_handle, $orig_file_name, $cp_handle, $cp_file_name,
-	       -s $orig_handle);
-    return ($disk->{HANDLE}, $disk->{FILE_NAME}) = ($cp_handle, $cp_file_name);
-}
-
-# extend_disk($disk, $size)
-#
-# Extends $disk, if necessary, so that it is at least $size bytes
-# long.
-sub extend_disk {
-    my ($disk, $size) = @_;
-    my ($handle, $file_name) = open_disk ($disk);
-    if (-s ($handle) < $size) {
-	sysseek ($handle, $size - 1, 0) == $size - 1
-	  or die "$file_name: seek: $!\n";
-	syswrite ($handle, "\0") == 1
-	  or die "$file_name: write: $!\n";
-    }
-}
-
-# disk_geometry($file)
-#
-# Examines $file and returns a valid IDE disk geometry for it, as a
-# hash.
-sub disk_geometry {
-    my ($disk) = @_;
-    my ($file) = $disk->{FILE_NAME};
-    my ($size) = -s $file;
-    die "$file: stat: $!\n" if !defined $size;
-    die "$file: size not a multiple of 512 bytes\n" if $size % 512;
-    my ($cyl_size) = 512 * 16 * 63;
-    my ($cylinders) = ceil ($size / $cyl_size);
-    extend_disk ($disk, $cylinders * $cyl_size) if $size % $cyl_size;
-
-    return (CAPACITY => $size / 512,
-	    C => $cylinders,
-	    H => 16,
-	    S => 63);
-}
-
-# copy_file($from_handle, $from_file_name, $to_handle, $to_file_name, $size)
-#
-# Copies $size bytes from $from_handle to $to_handle.
-# $from_file_name and $to_file_name are used in error messages.
-sub copy_file {
-    my ($from_handle, $from_file_name, $to_handle, $to_file_name, $size) = @_;
-
-    while ($size > 0) {
-	my ($chunk_size) = 4096;
-	$chunk_size = $size if $chunk_size > $size;
-	$size -= $chunk_size;
-
-	my ($data) = read_fully ($from_handle, $from_file_name, $chunk_size);
-	write_fully ($to_handle, $to_file_name, $data);
-    }
-}
-
-# read_fully($handle, $file_name, $bytes)
-#
-# Reads exactly $bytes bytes from $handle and returns the data read.
-# $file_name is used in error messages.
-sub read_fully {
-    my ($handle, $file_name, $bytes) = @_;
-    my ($data);
-    my ($read_bytes) = sysread ($handle, $data, $bytes);
-    die "$file_name: read: $!\n" if !defined $read_bytes;
-    die "$file_name: unexpected end of file\n" if $read_bytes != $bytes;
-    return $data;
-}
-
-# write_fully($handle, $file_name, $data)
-#
-# Write $data to $handle.
-# $file_name is used in error messages.
-sub write_fully {
-    my ($handle, $file_name, $data) = @_;
-    my ($written_bytes) = syswrite ($handle, $data);
-    die "$file_name: write: $!\n" if !defined $written_bytes;
-    die "$file_name: short write\n" if $written_bytes != length $data;
-}
-
-# Subprocess utilities.
-
-# run_command(@args)
-#
-# Runs xsystem(@args).
-# Also prints the command it's running and checks that it succeeded.
-sub run_command {
-    print join (' ', @_), "\n";
-    die "command failed\n" if xsystem (@_);
-}
-
-# xsystem(@args)
-#
-# Creates a subprocess via exec(@args) and waits for it to complete.
-# Relays common signals to the subprocess.
-# If $timeout is set then the subprocess will be killed after that long.
-sub xsystem {
-    # QEMU turns off local echo and does not restore it if killed by a signal.
-    # We compensate by restoring it ourselves.
-    my $cleanup = sub {};
-    if (isatty (0)) {
-	my $termios = POSIX::Termios->new;
-	$termios->getattr (0);
-	$cleanup = sub { $termios->setattr (0, &POSIX::TCSANOW); }
-    }
-
-    # Create pipe for filtering output.
-    pipe (my $in, my $out) or die "pipe: $!\n" if $kill_on_failure;
-
-    my ($pid) = fork;
-    if (!defined ($pid)) {
-	# Fork failed.
-	die "fork: $!\n";
-    } elsif (!$pid) {
-	# Running in child process.
-	dup2 (fileno ($out), STDOUT_FILENO) or die "dup2: $!\n"
-	  if $kill_on_failure;
-	exec_setitimer (@_);
-    } else {
-	# Running in parent process.
-	close $out if $kill_on_failure;
-
-	my ($cause);
-	local $SIG{ALRM} = sub { timeout ($pid, $cause, $cleanup); };
-	local $SIG{INT} = sub { relay_signal ($pid, "INT", $cleanup); };
-	local $SIG{TERM} = sub { relay_signal ($pid, "TERM", $cleanup); };
-	alarm ($timeout * get_load_average () + 1) if defined ($timeout);
-
-	if ($kill_on_failure) {
-	    # Filter output.
-	    my ($buf) = "";
-	    my ($boots) = 0;
-	    local ($|) = 1;
-	    for (;;) {
-		if (waitpid ($pid, WNOHANG) != 0) {
-		    # Subprocess died.  Pass through any remaining data.
-		    print $buf while sysread ($in, $buf, 4096) > 0;
-		    last;
-		}
-
-		# Read and print out pipe data.
-		my ($len) = length ($buf);	
-		my ($readcount) = sysread ($in, $buf, 4096, $len);
-		waitpid ($pid, 0), last
-		  if $readcount <= 0;
-		print substr ($buf, $len);
-
-		# Remove full lines from $buf and scan them for keywords.
-		while ((my $idx = index ($buf, "\n")) >= 0) {
-		    local $_ = substr ($buf, 0, $idx + 1, '');
-		    next if defined ($cause);
-		    if (/(Kernel PANIC|User process ABORT)/ ) {
-			$cause = "\L$1\E";
-			alarm (5);
-		    } elsif (/Pintos booting/ && ++$boots > 1) {
-			$cause = "triple fault";
-			alarm (5);
-		    } elsif (/FAILED/) {
-			$cause = "test failure";
-			alarm (5);
-		    }
-		}
-	    }
-	} else {
-	    waitpid ($pid, 0);
-	}
-	alarm (0);
-	&$cleanup ();
-
-	if (WIFSIGNALED ($?) && WTERMSIG ($?) == SIGVTALRM ()) {
-	    seek (STDOUT, 0, 2);
-	    print "\nTIMEOUT after $timeout seconds of host CPU time\n";
-	    exit 0;
-	}
-
-	return $?;
-    }
-}
-
-# relay_signal($pid, $signal, &$cleanup)
-#
-# Relays $signal to $pid and then reinvokes it for us with the default
-# handler.  Also cleans up temporary files and invokes $cleanup.
-sub relay_signal {
-    my ($pid, $signal, $cleanup) = @_;
-    kill $signal, $pid;
-    eval { File::Temp::cleanup() };	# Not defined in old File::Temp.
-    &$cleanup ();
-    $SIG{$signal} = 'DEFAULT';
-    kill $signal, getpid ();
-}
-
-# timeout($pid, $cause, &$cleanup)
-#
-# Interrupts $pid and dies with a timeout error message,
-# after invoking $cleanup.
-sub timeout {
-    my ($pid, $cause, $cleanup) = @_;
-    kill "INT", $pid;
-    waitpid ($pid, 0);
-    &$cleanup ();
-    seek (STDOUT, 0, 2);
-    if (!defined ($cause)) {
-	my ($load_avg) = `uptime` =~ /(load average:.*)$/i;
-	print "\nTIMEOUT after ", time () - $start_time,
-	  " seconds of wall-clock time";
-	print  " - $load_avg" if defined $load_avg;
-	print "\n";
-    } else {
-	print "Simulation terminated due to $cause.\n";
-    }
-    exit 0;
-}
-
-# Returns the system load average over the last minute.
-# If the load average is less than 1.0 or cannot be determined, returns 1.0.
-sub get_load_average {
-    my ($avg) = `uptime` =~ /load average:\s*([^,]+),/;
-    return $avg >= 1.0 ? $avg : 1.0;
-}
-
-# Calls setitimer to set a timeout, then execs what was passed to us.
-sub exec_setitimer {
-    if (defined $timeout) {
-	if ($] ge 5.8.0) {
-	    eval "
-              use Time::HiRes qw(setitimer ITIMER_VIRTUAL);
-              setitimer (ITIMER_VIRTUAL, $timeout, 0);
-            ";
-	} else {
-	    { exec ("setitimer-helper", $timeout, @_); };
-	    exit 1 if !$!{ENOENT};
-	    print STDERR "warning: setitimer-helper is not installed, so ",
-	      "CPU time limit will not be enforced\n";
-	}
-    }
-    exec (@_);
-    exit (1);
-}
-# Thanks Klas
-
-
-#sub SIGVTALRM {
-sub get_vtalarm{
-  if(defined &SIGALARM){
-      return SIGVTALRM();
-    }
-    use Config;
-    my $i = 0;
-    foreach my $name (split(' ', $Config{sig_name})) {
-	return $i if $name eq 'VTALRM';
-	$i++;
-    }
-    return 0;
-}
-
-# find_in_path ($program)
-#
-# Searches for $program in $ENV{PATH}.
-# Returns $program if found, otherwise undef.
-sub find_in_path {
-    my ($program) = @_;
-    -x "$_/$program" and return $program foreach split (':', $ENV{PATH});
-    return;
-}
diff --git a/src/utils/pintos-gdb b/src/utils/pintos-gdb
deleted file mode 100755
index 4ef38d3..0000000
--- a/src/utils/pintos-gdb
+++ /dev/null
@@ -1,20 +0,0 @@
-#! /bin/sh
-
-# Path to GDB macros file.  Customize for your site.
-GDBMACROS=/usr/class/cs140/pintos/pintos/src/misc/gdb-macros
-
-# Choose correct GDB.
-if command -v i386-elf-gdb >/dev/null 2>&1; then
-	GDB=i386-elf-gdb
-else
-	GDB=gdb
-fi
-
-# Run GDB.
-if test -f "$GDBMACROS"; then
-	exec $GDB -x "$GDBMACROS" "$@"
-else
-	echo "*** $GDBMACROS does not exist ***"
-	echo "*** Pintos GDB macros will not be available ***"
-	exec $GDB "$@"
-fi
diff --git a/src/utils/pintos-mkdisk b/src/utils/pintos-mkdisk
deleted file mode 100755
index 662b2e5..0000000
--- a/src/utils/pintos-mkdisk
+++ /dev/null
@@ -1,37 +0,0 @@
-#! /usr/bin/perl
-
-use strict;
-use warnings;
-use POSIX;
-use Getopt::Long;
-use Fcntl 'SEEK_SET';
-
-GetOptions ("h|help" => sub { usage (0); })
-  or exit 1;
-usage (1) if @ARGV != 2;
-
-my ($disk, $mb) = @ARGV;
-die "$disk: already exists\n" if -e $disk;
-die "\"$mb\" is not a valid size in megabytes\n"
-  if $mb <= 0 || $mb > 1024 || $mb !~ /^\d+(\.\d+)?|\.\d+/;
-
-my ($cyl_cnt) = ceil ($mb * 2);
-my ($cyl_bytes) = 512 * 16 * 63;
-my ($bytes) = $cyl_bytes * $cyl_cnt;
-
-open (DISK, '>', $disk) or die "$disk: create: $!\n";
-sysseek (DISK, $bytes - 1, SEEK_SET) or die "$disk: seek: $!\n";
-syswrite (DISK, "\0", 1) == 1 or die "$disk: write: $!\n";
-close (DISK) or die "$disk: close: $!\n";
-
-sub usage {
-    print <<'EOF';
-pintos-mkdisk, a utility for creating Pintos virtual disks
-Usage: pintos DISKFILE MB
-where DISKFILE is the file to use for the disk
-  and MB is the disk size in (approximate) megabytes.
-Options:
-  -h, --help        Display this help message.
-EOF
-    exit (@_);
-}
diff --git a/src/utils/setitimer-helper.c b/src/utils/setitimer-helper.c
deleted file mode 100644
index 772d736..0000000
--- a/src/utils/setitimer-helper.c
+++ /dev/null
@@ -1,49 +0,0 @@
-#include <errno.h>
-#include <limits.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/time.h>
-#include <unistd.h>
-
-int
-main (int argc, char *argv[]) 
-{
-  const char *program_name = argv[0];
-  double timeout;
-
-  if (argc < 3)
-    {
-      fprintf (stderr,
-               "setitimer-helper: runs a program with a virtual CPU limit\n"
-               "usage: %s TIMEOUT PROGRAM [ARG...]\n"
-               "  where TIMEOUT is the virtual CPU limit, in seconds,\n"
-               "    and remaining arguments specify the program to run\n"
-               "    and its argument.\n",
-               program_name);
-      return EXIT_FAILURE;
-    }
-
-  timeout = strtod (argv[1], NULL);
-  if (timeout >= 0.0 && timeout < LONG_MAX)
-    {
-      struct itimerval it;
-
-      it.it_interval.tv_sec = 0;
-      it.it_interval.tv_usec = 0;
-      it.it_value.tv_sec = timeout;
-      it.it_value.tv_usec = (timeout - floor (timeout)) * 1000000;
-      if (setitimer (ITIMER_VIRTUAL, &it, NULL) < 0)
-        fprintf (stderr, "%s: setitimer: %s\n",
-                 program_name, strerror (errno));
-    }
-  else
-    fprintf (stderr, "%s: invalid timeout value \"%s\"\n",
-             program_name, argv[1]);
-  
-  execvp (argv[2], &argv[2]);
-  fprintf (stderr, "%s: couldn't exec \"%s\": %s\n",
-           program_name, argv[2], strerror (errno));
-  return EXIT_FAILURE;
-}
diff --git a/src/utils/squish-pty.c b/src/utils/squish-pty.c
deleted file mode 100644
index ea060c7..0000000
--- a/src/utils/squish-pty.c
+++ /dev/null
@@ -1,345 +0,0 @@
-#define _GNU_SOURCE 1
-#include <errno.h>
-#include <fcntl.h>
-#include <signal.h>
-#include <stdarg.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/ioctl.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <termios.h>
-#include <unistd.h>
-
-static void
-fail_io (const char *msg, ...)
-     __attribute__ ((noreturn))
-     __attribute__ ((format (printf, 1, 2)));
-
-/* Prints MSG, formatting as with printf(),
-   plus an error message based on errno,
-   and exits. */
-static void
-fail_io (const char *msg, ...)
-{
-  va_list args;
-
-  va_start (args, msg);
-  vfprintf (stderr, msg, args);
-  va_end (args);
-
-  if (errno != 0)
-    fprintf (stderr, ": %s", strerror (errno));
-  putc ('\n', stderr);
-  exit (EXIT_FAILURE);
-}
-
-/* If FD is a terminal, configures it for noncanonical input mode
-   with VMIN and VTIME set as indicated.
-   If FD is not a terminal, has no effect. */
-static void
-make_noncanon (int fd, int vmin, int vtime)
-{
-  if (isatty (fd)) 
-    {
-      struct termios termios;
-      if (tcgetattr (fd, &termios) < 0)
-        fail_io ("tcgetattr");
-      termios.c_lflag &= ~(ICANON | ECHO);
-      termios.c_cc[VMIN] = vmin;
-      termios.c_cc[VTIME] = vtime;
-      if (tcsetattr (fd, TCSANOW, &termios) < 0)
-        fail_io ("tcsetattr");
-    }
-}
-
-/* Make FD non-blocking if NONBLOCKING is true,
-   or blocking if NONBLOCKING is false. */
-static void
-make_nonblocking (int fd, bool nonblocking) 
-{
-  int flags = fcntl (fd, F_GETFL);
-  if (flags < 0)
-    fail_io ("fcntl");
-  if (nonblocking)
-    flags |= O_NONBLOCK;
-  else
-    flags &= ~O_NONBLOCK;
-  if (fcntl (fd, F_SETFL, flags) < 0)
-    fail_io ("fcntl");
-}
-
-/* Handle a read or write on *FD, which is the pty if FD_IS_PTY
-   is true, that returned end-of-file or error indication RETVAL.
-   The system call is named CALL, for use in error messages.
-   Returns true if processing may continue, false if we're all
-   done. */
-static bool
-handle_error (ssize_t retval, int *fd, bool fd_is_pty, const char *call)
-{
-  if (fd_is_pty)
-    {
-      if (retval < 0)
-        {
-          if (errno == EIO)
-            {
-              /* Slave side of pty has been closed. */
-              return false;
-            }
-          else
-            fail_io (call); 
-        }
-      else
-        return true;
-    }
-  else 
-    {
-      if (retval == 0)
-        {
-          close (*fd);
-          *fd = -1;
-          return true;
-        }
-      else
-        fail_io (call);
-    }
-}
-
-/* Copies data from stdin to PTY and from PTY to stdout until no
-   more data can be read or written. */
-static void
-relay (int pty, int dead_child_fd) 
-{
-  struct pipe 
-    {
-      int in, out;
-      char buf[BUFSIZ];
-      size_t size, ofs;
-      bool active;
-    };
-  struct pipe pipes[2];
-
-  /* Make PTY, stdin, and stdout non-blocking. */
-  make_nonblocking (pty, true);
-  make_nonblocking (STDIN_FILENO, true);
-  make_nonblocking (STDOUT_FILENO, true);
-
-  /* Configure noncanonical mode on PTY and stdin to avoid
-     waiting for end-of-line.  We want to minimize context
-     switching on PTY (for efficiency) and minimize latency on
-     stdin to avoid a laggy user experience. */
-  make_noncanon (pty, 16, 1);
-  make_noncanon (STDIN_FILENO, 1, 0);
-
-  memset (pipes, 0, sizeof pipes);
-  pipes[0].in = STDIN_FILENO;
-  pipes[0].out = pty;
-  pipes[1].in = pty;
-  pipes[1].out = STDOUT_FILENO;
-  
-  while (pipes[0].in != -1 || pipes[1].in != -1)
-    {
-      fd_set read_fds, write_fds;
-      int retval;
-      int i;
-
-      FD_ZERO (&read_fds);
-      FD_ZERO (&write_fds);
-      for (i = 0; i < 2; i++)
-        {
-          struct pipe *p = &pipes[i];
-
-          /* Don't do anything with the stdin->pty pipe until we
-             have some data for the pty->stdout pipe.  If we get
-             too eager, Bochs will throw away our input. */
-          if (i == 0 && !pipes[1].active)
-            continue;
-          
-          if (p->in != -1 && p->size + p->ofs < sizeof p->buf)
-            FD_SET (p->in, &read_fds);
-          if (p->out != -1 && p->size > 0)
-            FD_SET (p->out, &write_fds); 
-        }
-      FD_SET (dead_child_fd, &read_fds);
-
-      do 
-        {
-          retval = select (FD_SETSIZE, &read_fds, &write_fds, NULL, NULL); 
-        }
-      while (retval < 0 && errno == EINTR);
-      if (retval < 0) 
-        fail_io ("select");
-
-      if (FD_ISSET (dead_child_fd, &read_fds))
-        {
-          /* Child died.  Do final relaying. */
-          struct pipe *p = &pipes[1];
-          if (p->out == -1)
-            return;
-          make_nonblocking (STDOUT_FILENO, false);
-          for (;;) 
-            {
-              ssize_t n;
-                  
-              /* Write buffer. */
-              while (p->size > 0) 
-                {
-                  n = write (p->out, p->buf + p->ofs, p->size);
-                  if (n < 0)
-                    fail_io ("write");
-                  else if (n == 0)
-                    fail_io ("zero-length write");
-                  p->ofs += n;
-                  p->size -= n;
-                }
-              p->ofs = 0;
-
-              p->size = n = read (p->in, p->buf, sizeof p->buf);
-              if (n <= 0)
-                return;
-            }
-        }
-
-      for (i = 0; i < 2; i++) 
-        {
-          struct pipe *p = &pipes[i];
-          if (p->in != -1 && FD_ISSET (p->in, &read_fds))
-            {
-              ssize_t n = read (p->in, p->buf + p->ofs + p->size,
-                                sizeof p->buf - p->ofs - p->size);
-              if (n > 0) 
-                {
-                  p->active = true;
-                  p->size += n;
-                  if (p->size == BUFSIZ && p->ofs != 0)
-                    {
-                      memmove (p->buf, p->buf + p->ofs, p->size);
-                      p->ofs = 0;
-                    }
-                }
-              else if (!handle_error (n, &p->in, p->in == pty, "read"))
-                return;
-            }
-          if (p->out != -1 && FD_ISSET (p->out, &write_fds)) 
-            {
-              ssize_t n = write (p->out, p->buf + p->ofs, p->size);
-              if (n > 0) 
-                {
-                  p->ofs += n;
-                  p->size -= n;
-                  if (p->size == 0)
-                    p->ofs = 0;
-                }
-              else if (!handle_error (n, &p->out, p->out == pty, "write"))
-                return;
-            }
-        }
-    }
-}
-
-static int dead_child_fd;
-
-static void
-sigchld_handler (int signo __attribute__ ((unused))) 
-{
-  if (write (dead_child_fd, "", 1) < 0)
-    _exit (1);
-}
-
-int
-main (int argc __attribute__ ((unused)), char *argv[])
-{
-  int master, slave;
-  char *name;
-  pid_t pid;
-  struct sigaction sa;
-  int pipe_fds[2];
-  struct itimerval zero_itimerval, old_itimerval;
-
-  if (argc < 2) 
-    {
-      fprintf (stderr,
-               "usage: squish-pty COMMAND [ARG]...\n"
-               "Squishes both stdin and stdout into a single pseudoterminal,\n"
-               "which is passed as stdout to run the specified COMMAND.\n");
-      return EXIT_FAILURE;
-    }
-
-  /* Open master side of pty and get ready to open slave. */
-  master = open ("/dev/ptmx", O_RDWR | O_NOCTTY);
-  if (master < 0)
-    fail_io ("open \"/dev/ptmx\"");
-  if (grantpt (master) < 0)
-    fail_io ("grantpt");
-  if (unlockpt (master) < 0)
-    fail_io ("unlockpt");
-
-  /* Open slave side of pty. */
-  name = ptsname (master);
-  if (name == NULL)
-    fail_io ("ptsname");
-  slave = open (name, O_RDWR);
-  if (slave < 0)
-    fail_io ("open \"%s\"", name);
-
-  /* Arrange to get notified when a child dies, by writing a byte
-     to a pipe fd.  We really want to use pselect() and
-     sigprocmask(), but Solaris 2.7 doesn't have it. */
-  if (pipe (pipe_fds) < 0)
-    fail_io ("pipe");
-  dead_child_fd = pipe_fds[1];
-
-  memset (&sa, 0, sizeof sa);
-  sa.sa_handler = sigchld_handler;
-  sigemptyset (&sa.sa_mask);
-  sa.sa_flags = SA_RESTART;
-  if (sigaction (SIGCHLD, &sa, NULL) < 0)
-    fail_io ("sigaction");
-
-  /* Save the virtual interval timer, which might have been set
-     by the process that ran us.  It really should be applied to
-     our child process. */
-  memset (&zero_itimerval, 0, sizeof zero_itimerval);
-  if (setitimer (ITIMER_VIRTUAL, &zero_itimerval, &old_itimerval) < 0)
-    fail_io ("setitimer");
-  
-  pid = fork ();
-  if (pid < 0)
-    fail_io ("fork");
-  else if (pid != 0) 
-    {
-      /* Running in parent process. */
-      int status;
-      close (slave);
-      relay (master, pipe_fds[0]);
-
-      /* If the subprocess has died, die in the same fashion.
-         In particular, dying from SIGVTALRM tells the pintos
-         script that we ran out of CPU time. */
-      if (waitpid (pid, &status, WNOHANG) > 0)
-        {
-          if (WIFEXITED (status))
-            return WEXITSTATUS (status);
-          else if (WIFSIGNALED (status))
-            raise (WTERMSIG (status));
-        }
-      return 0; 
-    }
-  else 
-    {
-      /* Running in child process. */
-      if (setitimer (ITIMER_VIRTUAL, &old_itimerval, NULL) < 0)
-        fail_io ("setitimer");
-      if (dup2 (slave, STDOUT_FILENO) < 0)
-        fail_io ("dup2");
-      if (close (pipe_fds[0]) < 0 || close (pipe_fds[1]) < 0
-          || close (slave) < 0 || close (master) < 0)
-        fail_io ("close");
-      execvp (argv[1], argv + 1);
-      fail_io ("exec");
-    }
-}
diff --git a/src/utils/squish-unix.c b/src/utils/squish-unix.c
deleted file mode 100644
index c594fde..0000000
--- a/src/utils/squish-unix.c
+++ /dev/null
@@ -1,353 +0,0 @@
-#define _GNU_SOURCE 1
-#include <errno.h>
-#include <fcntl.h>
-#include <signal.h>
-#include <stdarg.h>
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/ioctl.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <termios.h>
-#include <unistd.h>
-
-
-/* AF_LOCAL is not defined on solaris */
-#if !defined(AF_LOCAL)
-#define AF_LOCAL AF_UNIX
-#endif
-#if !defined(PF_LOCAL)
-#define PF_LOCAL PF_UNIX
-#endif
- 
- 
-/* solaris doesn't have SUN_LEN */
-//#ifndef SUN_LEN
-//#define SUN_LEN(sa)   ( strlen((sa)->sun_path) + \
-//                (size_t)(((struct sockaddr_un*)0)->sun_path) )
-//#endif
-
-static void
-fail_io (const char *msg, ...)
-     __attribute__ ((noreturn))
-     __attribute__ ((format (printf, 1, 2)));
-
-/* Prints MSG, formatting as with printf(),
-   plus an error message based on errno,
-   and exits. */
-static void
-fail_io (const char *msg, ...)
-{
-  va_list args;
-
-  va_start (args, msg);
-  vfprintf (stderr, msg, args);
-  va_end (args);
-
-  if (errno != 0)
-    fprintf (stderr, ": %s", strerror (errno));
-  putc ('\n', stderr);
-  exit (EXIT_FAILURE);
-}
-
-/* If FD is a terminal, configures it for noncanonical input mode
-   with VMIN and VTIME set as indicated.
-   If FD is not a terminal, has no effect. */
-static void
-make_noncanon (int fd, int vmin, int vtime)
-{
-  if (isatty (fd)) 
-    {
-      struct termios termios;
-      if (tcgetattr (fd, &termios) < 0)
-        fail_io ("tcgetattr");
-      termios.c_lflag &= ~(ICANON | ECHO);
-      termios.c_cc[VMIN] = vmin;
-      termios.c_cc[VTIME] = vtime;
-      if (tcsetattr (fd, TCSANOW, &termios) < 0)
-        fail_io ("tcsetattr");
-    }
-}
-
-/* Make FD non-blocking if NONBLOCKING is true,
-   or blocking if NONBLOCKING is false. */
-static void
-make_nonblocking (int fd, bool nonblocking) 
-{
-  int flags = fcntl (fd, F_GETFL);
-  if (flags < 0)
-    fail_io ("fcntl");
-  if (nonblocking)
-    flags |= O_NONBLOCK;
-  else
-    flags &= ~O_NONBLOCK;
-  if (fcntl (fd, F_SETFL, flags) < 0)
-    fail_io ("fcntl");
-}
-
-/* Handle a read or write on *FD, which is the socket if
-   FD_IS_SOCK is true, that returned end-of-file or error
-   indication RETVAL.  The system call is named CALL, for use in
-   error messages.  Returns true if processing may continue,
-   false if we're all done. */
-static bool
-handle_error (ssize_t retval, int *fd, bool fd_is_sock, const char *call)
-{
-  if (retval == 0)
-    {
-      if (fd_is_sock)
-        return false;
-      else
-        {
-          *fd = -1;
-          return true;
-        }
-    }
-  else
-    fail_io (call); 
-}
-
-/* Copies data from stdin to SOCK and from SOCK to stdout until no
-   more data can be read or written. */
-static void
-relay (int sock) 
-{
-  struct pipe 
-    {
-      int in, out;
-      char buf[BUFSIZ];
-      size_t size, ofs;
-      bool active;
-    };
-  struct pipe pipes[2];
-
-  /* In case stdin is a file, go back to the beginning.
-     This allows replaying the input on reset. */
-  lseek (STDIN_FILENO, 0, SEEK_SET);
-
-  /* Make SOCK, stdin, and stdout non-blocking. */
-  make_nonblocking (sock, true);
-  make_nonblocking (STDIN_FILENO, true);
-  make_nonblocking (STDOUT_FILENO, true);
-
-  /* Configure noncanonical mode on stdin to avoid waiting for
-     end-of-line. */
-  make_noncanon (STDIN_FILENO, 1, 0);
-
-  memset (pipes, 0, sizeof pipes);
-  pipes[0].in = STDIN_FILENO;
-  pipes[0].out = sock;
-  pipes[1].in = sock;
-  pipes[1].out = STDOUT_FILENO;
-  
-  while (pipes[0].in != -1 || pipes[1].in != -1
-         || (pipes[1].size && pipes[1].out != -1))
-    {
-      fd_set read_fds, write_fds;
-      sigset_t empty_set;
-      int retval;
-      int i;
-
-      FD_ZERO (&read_fds);
-      FD_ZERO (&write_fds);
-      for (i = 0; i < 2; i++)
-        {
-          struct pipe *p = &pipes[i];
-
-          /* Don't do anything with the stdin->sock pipe until we
-             have some data for the sock->stdout pipe.  If we get
-             too eager, vmplayer will throw away our input. */
-          if (i == 0 && !pipes[1].active)
-            continue;
-          
-          if (p->in != -1 && p->size + p->ofs < sizeof p->buf)
-            FD_SET (p->in, &read_fds);
-          if (p->out != -1 && p->size > 0)
-            FD_SET (p->out, &write_fds); 
-        }
-      sigemptyset (&empty_set);
-      retval = pselect (FD_SETSIZE, &read_fds, &write_fds, NULL, NULL,
-                        &empty_set);
-      if (retval < 0) 
-        {
-          if (errno == EINTR)
-            {
-              /* Child died.  Do final relaying. */
-              struct pipe *p = &pipes[1];
-              if (p->out == -1)
-                exit (0);
-              make_nonblocking (STDOUT_FILENO, false);
-              for (;;) 
-                {
-                  ssize_t n;
-                  
-                  /* Write buffer. */
-                  while (p->size > 0) 
-                    {
-                      n = write (p->out, p->buf + p->ofs, p->size);
-                      if (n < 0)
-                        fail_io ("write");
-                      else if (n == 0)
-                        fail_io ("zero-length write");
-                      p->ofs += n;
-                      p->size -= n;
-                    }
-                  p->ofs = 0;
-
-                  p->size = n = read (p->in, p->buf, sizeof p->buf);
-                  if (n <= 0)
-                    exit (0);
-                }
-            }
-          fail_io ("select"); 
-        }
-
-      for (i = 0; i < 2; i++) 
-        {
-          struct pipe *p = &pipes[i];
-          if (p->in != -1 && FD_ISSET (p->in, &read_fds))
-            {
-              ssize_t n = read (p->in, p->buf + p->ofs + p->size,
-                                sizeof p->buf - p->ofs - p->size);
-              if (n > 0) 
-                {
-                  p->active = true;
-                  p->size += n;
-                  if (p->size == BUFSIZ && p->ofs != 0)
-                    {
-                      memmove (p->buf, p->buf + p->ofs, p->size);
-                      p->ofs = 0;
-                    }
-                }
-              else if (!handle_error (n, &p->in, p->in == sock, "read"))
-                return;
-            }
-          if (p->out != -1 && FD_ISSET (p->out, &write_fds)) 
-            {
-              ssize_t n = write (p->out, p->buf + p->ofs, p->size);
-              if (n > 0) 
-                {
-                  p->ofs += n;
-                  p->size -= n;
-                  if (p->size == 0)
-                    p->ofs = 0;
-                }
-              else if (!handle_error (n, &p->out, p->out == sock, "write"))
-                return;
-            }
-        }
-    }
-}
-
-static void
-sigchld_handler (int signo __attribute__ ((unused))) 
-{
-  /* Nothing to do. */
-}
-
-int
-main (int argc __attribute__ ((unused)), char *argv[])
-{
-  pid_t pid;
-  struct itimerval zero_itimerval;
-  struct sockaddr_un vsun;
-  sigset_t sigchld_set;
-  int sock;
-  
-  if (argc < 3) 
-    {
-      fprintf (stderr,
-               "usage: squish-unix SOCKET COMMAND [ARG]...\n"
-               "Squishes both stdin and stdout into a single Unix domain\n"
-               "socket named SOCKET, and runs COMMAND as a subprocess.\n");
-      return EXIT_FAILURE;
-    }
-
-  /* Create socket. */
-  sock = socket (PF_LOCAL, SOCK_STREAM, 0);
-  if (sock < 0)
-    fail_io ("socket");
-
-  /* Configure socket. */
-  vsun.sun_family = AF_LOCAL;
-  strncpy (vsun.sun_path, argv[1], sizeof vsun.sun_path);
-  vsun.sun_path[sizeof vsun.sun_path - 1] = '\0';
-  if (unlink (vsun.sun_path) < 0 && errno != ENOENT)
-    fail_io ("unlink");
-  if (bind (sock, (struct sockaddr *) &vsun,
-            (offsetof (struct sockaddr_un, sun_path)
-             + strlen (vsun.sun_path) + 1)) < 0)
-    fail_io ("bind");
-
-  /* Listen on socket. */
-  if (listen (sock, 1) < 0)
-    fail_io ("listen");
-
-  /* Block SIGCHLD and set up a handler for it. */
-  sigemptyset (&sigchld_set);
-  sigaddset (&sigchld_set, SIGCHLD);
-  if (sigprocmask (SIG_BLOCK, &sigchld_set, NULL) < 0)
-    fail_io ("sigprocmask");
-  if (signal (SIGCHLD, sigchld_handler) == SIG_ERR)
-    fail_io ("signal");
-
-  /* Save the virtual interval timer, which might have been set
-     by the process that ran us.  It really should be applied to
-     our child process. */
-  memset (&zero_itimerval, 0, sizeof zero_itimerval);
-  if (setitimer (ITIMER_VIRTUAL, &zero_itimerval, NULL) < 0)
-    fail_io ("setitimer");
-  
-  pid = fork ();
-  if (pid < 0)
-    fail_io ("fork");
-  else if (pid != 0) 
-    {
-      /* Running in parent process. */
-      make_nonblocking (sock, true);
-      for (;;) 
-        {
-          fd_set read_fds;
-          sigset_t empty_set;
-          int retval;
-          int conn;
-
-          /* Wait for connection. */
-          FD_ZERO (&read_fds);
-          FD_SET (sock, &read_fds);
-          sigemptyset (&empty_set);
-          retval = pselect (sock + 1, &read_fds, NULL, NULL, NULL, &empty_set);
-          if (retval < 0) 
-            {
-              if (errno == EINTR)
-                break;
-              fail_io ("select"); 
-            }
-
-          /* Accept connection. */
-          conn = accept (sock, NULL, NULL);
-          if (conn < 0)
-            fail_io ("accept");
-
-          /* Relay connection. */
-          relay (conn);
-          close (conn);
-        }
-      return 0; 
-    }
-  else 
-    {
-      /* Running in child process. */
-      if (close (sock) < 0)
-        fail_io ("close");
-      execvp (argv[2], argv + 2);
-      fail_io ("exec");
-    }
-}
diff --git a/src/vm/.gitignore b/src/vm/.gitignore
deleted file mode 100644
index 6d5357c..0000000
--- a/src/vm/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-build
-bochsrc.txt
-bochsout.txt
diff --git a/src/vm/Make.vars b/src/vm/Make.vars
deleted file mode 100644
index a5ea6b0..0000000
--- a/src/vm/Make.vars
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- makefile -*-
-
-os.dsk: DEFINES = -DUSERPROG -DFILESYS -DVM
-KERNEL_SUBDIRS = threads devices lib lib/kernel userprog filesys vm
-TEST_SUBDIRS = tests/userprog tests/vm tests/filesys/base
-GRADING_FILE = $(SRCDIR)/tests/vm/Grading
-SIMULATOR = --qemu
diff --git a/src/vm/Makefile b/src/vm/Makefile
deleted file mode 100644
index 34c10aa..0000000
--- a/src/vm/Makefile
+++ /dev/null
@@ -1 +0,0 @@
-include ../Makefile.kernel
-- 
GitLab