├── Berkeley-CS162-Docker ├── README.md └── docker-compose.yml ├── Project Design & Report Documentation ├── Markdown │ ├── Project_File_System_Design.md │ ├── Project_File_System_Report.md │ ├── Project_Threads_Design.md │ ├── Project_Threads_Report.md │ ├── Project_User_Programs_Design.md │ └── Project_User_Programs_Report.md └── PDF │ ├── Project_File_System_Design.pdf │ ├── Project_File_System_Report.pdf │ ├── Project_Threads_Design.pdf │ ├── Project_Threads_Report.pdf │ ├── Project_User_Programs_Design.pdf │ └── Project_User_Programs_Report.pdf ├── README.md ├── group43-proj-file-systems-completed ├── .gitignore ├── .pre-commit.sh ├── README.md ├── p1.diff ├── src │ ├── .clang-format │ ├── .gitignore │ ├── LICENSE │ ├── Make.config │ ├── Makefile │ ├── Makefile.build │ ├── Makefile.kernel │ ├── Makefile.userprog │ ├── devices │ │ ├── block.c │ │ ├── block.h │ │ ├── ide.c │ │ ├── ide.h │ │ ├── input.c │ │ ├── input.h │ │ ├── intq.c │ │ ├── intq.h │ │ ├── kbd.c │ │ ├── kbd.h │ │ ├── partition.c │ │ ├── partition.h │ │ ├── pit.c │ │ ├── pit.h │ │ ├── rtc.c │ │ ├── rtc.h │ │ ├── serial.c │ │ ├── serial.h │ │ ├── shutdown.c │ │ ├── shutdown.h │ │ ├── speaker.c │ │ ├── speaker.h │ │ ├── timer.c │ │ ├── timer.h │ │ ├── vga.c │ │ └── vga.h │ ├── examples │ │ ├── .gitignore │ │ ├── Makefile │ │ ├── bubsort.c │ │ ├── cat.c │ │ ├── cmp.c │ │ ├── cp.c │ │ ├── echo.c │ │ ├── halt.c │ │ ├── hex-dump.c │ │ ├── lib │ │ │ ├── .gitignore │ │ │ └── user │ │ │ │ ├── .dummy │ │ │ │ └── .gitignore │ │ ├── lineup.c │ │ ├── ls.c │ │ ├── matmult.c │ │ ├── mcat.c │ │ ├── mcp.c │ │ ├── mkdir.c │ │ ├── pwd.c │ │ ├── recursor.c │ │ ├── rm.c │ │ └── shell.c │ ├── filesys │ │ ├── .gitignore │ │ ├── Make.vars │ │ ├── Makefile │ │ ├── directory.c │ │ ├── directory.h │ │ ├── file.c │ │ ├── file.h │ │ ├── filesys.c │ │ ├── filesys.h │ │ ├── free-map.c │ │ ├── free-map.h │ │ ├── fsutil.c │ │ ├── fsutil.h │ │ ├── inode.c │ │ ├── inode.h │ │ └── off_t.h │ ├── lib │ │ ├── arithmetic.c │ │ ├── ctype.h │ │ ├── debug.c │ │ ├── debug.h │ │ ├── float.c │ │ ├── float.h │ │ ├── inttypes.h │ │ ├── kernel │ │ │ ├── bitmap.c │ │ │ ├── bitmap.h │ │ │ ├── console.c │ │ │ ├── console.h │ │ │ ├── debug.c │ │ │ ├── hash.c │ │ │ ├── hash.h │ │ │ ├── list.c │ │ │ ├── list.h │ │ │ ├── stdio.h │ │ │ ├── test-lib.c │ │ │ └── test-lib.h │ │ ├── limits.h │ │ ├── packed.h │ │ ├── random.c │ │ ├── random.h │ │ ├── round.h │ │ ├── stdarg.h │ │ ├── stdbool.h │ │ ├── stddef.h │ │ ├── stdint.h │ │ ├── stdio.c │ │ ├── stdio.h │ │ ├── stdlib.c │ │ ├── stdlib.h │ │ ├── string.c │ │ ├── string.h │ │ ├── syscall-nr.h │ │ ├── user │ │ │ ├── console.c │ │ │ ├── debug.c │ │ │ ├── entry.c │ │ │ ├── pthread.c │ │ │ ├── pthread.h │ │ │ ├── stdio.h │ │ │ ├── syscall.c │ │ │ ├── syscall.h │ │ │ └── user.lds │ │ ├── ustar.c │ │ └── ustar.h │ ├── misc │ │ ├── bochs-2.2.6-big-endian.patch │ │ ├── bochs-2.2.6-build.sh │ │ ├── bochs-2.2.6-gdbstub-ENN.patch │ │ ├── bochs-2.2.6-jitter.patch │ │ ├── bochs-2.2.6-ms-extensions.patch │ │ ├── bochs-2.2.6-namespace.patch │ │ ├── bochs-2.2.6-page-fault-segv.patch │ │ ├── bochs-2.2.6-paranoia.patch │ │ ├── bochs-2.2.6-solaris-link.patch │ │ ├── bochs-2.2.6-solaris-tty.patch │ │ ├── bochs-2.2.6-triple-fault.patch │ │ ├── bochs-2.6.2-banner-stderr.patch │ │ ├── bochs-2.6.2-block-device-check.patch │ │ ├── bochs-2.6.2-build.sh │ │ ├── bochs-2.6.2-jitter-plus-segv.patch │ │ ├── bochs-2.6.2-link-tinfo.patch │ │ ├── bochs-2.6.2-xrandr-pkgconfig.patch │ │ ├── gcc-3.3.6-cross-howto │ │ └── gdb-macros │ ├── tests │ │ ├── Algorithm │ │ │ └── Diff.pm │ │ ├── Make.tests │ │ ├── arc4.c │ │ ├── arc4.h │ │ ├── arc4.pm │ │ ├── cksum.c │ │ ├── cksum.h │ │ ├── cksum.pm │ │ ├── filesys │ │ │ ├── Grading.no-vm │ │ │ ├── Grading.with-vm │ │ │ ├── base │ │ │ │ ├── Make.tests │ │ │ │ ├── Rubric │ │ │ │ ├── child-syn-read.c │ │ │ │ ├── child-syn-wrt.c │ │ │ │ ├── full.inc │ │ │ │ ├── lg-create.c │ │ │ │ ├── lg-create.ck │ │ │ │ ├── lg-full.c │ │ │ │ ├── lg-full.ck │ │ │ │ ├── lg-random.c │ │ │ │ ├── lg-random.ck │ │ │ │ ├── lg-seq-block.c │ │ │ │ ├── lg-seq-block.ck │ │ │ │ ├── lg-seq-random.c │ │ │ │ ├── lg-seq-random.ck │ │ │ │ ├── random.inc │ │ │ │ ├── seq-block.inc │ │ │ │ ├── seq-random.inc │ │ │ │ ├── sm-create.c │ │ │ │ ├── sm-create.ck │ │ │ │ ├── sm-full.c │ │ │ │ ├── sm-full.ck │ │ │ │ ├── sm-random.c │ │ │ │ ├── sm-random.ck │ │ │ │ ├── sm-seq-block.c │ │ │ │ ├── sm-seq-block.ck │ │ │ │ ├── sm-seq-random.c │ │ │ │ ├── sm-seq-random.ck │ │ │ │ ├── syn-read.c │ │ │ │ ├── syn-read.ck │ │ │ │ ├── syn-read.h │ │ │ │ ├── syn-remove.c │ │ │ │ ├── syn-remove.ck │ │ │ │ ├── syn-write.c │ │ │ │ ├── syn-write.ck │ │ │ │ └── syn-write.h │ │ │ ├── create.inc │ │ │ ├── extended │ │ │ │ ├── Make.tests │ │ │ │ ├── Rubric.functionality │ │ │ │ ├── Rubric.persistence │ │ │ │ ├── Rubric.robustness │ │ │ │ ├── child-syn-rw.c │ │ │ │ ├── dir-empty-name-persistence.ck │ │ │ │ ├── dir-empty-name.c │ │ │ │ ├── dir-empty-name.ck │ │ │ │ ├── dir-mk-tree-persistence.ck │ │ │ │ ├── dir-mk-tree.c │ │ │ │ ├── dir-mk-tree.ck │ │ │ │ ├── dir-mkdir-persistence.ck │ │ │ │ ├── dir-mkdir.c │ │ │ │ ├── dir-mkdir.ck │ │ │ │ ├── dir-open-persistence.ck │ │ │ │ ├── dir-open.c │ │ │ │ ├── dir-open.ck │ │ │ │ ├── dir-over-file-persistence.ck │ │ │ │ ├── dir-over-file.c │ │ │ │ ├── dir-over-file.ck │ │ │ │ ├── dir-rm-cwd-persistence.ck │ │ │ │ ├── dir-rm-cwd.c │ │ │ │ ├── dir-rm-cwd.ck │ │ │ │ ├── dir-rm-parent-persistence.ck │ │ │ │ ├── dir-rm-parent.c │ │ │ │ ├── dir-rm-parent.ck │ │ │ │ ├── dir-rm-root-persistence.ck │ │ │ │ ├── dir-rm-root.c │ │ │ │ ├── dir-rm-root.ck │ │ │ │ ├── dir-rm-tree-persistence.ck │ │ │ │ ├── dir-rm-tree.c │ │ │ │ ├── dir-rm-tree.ck │ │ │ │ ├── dir-rmdir-persistence.ck │ │ │ │ ├── dir-rmdir.c │ │ │ │ ├── dir-rmdir.ck │ │ │ │ ├── dir-under-file-persistence.ck │ │ │ │ ├── dir-under-file.c │ │ │ │ ├── dir-under-file.ck │ │ │ │ ├── dir-vine-persistence.ck │ │ │ │ ├── dir-vine.c │ │ │ │ ├── dir-vine.ck │ │ │ │ ├── grow-create-persistence.ck │ │ │ │ ├── grow-create.c │ │ │ │ ├── grow-create.ck │ │ │ │ ├── grow-dir-lg-persistence.ck │ │ │ │ ├── grow-dir-lg.c │ │ │ │ ├── grow-dir-lg.ck │ │ │ │ ├── grow-dir.inc │ │ │ │ ├── grow-file-size-persistence.ck │ │ │ │ ├── grow-file-size.c │ │ │ │ ├── grow-file-size.ck │ │ │ │ ├── grow-root-lg-persistence.ck │ │ │ │ ├── grow-root-lg.c │ │ │ │ ├── grow-root-lg.ck │ │ │ │ ├── grow-root-sm-persistence.ck │ │ │ │ ├── grow-root-sm.c │ │ │ │ ├── grow-root-sm.ck │ │ │ │ ├── grow-seq-lg-persistence.ck │ │ │ │ ├── grow-seq-lg.c │ │ │ │ ├── grow-seq-lg.ck │ │ │ │ ├── grow-seq-sm-persistence.ck │ │ │ │ ├── grow-seq-sm.c │ │ │ │ ├── grow-seq-sm.ck │ │ │ │ ├── grow-seq.inc │ │ │ │ ├── grow-sparse-persistence.ck │ │ │ │ ├── grow-sparse.c │ │ │ │ ├── grow-sparse.ck │ │ │ │ ├── grow-tell-persistence.ck │ │ │ │ ├── grow-tell.c │ │ │ │ ├── grow-tell.ck │ │ │ │ ├── grow-two-files-persistence.ck │ │ │ │ ├── grow-two-files.c │ │ │ │ ├── grow-two-files.ck │ │ │ │ ├── mk-tree.c │ │ │ │ ├── mk-tree.h │ │ │ │ ├── syn-rw-persistence.ck │ │ │ │ ├── syn-rw.c │ │ │ │ ├── syn-rw.ck │ │ │ │ ├── syn-rw.h │ │ │ │ ├── tar.c │ │ │ │ ├── test-coalesce.c │ │ │ │ ├── test-coalesce.ck │ │ │ │ ├── test-hit-rate.c │ │ │ │ ├── test-hit-rate.ck │ │ │ │ ├── testcoalesce.c │ │ │ │ ├── testcoalesce.ck │ │ │ │ ├── testhitrate.c │ │ │ │ └── testhitrate.ck │ │ │ ├── seq-test.c │ │ │ └── seq-test.h │ │ ├── internal │ │ │ ├── list.c │ │ │ ├── stdio.c │ │ │ └── stdlib.c │ │ ├── lib.c │ │ ├── lib.h │ │ ├── lib.pm │ │ ├── main.c │ │ ├── main.h │ │ ├── make-grade │ │ ├── random.pm │ │ ├── tests.pm │ │ ├── threads │ │ │ ├── Grading │ │ │ ├── Make.tests │ │ │ ├── Rubric.alarm │ │ │ ├── Rubric.mlfqs │ │ │ ├── Rubric.priority │ │ │ ├── alarm-delay.c │ │ │ ├── alarm-delay.ck │ │ │ ├── alarm-multiple.ck │ │ │ ├── alarm-negative.c │ │ │ ├── alarm-negative.ck │ │ │ ├── alarm-priority.c │ │ │ ├── alarm-priority.ck │ │ │ ├── alarm-simultaneous.c │ │ │ ├── alarm-simultaneous.ck │ │ │ ├── alarm-single.ck │ │ │ ├── alarm-wait.c │ │ │ ├── alarm-zero.c │ │ │ ├── alarm-zero.ck │ │ │ ├── alarm.pm │ │ │ ├── matmul_data.h │ │ │ ├── mlfqs-block.c │ │ │ ├── mlfqs-block.ck │ │ │ ├── mlfqs-fair-2.ck │ │ │ ├── mlfqs-fair-20.ck │ │ │ ├── mlfqs-fair.c │ │ │ ├── mlfqs-load-1.c │ │ │ ├── mlfqs-load-1.ck │ │ │ ├── mlfqs-load-60.c │ │ │ ├── mlfqs-load-60.ck │ │ │ ├── mlfqs-load-avg.c │ │ │ ├── mlfqs-load-avg.ck │ │ │ ├── mlfqs-nice-10.ck │ │ │ ├── mlfqs-nice-2.ck │ │ │ ├── mlfqs-recent-1.c │ │ │ ├── mlfqs-recent-1.ck │ │ │ ├── mlfqs.pm │ │ │ ├── mt-matmul-16.ck │ │ │ ├── mt-matmul-2.ck │ │ │ ├── mt-matmul-4.ck │ │ │ ├── mt-matmul.c │ │ │ ├── priority-change.c │ │ │ ├── priority-change.ck │ │ │ ├── priority-condvar.c │ │ │ ├── priority-condvar.ck │ │ │ ├── priority-donate-chain.c │ │ │ ├── priority-donate-chain.ck │ │ │ ├── priority-donate-lower.c │ │ │ ├── priority-donate-lower.ck │ │ │ ├── priority-donate-multiple.c │ │ │ ├── priority-donate-multiple.ck │ │ │ ├── priority-donate-multiple2.c │ │ │ ├── priority-donate-multiple2.ck │ │ │ ├── priority-donate-nest.c │ │ │ ├── priority-donate-nest.ck │ │ │ ├── priority-donate-one.c │ │ │ ├── priority-donate-one.ck │ │ │ ├── priority-donate-sema.c │ │ │ ├── priority-donate-sema.ck │ │ │ ├── priority-fifo.c │ │ │ ├── priority-fifo.ck │ │ │ ├── priority-preempt.c │ │ │ ├── priority-preempt.ck │ │ │ ├── priority-sema.c │ │ │ ├── priority-sema.ck │ │ │ ├── priority-starve-sema.c │ │ │ ├── priority-starve-sema.ck │ │ │ ├── priority-starve.c │ │ │ ├── priority-starve.ck │ │ │ ├── smfs-hierarchy-16.ck │ │ │ ├── smfs-hierarchy-256.ck │ │ │ ├── smfs-hierarchy-32.ck │ │ │ ├── smfs-hierarchy-64.ck │ │ │ ├── smfs-hierarchy-8.ck │ │ │ ├── smfs-hierarchy.c │ │ │ ├── smfs-prio-change.c │ │ │ ├── smfs-prio-change.ck │ │ │ ├── smfs-starve-0.ck │ │ │ ├── smfs-starve-1.ck │ │ │ ├── smfs-starve-16.ck │ │ │ ├── smfs-starve-2.ck │ │ │ ├── smfs-starve-256.ck │ │ │ ├── smfs-starve-4.ck │ │ │ ├── smfs-starve-64.ck │ │ │ ├── smfs-starve-8.ck │ │ │ ├── smfs-starve.c │ │ │ ├── st-matmul.ck │ │ │ ├── tests.c │ │ │ └── tests.h │ │ ├── userprog │ │ │ ├── Grading │ │ │ ├── Make.tests │ │ │ ├── Rubric.functionality │ │ │ ├── Rubric.robustness │ │ │ ├── args-dbl-space.ck │ │ │ ├── args-many.ck │ │ │ ├── args-multiple.ck │ │ │ ├── args-none.ck │ │ │ ├── args-single.ck │ │ │ ├── args.c │ │ │ ├── bad-jump.c │ │ │ ├── bad-jump.ck │ │ │ ├── bad-jump2.c │ │ │ ├── bad-jump2.ck │ │ │ ├── bad-read.c │ │ │ ├── bad-read.ck │ │ │ ├── bad-read2.c │ │ │ ├── bad-read2.ck │ │ │ ├── bad-write.c │ │ │ ├── bad-write.ck │ │ │ ├── bad-write2.c │ │ │ ├── bad-write2.ck │ │ │ ├── boundary.c │ │ │ ├── boundary.h │ │ │ ├── child-bad.c │ │ │ ├── child-close.c │ │ │ ├── child-rox.c │ │ │ ├── child-simple.c │ │ │ ├── close-bad-fd.c │ │ │ ├── close-bad-fd.ck │ │ │ ├── close-normal.c │ │ │ ├── close-normal.ck │ │ │ ├── close-stdin.c │ │ │ ├── close-stdin.ck │ │ │ ├── close-stdout.c │ │ │ ├── close-stdout.ck │ │ │ ├── close-twice.c │ │ │ ├── close-twice.ck │ │ │ ├── compute-e.c │ │ │ ├── create-bad-ptr.c │ │ │ ├── create-bad-ptr.ck │ │ │ ├── create-bound.c │ │ │ ├── create-bound.ck │ │ │ ├── create-empty.c │ │ │ ├── create-empty.ck │ │ │ ├── create-exists.c │ │ │ ├── create-exists.ck │ │ │ ├── create-long.c │ │ │ ├── create-long.ck │ │ │ ├── create-normal.c │ │ │ ├── create-normal.ck │ │ │ ├── create-null.c │ │ │ ├── create-null.ck │ │ │ ├── do-nothing.c │ │ │ ├── do-nothing.ck │ │ │ ├── exec-arg.c │ │ │ ├── exec-arg.ck │ │ │ ├── exec-bad-ptr.c │ │ │ ├── exec-bad-ptr.ck │ │ │ ├── exec-bound-2.c │ │ │ ├── exec-bound-2.ck │ │ │ ├── exec-bound-3.c │ │ │ ├── exec-bound-3.ck │ │ │ ├── exec-bound.c │ │ │ ├── exec-bound.ck │ │ │ ├── exec-missing.c │ │ │ ├── exec-missing.ck │ │ │ ├── exec-multiple.c │ │ │ ├── exec-multiple.ck │ │ │ ├── exec-once.c │ │ │ ├── exec-once.ck │ │ │ ├── exit.c │ │ │ ├── exit.ck │ │ │ ├── floating-point.c │ │ │ ├── floating-point.ck │ │ │ ├── fp-asm-helper.c │ │ │ ├── fp-asm.c │ │ │ ├── fp-asm.ck │ │ │ ├── fp-init.c │ │ │ ├── fp-init.ck │ │ │ ├── fp-kernel-e.c │ │ │ ├── fp-kernel-e.ck │ │ │ ├── fp-simul.c │ │ │ ├── fp-simul.ck │ │ │ ├── fp-syscall.c │ │ │ ├── fp-syscall.ck │ │ │ ├── halt.c │ │ │ ├── halt.ck │ │ │ ├── iloveos.c │ │ │ ├── iloveos.ck │ │ │ ├── kernel │ │ │ │ ├── Make.tests │ │ │ │ ├── Rubric │ │ │ │ ├── fp-kasm.c │ │ │ │ ├── fp-kasm.ck │ │ │ │ ├── fp-kinit.c │ │ │ │ ├── fp-kinit.ck │ │ │ │ ├── tests.c │ │ │ │ └── tests.h │ │ │ ├── lib │ │ │ │ ├── .gitignore │ │ │ │ └── user │ │ │ │ │ ├── .dummy │ │ │ │ │ └── .gitignore │ │ │ ├── multi-child-fd.c │ │ │ ├── multi-child-fd.ck │ │ │ ├── multi-recurse.c │ │ │ ├── multi-recurse.ck │ │ │ ├── multithreading │ │ │ │ ├── Make.tests │ │ │ │ ├── Rubric │ │ │ │ ├── arr-search.c │ │ │ │ ├── arr-search.ck │ │ │ │ ├── create-many.c │ │ │ │ ├── create-many.ck │ │ │ │ ├── create-reuse.c │ │ │ │ ├── create-reuse.ck │ │ │ │ ├── create-simple.c │ │ │ │ ├── create-simple.ck │ │ │ │ ├── exec-thread-1.c │ │ │ │ ├── exec-thread-1.ck │ │ │ │ ├── exec-thread-n.c │ │ │ │ ├── exec-thread-n.ck │ │ │ │ ├── exit-clean-1.ck │ │ │ │ ├── exit-clean-2.ck │ │ │ │ ├── exit-clean.c │ │ │ │ ├── exit-simple.c │ │ │ │ ├── exit-simple.ck │ │ │ │ ├── file-join.c │ │ │ │ ├── file-join.ck │ │ │ │ ├── join-exit-1.c │ │ │ │ ├── join-exit-1.ck │ │ │ │ ├── join-exit-2.c │ │ │ │ ├── join-exit-2.ck │ │ │ │ ├── join-fail.c │ │ │ │ ├── join-fail.ck │ │ │ │ ├── join-recur.c │ │ │ │ ├── join-recur.ck │ │ │ │ ├── lock-acq-fail.c │ │ │ │ ├── lock-acq-fail.ck │ │ │ │ ├── lock-data.c │ │ │ │ ├── lock-data.ck │ │ │ │ ├── lock-dbl-acq.c │ │ │ │ ├── lock-dbl-acq.ck │ │ │ │ ├── lock-dbl-rel.c │ │ │ │ ├── lock-dbl-rel.ck │ │ │ │ ├── lock-init-fail.c │ │ │ │ ├── lock-init-fail.ck │ │ │ │ ├── lock-ll.c │ │ │ │ ├── lock-ll.ck │ │ │ │ ├── lock-simple.c │ │ │ │ ├── lock-simple.ck │ │ │ │ ├── multi-oom-mt.c │ │ │ │ ├── multi-oom-mt.ck │ │ │ │ ├── pcb-syn.c │ │ │ │ ├── pcb-syn.ck │ │ │ │ ├── reuse-stack.c │ │ │ │ ├── reuse-stack.ck │ │ │ │ ├── sema-init-fail.c │ │ │ │ ├── sema-init-fail.ck │ │ │ │ ├── sema-simple.c │ │ │ │ ├── sema-simple.ck │ │ │ │ ├── sema-up-fail.c │ │ │ │ ├── sema-up-fail.ck │ │ │ │ ├── sema-wait-many.c │ │ │ │ ├── sema-wait-many.ck │ │ │ │ ├── sema-wait.c │ │ │ │ ├── sema-wait.ck │ │ │ │ ├── synch-many.c │ │ │ │ ├── synch-many.ck │ │ │ │ ├── wait-fail.c │ │ │ │ └── wait-fail.ck │ │ │ ├── no-vm │ │ │ │ ├── Make.tests │ │ │ │ ├── Rubric │ │ │ │ ├── multi-oom.c │ │ │ │ └── multi-oom.ck │ │ │ ├── open-bad-ptr.c │ │ │ ├── open-bad-ptr.ck │ │ │ ├── open-boundary.c │ │ │ ├── open-boundary.ck │ │ │ ├── open-empty.c │ │ │ ├── open-empty.ck │ │ │ ├── open-missing.c │ │ │ ├── open-missing.ck │ │ │ ├── open-normal.c │ │ │ ├── open-normal.ck │ │ │ ├── open-null.c │ │ │ ├── open-null.ck │ │ │ ├── open-twice.c │ │ │ ├── open-twice.ck │ │ │ ├── practice.c │ │ │ ├── practice.ck │ │ │ ├── read-bad-fd.c │ │ │ ├── read-bad-fd.ck │ │ │ ├── read-bad-ptr.c │ │ │ ├── read-bad-ptr.ck │ │ │ ├── read-boundary.c │ │ │ ├── read-boundary.ck │ │ │ ├── read-normal.c │ │ │ ├── read-normal.ck │ │ │ ├── read-stdout.c │ │ │ ├── read-stdout.ck │ │ │ ├── read-zero.c │ │ │ ├── read-zero.ck │ │ │ ├── rox-child.c │ │ │ ├── rox-child.ck │ │ │ ├── rox-child.inc │ │ │ ├── rox-multichild.c │ │ │ ├── rox-multichild.ck │ │ │ ├── rox-simple.c │ │ │ ├── rox-simple.ck │ │ │ ├── sample.inc │ │ │ ├── sample.txt │ │ │ ├── sc-bad-arg.c │ │ │ ├── sc-bad-arg.ck │ │ │ ├── sc-bad-sp.c │ │ │ ├── sc-bad-sp.ck │ │ │ ├── sc-boundary-2.c │ │ │ ├── sc-boundary-2.ck │ │ │ ├── sc-boundary-3.c │ │ │ ├── sc-boundary-3.ck │ │ │ ├── sc-boundary.c │ │ │ ├── sc-boundary.ck │ │ │ ├── stack-align-0.c │ │ │ ├── stack-align-0.ck │ │ │ ├── stack-align-1.ck │ │ │ ├── stack-align-2.ck │ │ │ ├── stack-align-3.ck │ │ │ ├── stack-align-4.ck │ │ │ ├── stack-align.c │ │ │ ├── tell-simple.c │ │ │ ├── tell-simple.ck │ │ │ ├── wait-bad-pid.c │ │ │ ├── wait-bad-pid.ck │ │ │ ├── wait-killed.c │ │ │ ├── wait-killed.ck │ │ │ ├── wait-simple.c │ │ │ ├── wait-simple.ck │ │ │ ├── wait-twice.c │ │ │ ├── wait-twice.ck │ │ │ ├── write-bad-fd.c │ │ │ ├── write-bad-fd.ck │ │ │ ├── write-bad-ptr.c │ │ │ ├── write-bad-ptr.ck │ │ │ ├── write-boundary.c │ │ │ ├── write-boundary.ck │ │ │ ├── write-normal.c │ │ │ ├── write-normal.ck │ │ │ ├── write-stdin.c │ │ │ ├── write-stdin.ck │ │ │ ├── write-zero.c │ │ │ └── write-zero.ck │ │ └── vm │ │ │ ├── Grading │ │ │ ├── Make.tests │ │ │ ├── Rubric.functionality │ │ │ ├── Rubric.robustness │ │ │ ├── child-inherit.c │ │ │ ├── child-linear.c │ │ │ ├── child-mm-wrt.c │ │ │ ├── child-qsort-mm.c │ │ │ ├── child-qsort.c │ │ │ ├── child-sort.c │ │ │ ├── mmap-bad-fd.c │ │ │ ├── mmap-bad-fd.ck │ │ │ ├── mmap-clean.c │ │ │ ├── mmap-clean.ck │ │ │ ├── mmap-close.c │ │ │ ├── mmap-close.ck │ │ │ ├── mmap-exit.c │ │ │ ├── mmap-exit.ck │ │ │ ├── mmap-inherit.c │ │ │ ├── mmap-inherit.ck │ │ │ ├── mmap-misalign.c │ │ │ ├── mmap-misalign.ck │ │ │ ├── mmap-null.c │ │ │ ├── mmap-null.ck │ │ │ ├── mmap-over-code.c │ │ │ ├── mmap-over-code.ck │ │ │ ├── mmap-over-data.c │ │ │ ├── mmap-over-data.ck │ │ │ ├── mmap-over-stk.c │ │ │ ├── mmap-over-stk.ck │ │ │ ├── mmap-overlap.c │ │ │ ├── mmap-overlap.ck │ │ │ ├── mmap-read.c │ │ │ ├── mmap-read.ck │ │ │ ├── mmap-remove.c │ │ │ ├── mmap-remove.ck │ │ │ ├── mmap-shuffle.c │ │ │ ├── mmap-shuffle.ck │ │ │ ├── mmap-twice.c │ │ │ ├── mmap-twice.ck │ │ │ ├── mmap-unmap.c │ │ │ ├── mmap-unmap.ck │ │ │ ├── mmap-write.c │ │ │ ├── mmap-write.ck │ │ │ ├── mmap-zero.c │ │ │ ├── mmap-zero.ck │ │ │ ├── page-linear.c │ │ │ ├── page-linear.ck │ │ │ ├── page-merge-mm.c │ │ │ ├── page-merge-mm.ck │ │ │ ├── page-merge-par.c │ │ │ ├── page-merge-par.ck │ │ │ ├── page-merge-seq.c │ │ │ ├── page-merge-seq.ck │ │ │ ├── page-merge-stk.c │ │ │ ├── page-merge-stk.ck │ │ │ ├── page-parallel.c │ │ │ ├── page-parallel.ck │ │ │ ├── page-shuffle.c │ │ │ ├── page-shuffle.ck │ │ │ ├── parallel-merge.c │ │ │ ├── parallel-merge.h │ │ │ ├── process_death.pm │ │ │ ├── pt-bad-addr.c │ │ │ ├── pt-bad-addr.ck │ │ │ ├── pt-bad-read.c │ │ │ ├── pt-bad-read.ck │ │ │ ├── pt-big-stk-obj.c │ │ │ ├── pt-big-stk-obj.ck │ │ │ ├── pt-grow-bad.c │ │ │ ├── pt-grow-bad.ck │ │ │ ├── pt-grow-pusha.c │ │ │ ├── pt-grow-pusha.ck │ │ │ ├── pt-grow-stack.c │ │ │ ├── pt-grow-stack.ck │ │ │ ├── pt-grow-stk-sc.c │ │ │ ├── pt-grow-stk-sc.ck │ │ │ ├── pt-write-code-2.c │ │ │ ├── pt-write-code.c │ │ │ ├── pt-write-code.ck │ │ │ ├── pt-write-code2.ck │ │ │ ├── qsort.c │ │ │ ├── qsort.h │ │ │ ├── sample.inc │ │ │ └── sample.txt │ ├── threads │ │ ├── .gitignore │ │ ├── Make.vars │ │ ├── Makefile │ │ ├── fixed-point.h │ │ ├── flags.h │ │ ├── init.c │ │ ├── init.h │ │ ├── interrupt.c │ │ ├── interrupt.h │ │ ├── intr-stubs.S │ │ ├── intr-stubs.h │ │ ├── io.h │ │ ├── kernel.lds.S │ │ ├── loader.S │ │ ├── loader.h │ │ ├── malloc.c │ │ ├── malloc.h │ │ ├── palloc.c │ │ ├── palloc.h │ │ ├── pte.h │ │ ├── start.S │ │ ├── switch.S │ │ ├── switch.h │ │ ├── synch.c │ │ ├── synch.h │ │ ├── thread.c │ │ ├── thread.h │ │ └── vaddr.h │ ├── userprog │ │ ├── .gitignore │ │ ├── Make.vars │ │ ├── Makefile │ │ ├── exception.c │ │ ├── exception.h │ │ ├── gdt.c │ │ ├── gdt.h │ │ ├── pagedir.c │ │ ├── pagedir.h │ │ ├── process.c │ │ ├── process.h │ │ ├── syscall.c │ │ ├── syscall.h │ │ ├── tss.c │ │ └── tss.h │ ├── utils │ │ ├── .gitignore │ │ ├── Makefile │ │ ├── Pintos.pm │ │ ├── backtrace │ │ ├── pintos │ │ ├── pintos-gdb │ │ ├── pintos-mkdisk │ │ ├── pintos-set-cmdline │ │ ├── pintos-test │ │ ├── setitimer-helper.c │ │ ├── squish-pty.c │ │ └── squish-unix.c │ └── vm │ │ ├── .gitignore │ │ ├── Make.vars │ │ └── Makefile └── test.txt ├── group43-proj-threads-completed ├── .gitignore ├── .pre-commit.sh ├── README.md ├── p1.diff ├── src │ ├── .clang-format │ ├── .gitignore │ ├── LICENSE │ ├── Make.config │ ├── Makefile │ ├── Makefile.build │ ├── Makefile.kernel │ ├── Makefile.userprog │ ├── devices │ │ ├── block.c │ │ ├── block.h │ │ ├── ide.c │ │ ├── ide.h │ │ ├── input.c │ │ ├── input.h │ │ ├── intq.c │ │ ├── intq.h │ │ ├── kbd.c │ │ ├── kbd.h │ │ ├── partition.c │ │ ├── partition.h │ │ ├── pit.c │ │ ├── pit.h │ │ ├── rtc.c │ │ ├── rtc.h │ │ ├── serial.c │ │ ├── serial.h │ │ ├── shutdown.c │ │ ├── shutdown.h │ │ ├── speaker.c │ │ ├── speaker.h │ │ ├── timer.c │ │ ├── timer.h │ │ ├── vga.c │ │ └── vga.h │ ├── examples │ │ ├── .gitignore │ │ ├── Makefile │ │ ├── bubsort.c │ │ ├── cat.c │ │ ├── cmp.c │ │ ├── cp.c │ │ ├── echo.c │ │ ├── halt.c │ │ ├── hex-dump.c │ │ ├── lib │ │ │ ├── .gitignore │ │ │ └── user │ │ │ │ ├── .dummy │ │ │ │ └── .gitignore │ │ ├── lineup.c │ │ ├── ls.c │ │ ├── matmult.c │ │ ├── mcat.c │ │ ├── mcp.c │ │ ├── mkdir.c │ │ ├── pwd.c │ │ ├── recursor.c │ │ ├── rm.c │ │ └── shell.c │ ├── filesys │ │ ├── .gitignore │ │ ├── Make.vars │ │ ├── Makefile │ │ ├── directory.c │ │ ├── directory.h │ │ ├── file.c │ │ ├── file.h │ │ ├── filesys.c │ │ ├── filesys.h │ │ ├── free-map.c │ │ ├── free-map.h │ │ ├── fsutil.c │ │ ├── fsutil.h │ │ ├── inode.c │ │ ├── inode.h │ │ └── off_t.h │ ├── lib │ │ ├── arithmetic.c │ │ ├── ctype.h │ │ ├── debug.c │ │ ├── debug.h │ │ ├── float.c │ │ ├── float.h │ │ ├── inttypes.h │ │ ├── kernel │ │ │ ├── bitmap.c │ │ │ ├── bitmap.h │ │ │ ├── console.c │ │ │ ├── console.h │ │ │ ├── debug.c │ │ │ ├── hash.c │ │ │ ├── hash.h │ │ │ ├── list.c │ │ │ ├── list.h │ │ │ ├── stdio.h │ │ │ ├── test-lib.c │ │ │ └── test-lib.h │ │ ├── limits.h │ │ ├── packed.h │ │ ├── random.c │ │ ├── random.h │ │ ├── round.h │ │ ├── stdarg.h │ │ ├── stdbool.h │ │ ├── stddef.h │ │ ├── stdint.h │ │ ├── stdio.c │ │ ├── stdio.h │ │ ├── stdlib.c │ │ ├── stdlib.h │ │ ├── string.c │ │ ├── string.h │ │ ├── syscall-nr.h │ │ ├── user │ │ │ ├── console.c │ │ │ ├── debug.c │ │ │ ├── entry.c │ │ │ ├── pthread.c │ │ │ ├── pthread.h │ │ │ ├── stdio.h │ │ │ ├── syscall.c │ │ │ ├── syscall.h │ │ │ └── user.lds │ │ ├── ustar.c │ │ └── ustar.h │ ├── misc │ │ ├── bochs-2.2.6-big-endian.patch │ │ ├── bochs-2.2.6-build.sh │ │ ├── bochs-2.2.6-gdbstub-ENN.patch │ │ ├── bochs-2.2.6-jitter.patch │ │ ├── bochs-2.2.6-ms-extensions.patch │ │ ├── bochs-2.2.6-namespace.patch │ │ ├── bochs-2.2.6-page-fault-segv.patch │ │ ├── bochs-2.2.6-paranoia.patch │ │ ├── bochs-2.2.6-solaris-link.patch │ │ ├── bochs-2.2.6-solaris-tty.patch │ │ ├── bochs-2.2.6-triple-fault.patch │ │ ├── bochs-2.6.2-banner-stderr.patch │ │ ├── bochs-2.6.2-block-device-check.patch │ │ ├── bochs-2.6.2-build.sh │ │ ├── bochs-2.6.2-jitter-plus-segv.patch │ │ ├── bochs-2.6.2-link-tinfo.patch │ │ ├── bochs-2.6.2-xrandr-pkgconfig.patch │ │ ├── gcc-3.3.6-cross-howto │ │ └── gdb-macros │ ├── tests │ │ ├── Algorithm │ │ │ └── Diff.pm │ │ ├── Make.tests │ │ ├── arc4.c │ │ ├── arc4.h │ │ ├── arc4.pm │ │ ├── cksum.c │ │ ├── cksum.h │ │ ├── cksum.pm │ │ ├── filesys │ │ │ ├── Grading.no-vm │ │ │ ├── Grading.with-vm │ │ │ ├── base │ │ │ │ ├── Make.tests │ │ │ │ ├── Rubric │ │ │ │ ├── child-syn-read.c │ │ │ │ ├── child-syn-wrt.c │ │ │ │ ├── full.inc │ │ │ │ ├── lg-create.c │ │ │ │ ├── lg-create.ck │ │ │ │ ├── lg-full.c │ │ │ │ ├── lg-full.ck │ │ │ │ ├── lg-random.c │ │ │ │ ├── lg-random.ck │ │ │ │ ├── lg-seq-block.c │ │ │ │ ├── lg-seq-block.ck │ │ │ │ ├── lg-seq-random.c │ │ │ │ ├── lg-seq-random.ck │ │ │ │ ├── random.inc │ │ │ │ ├── seq-block.inc │ │ │ │ ├── seq-random.inc │ │ │ │ ├── sm-create.c │ │ │ │ ├── sm-create.ck │ │ │ │ ├── sm-full.c │ │ │ │ ├── sm-full.ck │ │ │ │ ├── sm-random.c │ │ │ │ ├── sm-random.ck │ │ │ │ ├── sm-seq-block.c │ │ │ │ ├── sm-seq-block.ck │ │ │ │ ├── sm-seq-random.c │ │ │ │ ├── sm-seq-random.ck │ │ │ │ ├── syn-read.c │ │ │ │ ├── syn-read.ck │ │ │ │ ├── syn-read.h │ │ │ │ ├── syn-remove.c │ │ │ │ ├── syn-remove.ck │ │ │ │ ├── syn-write.c │ │ │ │ ├── syn-write.ck │ │ │ │ └── syn-write.h │ │ │ ├── create.inc │ │ │ ├── extended │ │ │ │ ├── Make.tests │ │ │ │ ├── Rubric.functionality │ │ │ │ ├── Rubric.persistence │ │ │ │ ├── Rubric.robustness │ │ │ │ ├── child-syn-rw.c │ │ │ │ ├── dir-empty-name-persistence.ck │ │ │ │ ├── dir-empty-name.c │ │ │ │ ├── dir-empty-name.ck │ │ │ │ ├── dir-mk-tree-persistence.ck │ │ │ │ ├── dir-mk-tree.c │ │ │ │ ├── dir-mk-tree.ck │ │ │ │ ├── dir-mkdir-persistence.ck │ │ │ │ ├── dir-mkdir.c │ │ │ │ ├── dir-mkdir.ck │ │ │ │ ├── dir-open-persistence.ck │ │ │ │ ├── dir-open.c │ │ │ │ ├── dir-open.ck │ │ │ │ ├── dir-over-file-persistence.ck │ │ │ │ ├── dir-over-file.c │ │ │ │ ├── dir-over-file.ck │ │ │ │ ├── dir-rm-cwd-persistence.ck │ │ │ │ ├── dir-rm-cwd.c │ │ │ │ ├── dir-rm-cwd.ck │ │ │ │ ├── dir-rm-parent-persistence.ck │ │ │ │ ├── dir-rm-parent.c │ │ │ │ ├── dir-rm-parent.ck │ │ │ │ ├── dir-rm-root-persistence.ck │ │ │ │ ├── dir-rm-root.c │ │ │ │ ├── dir-rm-root.ck │ │ │ │ ├── dir-rm-tree-persistence.ck │ │ │ │ ├── dir-rm-tree.c │ │ │ │ ├── dir-rm-tree.ck │ │ │ │ ├── dir-rmdir-persistence.ck │ │ │ │ ├── dir-rmdir.c │ │ │ │ ├── dir-rmdir.ck │ │ │ │ ├── dir-under-file-persistence.ck │ │ │ │ ├── dir-under-file.c │ │ │ │ ├── dir-under-file.ck │ │ │ │ ├── dir-vine-persistence.ck │ │ │ │ ├── dir-vine.c │ │ │ │ ├── dir-vine.ck │ │ │ │ ├── grow-create-persistence.ck │ │ │ │ ├── grow-create.c │ │ │ │ ├── grow-create.ck │ │ │ │ ├── grow-dir-lg-persistence.ck │ │ │ │ ├── grow-dir-lg.c │ │ │ │ ├── grow-dir-lg.ck │ │ │ │ ├── grow-dir.inc │ │ │ │ ├── grow-file-size-persistence.ck │ │ │ │ ├── grow-file-size.c │ │ │ │ ├── grow-file-size.ck │ │ │ │ ├── grow-root-lg-persistence.ck │ │ │ │ ├── grow-root-lg.c │ │ │ │ ├── grow-root-lg.ck │ │ │ │ ├── grow-root-sm-persistence.ck │ │ │ │ ├── grow-root-sm.c │ │ │ │ ├── grow-root-sm.ck │ │ │ │ ├── grow-seq-lg-persistence.ck │ │ │ │ ├── grow-seq-lg.c │ │ │ │ ├── grow-seq-lg.ck │ │ │ │ ├── grow-seq-sm-persistence.ck │ │ │ │ ├── grow-seq-sm.c │ │ │ │ ├── grow-seq-sm.ck │ │ │ │ ├── grow-seq.inc │ │ │ │ ├── grow-sparse-persistence.ck │ │ │ │ ├── grow-sparse.c │ │ │ │ ├── grow-sparse.ck │ │ │ │ ├── grow-tell-persistence.ck │ │ │ │ ├── grow-tell.c │ │ │ │ ├── grow-tell.ck │ │ │ │ ├── grow-two-files-persistence.ck │ │ │ │ ├── grow-two-files.c │ │ │ │ ├── grow-two-files.ck │ │ │ │ ├── mk-tree.c │ │ │ │ ├── mk-tree.h │ │ │ │ ├── syn-rw-persistence.ck │ │ │ │ ├── syn-rw.c │ │ │ │ ├── syn-rw.ck │ │ │ │ ├── syn-rw.h │ │ │ │ └── tar.c │ │ │ ├── seq-test.c │ │ │ └── seq-test.h │ │ ├── internal │ │ │ ├── list.c │ │ │ ├── stdio.c │ │ │ └── stdlib.c │ │ ├── lib.c │ │ ├── lib.h │ │ ├── lib.pm │ │ ├── main.c │ │ ├── main.h │ │ ├── make-grade │ │ ├── random.pm │ │ ├── tests.pm │ │ ├── threads │ │ │ ├── Grading │ │ │ ├── Make.tests │ │ │ ├── Rubric.alarm │ │ │ ├── Rubric.mlfqs │ │ │ ├── Rubric.priority │ │ │ ├── alarm-multiple.ck │ │ │ ├── alarm-negative.c │ │ │ ├── alarm-negative.ck │ │ │ ├── alarm-priority.c │ │ │ ├── alarm-priority.ck │ │ │ ├── alarm-simultaneous.c │ │ │ ├── alarm-simultaneous.ck │ │ │ ├── alarm-single.ck │ │ │ ├── alarm-wait.c │ │ │ ├── alarm-zero.c │ │ │ ├── alarm-zero.ck │ │ │ ├── alarm.pm │ │ │ ├── matmul_data.h │ │ │ ├── mlfqs-block.c │ │ │ ├── mlfqs-block.ck │ │ │ ├── mlfqs-fair-2.ck │ │ │ ├── mlfqs-fair-20.ck │ │ │ ├── mlfqs-fair.c │ │ │ ├── mlfqs-load-1.c │ │ │ ├── mlfqs-load-1.ck │ │ │ ├── mlfqs-load-60.c │ │ │ ├── mlfqs-load-60.ck │ │ │ ├── mlfqs-load-avg.c │ │ │ ├── mlfqs-load-avg.ck │ │ │ ├── mlfqs-nice-10.ck │ │ │ ├── mlfqs-nice-2.ck │ │ │ ├── mlfqs-recent-1.c │ │ │ ├── mlfqs-recent-1.ck │ │ │ ├── mlfqs.pm │ │ │ ├── mt-matmul-16.ck │ │ │ ├── mt-matmul-2.ck │ │ │ ├── mt-matmul-4.ck │ │ │ ├── mt-matmul.c │ │ │ ├── priority-change.c │ │ │ ├── priority-change.ck │ │ │ ├── priority-condvar.c │ │ │ ├── priority-condvar.ck │ │ │ ├── priority-donate-chain.c │ │ │ ├── priority-donate-chain.ck │ │ │ ├── priority-donate-lower.c │ │ │ ├── priority-donate-lower.ck │ │ │ ├── priority-donate-multiple.c │ │ │ ├── priority-donate-multiple.ck │ │ │ ├── priority-donate-multiple2.c │ │ │ ├── priority-donate-multiple2.ck │ │ │ ├── priority-donate-nest.c │ │ │ ├── priority-donate-nest.ck │ │ │ ├── priority-donate-one.c │ │ │ ├── priority-donate-one.ck │ │ │ ├── priority-donate-sema.c │ │ │ ├── priority-donate-sema.ck │ │ │ ├── priority-fifo.c │ │ │ ├── priority-fifo.ck │ │ │ ├── priority-preempt.c │ │ │ ├── priority-preempt.ck │ │ │ ├── priority-sema.c │ │ │ ├── priority-sema.ck │ │ │ ├── priority-starve-sema.c │ │ │ ├── priority-starve-sema.ck │ │ │ ├── priority-starve.c │ │ │ ├── priority-starve.ck │ │ │ ├── smfs-hierarchy-16.ck │ │ │ ├── smfs-hierarchy-256.ck │ │ │ ├── smfs-hierarchy-32.ck │ │ │ ├── smfs-hierarchy-64.ck │ │ │ ├── smfs-hierarchy-8.ck │ │ │ ├── smfs-hierarchy.c │ │ │ ├── smfs-prio-change.c │ │ │ ├── smfs-prio-change.ck │ │ │ ├── smfs-starve-0.ck │ │ │ ├── smfs-starve-1.ck │ │ │ ├── smfs-starve-16.ck │ │ │ ├── smfs-starve-2.ck │ │ │ ├── smfs-starve-256.ck │ │ │ ├── smfs-starve-4.ck │ │ │ ├── smfs-starve-64.ck │ │ │ ├── smfs-starve-8.ck │ │ │ ├── smfs-starve.c │ │ │ ├── st-matmul.ck │ │ │ ├── tests.c │ │ │ └── tests.h │ │ ├── userprog │ │ │ ├── Grading │ │ │ ├── Make.tests │ │ │ ├── Rubric.functionality │ │ │ ├── Rubric.robustness │ │ │ ├── args-dbl-space.ck │ │ │ ├── args-many.ck │ │ │ ├── args-multiple.ck │ │ │ ├── args-none.ck │ │ │ ├── args-single.ck │ │ │ ├── args.c │ │ │ ├── bad-jump.c │ │ │ ├── bad-jump.ck │ │ │ ├── bad-jump2.c │ │ │ ├── bad-jump2.ck │ │ │ ├── bad-read.c │ │ │ ├── bad-read.ck │ │ │ ├── bad-read2.c │ │ │ ├── bad-read2.ck │ │ │ ├── bad-write.c │ │ │ ├── bad-write.ck │ │ │ ├── bad-write2.c │ │ │ ├── bad-write2.ck │ │ │ ├── boundary.c │ │ │ ├── boundary.h │ │ │ ├── child-bad.c │ │ │ ├── child-close.c │ │ │ ├── child-rox.c │ │ │ ├── child-simple.c │ │ │ ├── close-bad-fd.c │ │ │ ├── close-bad-fd.ck │ │ │ ├── close-normal.c │ │ │ ├── close-normal.ck │ │ │ ├── close-stdin.c │ │ │ ├── close-stdin.ck │ │ │ ├── close-stdout.c │ │ │ ├── close-stdout.ck │ │ │ ├── close-twice.c │ │ │ ├── close-twice.ck │ │ │ ├── compute-e.c │ │ │ ├── create-bad-ptr.c │ │ │ ├── create-bad-ptr.ck │ │ │ ├── create-bound.c │ │ │ ├── create-bound.ck │ │ │ ├── create-empty.c │ │ │ ├── create-empty.ck │ │ │ ├── create-exists.c │ │ │ ├── create-exists.ck │ │ │ ├── create-long.c │ │ │ ├── create-long.ck │ │ │ ├── create-normal.c │ │ │ ├── create-normal.ck │ │ │ ├── create-null.c │ │ │ ├── create-null.ck │ │ │ ├── do-nothing.c │ │ │ ├── do-nothing.ck │ │ │ ├── exec-arg.c │ │ │ ├── exec-arg.ck │ │ │ ├── exec-bad-ptr.c │ │ │ ├── exec-bad-ptr.ck │ │ │ ├── exec-bound-2.c │ │ │ ├── exec-bound-2.ck │ │ │ ├── exec-bound-3.c │ │ │ ├── exec-bound-3.ck │ │ │ ├── exec-bound.c │ │ │ ├── exec-bound.ck │ │ │ ├── exec-missing.c │ │ │ ├── exec-missing.ck │ │ │ ├── exec-multiple.c │ │ │ ├── exec-multiple.ck │ │ │ ├── exec-once.c │ │ │ ├── exec-once.ck │ │ │ ├── exit.c │ │ │ ├── exit.ck │ │ │ ├── floating-point.c │ │ │ ├── floating-point.ck │ │ │ ├── fp-asm-helper.c │ │ │ ├── fp-asm.c │ │ │ ├── fp-asm.ck │ │ │ ├── fp-init.c │ │ │ ├── fp-init.ck │ │ │ ├── fp-kernel-e.c │ │ │ ├── fp-kernel-e.ck │ │ │ ├── fp-simul.c │ │ │ ├── fp-simul.ck │ │ │ ├── fp-syscall.c │ │ │ ├── fp-syscall.ck │ │ │ ├── halt.c │ │ │ ├── halt.ck │ │ │ ├── iloveos.c │ │ │ ├── iloveos.ck │ │ │ ├── kernel │ │ │ │ ├── Make.tests │ │ │ │ ├── Rubric │ │ │ │ ├── fp-kasm.c │ │ │ │ ├── fp-kasm.ck │ │ │ │ ├── fp-kinit.c │ │ │ │ ├── fp-kinit.ck │ │ │ │ ├── tests.c │ │ │ │ └── tests.h │ │ │ ├── lib │ │ │ │ ├── .gitignore │ │ │ │ └── user │ │ │ │ │ ├── .dummy │ │ │ │ │ └── .gitignore │ │ │ ├── multi-child-fd.c │ │ │ ├── multi-child-fd.ck │ │ │ ├── multi-recurse.c │ │ │ ├── multi-recurse.ck │ │ │ ├── multithreading │ │ │ │ ├── Make.tests │ │ │ │ ├── Rubric │ │ │ │ ├── arr-search.c │ │ │ │ ├── arr-search.ck │ │ │ │ ├── create-many.c │ │ │ │ ├── create-many.ck │ │ │ │ ├── create-reuse.c │ │ │ │ ├── create-reuse.ck │ │ │ │ ├── create-simple.c │ │ │ │ ├── create-simple.ck │ │ │ │ ├── exec-thread-1.c │ │ │ │ ├── exec-thread-1.ck │ │ │ │ ├── exec-thread-n.c │ │ │ │ ├── exec-thread-n.ck │ │ │ │ ├── exit-clean-1.ck │ │ │ │ ├── exit-clean-2.ck │ │ │ │ ├── exit-clean.c │ │ │ │ ├── exit-simple.c │ │ │ │ ├── exit-simple.ck │ │ │ │ ├── file-join.c │ │ │ │ ├── file-join.ck │ │ │ │ ├── join-exit-1.c │ │ │ │ ├── join-exit-1.ck │ │ │ │ ├── join-exit-2.c │ │ │ │ ├── join-exit-2.ck │ │ │ │ ├── join-fail.c │ │ │ │ ├── join-fail.ck │ │ │ │ ├── join-recur.c │ │ │ │ ├── join-recur.ck │ │ │ │ ├── lock-acq-fail.c │ │ │ │ ├── lock-acq-fail.ck │ │ │ │ ├── lock-data.c │ │ │ │ ├── lock-data.ck │ │ │ │ ├── lock-dbl-acq.c │ │ │ │ ├── lock-dbl-acq.ck │ │ │ │ ├── lock-dbl-rel.c │ │ │ │ ├── lock-dbl-rel.ck │ │ │ │ ├── lock-init-fail.c │ │ │ │ ├── lock-init-fail.ck │ │ │ │ ├── lock-ll.c │ │ │ │ ├── lock-ll.ck │ │ │ │ ├── lock-simple.c │ │ │ │ ├── lock-simple.ck │ │ │ │ ├── multi-oom-mt.c │ │ │ │ ├── multi-oom-mt.ck │ │ │ │ ├── pcb-syn.c │ │ │ │ ├── pcb-syn.ck │ │ │ │ ├── reuse-stack.c │ │ │ │ ├── reuse-stack.ck │ │ │ │ ├── sema-init-fail.c │ │ │ │ ├── sema-init-fail.ck │ │ │ │ ├── sema-simple.c │ │ │ │ ├── sema-simple.ck │ │ │ │ ├── sema-up-fail.c │ │ │ │ ├── sema-up-fail.ck │ │ │ │ ├── sema-wait-many.c │ │ │ │ ├── sema-wait-many.ck │ │ │ │ ├── sema-wait.c │ │ │ │ ├── sema-wait.ck │ │ │ │ ├── synch-many.c │ │ │ │ ├── synch-many.ck │ │ │ │ ├── wait-fail.c │ │ │ │ └── wait-fail.ck │ │ │ ├── no-vm │ │ │ │ ├── Make.tests │ │ │ │ ├── Rubric │ │ │ │ ├── multi-oom.c │ │ │ │ └── multi-oom.ck │ │ │ ├── open-bad-ptr.c │ │ │ ├── open-bad-ptr.ck │ │ │ ├── open-boundary.c │ │ │ ├── open-boundary.ck │ │ │ ├── open-empty.c │ │ │ ├── open-empty.ck │ │ │ ├── open-missing.c │ │ │ ├── open-missing.ck │ │ │ ├── open-normal.c │ │ │ ├── open-normal.ck │ │ │ ├── open-null.c │ │ │ ├── open-null.ck │ │ │ ├── open-twice.c │ │ │ ├── open-twice.ck │ │ │ ├── practice.c │ │ │ ├── practice.ck │ │ │ ├── read-bad-fd.c │ │ │ ├── read-bad-fd.ck │ │ │ ├── read-bad-ptr.c │ │ │ ├── read-bad-ptr.ck │ │ │ ├── read-boundary.c │ │ │ ├── read-boundary.ck │ │ │ ├── read-normal.c │ │ │ ├── read-normal.ck │ │ │ ├── read-stdout.c │ │ │ ├── read-stdout.ck │ │ │ ├── read-zero.c │ │ │ ├── read-zero.ck │ │ │ ├── rox-child.c │ │ │ ├── rox-child.ck │ │ │ ├── rox-child.inc │ │ │ ├── rox-multichild.c │ │ │ ├── rox-multichild.ck │ │ │ ├── rox-simple.c │ │ │ ├── rox-simple.ck │ │ │ ├── sample.inc │ │ │ ├── sample.txt │ │ │ ├── sc-bad-arg.c │ │ │ ├── sc-bad-arg.ck │ │ │ ├── sc-bad-sp.c │ │ │ ├── sc-bad-sp.ck │ │ │ ├── sc-boundary-2.c │ │ │ ├── sc-boundary-2.ck │ │ │ ├── sc-boundary-3.c │ │ │ ├── sc-boundary-3.ck │ │ │ ├── sc-boundary.c │ │ │ ├── sc-boundary.ck │ │ │ ├── stack-align-0.c │ │ │ ├── stack-align-0.ck │ │ │ ├── stack-align-1.ck │ │ │ ├── stack-align-2.ck │ │ │ ├── stack-align-3.ck │ │ │ ├── stack-align-4.ck │ │ │ ├── stack-align.c │ │ │ ├── wait-bad-pid.c │ │ │ ├── wait-bad-pid.ck │ │ │ ├── wait-killed.c │ │ │ ├── wait-killed.ck │ │ │ ├── wait-simple.c │ │ │ ├── wait-simple.ck │ │ │ ├── wait-twice.c │ │ │ ├── wait-twice.ck │ │ │ ├── write-bad-fd.c │ │ │ ├── write-bad-fd.ck │ │ │ ├── write-bad-ptr.c │ │ │ ├── write-bad-ptr.ck │ │ │ ├── write-boundary.c │ │ │ ├── write-boundary.ck │ │ │ ├── write-normal.c │ │ │ ├── write-normal.ck │ │ │ ├── write-stdin.c │ │ │ ├── write-stdin.ck │ │ │ ├── write-zero.c │ │ │ └── write-zero.ck │ │ └── vm │ │ │ ├── Grading │ │ │ ├── Make.tests │ │ │ ├── Rubric.functionality │ │ │ ├── Rubric.robustness │ │ │ ├── child-inherit.c │ │ │ ├── child-linear.c │ │ │ ├── child-mm-wrt.c │ │ │ ├── child-qsort-mm.c │ │ │ ├── child-qsort.c │ │ │ ├── child-sort.c │ │ │ ├── mmap-bad-fd.c │ │ │ ├── mmap-bad-fd.ck │ │ │ ├── mmap-clean.c │ │ │ ├── mmap-clean.ck │ │ │ ├── mmap-close.c │ │ │ ├── mmap-close.ck │ │ │ ├── mmap-exit.c │ │ │ ├── mmap-exit.ck │ │ │ ├── mmap-inherit.c │ │ │ ├── mmap-inherit.ck │ │ │ ├── mmap-misalign.c │ │ │ ├── mmap-misalign.ck │ │ │ ├── mmap-null.c │ │ │ ├── mmap-null.ck │ │ │ ├── mmap-over-code.c │ │ │ ├── mmap-over-code.ck │ │ │ ├── mmap-over-data.c │ │ │ ├── mmap-over-data.ck │ │ │ ├── mmap-over-stk.c │ │ │ ├── mmap-over-stk.ck │ │ │ ├── mmap-overlap.c │ │ │ ├── mmap-overlap.ck │ │ │ ├── mmap-read.c │ │ │ ├── mmap-read.ck │ │ │ ├── mmap-remove.c │ │ │ ├── mmap-remove.ck │ │ │ ├── mmap-shuffle.c │ │ │ ├── mmap-shuffle.ck │ │ │ ├── mmap-twice.c │ │ │ ├── mmap-twice.ck │ │ │ ├── mmap-unmap.c │ │ │ ├── mmap-unmap.ck │ │ │ ├── mmap-write.c │ │ │ ├── mmap-write.ck │ │ │ ├── mmap-zero.c │ │ │ ├── mmap-zero.ck │ │ │ ├── page-linear.c │ │ │ ├── page-linear.ck │ │ │ ├── page-merge-mm.c │ │ │ ├── page-merge-mm.ck │ │ │ ├── page-merge-par.c │ │ │ ├── page-merge-par.ck │ │ │ ├── page-merge-seq.c │ │ │ ├── page-merge-seq.ck │ │ │ ├── page-merge-stk.c │ │ │ ├── page-merge-stk.ck │ │ │ ├── page-parallel.c │ │ │ ├── page-parallel.ck │ │ │ ├── page-shuffle.c │ │ │ ├── page-shuffle.ck │ │ │ ├── parallel-merge.c │ │ │ ├── parallel-merge.h │ │ │ ├── process_death.pm │ │ │ ├── pt-bad-addr.c │ │ │ ├── pt-bad-addr.ck │ │ │ ├── pt-bad-read.c │ │ │ ├── pt-bad-read.ck │ │ │ ├── pt-big-stk-obj.c │ │ │ ├── pt-big-stk-obj.ck │ │ │ ├── pt-grow-bad.c │ │ │ ├── pt-grow-bad.ck │ │ │ ├── pt-grow-pusha.c │ │ │ ├── pt-grow-pusha.ck │ │ │ ├── pt-grow-stack.c │ │ │ ├── pt-grow-stack.ck │ │ │ ├── pt-grow-stk-sc.c │ │ │ ├── pt-grow-stk-sc.ck │ │ │ ├── pt-write-code-2.c │ │ │ ├── pt-write-code.c │ │ │ ├── pt-write-code.ck │ │ │ ├── pt-write-code2.ck │ │ │ ├── qsort.c │ │ │ ├── qsort.h │ │ │ ├── sample.inc │ │ │ └── sample.txt │ ├── threads │ │ ├── .gitignore │ │ ├── Make.vars │ │ ├── Makefile │ │ ├── fixed-point.h │ │ ├── flags.h │ │ ├── init.c │ │ ├── init.h │ │ ├── interrupt.c │ │ ├── interrupt.h │ │ ├── intr-stubs.S │ │ ├── intr-stubs.h │ │ ├── io.h │ │ ├── kernel.lds.S │ │ ├── loader.S │ │ ├── loader.h │ │ ├── malloc.c │ │ ├── malloc.h │ │ ├── palloc.c │ │ ├── palloc.h │ │ ├── pte.h │ │ ├── start.S │ │ ├── switch.S │ │ ├── switch.h │ │ ├── synch.c │ │ ├── synch.h │ │ ├── thread.c │ │ ├── thread.h │ │ └── vaddr.h │ ├── userprog │ │ ├── .gitignore │ │ ├── Make.vars │ │ ├── Makefile │ │ ├── exception.c │ │ ├── exception.h │ │ ├── gdt.c │ │ ├── gdt.h │ │ ├── pagedir.c │ │ ├── pagedir.h │ │ ├── process.c │ │ ├── process.h │ │ ├── syscall.c │ │ ├── syscall.h │ │ ├── tss.c │ │ └── tss.h │ ├── utils │ │ ├── .gitignore │ │ ├── Makefile │ │ ├── Pintos.pm │ │ ├── backtrace │ │ ├── pintos │ │ ├── pintos-gdb │ │ ├── pintos-mkdisk │ │ ├── pintos-set-cmdline │ │ ├── pintos-test │ │ ├── setitimer-helper.c │ │ ├── squish-pty.c │ │ └── squish-unix.c │ └── vm │ │ ├── .gitignore │ │ ├── Make.vars │ │ └── Makefile └── test.txt ├── group43-proj-userprog-completed ├── .gitignore ├── .pre-commit.sh ├── README.md ├── src │ ├── .clang-format │ ├── .gitignore │ ├── LICENSE │ ├── Make.config │ ├── Makefile │ ├── Makefile.build │ ├── Makefile.kernel │ ├── Makefile.userprog │ ├── devices │ │ ├── block.c │ │ ├── block.h │ │ ├── ide.c │ │ ├── ide.h │ │ ├── input.c │ │ ├── input.h │ │ ├── intq.c │ │ ├── intq.h │ │ ├── kbd.c │ │ ├── kbd.h │ │ ├── partition.c │ │ ├── partition.h │ │ ├── pit.c │ │ ├── pit.h │ │ ├── rtc.c │ │ ├── rtc.h │ │ ├── serial.c │ │ ├── serial.h │ │ ├── shutdown.c │ │ ├── shutdown.h │ │ ├── speaker.c │ │ ├── speaker.h │ │ ├── timer.c │ │ ├── timer.h │ │ ├── vga.c │ │ └── vga.h │ ├── examples │ │ ├── .gitignore │ │ ├── Makefile │ │ ├── bubsort.c │ │ ├── cat.c │ │ ├── cmp.c │ │ ├── cp.c │ │ ├── echo.c │ │ ├── halt.c │ │ ├── hex-dump.c │ │ ├── lib │ │ │ ├── .gitignore │ │ │ └── user │ │ │ │ ├── .dummy │ │ │ │ └── .gitignore │ │ ├── lineup.c │ │ ├── ls.c │ │ ├── matmult.c │ │ ├── mcat.c │ │ ├── mcp.c │ │ ├── mkdir.c │ │ ├── pwd.c │ │ ├── recursor.c │ │ ├── rm.c │ │ └── shell.c │ ├── filesys │ │ ├── .gitignore │ │ ├── Make.vars │ │ ├── Makefile │ │ ├── directory.c │ │ ├── directory.h │ │ ├── file.c │ │ ├── file.h │ │ ├── filesys.c │ │ ├── filesys.h │ │ ├── free-map.c │ │ ├── free-map.h │ │ ├── fsutil.c │ │ ├── fsutil.h │ │ ├── inode.c │ │ ├── inode.h │ │ └── off_t.h │ ├── lib │ │ ├── arithmetic.c │ │ ├── ctype.h │ │ ├── debug.c │ │ ├── debug.h │ │ ├── float.c │ │ ├── float.h │ │ ├── inttypes.h │ │ ├── kernel │ │ │ ├── bitmap.c │ │ │ ├── bitmap.h │ │ │ ├── console.c │ │ │ ├── console.h │ │ │ ├── debug.c │ │ │ ├── hash.c │ │ │ ├── hash.h │ │ │ ├── list.c │ │ │ ├── list.h │ │ │ ├── stdio.h │ │ │ ├── test-lib.c │ │ │ └── test-lib.h │ │ ├── limits.h │ │ ├── packed.h │ │ ├── random.c │ │ ├── random.h │ │ ├── round.h │ │ ├── stdarg.h │ │ ├── stdbool.h │ │ ├── stddef.h │ │ ├── stdint.h │ │ ├── stdio.c │ │ ├── stdio.h │ │ ├── stdlib.c │ │ ├── stdlib.h │ │ ├── string.c │ │ ├── string.h │ │ ├── syscall-nr.h │ │ ├── user │ │ │ ├── console.c │ │ │ ├── debug.c │ │ │ ├── entry.c │ │ │ ├── pthread.c │ │ │ ├── pthread.h │ │ │ ├── stdio.h │ │ │ ├── syscall.c │ │ │ ├── syscall.h │ │ │ └── user.lds │ │ ├── ustar.c │ │ └── ustar.h │ ├── misc │ │ ├── bochs-2.2.6-big-endian.patch │ │ ├── bochs-2.2.6-build.sh │ │ ├── bochs-2.2.6-gdbstub-ENN.patch │ │ ├── bochs-2.2.6-jitter.patch │ │ ├── bochs-2.2.6-ms-extensions.patch │ │ ├── bochs-2.2.6-namespace.patch │ │ ├── bochs-2.2.6-page-fault-segv.patch │ │ ├── bochs-2.2.6-paranoia.patch │ │ ├── bochs-2.2.6-solaris-link.patch │ │ ├── bochs-2.2.6-solaris-tty.patch │ │ ├── bochs-2.2.6-triple-fault.patch │ │ ├── bochs-2.6.2-banner-stderr.patch │ │ ├── bochs-2.6.2-block-device-check.patch │ │ ├── bochs-2.6.2-build.sh │ │ ├── bochs-2.6.2-jitter-plus-segv.patch │ │ ├── bochs-2.6.2-link-tinfo.patch │ │ ├── bochs-2.6.2-xrandr-pkgconfig.patch │ │ ├── gcc-3.3.6-cross-howto │ │ └── gdb-macros │ ├── tests │ │ ├── Algorithm │ │ │ └── Diff.pm │ │ ├── Make.tests │ │ ├── arc4.c │ │ ├── arc4.h │ │ ├── arc4.pm │ │ ├── cksum.c │ │ ├── cksum.h │ │ ├── cksum.pm │ │ ├── filesys │ │ │ ├── Grading.no-vm │ │ │ ├── Grading.with-vm │ │ │ ├── base │ │ │ │ ├── Make.tests │ │ │ │ ├── Rubric │ │ │ │ ├── child-syn-read.c │ │ │ │ ├── child-syn-wrt.c │ │ │ │ ├── full.inc │ │ │ │ ├── lg-create.c │ │ │ │ ├── lg-create.ck │ │ │ │ ├── lg-full.c │ │ │ │ ├── lg-full.ck │ │ │ │ ├── lg-random.c │ │ │ │ ├── lg-random.ck │ │ │ │ ├── lg-seq-block.c │ │ │ │ ├── lg-seq-block.ck │ │ │ │ ├── lg-seq-random.c │ │ │ │ ├── lg-seq-random.ck │ │ │ │ ├── random.inc │ │ │ │ ├── seq-block.inc │ │ │ │ ├── seq-random.inc │ │ │ │ ├── sm-create.c │ │ │ │ ├── sm-create.ck │ │ │ │ ├── sm-full.c │ │ │ │ ├── sm-full.ck │ │ │ │ ├── sm-random.c │ │ │ │ ├── sm-random.ck │ │ │ │ ├── sm-seq-block.c │ │ │ │ ├── sm-seq-block.ck │ │ │ │ ├── sm-seq-random.c │ │ │ │ ├── sm-seq-random.ck │ │ │ │ ├── syn-read.c │ │ │ │ ├── syn-read.ck │ │ │ │ ├── syn-read.h │ │ │ │ ├── syn-remove.c │ │ │ │ ├── syn-remove.ck │ │ │ │ ├── syn-write.c │ │ │ │ ├── syn-write.ck │ │ │ │ └── syn-write.h │ │ │ ├── create.inc │ │ │ ├── extended │ │ │ │ ├── Make.tests │ │ │ │ ├── Rubric.functionality │ │ │ │ ├── Rubric.persistence │ │ │ │ ├── Rubric.robustness │ │ │ │ ├── child-syn-rw.c │ │ │ │ ├── dir-empty-name-persistence.ck │ │ │ │ ├── dir-empty-name.c │ │ │ │ ├── dir-empty-name.ck │ │ │ │ ├── dir-mk-tree-persistence.ck │ │ │ │ ├── dir-mk-tree.c │ │ │ │ ├── dir-mk-tree.ck │ │ │ │ ├── dir-mkdir-persistence.ck │ │ │ │ ├── dir-mkdir.c │ │ │ │ ├── dir-mkdir.ck │ │ │ │ ├── dir-open-persistence.ck │ │ │ │ ├── dir-open.c │ │ │ │ ├── dir-open.ck │ │ │ │ ├── dir-over-file-persistence.ck │ │ │ │ ├── dir-over-file.c │ │ │ │ ├── dir-over-file.ck │ │ │ │ ├── dir-rm-cwd-persistence.ck │ │ │ │ ├── dir-rm-cwd.c │ │ │ │ ├── dir-rm-cwd.ck │ │ │ │ ├── dir-rm-parent-persistence.ck │ │ │ │ ├── dir-rm-parent.c │ │ │ │ ├── dir-rm-parent.ck │ │ │ │ ├── dir-rm-root-persistence.ck │ │ │ │ ├── dir-rm-root.c │ │ │ │ ├── dir-rm-root.ck │ │ │ │ ├── dir-rm-tree-persistence.ck │ │ │ │ ├── dir-rm-tree.c │ │ │ │ ├── dir-rm-tree.ck │ │ │ │ ├── dir-rmdir-persistence.ck │ │ │ │ ├── dir-rmdir.c │ │ │ │ ├── dir-rmdir.ck │ │ │ │ ├── dir-under-file-persistence.ck │ │ │ │ ├── dir-under-file.c │ │ │ │ ├── dir-under-file.ck │ │ │ │ ├── dir-vine-persistence.ck │ │ │ │ ├── dir-vine.c │ │ │ │ ├── dir-vine.ck │ │ │ │ ├── grow-create-persistence.ck │ │ │ │ ├── grow-create.c │ │ │ │ ├── grow-create.ck │ │ │ │ ├── grow-dir-lg-persistence.ck │ │ │ │ ├── grow-dir-lg.c │ │ │ │ ├── grow-dir-lg.ck │ │ │ │ ├── grow-dir.inc │ │ │ │ ├── grow-file-size-persistence.ck │ │ │ │ ├── grow-file-size.c │ │ │ │ ├── grow-file-size.ck │ │ │ │ ├── grow-root-lg-persistence.ck │ │ │ │ ├── grow-root-lg.c │ │ │ │ ├── grow-root-lg.ck │ │ │ │ ├── grow-root-sm-persistence.ck │ │ │ │ ├── grow-root-sm.c │ │ │ │ ├── grow-root-sm.ck │ │ │ │ ├── grow-seq-lg-persistence.ck │ │ │ │ ├── grow-seq-lg.c │ │ │ │ ├── grow-seq-lg.ck │ │ │ │ ├── grow-seq-sm-persistence.ck │ │ │ │ ├── grow-seq-sm.c │ │ │ │ ├── grow-seq-sm.ck │ │ │ │ ├── grow-seq.inc │ │ │ │ ├── grow-sparse-persistence.ck │ │ │ │ ├── grow-sparse.c │ │ │ │ ├── grow-sparse.ck │ │ │ │ ├── grow-tell-persistence.ck │ │ │ │ ├── grow-tell.c │ │ │ │ ├── grow-tell.ck │ │ │ │ ├── grow-two-files-persistence.ck │ │ │ │ ├── grow-two-files.c │ │ │ │ ├── grow-two-files.ck │ │ │ │ ├── mk-tree.c │ │ │ │ ├── mk-tree.h │ │ │ │ ├── syn-rw-persistence.ck │ │ │ │ ├── syn-rw.c │ │ │ │ ├── syn-rw.ck │ │ │ │ ├── syn-rw.h │ │ │ │ └── tar.c │ │ │ ├── seq-test.c │ │ │ └── seq-test.h │ │ ├── internal │ │ │ ├── list.c │ │ │ ├── stdio.c │ │ │ └── stdlib.c │ │ ├── lib.c │ │ ├── lib.h │ │ ├── lib.pm │ │ ├── main.c │ │ ├── main.h │ │ ├── make-grade │ │ ├── random.pm │ │ ├── tests.pm │ │ ├── threads │ │ │ ├── Grading │ │ │ ├── Make.tests │ │ │ ├── Rubric.alarm │ │ │ ├── Rubric.mlfqs │ │ │ ├── Rubric.priority │ │ │ ├── alarm-multiple.ck │ │ │ ├── alarm-negative.c │ │ │ ├── alarm-negative.ck │ │ │ ├── alarm-priority.c │ │ │ ├── alarm-priority.ck │ │ │ ├── alarm-simultaneous.c │ │ │ ├── alarm-simultaneous.ck │ │ │ ├── alarm-single.ck │ │ │ ├── alarm-wait.c │ │ │ ├── alarm-zero.c │ │ │ ├── alarm-zero.ck │ │ │ ├── alarm.pm │ │ │ ├── matmul_data.h │ │ │ ├── mlfqs-block.c │ │ │ ├── mlfqs-block.ck │ │ │ ├── mlfqs-fair-2.ck │ │ │ ├── mlfqs-fair-20.ck │ │ │ ├── mlfqs-fair.c │ │ │ ├── mlfqs-load-1.c │ │ │ ├── mlfqs-load-1.ck │ │ │ ├── mlfqs-load-60.c │ │ │ ├── mlfqs-load-60.ck │ │ │ ├── mlfqs-load-avg.c │ │ │ ├── mlfqs-load-avg.ck │ │ │ ├── mlfqs-nice-10.ck │ │ │ ├── mlfqs-nice-2.ck │ │ │ ├── mlfqs-recent-1.c │ │ │ ├── mlfqs-recent-1.ck │ │ │ ├── mlfqs.pm │ │ │ ├── mt-matmul-16.ck │ │ │ ├── mt-matmul-2.ck │ │ │ ├── mt-matmul-4.ck │ │ │ ├── mt-matmul.c │ │ │ ├── priority-change.c │ │ │ ├── priority-change.ck │ │ │ ├── priority-condvar.c │ │ │ ├── priority-condvar.ck │ │ │ ├── priority-donate-chain.c │ │ │ ├── priority-donate-chain.ck │ │ │ ├── priority-donate-lower.c │ │ │ ├── priority-donate-lower.ck │ │ │ ├── priority-donate-multiple.c │ │ │ ├── priority-donate-multiple.ck │ │ │ ├── priority-donate-multiple2.c │ │ │ ├── priority-donate-multiple2.ck │ │ │ ├── priority-donate-nest.c │ │ │ ├── priority-donate-nest.ck │ │ │ ├── priority-donate-one.c │ │ │ ├── priority-donate-one.ck │ │ │ ├── priority-donate-sema.c │ │ │ ├── priority-donate-sema.ck │ │ │ ├── priority-fifo.c │ │ │ ├── priority-fifo.ck │ │ │ ├── priority-preempt.c │ │ │ ├── priority-preempt.ck │ │ │ ├── priority-sema.c │ │ │ ├── priority-sema.ck │ │ │ ├── priority-starve-sema.c │ │ │ ├── priority-starve-sema.ck │ │ │ ├── priority-starve.c │ │ │ ├── priority-starve.ck │ │ │ ├── smfs-hierarchy-16.ck │ │ │ ├── smfs-hierarchy-256.ck │ │ │ ├── smfs-hierarchy-32.ck │ │ │ ├── smfs-hierarchy-64.ck │ │ │ ├── smfs-hierarchy-8.ck │ │ │ ├── smfs-hierarchy.c │ │ │ ├── smfs-prio-change.c │ │ │ ├── smfs-prio-change.ck │ │ │ ├── smfs-starve-0.ck │ │ │ ├── smfs-starve-1.ck │ │ │ ├── smfs-starve-16.ck │ │ │ ├── smfs-starve-2.ck │ │ │ ├── smfs-starve-256.ck │ │ │ ├── smfs-starve-4.ck │ │ │ ├── smfs-starve-64.ck │ │ │ ├── smfs-starve-8.ck │ │ │ ├── smfs-starve.c │ │ │ ├── st-matmul.ck │ │ │ ├── tests.c │ │ │ └── tests.h │ │ ├── userprog │ │ │ ├── Grading │ │ │ ├── Make.tests │ │ │ ├── Rubric.functionality │ │ │ ├── Rubric.robustness │ │ │ ├── args-dbl-space.ck │ │ │ ├── args-many.ck │ │ │ ├── args-multiple.ck │ │ │ ├── args-none.ck │ │ │ ├── args-single.ck │ │ │ ├── args.c │ │ │ ├── bad-jump.c │ │ │ ├── bad-jump.ck │ │ │ ├── bad-jump2.c │ │ │ ├── bad-jump2.ck │ │ │ ├── bad-read.c │ │ │ ├── bad-read.ck │ │ │ ├── bad-read2.c │ │ │ ├── bad-read2.ck │ │ │ ├── bad-write.c │ │ │ ├── bad-write.ck │ │ │ ├── bad-write2.c │ │ │ ├── bad-write2.ck │ │ │ ├── boundary.c │ │ │ ├── boundary.h │ │ │ ├── child-bad.c │ │ │ ├── child-close.c │ │ │ ├── child-rox.c │ │ │ ├── child-simple.c │ │ │ ├── close-bad-fd.c │ │ │ ├── close-bad-fd.ck │ │ │ ├── close-normal.c │ │ │ ├── close-normal.ck │ │ │ ├── close-stdin.c │ │ │ ├── close-stdin.ck │ │ │ ├── close-stdout.c │ │ │ ├── close-stdout.ck │ │ │ ├── close-twice.c │ │ │ ├── close-twice.ck │ │ │ ├── compute-e.c │ │ │ ├── create-bad-ptr.c │ │ │ ├── create-bad-ptr.ck │ │ │ ├── create-bound.c │ │ │ ├── create-bound.ck │ │ │ ├── create-empty.c │ │ │ ├── create-empty.ck │ │ │ ├── create-exists.c │ │ │ ├── create-exists.ck │ │ │ ├── create-long.c │ │ │ ├── create-long.ck │ │ │ ├── create-normal.c │ │ │ ├── create-normal.ck │ │ │ ├── create-null.c │ │ │ ├── create-null.ck │ │ │ ├── do-nothing.c │ │ │ ├── do-nothing.ck │ │ │ ├── exec-arg.c │ │ │ ├── exec-arg.ck │ │ │ ├── exec-bad-ptr.c │ │ │ ├── exec-bad-ptr.ck │ │ │ ├── exec-bound-2.c │ │ │ ├── exec-bound-2.ck │ │ │ ├── exec-bound-3.c │ │ │ ├── exec-bound-3.ck │ │ │ ├── exec-bound.c │ │ │ ├── exec-bound.ck │ │ │ ├── exec-missing.c │ │ │ ├── exec-missing.ck │ │ │ ├── exec-multiple.c │ │ │ ├── exec-multiple.ck │ │ │ ├── exec-once.c │ │ │ ├── exec-once.ck │ │ │ ├── exit.c │ │ │ ├── exit.ck │ │ │ ├── floating-point.c │ │ │ ├── floating-point.ck │ │ │ ├── fp-asm-helper.c │ │ │ ├── fp-asm.c │ │ │ ├── fp-asm.ck │ │ │ ├── fp-init.c │ │ │ ├── fp-init.ck │ │ │ ├── fp-kernel-e.c │ │ │ ├── fp-kernel-e.ck │ │ │ ├── fp-simul.c │ │ │ ├── fp-simul.ck │ │ │ ├── fp-syscall.c │ │ │ ├── fp-syscall.ck │ │ │ ├── halt.c │ │ │ ├── halt.ck │ │ │ ├── iloveos.c │ │ │ ├── iloveos.ck │ │ │ ├── kernel │ │ │ │ ├── Make.tests │ │ │ │ ├── Rubric │ │ │ │ ├── fp-kasm.c │ │ │ │ ├── fp-kasm.ck │ │ │ │ ├── fp-kinit.c │ │ │ │ ├── fp-kinit.ck │ │ │ │ ├── tests.c │ │ │ │ └── tests.h │ │ │ ├── lib │ │ │ │ ├── .gitignore │ │ │ │ └── user │ │ │ │ │ ├── .dummy │ │ │ │ │ └── .gitignore │ │ │ ├── multi-child-fd.c │ │ │ ├── multi-child-fd.ck │ │ │ ├── multi-recurse.c │ │ │ ├── multi-recurse.ck │ │ │ ├── multithreading │ │ │ │ ├── Make.tests │ │ │ │ ├── Rubric │ │ │ │ ├── arr-search.c │ │ │ │ ├── arr-search.ck │ │ │ │ ├── create-many.c │ │ │ │ ├── create-many.ck │ │ │ │ ├── create-reuse.c │ │ │ │ ├── create-reuse.ck │ │ │ │ ├── create-simple.c │ │ │ │ ├── create-simple.ck │ │ │ │ ├── exec-thread-1.c │ │ │ │ ├── exec-thread-1.ck │ │ │ │ ├── exec-thread-n.c │ │ │ │ ├── exec-thread-n.ck │ │ │ │ ├── exit-clean-1.ck │ │ │ │ ├── exit-clean-2.ck │ │ │ │ ├── exit-clean.c │ │ │ │ ├── exit-simple.c │ │ │ │ ├── exit-simple.ck │ │ │ │ ├── file-join.c │ │ │ │ ├── file-join.ck │ │ │ │ ├── join-exit-1.c │ │ │ │ ├── join-exit-1.ck │ │ │ │ ├── join-exit-2.c │ │ │ │ ├── join-exit-2.ck │ │ │ │ ├── join-fail.c │ │ │ │ ├── join-fail.ck │ │ │ │ ├── join-recur.c │ │ │ │ ├── join-recur.ck │ │ │ │ ├── lock-acq-fail.c │ │ │ │ ├── lock-acq-fail.ck │ │ │ │ ├── lock-data.c │ │ │ │ ├── lock-data.ck │ │ │ │ ├── lock-dbl-acq.c │ │ │ │ ├── lock-dbl-acq.ck │ │ │ │ ├── lock-dbl-rel.c │ │ │ │ ├── lock-dbl-rel.ck │ │ │ │ ├── lock-init-fail.c │ │ │ │ ├── lock-init-fail.ck │ │ │ │ ├── lock-ll.c │ │ │ │ ├── lock-ll.ck │ │ │ │ ├── lock-simple.c │ │ │ │ ├── lock-simple.ck │ │ │ │ ├── multi-oom-mt.c │ │ │ │ ├── multi-oom-mt.ck │ │ │ │ ├── pcb-syn.c │ │ │ │ ├── pcb-syn.ck │ │ │ │ ├── reuse-stack.c │ │ │ │ ├── reuse-stack.ck │ │ │ │ ├── sema-init-fail.c │ │ │ │ ├── sema-init-fail.ck │ │ │ │ ├── sema-simple.c │ │ │ │ ├── sema-simple.ck │ │ │ │ ├── sema-up-fail.c │ │ │ │ ├── sema-up-fail.ck │ │ │ │ ├── sema-wait-many.c │ │ │ │ ├── sema-wait-many.ck │ │ │ │ ├── sema-wait.c │ │ │ │ ├── sema-wait.ck │ │ │ │ ├── synch-many.c │ │ │ │ ├── synch-many.ck │ │ │ │ ├── wait-fail.c │ │ │ │ └── wait-fail.ck │ │ │ ├── no-vm │ │ │ │ ├── Make.tests │ │ │ │ ├── Rubric │ │ │ │ ├── multi-oom.c │ │ │ │ └── multi-oom.ck │ │ │ ├── open-bad-ptr.c │ │ │ ├── open-bad-ptr.ck │ │ │ ├── open-boundary.c │ │ │ ├── open-boundary.ck │ │ │ ├── open-empty.c │ │ │ ├── open-empty.ck │ │ │ ├── open-missing.c │ │ │ ├── open-missing.ck │ │ │ ├── open-normal.c │ │ │ ├── open-normal.ck │ │ │ ├── open-null.c │ │ │ ├── open-null.ck │ │ │ ├── open-twice.c │ │ │ ├── open-twice.ck │ │ │ ├── practice.c │ │ │ ├── practice.ck │ │ │ ├── read-bad-fd.c │ │ │ ├── read-bad-fd.ck │ │ │ ├── read-bad-ptr.c │ │ │ ├── read-bad-ptr.ck │ │ │ ├── read-boundary.c │ │ │ ├── read-boundary.ck │ │ │ ├── read-normal.c │ │ │ ├── read-normal.ck │ │ │ ├── read-stdout.c │ │ │ ├── read-stdout.ck │ │ │ ├── read-zero.c │ │ │ ├── read-zero.ck │ │ │ ├── rox-child.c │ │ │ ├── rox-child.ck │ │ │ ├── rox-child.inc │ │ │ ├── rox-multichild.c │ │ │ ├── rox-multichild.ck │ │ │ ├── rox-simple.c │ │ │ ├── rox-simple.ck │ │ │ ├── sample.inc │ │ │ ├── sample.txt │ │ │ ├── sc-bad-arg.c │ │ │ ├── sc-bad-arg.ck │ │ │ ├── sc-bad-sp.c │ │ │ ├── sc-bad-sp.ck │ │ │ ├── sc-boundary-2.c │ │ │ ├── sc-boundary-2.ck │ │ │ ├── sc-boundary-3.c │ │ │ ├── sc-boundary-3.ck │ │ │ ├── sc-boundary.c │ │ │ ├── sc-boundary.ck │ │ │ ├── stack-align-0.c │ │ │ ├── stack-align-0.ck │ │ │ ├── stack-align-1.ck │ │ │ ├── stack-align-2.ck │ │ │ ├── stack-align-3.ck │ │ │ ├── stack-align-4.ck │ │ │ ├── stack-align.c │ │ │ ├── tell-simple.c │ │ │ ├── tell-simple.ck │ │ │ ├── wait-bad-pid.c │ │ │ ├── wait-bad-pid.ck │ │ │ ├── wait-killed.c │ │ │ ├── wait-killed.ck │ │ │ ├── wait-simple.c │ │ │ ├── wait-simple.ck │ │ │ ├── wait-twice.c │ │ │ ├── wait-twice.ck │ │ │ ├── write-bad-fd.c │ │ │ ├── write-bad-fd.ck │ │ │ ├── write-bad-ptr.c │ │ │ ├── write-bad-ptr.ck │ │ │ ├── write-boundary.c │ │ │ ├── write-boundary.ck │ │ │ ├── write-normal.c │ │ │ ├── write-normal.ck │ │ │ ├── write-stdin.c │ │ │ ├── write-stdin.ck │ │ │ ├── write-zero.c │ │ │ └── write-zero.ck │ │ └── vm │ │ │ ├── Grading │ │ │ ├── Make.tests │ │ │ ├── Rubric.functionality │ │ │ ├── Rubric.robustness │ │ │ ├── child-inherit.c │ │ │ ├── child-linear.c │ │ │ ├── child-mm-wrt.c │ │ │ ├── child-qsort-mm.c │ │ │ ├── child-qsort.c │ │ │ ├── child-sort.c │ │ │ ├── mmap-bad-fd.c │ │ │ ├── mmap-bad-fd.ck │ │ │ ├── mmap-clean.c │ │ │ ├── mmap-clean.ck │ │ │ ├── mmap-close.c │ │ │ ├── mmap-close.ck │ │ │ ├── mmap-exit.c │ │ │ ├── mmap-exit.ck │ │ │ ├── mmap-inherit.c │ │ │ ├── mmap-inherit.ck │ │ │ ├── mmap-misalign.c │ │ │ ├── mmap-misalign.ck │ │ │ ├── mmap-null.c │ │ │ ├── mmap-null.ck │ │ │ ├── mmap-over-code.c │ │ │ ├── mmap-over-code.ck │ │ │ ├── mmap-over-data.c │ │ │ ├── mmap-over-data.ck │ │ │ ├── mmap-over-stk.c │ │ │ ├── mmap-over-stk.ck │ │ │ ├── mmap-overlap.c │ │ │ ├── mmap-overlap.ck │ │ │ ├── mmap-read.c │ │ │ ├── mmap-read.ck │ │ │ ├── mmap-remove.c │ │ │ ├── mmap-remove.ck │ │ │ ├── mmap-shuffle.c │ │ │ ├── mmap-shuffle.ck │ │ │ ├── mmap-twice.c │ │ │ ├── mmap-twice.ck │ │ │ ├── mmap-unmap.c │ │ │ ├── mmap-unmap.ck │ │ │ ├── mmap-write.c │ │ │ ├── mmap-write.ck │ │ │ ├── mmap-zero.c │ │ │ ├── mmap-zero.ck │ │ │ ├── page-linear.c │ │ │ ├── page-linear.ck │ │ │ ├── page-merge-mm.c │ │ │ ├── page-merge-mm.ck │ │ │ ├── page-merge-par.c │ │ │ ├── page-merge-par.ck │ │ │ ├── page-merge-seq.c │ │ │ ├── page-merge-seq.ck │ │ │ ├── page-merge-stk.c │ │ │ ├── page-merge-stk.ck │ │ │ ├── page-parallel.c │ │ │ ├── page-parallel.ck │ │ │ ├── page-shuffle.c │ │ │ ├── page-shuffle.ck │ │ │ ├── parallel-merge.c │ │ │ ├── parallel-merge.h │ │ │ ├── process_death.pm │ │ │ ├── pt-bad-addr.c │ │ │ ├── pt-bad-addr.ck │ │ │ ├── pt-bad-read.c │ │ │ ├── pt-bad-read.ck │ │ │ ├── pt-big-stk-obj.c │ │ │ ├── pt-big-stk-obj.ck │ │ │ ├── pt-grow-bad.c │ │ │ ├── pt-grow-bad.ck │ │ │ ├── pt-grow-pusha.c │ │ │ ├── pt-grow-pusha.ck │ │ │ ├── pt-grow-stack.c │ │ │ ├── pt-grow-stack.ck │ │ │ ├── pt-grow-stk-sc.c │ │ │ ├── pt-grow-stk-sc.ck │ │ │ ├── pt-write-code-2.c │ │ │ ├── pt-write-code.c │ │ │ ├── pt-write-code.ck │ │ │ ├── pt-write-code2.ck │ │ │ ├── qsort.c │ │ │ ├── qsort.h │ │ │ ├── sample.inc │ │ │ └── sample.txt │ ├── threads │ │ ├── .gitignore │ │ ├── Make.vars │ │ ├── Makefile │ │ ├── fixed-point.h │ │ ├── flags.h │ │ ├── init.c │ │ ├── init.h │ │ ├── interrupt.c │ │ ├── interrupt.h │ │ ├── intr-stubs.S │ │ ├── intr-stubs.h │ │ ├── io.h │ │ ├── kernel.lds.S │ │ ├── loader.S │ │ ├── loader.h │ │ ├── malloc.c │ │ ├── malloc.h │ │ ├── palloc.c │ │ ├── palloc.h │ │ ├── pte.h │ │ ├── start.S │ │ ├── switch.S │ │ ├── switch.h │ │ ├── synch.c │ │ ├── synch.h │ │ ├── thread.c │ │ ├── thread.h │ │ └── vaddr.h │ ├── userprog │ │ ├── .gitignore │ │ ├── Make.vars │ │ ├── Makefile │ │ ├── exception.c │ │ ├── exception.h │ │ ├── gdt.c │ │ ├── gdt.h │ │ ├── pagedir.c │ │ ├── pagedir.h │ │ ├── process.c │ │ ├── process.h │ │ ├── syscall.c │ │ ├── syscall.h │ │ ├── tss.c │ │ └── tss.h │ ├── utils │ │ ├── .gitignore │ │ ├── Makefile │ │ ├── Pintos.pm │ │ ├── backtrace │ │ ├── pintos │ │ ├── pintos-gdb │ │ ├── pintos-mkdisk │ │ ├── pintos-set-cmdline │ │ ├── pintos-test │ │ ├── setitimer-helper.c │ │ ├── squish-pty.c │ │ └── squish-unix.c │ └── vm │ │ ├── .gitignore │ │ ├── Make.vars │ │ └── Makefile └── test.txt ├── hw-http-rs ├── Cargo.lock ├── Cargo.toml ├── Makefile ├── rust-toolchain.toml ├── src │ ├── args.rs │ ├── http.rs │ ├── main.rs │ ├── server.rs │ ├── stats.rs │ └── tests │ │ ├── args.rs │ │ ├── http.rs │ │ ├── mod.rs │ │ └── stats.rs └── www │ ├── index.html │ └── my_documents │ ├── WEB_SCALE.jpg │ ├── contributors.txt │ ├── credit.txt │ ├── http-meme.png │ └── wholesome_facts.txt ├── hw-intro ├── Makefile ├── i386-gdb-map.sh ├── limits ├── limits.c ├── map ├── map.S ├── map.c ├── map.i ├── map.o ├── printer.c ├── recurse.c ├── recurse.o ├── ssh └── words │ ├── Makefile │ ├── count │ ├── main.c │ ├── wc_sort.o │ ├── wc_sort_arm.o │ ├── word.txt │ ├── word_count.c │ ├── word_count.h │ ├── words │ └── words.txt ├── hw-list ├── Makefile ├── debug.c ├── debug.h ├── debug.o ├── gutenberg │ ├── alice.txt │ ├── metamorphosis.txt │ ├── peter.txt │ ├── sawyer.txt │ └── time.txt ├── list.c ├── list.h ├── list.o ├── lwords ├── lwords.o ├── lwords_arm.o ├── pthread ├── pthread.c ├── pthread.o ├── pwords ├── pwords.c ├── pwords.o ├── word_count.h ├── word_count.o ├── word_count_arm.o ├── word_count_l.c ├── word_count_l.o ├── word_count_p.c ├── word_count_p.o ├── word_helpers.h ├── word_helpers.o ├── word_helpers_arm.o ├── words ├── words.o ├── words.txt └── words_arm.o ├── hw-map-reduce-rs ├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── build.rs ├── data │ ├── alphabet2 │ │ ├── letters1.txt │ │ └── letters2.txt │ ├── graph-edges-medium │ │ ├── 00.txt │ │ ├── 01.txt │ │ ├── 02.txt │ │ ├── 03.txt │ │ └── 04.txt │ └── gutenberg │ │ ├── p.txt │ │ ├── q.txt │ │ ├── r.txt │ │ ├── s.txt │ │ ├── t.txt │ │ └── u.txt ├── proto │ ├── coordinator.proto │ └── worker.proto ├── rust-toolchain.toml └── src │ ├── app │ ├── grep.rs │ ├── mod.rs │ ├── vertex_degree.rs │ └── wc.rs │ ├── autograder │ └── mod.rs │ ├── bin │ ├── autograder.rs │ ├── client.rs │ ├── coordinator.rs │ └── worker.rs │ ├── client.rs │ ├── codec │ └── mod.rs │ ├── coordinator │ ├── args.rs │ └── mod.rs │ ├── lib.rs │ ├── log.rs │ ├── task │ └── mod.rs │ ├── tests │ └── mod.rs │ ├── utils.rs │ └── worker │ ├── args.rs │ └── mod.rs ├── hw-memory ├── mm_alloc │ ├── Makefile │ ├── mm_alloc.c │ ├── mm_alloc.h │ └── mm_test.c └── pintos │ └── src │ ├── Make.config │ ├── Makefile │ ├── Makefile.build │ ├── Makefile.kernel │ ├── Makefile.userprog │ ├── devices │ ├── block.c │ ├── block.h │ ├── ide.c │ ├── ide.h │ ├── input.c │ ├── input.h │ ├── intq.c │ ├── intq.h │ ├── kbd.c │ ├── kbd.h │ ├── partition.c │ ├── partition.h │ ├── pit.c │ ├── pit.h │ ├── rtc.c │ ├── rtc.h │ ├── serial.c │ ├── serial.h │ ├── shutdown.c │ ├── shutdown.h │ ├── speaker.c │ ├── speaker.h │ ├── timer.c │ ├── timer.h │ ├── vga.c │ └── vga.h │ ├── examples │ ├── Makefile │ ├── bubsort.c │ ├── cat.c │ ├── cmp.c │ ├── cp.c │ ├── echo.c │ ├── halt.c │ ├── hex-dump.c │ ├── insult.c │ ├── lineup.c │ ├── ls.c │ ├── matmult.c │ ├── mcat.c │ ├── mcp.c │ ├── mkdir.c │ ├── pwd.c │ ├── recursor.c │ ├── rm.c │ └── shell.c │ ├── filesys │ ├── Make.vars │ ├── Makefile │ ├── directory.c │ ├── directory.h │ ├── file.c │ ├── file.h │ ├── filesys.c │ ├── filesys.h │ ├── free-map.c │ ├── free-map.h │ ├── fsutil.c │ ├── fsutil.h │ ├── inode.c │ ├── inode.h │ └── off_t.h │ ├── memory │ ├── Make.vars │ └── Makefile │ ├── misc │ ├── bochs-2.2.6-big-endian.patch │ ├── bochs-2.2.6-build.sh │ ├── bochs-2.2.6-gdbstub-ENN.patch │ ├── bochs-2.2.6-jitter.patch │ ├── bochs-2.2.6-ms-extensions.patch │ ├── bochs-2.2.6-namespace.patch │ ├── bochs-2.2.6-page-fault-segv.patch │ ├── bochs-2.2.6-paranoia.patch │ ├── bochs-2.2.6-solaris-link.patch │ ├── bochs-2.2.6-solaris-tty.patch │ ├── bochs-2.2.6-triple-fault.patch │ ├── bochs-2.6.2-banner-stderr.patch │ ├── bochs-2.6.2-block-device-check.patch │ ├── bochs-2.6.2-build.sh │ ├── bochs-2.6.2-jitter-plus-segv.patch │ ├── bochs-2.6.2-link-tinfo.patch │ ├── bochs-2.6.2-xrandr-pkgconfig.patch │ ├── gcc-3.3.6-cross-howto │ └── gdb-macros │ ├── tests │ ├── Algorithm │ │ └── Diff.pm │ ├── Make.tests │ ├── arc4.c │ ├── arc4.h │ ├── arc4.pm │ ├── cksum.c │ ├── cksum.h │ ├── cksum.pm │ ├── filesys │ │ ├── Grading.no-vm │ │ ├── Grading.with-vm │ │ ├── base │ │ │ ├── Make.tests │ │ │ ├── Rubric │ │ │ ├── child-syn-read.c │ │ │ ├── child-syn-wrt.c │ │ │ ├── full.inc │ │ │ ├── lg-create.c │ │ │ ├── lg-create.ck │ │ │ ├── lg-full.c │ │ │ ├── lg-full.ck │ │ │ ├── lg-random.c │ │ │ ├── lg-random.ck │ │ │ ├── lg-seq-block.c │ │ │ ├── lg-seq-block.ck │ │ │ ├── lg-seq-random.c │ │ │ ├── lg-seq-random.ck │ │ │ ├── random.inc │ │ │ ├── seq-block.inc │ │ │ ├── seq-random.inc │ │ │ ├── sm-create.c │ │ │ ├── sm-create.ck │ │ │ ├── sm-full.c │ │ │ ├── sm-full.ck │ │ │ ├── sm-random.c │ │ │ ├── sm-random.ck │ │ │ ├── sm-seq-block.c │ │ │ ├── sm-seq-block.ck │ │ │ ├── sm-seq-random.c │ │ │ ├── sm-seq-random.ck │ │ │ ├── syn-read.c │ │ │ ├── syn-read.ck │ │ │ ├── syn-read.h │ │ │ ├── syn-remove.c │ │ │ ├── syn-remove.ck │ │ │ ├── syn-write.c │ │ │ ├── syn-write.ck │ │ │ └── syn-write.h │ │ ├── create.inc │ │ ├── extended │ │ │ ├── Make.tests │ │ │ ├── Rubric.functionality │ │ │ ├── Rubric.persistence │ │ │ ├── Rubric.robustness │ │ │ ├── child-syn-rw.c │ │ │ ├── dir-empty-name-persistence.ck │ │ │ ├── dir-empty-name.c │ │ │ ├── dir-empty-name.ck │ │ │ ├── dir-mk-tree-persistence.ck │ │ │ ├── dir-mk-tree.c │ │ │ ├── dir-mk-tree.ck │ │ │ ├── dir-mkdir-persistence.ck │ │ │ ├── dir-mkdir.c │ │ │ ├── dir-mkdir.ck │ │ │ ├── dir-open-persistence.ck │ │ │ ├── dir-open.c │ │ │ ├── dir-open.ck │ │ │ ├── dir-over-file-persistence.ck │ │ │ ├── dir-over-file.c │ │ │ ├── dir-over-file.ck │ │ │ ├── dir-rm-cwd-persistence.ck │ │ │ ├── dir-rm-cwd.c │ │ │ ├── dir-rm-cwd.ck │ │ │ ├── dir-rm-parent-persistence.ck │ │ │ ├── dir-rm-parent.c │ │ │ ├── dir-rm-parent.ck │ │ │ ├── dir-rm-root-persistence.ck │ │ │ ├── dir-rm-root.c │ │ │ ├── dir-rm-root.ck │ │ │ ├── dir-rm-tree-persistence.ck │ │ │ ├── dir-rm-tree.c │ │ │ ├── dir-rm-tree.ck │ │ │ ├── dir-rmdir-persistence.ck │ │ │ ├── dir-rmdir.c │ │ │ ├── dir-rmdir.ck │ │ │ ├── dir-under-file-persistence.ck │ │ │ ├── dir-under-file.c │ │ │ ├── dir-under-file.ck │ │ │ ├── dir-vine-persistence.ck │ │ │ ├── dir-vine.c │ │ │ ├── dir-vine.ck │ │ │ ├── grow-create-persistence.ck │ │ │ ├── grow-create.c │ │ │ ├── grow-create.ck │ │ │ ├── grow-dir-lg-persistence.ck │ │ │ ├── grow-dir-lg.c │ │ │ ├── grow-dir-lg.ck │ │ │ ├── grow-dir.inc │ │ │ ├── grow-file-size-persistence.ck │ │ │ ├── grow-file-size.c │ │ │ ├── grow-file-size.ck │ │ │ ├── grow-root-lg-persistence.ck │ │ │ ├── grow-root-lg.c │ │ │ ├── grow-root-lg.ck │ │ │ ├── grow-root-sm-persistence.ck │ │ │ ├── grow-root-sm.c │ │ │ ├── grow-root-sm.ck │ │ │ ├── grow-seq-lg-persistence.ck │ │ │ ├── grow-seq-lg.c │ │ │ ├── grow-seq-lg.ck │ │ │ ├── grow-seq-sm-persistence.ck │ │ │ ├── grow-seq-sm.c │ │ │ ├── grow-seq-sm.ck │ │ │ ├── grow-seq.inc │ │ │ ├── grow-sparse-persistence.ck │ │ │ ├── grow-sparse.c │ │ │ ├── grow-sparse.ck │ │ │ ├── grow-tell-persistence.ck │ │ │ ├── grow-tell.c │ │ │ ├── grow-tell.ck │ │ │ ├── grow-two-files-persistence.ck │ │ │ ├── grow-two-files.c │ │ │ ├── grow-two-files.ck │ │ │ ├── mk-tree.c │ │ │ ├── mk-tree.h │ │ │ ├── syn-rw-persistence.ck │ │ │ ├── syn-rw.c │ │ │ ├── syn-rw.ck │ │ │ ├── syn-rw.h │ │ │ └── tar.c │ │ ├── seq-test.c │ │ └── seq-test.h │ ├── internal │ │ ├── list.c │ │ ├── stdio.c │ │ └── stdlib.c │ ├── lib.c │ ├── lib.h │ ├── lib.pm │ ├── main.c │ ├── main.h │ ├── make-grade │ ├── memory │ │ ├── Make.tests │ │ ├── malloc-fail.c │ │ ├── malloc-fail.ck │ │ ├── malloc-fit.c │ │ ├── malloc-fit.ck │ │ ├── malloc-free.c │ │ ├── malloc-free.ck │ │ ├── malloc-merge-1.c │ │ ├── malloc-merge-1.ck │ │ ├── malloc-merge-2.c │ │ ├── malloc-merge-2.ck │ │ ├── malloc-null.c │ │ ├── malloc-null.ck │ │ ├── malloc-simple.c │ │ ├── malloc-simple.ck │ │ ├── pt-bad-addr.c │ │ ├── pt-bad-addr.ck │ │ ├── pt-bad-read.c │ │ ├── pt-bad-read.ck │ │ ├── pt-big-stk-obj.c │ │ ├── pt-big-stk-obj.ck │ │ ├── pt-grow-bad.c │ │ ├── pt-grow-bad.ck │ │ ├── pt-grow-pusha.c │ │ ├── pt-grow-pusha.ck │ │ ├── pt-grow-stack.c │ │ ├── pt-grow-stack.ck │ │ ├── pt-grow-stk-sc.c │ │ ├── pt-grow-stk-sc.ck │ │ ├── pt-stk-oflow.c │ │ ├── pt-stk-oflow.ck │ │ ├── pt-write-code-2.c │ │ ├── pt-write-code.c │ │ ├── pt-write-code.ck │ │ ├── pt-write-code2.ck │ │ ├── realloc-1.c │ │ ├── realloc-1.ck │ │ ├── realloc-2.c │ │ ├── realloc-2.ck │ │ ├── realloc-3.c │ │ ├── realloc-3.ck │ │ ├── realloc-null.c │ │ ├── realloc-null.ck │ │ ├── sample.txt │ │ ├── sbrk-counter.c │ │ ├── sbrk-counter.ck │ │ ├── sbrk-dealloc.c │ │ ├── sbrk-dealloc.ck │ │ ├── sbrk-fail-1.c │ │ ├── sbrk-fail-1.ck │ │ ├── sbrk-fail-2.c │ │ ├── sbrk-fail-2.ck │ │ ├── sbrk-large.c │ │ ├── sbrk-large.ck │ │ ├── sbrk-many.c │ │ ├── sbrk-many.ck │ │ ├── sbrk-mebi.c │ │ ├── sbrk-mebi.ck │ │ ├── sbrk-multi.c │ │ ├── sbrk-multi.ck │ │ ├── sbrk-none.c │ │ ├── sbrk-none.ck │ │ ├── sbrk-oom-1.c │ │ ├── sbrk-oom-1.ck │ │ ├── sbrk-oom-2.c │ │ ├── sbrk-oom-2.ck │ │ ├── sbrk-oom.c │ │ ├── sbrk-oom.h │ │ ├── sbrk-page.c │ │ ├── sbrk-page.ck │ │ ├── sbrk-rv.c │ │ ├── sbrk-rv.ck │ │ ├── sbrk-simple.c │ │ ├── sbrk-simple.h │ │ ├── sbrk-small.c │ │ ├── sbrk-small.ck │ │ ├── sbrk-zero.c │ │ └── sbrk-zero.ck │ ├── random.pm │ ├── tests.pm │ ├── threads │ │ ├── Grading │ │ ├── Make.tests │ │ ├── Rubric.alarm │ │ ├── Rubric.mlfqs │ │ ├── Rubric.priority │ │ ├── alarm-multiple.ck │ │ ├── alarm-negative.c │ │ ├── alarm-negative.ck │ │ ├── alarm-priority.c │ │ ├── alarm-priority.ck │ │ ├── alarm-simultaneous.c │ │ ├── alarm-simultaneous.ck │ │ ├── alarm-single.ck │ │ ├── alarm-wait.c │ │ ├── alarm-zero.c │ │ ├── alarm-zero.ck │ │ ├── alarm.pm │ │ ├── mlfqs-block.c │ │ ├── mlfqs-block.ck │ │ ├── mlfqs-fair-2.ck │ │ ├── mlfqs-fair-20.ck │ │ ├── mlfqs-fair.c │ │ ├── mlfqs-load-1.c │ │ ├── mlfqs-load-1.ck │ │ ├── mlfqs-load-60.c │ │ ├── mlfqs-load-60.ck │ │ ├── mlfqs-load-avg.c │ │ ├── mlfqs-load-avg.ck │ │ ├── mlfqs-nice-10.ck │ │ ├── mlfqs-nice-2.ck │ │ ├── mlfqs-recent-1.c │ │ ├── mlfqs-recent-1.ck │ │ ├── mlfqs.pm │ │ ├── priority-change.c │ │ ├── priority-change.ck │ │ ├── priority-condvar.c │ │ ├── priority-condvar.ck │ │ ├── priority-donate-chain.c │ │ ├── priority-donate-chain.ck │ │ ├── priority-donate-lower.c │ │ ├── priority-donate-lower.ck │ │ ├── priority-donate-multiple.c │ │ ├── priority-donate-multiple.ck │ │ ├── priority-donate-multiple2.c │ │ ├── priority-donate-multiple2.ck │ │ ├── priority-donate-nest.c │ │ ├── priority-donate-nest.ck │ │ ├── priority-donate-one.c │ │ ├── priority-donate-one.ck │ │ ├── priority-donate-sema.c │ │ ├── priority-donate-sema.ck │ │ ├── priority-fifo.c │ │ ├── priority-fifo.ck │ │ ├── priority-preempt.c │ │ ├── priority-preempt.ck │ │ ├── priority-sema.c │ │ ├── priority-sema.ck │ │ ├── tests.c │ │ └── tests.h │ ├── userprog │ │ ├── Grading │ │ ├── Make.tests │ │ ├── Rubric.functionality │ │ ├── Rubric.robustness │ │ ├── args-dbl-space.ck │ │ ├── args-many.ck │ │ ├── args-multiple.ck │ │ ├── args-none.ck │ │ ├── args-single.ck │ │ ├── args.c │ │ ├── bad-jump.c │ │ ├── bad-jump.ck │ │ ├── bad-jump2.c │ │ ├── bad-jump2.ck │ │ ├── bad-read.c │ │ ├── bad-read.ck │ │ ├── bad-read2.c │ │ ├── bad-read2.ck │ │ ├── bad-write.c │ │ ├── bad-write.ck │ │ ├── bad-write2.c │ │ ├── bad-write2.ck │ │ ├── boundary.c │ │ ├── boundary.h │ │ ├── child-bad.c │ │ ├── child-close.c │ │ ├── child-rox.c │ │ ├── child-simple.c │ │ ├── close-bad-fd.c │ │ ├── close-bad-fd.ck │ │ ├── close-normal.c │ │ ├── close-normal.ck │ │ ├── close-stdin.c │ │ ├── close-stdin.ck │ │ ├── close-stdout.c │ │ ├── close-stdout.ck │ │ ├── close-twice.c │ │ ├── close-twice.ck │ │ ├── create-bad-ptr.c │ │ ├── create-bad-ptr.ck │ │ ├── create-bound.c │ │ ├── create-bound.ck │ │ ├── create-empty.c │ │ ├── create-empty.ck │ │ ├── create-exists.c │ │ ├── create-exists.ck │ │ ├── create-long.c │ │ ├── create-long.ck │ │ ├── create-normal.c │ │ ├── create-normal.ck │ │ ├── create-null.c │ │ ├── create-null.ck │ │ ├── do-nothing.c │ │ ├── do-nothing.ck │ │ ├── exec-arg.c │ │ ├── exec-arg.ck │ │ ├── exec-bad-ptr.c │ │ ├── exec-bad-ptr.ck │ │ ├── exec-bound-2.c │ │ ├── exec-bound-2.ck │ │ ├── exec-bound-3.c │ │ ├── exec-bound-3.ck │ │ ├── exec-bound.c │ │ ├── exec-bound.ck │ │ ├── exec-missing.c │ │ ├── exec-missing.ck │ │ ├── exec-multiple.c │ │ ├── exec-multiple.ck │ │ ├── exec-once.c │ │ ├── exec-once.ck │ │ ├── exit.c │ │ ├── exit.ck │ │ ├── halt.c │ │ ├── halt.ck │ │ ├── iloveos.c │ │ ├── iloveos.ck │ │ ├── multi-child-fd.c │ │ ├── multi-child-fd.ck │ │ ├── multi-recurse.c │ │ ├── multi-recurse.ck │ │ ├── no-vm │ │ │ ├── Make.tests │ │ │ ├── Rubric │ │ │ ├── multi-oom.c │ │ │ └── multi-oom.ck │ │ ├── open-bad-ptr.c │ │ ├── open-bad-ptr.ck │ │ ├── open-boundary.c │ │ ├── open-boundary.ck │ │ ├── open-empty.c │ │ ├── open-empty.ck │ │ ├── open-missing.c │ │ ├── open-missing.ck │ │ ├── open-normal.c │ │ ├── open-normal.ck │ │ ├── open-null.c │ │ ├── open-null.ck │ │ ├── open-twice.c │ │ ├── open-twice.ck │ │ ├── practice.c │ │ ├── practice.ck │ │ ├── read-bad-fd.c │ │ ├── read-bad-fd.ck │ │ ├── read-bad-ptr.c │ │ ├── read-bad-ptr.ck │ │ ├── read-boundary.c │ │ ├── read-boundary.ck │ │ ├── read-normal.c │ │ ├── read-normal.ck │ │ ├── read-stdout.c │ │ ├── read-stdout.ck │ │ ├── read-zero.c │ │ ├── read-zero.ck │ │ ├── rox-child.c │ │ ├── rox-child.ck │ │ ├── rox-child.inc │ │ ├── rox-multichild.c │ │ ├── rox-multichild.ck │ │ ├── rox-simple.c │ │ ├── rox-simple.ck │ │ ├── sample.inc │ │ ├── sample.txt │ │ ├── sc-bad-arg.c │ │ ├── sc-bad-arg.ck │ │ ├── sc-bad-sp.c │ │ ├── sc-bad-sp.ck │ │ ├── sc-boundary-2.c │ │ ├── sc-boundary-2.ck │ │ ├── sc-boundary-3.c │ │ ├── sc-boundary-3.ck │ │ ├── sc-boundary.c │ │ ├── sc-boundary.ck │ │ ├── stack-align-0.c │ │ ├── stack-align-0.ck │ │ ├── stack-align-1.ck │ │ ├── stack-align-2.ck │ │ ├── stack-align-3.ck │ │ ├── stack-align-4.ck │ │ ├── stack-align.c │ │ ├── wait-bad-pid.c │ │ ├── wait-bad-pid.ck │ │ ├── wait-killed.c │ │ ├── wait-killed.ck │ │ ├── wait-simple.c │ │ ├── wait-simple.ck │ │ ├── wait-twice.c │ │ ├── wait-twice.ck │ │ ├── write-bad-fd.c │ │ ├── write-bad-fd.ck │ │ ├── write-bad-ptr.c │ │ ├── write-bad-ptr.ck │ │ ├── write-boundary.c │ │ ├── write-boundary.ck │ │ ├── write-normal.c │ │ ├── write-normal.ck │ │ ├── write-stdin.c │ │ ├── write-stdin.ck │ │ ├── write-zero.c │ │ └── write-zero.ck │ └── vm │ │ ├── Grading │ │ ├── Make.tests │ │ ├── Rubric.functionality │ │ ├── Rubric.robustness │ │ ├── child-inherit.c │ │ ├── child-linear.c │ │ ├── child-mm-wrt.c │ │ ├── child-qsort-mm.c │ │ ├── child-qsort.c │ │ ├── child-sort.c │ │ ├── mmap-bad-fd.c │ │ ├── mmap-bad-fd.ck │ │ ├── mmap-clean.c │ │ ├── mmap-clean.ck │ │ ├── mmap-close.c │ │ ├── mmap-close.ck │ │ ├── mmap-exit.c │ │ ├── mmap-exit.ck │ │ ├── mmap-inherit.c │ │ ├── mmap-inherit.ck │ │ ├── mmap-misalign.c │ │ ├── mmap-misalign.ck │ │ ├── mmap-null.c │ │ ├── mmap-null.ck │ │ ├── mmap-over-code.c │ │ ├── mmap-over-code.ck │ │ ├── mmap-over-data.c │ │ ├── mmap-over-data.ck │ │ ├── mmap-over-stk.c │ │ ├── mmap-over-stk.ck │ │ ├── mmap-overlap.c │ │ ├── mmap-overlap.ck │ │ ├── mmap-read.c │ │ ├── mmap-read.ck │ │ ├── mmap-remove.c │ │ ├── mmap-remove.ck │ │ ├── mmap-shuffle.c │ │ ├── mmap-shuffle.ck │ │ ├── mmap-twice.c │ │ ├── mmap-twice.ck │ │ ├── mmap-unmap.c │ │ ├── mmap-unmap.ck │ │ ├── mmap-write.c │ │ ├── mmap-write.ck │ │ ├── mmap-zero.c │ │ ├── mmap-zero.ck │ │ ├── page-linear.c │ │ ├── page-linear.ck │ │ ├── page-merge-mm.c │ │ ├── page-merge-mm.ck │ │ ├── page-merge-par.c │ │ ├── page-merge-par.ck │ │ ├── page-merge-seq.c │ │ ├── page-merge-seq.ck │ │ ├── page-merge-stk.c │ │ ├── page-merge-stk.ck │ │ ├── page-parallel.c │ │ ├── page-parallel.ck │ │ ├── page-shuffle.c │ │ ├── page-shuffle.ck │ │ ├── parallel-merge.c │ │ ├── parallel-merge.h │ │ ├── process_death.pm │ │ ├── pt-bad-addr.c │ │ ├── pt-bad-addr.ck │ │ ├── pt-bad-read.c │ │ ├── pt-bad-read.ck │ │ ├── pt-big-stk-obj.c │ │ ├── pt-big-stk-obj.ck │ │ ├── pt-grow-bad.c │ │ ├── pt-grow-bad.ck │ │ ├── pt-grow-pusha.c │ │ ├── pt-grow-pusha.ck │ │ ├── pt-grow-stack.c │ │ ├── pt-grow-stack.ck │ │ ├── pt-grow-stk-sc.c │ │ ├── pt-grow-stk-sc.ck │ │ ├── pt-write-code-2.c │ │ ├── pt-write-code.c │ │ ├── pt-write-code.ck │ │ ├── pt-write-code2.ck │ │ ├── qsort.c │ │ ├── qsort.h │ │ ├── sample.inc │ │ └── sample.txt │ ├── threads │ ├── Make.vars │ ├── Makefile │ ├── fixed-point.h │ ├── flags.h │ ├── init.c │ ├── init.h │ ├── interrupt.c │ ├── interrupt.h │ ├── intr-stubs.S │ ├── intr-stubs.h │ ├── io.h │ ├── kernel.lds.S │ ├── loader.S │ ├── loader.h │ ├── malloc.c │ ├── malloc.h │ ├── palloc.c │ ├── palloc.h │ ├── pte.h │ ├── start.S │ ├── switch.S │ ├── switch.h │ ├── synch.c │ ├── synch.h │ ├── thread.c │ ├── thread.h │ └── vaddr.h │ ├── userprog │ ├── Make.vars │ ├── Makefile │ ├── exception.c │ ├── exception.h │ ├── gdt.c │ ├── gdt.h │ ├── pagedir.c │ ├── pagedir.h │ ├── process.c │ ├── process.h │ ├── syscall.c │ ├── syscall.h │ ├── tss.c │ └── tss.h │ ├── utils │ ├── Makefile │ ├── Pintos.pm │ ├── backtrace │ ├── pintos │ ├── pintos-gdb │ ├── pintos-mkdisk │ ├── pintos-set-cmdline │ ├── pintos-test │ ├── setitimer-helper.c │ ├── squish-pty.c │ └── squish-unix.c │ └── vm │ ├── Make.vars │ └── Makefile ├── hw-shell ├── Makefile ├── shell ├── shell.c ├── shell.o ├── test.sh ├── test_pip.txt ├── test_redirection_in ├── test_redirection_out ├── tokenizer.c ├── tokenizer.h └── tokenizer.o ├── lab-grpc-rs ├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── build.rs ├── proto │ └── kv_store.proto ├── rust-toolchain.toml └── src │ ├── bin │ ├── client.rs │ └── server.rs │ ├── client.rs │ ├── lib.rs │ ├── log.rs │ ├── rpc │ └── mod.rs │ ├── server.rs │ └── test.rs ├── proj-pregame └── src │ ├── .clang-format │ ├── .gitignore │ ├── LICENSE │ ├── Make.config │ ├── Makefile │ ├── Makefile.build │ ├── Makefile.kernel │ ├── Makefile.userprog │ ├── devices │ ├── block.c │ ├── block.h │ ├── ide.c │ ├── ide.h │ ├── input.c │ ├── input.h │ ├── intq.c │ ├── intq.h │ ├── kbd.c │ ├── kbd.h │ ├── partition.c │ ├── partition.h │ ├── pit.c │ ├── pit.h │ ├── rtc.c │ ├── rtc.h │ ├── serial.c │ ├── serial.h │ ├── shutdown.c │ ├── shutdown.h │ ├── speaker.c │ ├── speaker.h │ ├── timer.c │ ├── timer.h │ ├── vga.c │ └── vga.h │ ├── examples │ ├── .gitignore │ ├── Makefile │ ├── bubsort.c │ ├── cat.c │ ├── cmp.c │ ├── cp.c │ ├── echo.c │ ├── halt.c │ ├── hex-dump.c │ ├── lib │ │ ├── .gitignore │ │ └── user │ │ │ ├── .dummy │ │ │ └── .gitignore │ ├── lineup.c │ ├── ls.c │ ├── matmult.c │ ├── mcat.c │ ├── mcp.c │ ├── mkdir.c │ ├── pwd.c │ ├── recursor.c │ ├── rm.c │ └── shell.c │ ├── filesys │ ├── .gitignore │ ├── Make.vars │ ├── Makefile │ ├── directory.c │ ├── directory.h │ ├── file.c │ ├── file.h │ ├── filesys.c │ ├── filesys.h │ ├── free-map.c │ ├── free-map.h │ ├── fsutil.c │ ├── fsutil.h │ ├── inode.c │ ├── inode.h │ └── off_t.h │ ├── lib │ ├── arithmetic.c │ ├── ctype.h │ ├── debug.c │ ├── debug.h │ ├── float.c │ ├── float.h │ ├── inttypes.h │ ├── kernel │ │ ├── bitmap.c │ │ ├── bitmap.h │ │ ├── console.c │ │ ├── console.h │ │ ├── debug.c │ │ ├── hash.c │ │ ├── hash.h │ │ ├── list.c │ │ ├── list.h │ │ ├── stdio.h │ │ ├── test-lib.c │ │ └── test-lib.h │ ├── limits.h │ ├── packed.h │ ├── random.c │ ├── random.h │ ├── round.h │ ├── stdarg.h │ ├── stdbool.h │ ├── stddef.h │ ├── stdint.h │ ├── stdio.c │ ├── stdio.h │ ├── stdlib.c │ ├── stdlib.h │ ├── string.c │ ├── string.h │ ├── syscall-nr.h │ ├── user │ │ ├── console.c │ │ ├── debug.c │ │ ├── entry.c │ │ ├── pthread.c │ │ ├── pthread.h │ │ ├── stdio.h │ │ ├── syscall.c │ │ ├── syscall.h │ │ └── user.lds │ ├── ustar.c │ └── ustar.h │ ├── misc │ ├── bochs-2.2.6-big-endian.patch │ ├── bochs-2.2.6-build.sh │ ├── bochs-2.2.6-gdbstub-ENN.patch │ ├── bochs-2.2.6-jitter.patch │ ├── bochs-2.2.6-ms-extensions.patch │ ├── bochs-2.2.6-namespace.patch │ ├── bochs-2.2.6-page-fault-segv.patch │ ├── bochs-2.2.6-paranoia.patch │ ├── bochs-2.2.6-solaris-link.patch │ ├── bochs-2.2.6-solaris-tty.patch │ ├── bochs-2.2.6-triple-fault.patch │ ├── bochs-2.6.2-banner-stderr.patch │ ├── bochs-2.6.2-block-device-check.patch │ ├── bochs-2.6.2-build.sh │ ├── bochs-2.6.2-jitter-plus-segv.patch │ ├── bochs-2.6.2-link-tinfo.patch │ ├── bochs-2.6.2-xrandr-pkgconfig.patch │ ├── gcc-3.3.6-cross-howto │ └── gdb-macros │ ├── tests │ ├── Algorithm │ │ └── Diff.pm │ ├── Make.tests │ ├── arc4.c │ ├── arc4.h │ ├── arc4.pm │ ├── cksum.c │ ├── cksum.h │ ├── cksum.pm │ ├── filesys │ │ ├── Grading.no-vm │ │ ├── Grading.with-vm │ │ ├── base │ │ │ ├── Make.tests │ │ │ ├── Rubric │ │ │ ├── child-syn-read.c │ │ │ ├── child-syn-wrt.c │ │ │ ├── full.inc │ │ │ ├── lg-create.c │ │ │ ├── lg-create.ck │ │ │ ├── lg-full.c │ │ │ ├── lg-full.ck │ │ │ ├── lg-random.c │ │ │ ├── lg-random.ck │ │ │ ├── lg-seq-block.c │ │ │ ├── lg-seq-block.ck │ │ │ ├── lg-seq-random.c │ │ │ ├── lg-seq-random.ck │ │ │ ├── random.inc │ │ │ ├── seq-block.inc │ │ │ ├── seq-random.inc │ │ │ ├── sm-create.c │ │ │ ├── sm-create.ck │ │ │ ├── sm-full.c │ │ │ ├── sm-full.ck │ │ │ ├── sm-random.c │ │ │ ├── sm-random.ck │ │ │ ├── sm-seq-block.c │ │ │ ├── sm-seq-block.ck │ │ │ ├── sm-seq-random.c │ │ │ ├── sm-seq-random.ck │ │ │ ├── syn-read.c │ │ │ ├── syn-read.ck │ │ │ ├── syn-read.h │ │ │ ├── syn-remove.c │ │ │ ├── syn-remove.ck │ │ │ ├── syn-write.c │ │ │ ├── syn-write.ck │ │ │ └── syn-write.h │ │ ├── create.inc │ │ ├── extended │ │ │ ├── Make.tests │ │ │ ├── Rubric.functionality │ │ │ ├── Rubric.persistence │ │ │ ├── Rubric.robustness │ │ │ ├── child-syn-rw.c │ │ │ ├── dir-empty-name-persistence.ck │ │ │ ├── dir-empty-name.c │ │ │ ├── dir-empty-name.ck │ │ │ ├── dir-mk-tree-persistence.ck │ │ │ ├── dir-mk-tree.c │ │ │ ├── dir-mk-tree.ck │ │ │ ├── dir-mkdir-persistence.ck │ │ │ ├── dir-mkdir.c │ │ │ ├── dir-mkdir.ck │ │ │ ├── dir-open-persistence.ck │ │ │ ├── dir-open.c │ │ │ ├── dir-open.ck │ │ │ ├── dir-over-file-persistence.ck │ │ │ ├── dir-over-file.c │ │ │ ├── dir-over-file.ck │ │ │ ├── dir-rm-cwd-persistence.ck │ │ │ ├── dir-rm-cwd.c │ │ │ ├── dir-rm-cwd.ck │ │ │ ├── dir-rm-parent-persistence.ck │ │ │ ├── dir-rm-parent.c │ │ │ ├── dir-rm-parent.ck │ │ │ ├── dir-rm-root-persistence.ck │ │ │ ├── dir-rm-root.c │ │ │ ├── dir-rm-root.ck │ │ │ ├── dir-rm-tree-persistence.ck │ │ │ ├── dir-rm-tree.c │ │ │ ├── dir-rm-tree.ck │ │ │ ├── dir-rmdir-persistence.ck │ │ │ ├── dir-rmdir.c │ │ │ ├── dir-rmdir.ck │ │ │ ├── dir-under-file-persistence.ck │ │ │ ├── dir-under-file.c │ │ │ ├── dir-under-file.ck │ │ │ ├── dir-vine-persistence.ck │ │ │ ├── dir-vine.c │ │ │ ├── dir-vine.ck │ │ │ ├── grow-create-persistence.ck │ │ │ ├── grow-create.c │ │ │ ├── grow-create.ck │ │ │ ├── grow-dir-lg-persistence.ck │ │ │ ├── grow-dir-lg.c │ │ │ ├── grow-dir-lg.ck │ │ │ ├── grow-dir.inc │ │ │ ├── grow-file-size-persistence.ck │ │ │ ├── grow-file-size.c │ │ │ ├── grow-file-size.ck │ │ │ ├── grow-root-lg-persistence.ck │ │ │ ├── grow-root-lg.c │ │ │ ├── grow-root-lg.ck │ │ │ ├── grow-root-sm-persistence.ck │ │ │ ├── grow-root-sm.c │ │ │ ├── grow-root-sm.ck │ │ │ ├── grow-seq-lg-persistence.ck │ │ │ ├── grow-seq-lg.c │ │ │ ├── grow-seq-lg.ck │ │ │ ├── grow-seq-sm-persistence.ck │ │ │ ├── grow-seq-sm.c │ │ │ ├── grow-seq-sm.ck │ │ │ ├── grow-seq.inc │ │ │ ├── grow-sparse-persistence.ck │ │ │ ├── grow-sparse.c │ │ │ ├── grow-sparse.ck │ │ │ ├── grow-tell-persistence.ck │ │ │ ├── grow-tell.c │ │ │ ├── grow-tell.ck │ │ │ ├── grow-two-files-persistence.ck │ │ │ ├── grow-two-files.c │ │ │ ├── grow-two-files.ck │ │ │ ├── mk-tree.c │ │ │ ├── mk-tree.h │ │ │ ├── syn-rw-persistence.ck │ │ │ ├── syn-rw.c │ │ │ ├── syn-rw.ck │ │ │ ├── syn-rw.h │ │ │ └── tar.c │ │ ├── seq-test.c │ │ └── seq-test.h │ ├── internal │ │ ├── list.c │ │ ├── stdio.c │ │ └── stdlib.c │ ├── lib.c │ ├── lib.h │ ├── lib.pm │ ├── main.c │ ├── main.h │ ├── make-grade │ ├── random.pm │ ├── tests.pm │ ├── threads │ │ ├── Grading │ │ ├── Make.tests │ │ ├── Rubric.alarm │ │ ├── Rubric.mlfqs │ │ ├── Rubric.priority │ │ ├── alarm-multiple.ck │ │ ├── alarm-negative.c │ │ ├── alarm-negative.ck │ │ ├── alarm-priority.c │ │ ├── alarm-priority.ck │ │ ├── alarm-simultaneous.c │ │ ├── alarm-simultaneous.ck │ │ ├── alarm-single.ck │ │ ├── alarm-wait.c │ │ ├── alarm-zero.c │ │ ├── alarm-zero.ck │ │ ├── alarm.pm │ │ ├── matmul_data.h │ │ ├── mlfqs-block.c │ │ ├── mlfqs-block.ck │ │ ├── mlfqs-fair-2.ck │ │ ├── mlfqs-fair-20.ck │ │ ├── mlfqs-fair.c │ │ ├── mlfqs-load-1.c │ │ ├── mlfqs-load-1.ck │ │ ├── mlfqs-load-60.c │ │ ├── mlfqs-load-60.ck │ │ ├── mlfqs-load-avg.c │ │ ├── mlfqs-load-avg.ck │ │ ├── mlfqs-nice-10.ck │ │ ├── mlfqs-nice-2.ck │ │ ├── mlfqs-recent-1.c │ │ ├── mlfqs-recent-1.ck │ │ ├── mlfqs.pm │ │ ├── mt-matmul-16.ck │ │ ├── mt-matmul-2.ck │ │ ├── mt-matmul-4.ck │ │ ├── mt-matmul.c │ │ ├── priority-change.c │ │ ├── priority-change.ck │ │ ├── priority-condvar.c │ │ ├── priority-condvar.ck │ │ ├── priority-donate-chain.c │ │ ├── priority-donate-chain.ck │ │ ├── priority-donate-lower.c │ │ ├── priority-donate-lower.ck │ │ ├── priority-donate-multiple.c │ │ ├── priority-donate-multiple.ck │ │ ├── priority-donate-multiple2.c │ │ ├── priority-donate-multiple2.ck │ │ ├── priority-donate-nest.c │ │ ├── priority-donate-nest.ck │ │ ├── priority-donate-one.c │ │ ├── priority-donate-one.ck │ │ ├── priority-donate-sema.c │ │ ├── priority-donate-sema.ck │ │ ├── priority-fifo.c │ │ ├── priority-fifo.ck │ │ ├── priority-preempt.c │ │ ├── priority-preempt.ck │ │ ├── priority-sema.c │ │ ├── priority-sema.ck │ │ ├── priority-starve-sema.c │ │ ├── priority-starve-sema.ck │ │ ├── priority-starve.c │ │ ├── priority-starve.ck │ │ ├── smfs-hierarchy-16.ck │ │ ├── smfs-hierarchy-256.ck │ │ ├── smfs-hierarchy-32.ck │ │ ├── smfs-hierarchy-64.ck │ │ ├── smfs-hierarchy-8.ck │ │ ├── smfs-hierarchy.c │ │ ├── smfs-prio-change.c │ │ ├── smfs-prio-change.ck │ │ ├── smfs-starve-0.ck │ │ ├── smfs-starve-1.ck │ │ ├── smfs-starve-16.ck │ │ ├── smfs-starve-2.ck │ │ ├── smfs-starve-256.ck │ │ ├── smfs-starve-4.ck │ │ ├── smfs-starve-64.ck │ │ ├── smfs-starve-8.ck │ │ ├── smfs-starve.c │ │ ├── st-matmul.ck │ │ ├── tests.c │ │ └── tests.h │ ├── userprog │ │ ├── Grading │ │ ├── Make.tests │ │ ├── Rubric.functionality │ │ ├── Rubric.robustness │ │ ├── args-dbl-space.ck │ │ ├── args-many.ck │ │ ├── args-multiple.ck │ │ ├── args-none.ck │ │ ├── args-single.ck │ │ ├── args.c │ │ ├── bad-jump.c │ │ ├── bad-jump.ck │ │ ├── bad-jump2.c │ │ ├── bad-jump2.ck │ │ ├── bad-read.c │ │ ├── bad-read.ck │ │ ├── bad-read2.c │ │ ├── bad-read2.ck │ │ ├── bad-write.c │ │ ├── bad-write.ck │ │ ├── bad-write2.c │ │ ├── bad-write2.ck │ │ ├── boundary.c │ │ ├── boundary.h │ │ ├── child-bad.c │ │ ├── child-close.c │ │ ├── child-rox.c │ │ ├── child-simple.c │ │ ├── close-bad-fd.c │ │ ├── close-bad-fd.ck │ │ ├── close-normal.c │ │ ├── close-normal.ck │ │ ├── close-stdin.c │ │ ├── close-stdin.ck │ │ ├── close-stdout.c │ │ ├── close-stdout.ck │ │ ├── close-twice.c │ │ ├── close-twice.ck │ │ ├── compute-e.c │ │ ├── create-bad-ptr.c │ │ ├── create-bad-ptr.ck │ │ ├── create-bound.c │ │ ├── create-bound.ck │ │ ├── create-empty.c │ │ ├── create-empty.ck │ │ ├── create-exists.c │ │ ├── create-exists.ck │ │ ├── create-long.c │ │ ├── create-long.ck │ │ ├── create-normal.c │ │ ├── create-normal.ck │ │ ├── create-null.c │ │ ├── create-null.ck │ │ ├── do-not-much.c │ │ ├── do-not-much.ck │ │ ├── do-nothing.c │ │ ├── do-nothing.ck │ │ ├── exec-arg.c │ │ ├── exec-arg.ck │ │ ├── exec-bad-ptr.c │ │ ├── exec-bad-ptr.ck │ │ ├── exec-bound-2.c │ │ ├── exec-bound-2.ck │ │ ├── exec-bound-3.c │ │ ├── exec-bound-3.ck │ │ ├── exec-bound.c │ │ ├── exec-bound.ck │ │ ├── exec-missing.c │ │ ├── exec-missing.ck │ │ ├── exec-multiple.c │ │ ├── exec-multiple.ck │ │ ├── exec-once.c │ │ ├── exec-once.ck │ │ ├── exit.c │ │ ├── exit.ck │ │ ├── floating-point.c │ │ ├── floating-point.ck │ │ ├── fp-asm-helper.c │ │ ├── fp-asm.c │ │ ├── fp-asm.ck │ │ ├── fp-init.c │ │ ├── fp-init.ck │ │ ├── fp-kernel-e.c │ │ ├── fp-kernel-e.ck │ │ ├── fp-simul.c │ │ ├── fp-simul.ck │ │ ├── fp-syscall.c │ │ ├── fp-syscall.ck │ │ ├── halt.c │ │ ├── halt.ck │ │ ├── iloveos.c │ │ ├── iloveos.ck │ │ ├── kernel │ │ │ ├── Make.tests │ │ │ ├── Rubric │ │ │ ├── fp-kasm.c │ │ │ ├── fp-kasm.ck │ │ │ ├── fp-kinit.c │ │ │ ├── fp-kinit.ck │ │ │ ├── tests.c │ │ │ └── tests.h │ │ ├── lib │ │ │ ├── .gitignore │ │ │ └── user │ │ │ │ ├── .dummy │ │ │ │ └── .gitignore │ │ ├── multi-child-fd.c │ │ ├── multi-child-fd.ck │ │ ├── multi-recurse.c │ │ ├── multi-recurse.ck │ │ ├── multithreading │ │ │ ├── Make.tests │ │ │ ├── Rubric │ │ │ ├── arr-search.c │ │ │ ├── arr-search.ck │ │ │ ├── create-many.c │ │ │ ├── create-many.ck │ │ │ ├── create-reuse.c │ │ │ ├── create-reuse.ck │ │ │ ├── create-simple.c │ │ │ ├── create-simple.ck │ │ │ ├── exec-thread-1.c │ │ │ ├── exec-thread-1.ck │ │ │ ├── exec-thread-n.c │ │ │ ├── exec-thread-n.ck │ │ │ ├── exit-clean-1.ck │ │ │ ├── exit-clean-2.ck │ │ │ ├── exit-clean.c │ │ │ ├── exit-simple.c │ │ │ ├── exit-simple.ck │ │ │ ├── file-join.c │ │ │ ├── file-join.ck │ │ │ ├── join-exit-1.c │ │ │ ├── join-exit-1.ck │ │ │ ├── join-exit-2.c │ │ │ ├── join-exit-2.ck │ │ │ ├── join-fail.c │ │ │ ├── join-fail.ck │ │ │ ├── join-recur.c │ │ │ ├── join-recur.ck │ │ │ ├── lock-acq-fail.c │ │ │ ├── lock-acq-fail.ck │ │ │ ├── lock-data.c │ │ │ ├── lock-data.ck │ │ │ ├── lock-dbl-acq.c │ │ │ ├── lock-dbl-acq.ck │ │ │ ├── lock-dbl-rel.c │ │ │ ├── lock-dbl-rel.ck │ │ │ ├── lock-init-fail.c │ │ │ ├── lock-init-fail.ck │ │ │ ├── lock-ll.c │ │ │ ├── lock-ll.ck │ │ │ ├── lock-simple.c │ │ │ ├── lock-simple.ck │ │ │ ├── multi-oom-mt.c │ │ │ ├── multi-oom-mt.ck │ │ │ ├── pcb-syn.c │ │ │ ├── pcb-syn.ck │ │ │ ├── reuse-stack.c │ │ │ ├── reuse-stack.ck │ │ │ ├── sema-init-fail.c │ │ │ ├── sema-init-fail.ck │ │ │ ├── sema-simple.c │ │ │ ├── sema-simple.ck │ │ │ ├── sema-up-fail.c │ │ │ ├── sema-up-fail.ck │ │ │ ├── sema-wait-many.c │ │ │ ├── sema-wait-many.ck │ │ │ ├── sema-wait.c │ │ │ ├── sema-wait.ck │ │ │ ├── synch-many.c │ │ │ ├── synch-many.ck │ │ │ ├── wait-fail.c │ │ │ └── wait-fail.ck │ │ ├── no-vm │ │ │ ├── Make.tests │ │ │ ├── Rubric │ │ │ ├── multi-oom.c │ │ │ └── multi-oom.ck │ │ ├── open-bad-ptr.c │ │ ├── open-bad-ptr.ck │ │ ├── open-boundary.c │ │ ├── open-boundary.ck │ │ ├── open-empty.c │ │ ├── open-empty.ck │ │ ├── open-missing.c │ │ ├── open-missing.ck │ │ ├── open-normal.c │ │ ├── open-normal.ck │ │ ├── open-null.c │ │ ├── open-null.ck │ │ ├── open-twice.c │ │ ├── open-twice.ck │ │ ├── practice.c │ │ ├── practice.ck │ │ ├── read-bad-fd.c │ │ ├── read-bad-fd.ck │ │ ├── read-bad-ptr.c │ │ ├── read-bad-ptr.ck │ │ ├── read-boundary.c │ │ ├── read-boundary.ck │ │ ├── read-normal.c │ │ ├── read-normal.ck │ │ ├── read-stdout.c │ │ ├── read-stdout.ck │ │ ├── read-zero.c │ │ ├── read-zero.ck │ │ ├── rox-child.c │ │ ├── rox-child.ck │ │ ├── rox-child.inc │ │ ├── rox-multichild.c │ │ ├── rox-multichild.ck │ │ ├── rox-simple.c │ │ ├── rox-simple.ck │ │ ├── sample.inc │ │ ├── sample.txt │ │ ├── sc-bad-arg.c │ │ ├── sc-bad-arg.ck │ │ ├── sc-bad-sp.c │ │ ├── sc-bad-sp.ck │ │ ├── sc-boundary-2.c │ │ ├── sc-boundary-2.ck │ │ ├── sc-boundary-3.c │ │ ├── sc-boundary-3.ck │ │ ├── sc-boundary.c │ │ ├── sc-boundary.ck │ │ ├── stack-align-0.c │ │ ├── stack-align-0.ck │ │ ├── stack-align-1.ck │ │ ├── stack-align-2.ck │ │ ├── stack-align-3.ck │ │ ├── stack-align-4.ck │ │ ├── stack-align-v.c │ │ ├── stack-align-v.ck │ │ ├── stack-align.c │ │ ├── wait-bad-pid.c │ │ ├── wait-bad-pid.ck │ │ ├── wait-killed.c │ │ ├── wait-killed.ck │ │ ├── wait-simple.c │ │ ├── wait-simple.ck │ │ ├── wait-twice.c │ │ ├── wait-twice.ck │ │ ├── write-bad-fd.c │ │ ├── write-bad-fd.ck │ │ ├── write-bad-ptr.c │ │ ├── write-bad-ptr.ck │ │ ├── write-boundary.c │ │ ├── write-boundary.ck │ │ ├── write-normal.c │ │ ├── write-normal.ck │ │ ├── write-stdin.c │ │ ├── write-stdin.ck │ │ ├── write-zero.c │ │ └── write-zero.ck │ └── vm │ │ ├── Grading │ │ ├── Make.tests │ │ ├── Rubric.functionality │ │ ├── Rubric.robustness │ │ ├── child-inherit.c │ │ ├── child-linear.c │ │ ├── child-mm-wrt.c │ │ ├── child-qsort-mm.c │ │ ├── child-qsort.c │ │ ├── child-sort.c │ │ ├── mmap-bad-fd.c │ │ ├── mmap-bad-fd.ck │ │ ├── mmap-clean.c │ │ ├── mmap-clean.ck │ │ ├── mmap-close.c │ │ ├── mmap-close.ck │ │ ├── mmap-exit.c │ │ ├── mmap-exit.ck │ │ ├── mmap-inherit.c │ │ ├── mmap-inherit.ck │ │ ├── mmap-misalign.c │ │ ├── mmap-misalign.ck │ │ ├── mmap-null.c │ │ ├── mmap-null.ck │ │ ├── mmap-over-code.c │ │ ├── mmap-over-code.ck │ │ ├── mmap-over-data.c │ │ ├── mmap-over-data.ck │ │ ├── mmap-over-stk.c │ │ ├── mmap-over-stk.ck │ │ ├── mmap-overlap.c │ │ ├── mmap-overlap.ck │ │ ├── mmap-read.c │ │ ├── mmap-read.ck │ │ ├── mmap-remove.c │ │ ├── mmap-remove.ck │ │ ├── mmap-shuffle.c │ │ ├── mmap-shuffle.ck │ │ ├── mmap-twice.c │ │ ├── mmap-twice.ck │ │ ├── mmap-unmap.c │ │ ├── mmap-unmap.ck │ │ ├── mmap-write.c │ │ ├── mmap-write.ck │ │ ├── mmap-zero.c │ │ ├── mmap-zero.ck │ │ ├── page-linear.c │ │ ├── page-linear.ck │ │ ├── page-merge-mm.c │ │ ├── page-merge-mm.ck │ │ ├── page-merge-par.c │ │ ├── page-merge-par.ck │ │ ├── page-merge-seq.c │ │ ├── page-merge-seq.ck │ │ ├── page-merge-stk.c │ │ ├── page-merge-stk.ck │ │ ├── page-parallel.c │ │ ├── page-parallel.ck │ │ ├── page-shuffle.c │ │ ├── page-shuffle.ck │ │ ├── parallel-merge.c │ │ ├── parallel-merge.h │ │ ├── process_death.pm │ │ ├── pt-bad-addr.c │ │ ├── pt-bad-addr.ck │ │ ├── pt-bad-read.c │ │ ├── pt-bad-read.ck │ │ ├── pt-big-stk-obj.c │ │ ├── pt-big-stk-obj.ck │ │ ├── pt-grow-bad.c │ │ ├── pt-grow-bad.ck │ │ ├── pt-grow-pusha.c │ │ ├── pt-grow-pusha.ck │ │ ├── pt-grow-stack.c │ │ ├── pt-grow-stack.ck │ │ ├── pt-grow-stk-sc.c │ │ ├── pt-grow-stk-sc.ck │ │ ├── pt-write-code-2.c │ │ ├── pt-write-code.c │ │ ├── pt-write-code.ck │ │ ├── pt-write-code2.ck │ │ ├── qsort.c │ │ ├── qsort.h │ │ ├── sample.inc │ │ └── sample.txt │ ├── threads │ ├── .gitignore │ ├── Make.vars │ ├── Makefile │ ├── fixed-point.h │ ├── flags.h │ ├── init.c │ ├── init.h │ ├── interrupt.c │ ├── interrupt.h │ ├── intr-stubs.S │ ├── intr-stubs.h │ ├── io.h │ ├── kernel.lds.S │ ├── loader.S │ ├── loader.h │ ├── malloc.c │ ├── malloc.h │ ├── palloc.c │ ├── palloc.h │ ├── pte.h │ ├── start.S │ ├── switch.S │ ├── switch.h │ ├── synch.c │ ├── synch.h │ ├── thread.c │ ├── thread.h │ └── vaddr.h │ ├── userprog │ ├── .gitignore │ ├── Make.vars │ ├── Makefile │ ├── exception.c │ ├── exception.h │ ├── gdt.c │ ├── gdt.h │ ├── pagedir.c │ ├── pagedir.h │ ├── process.c │ ├── process.h │ ├── syscall.c │ ├── syscall.h │ ├── tss.c │ └── tss.h │ ├── utils │ ├── .gitignore │ ├── Makefile │ ├── Pintos.pm │ ├── backtrace │ ├── pintos │ ├── pintos-gdb │ ├── pintos-mkdisk │ ├── pintos-set-cmdline │ ├── pintos-test │ ├── setitimer-helper.c │ ├── squish-pty.c │ └── squish-unix.c │ └── vm │ ├── .gitignore │ ├── Make.vars │ └── Makefile └── staff_solution_proj1 ├── .gitignore ├── .pre-commit.sh ├── README.md ├── p1.diff ├── src ├── .clang-format ├── .gitignore ├── LICENSE ├── Make.config ├── Makefile ├── Makefile.build ├── Makefile.kernel ├── Makefile.userprog ├── devices │ ├── block.c │ ├── block.h │ ├── ide.c │ ├── ide.h │ ├── input.c │ ├── input.h │ ├── intq.c │ ├── intq.h │ ├── kbd.c │ ├── kbd.h │ ├── partition.c │ ├── partition.h │ ├── pit.c │ ├── pit.h │ ├── rtc.c │ ├── rtc.h │ ├── serial.c │ ├── serial.h │ ├── shutdown.c │ ├── shutdown.h │ ├── speaker.c │ ├── speaker.h │ ├── timer.c │ ├── timer.h │ ├── vga.c │ └── vga.h ├── examples │ ├── .gitignore │ ├── Makefile │ ├── bubsort.c │ ├── cat.c │ ├── cmp.c │ ├── cp.c │ ├── echo.c │ ├── halt.c │ ├── hex-dump.c │ ├── lib │ │ ├── .gitignore │ │ └── user │ │ │ ├── .dummy │ │ │ └── .gitignore │ ├── lineup.c │ ├── ls.c │ ├── matmult.c │ ├── mcat.c │ ├── mcp.c │ ├── mkdir.c │ ├── pwd.c │ ├── recursor.c │ ├── rm.c │ └── shell.c ├── filesys │ ├── .gitignore │ ├── Make.vars │ ├── Makefile │ ├── directory.c │ ├── directory.h │ ├── file.c │ ├── file.h │ ├── filesys.c │ ├── filesys.h │ ├── free-map.c │ ├── free-map.h │ ├── fsutil.c │ ├── fsutil.h │ ├── inode.c │ ├── inode.h │ └── off_t.h ├── lib │ ├── arithmetic.c │ ├── ctype.h │ ├── debug.c │ ├── debug.h │ ├── float.c │ ├── float.h │ ├── inttypes.h │ ├── kernel │ │ ├── bitmap.c │ │ ├── bitmap.h │ │ ├── console.c │ │ ├── console.h │ │ ├── debug.c │ │ ├── hash.c │ │ ├── hash.h │ │ ├── list.c │ │ ├── list.h │ │ ├── stdio.h │ │ ├── test-lib.c │ │ └── test-lib.h │ ├── limits.h │ ├── packed.h │ ├── random.c │ ├── random.h │ ├── round.h │ ├── stdarg.h │ ├── stdbool.h │ ├── stddef.h │ ├── stdint.h │ ├── stdio.c │ ├── stdio.h │ ├── stdlib.c │ ├── stdlib.h │ ├── string.c │ ├── string.h │ ├── syscall-nr.h │ ├── user │ │ ├── console.c │ │ ├── debug.c │ │ ├── entry.c │ │ ├── pthread.c │ │ ├── pthread.h │ │ ├── stdio.h │ │ ├── syscall.c │ │ ├── syscall.h │ │ └── user.lds │ ├── ustar.c │ └── ustar.h ├── misc │ ├── bochs-2.2.6-big-endian.patch │ ├── bochs-2.2.6-build.sh │ ├── bochs-2.2.6-gdbstub-ENN.patch │ ├── bochs-2.2.6-jitter.patch │ ├── bochs-2.2.6-ms-extensions.patch │ ├── bochs-2.2.6-namespace.patch │ ├── bochs-2.2.6-page-fault-segv.patch │ ├── bochs-2.2.6-paranoia.patch │ ├── bochs-2.2.6-solaris-link.patch │ ├── bochs-2.2.6-solaris-tty.patch │ ├── bochs-2.2.6-triple-fault.patch │ ├── bochs-2.6.2-banner-stderr.patch │ ├── bochs-2.6.2-block-device-check.patch │ ├── bochs-2.6.2-build.sh │ ├── bochs-2.6.2-jitter-plus-segv.patch │ ├── bochs-2.6.2-link-tinfo.patch │ ├── bochs-2.6.2-xrandr-pkgconfig.patch │ ├── gcc-3.3.6-cross-howto │ └── gdb-macros ├── tests │ ├── Algorithm │ │ └── Diff.pm │ ├── Make.tests │ ├── arc4.c │ ├── arc4.h │ ├── arc4.pm │ ├── cksum.c │ ├── cksum.h │ ├── cksum.pm │ ├── filesys │ │ ├── Grading.no-vm │ │ ├── Grading.with-vm │ │ ├── base │ │ │ ├── Make.tests │ │ │ ├── Rubric │ │ │ ├── child-syn-read.c │ │ │ ├── child-syn-wrt.c │ │ │ ├── full.inc │ │ │ ├── lg-create.c │ │ │ ├── lg-create.ck │ │ │ ├── lg-full.c │ │ │ ├── lg-full.ck │ │ │ ├── lg-random.c │ │ │ ├── lg-random.ck │ │ │ ├── lg-seq-block.c │ │ │ ├── lg-seq-block.ck │ │ │ ├── lg-seq-random.c │ │ │ ├── lg-seq-random.ck │ │ │ ├── random.inc │ │ │ ├── seq-block.inc │ │ │ ├── seq-random.inc │ │ │ ├── sm-create.c │ │ │ ├── sm-create.ck │ │ │ ├── sm-full.c │ │ │ ├── sm-full.ck │ │ │ ├── sm-random.c │ │ │ ├── sm-random.ck │ │ │ ├── sm-seq-block.c │ │ │ ├── sm-seq-block.ck │ │ │ ├── sm-seq-random.c │ │ │ ├── sm-seq-random.ck │ │ │ ├── syn-read.c │ │ │ ├── syn-read.ck │ │ │ ├── syn-read.h │ │ │ ├── syn-remove.c │ │ │ ├── syn-remove.ck │ │ │ ├── syn-write.c │ │ │ ├── syn-write.ck │ │ │ └── syn-write.h │ │ ├── create.inc │ │ ├── extended │ │ │ ├── Make.tests │ │ │ ├── Rubric.functionality │ │ │ ├── Rubric.persistence │ │ │ ├── Rubric.robustness │ │ │ ├── child-syn-rw.c │ │ │ ├── dir-empty-name-persistence.ck │ │ │ ├── dir-empty-name.c │ │ │ ├── dir-empty-name.ck │ │ │ ├── dir-mk-tree-persistence.ck │ │ │ ├── dir-mk-tree.c │ │ │ ├── dir-mk-tree.ck │ │ │ ├── dir-mkdir-persistence.ck │ │ │ ├── dir-mkdir.c │ │ │ ├── dir-mkdir.ck │ │ │ ├── dir-open-persistence.ck │ │ │ ├── dir-open.c │ │ │ ├── dir-open.ck │ │ │ ├── dir-over-file-persistence.ck │ │ │ ├── dir-over-file.c │ │ │ ├── dir-over-file.ck │ │ │ ├── dir-rm-cwd-persistence.ck │ │ │ ├── dir-rm-cwd.c │ │ │ ├── dir-rm-cwd.ck │ │ │ ├── dir-rm-parent-persistence.ck │ │ │ ├── dir-rm-parent.c │ │ │ ├── dir-rm-parent.ck │ │ │ ├── dir-rm-root-persistence.ck │ │ │ ├── dir-rm-root.c │ │ │ ├── dir-rm-root.ck │ │ │ ├── dir-rm-tree-persistence.ck │ │ │ ├── dir-rm-tree.c │ │ │ ├── dir-rm-tree.ck │ │ │ ├── dir-rmdir-persistence.ck │ │ │ ├── dir-rmdir.c │ │ │ ├── dir-rmdir.ck │ │ │ ├── dir-under-file-persistence.ck │ │ │ ├── dir-under-file.c │ │ │ ├── dir-under-file.ck │ │ │ ├── dir-vine-persistence.ck │ │ │ ├── dir-vine.c │ │ │ ├── dir-vine.ck │ │ │ ├── grow-create-persistence.ck │ │ │ ├── grow-create.c │ │ │ ├── grow-create.ck │ │ │ ├── grow-dir-lg-persistence.ck │ │ │ ├── grow-dir-lg.c │ │ │ ├── grow-dir-lg.ck │ │ │ ├── grow-dir.inc │ │ │ ├── grow-file-size-persistence.ck │ │ │ ├── grow-file-size.c │ │ │ ├── grow-file-size.ck │ │ │ ├── grow-root-lg-persistence.ck │ │ │ ├── grow-root-lg.c │ │ │ ├── grow-root-lg.ck │ │ │ ├── grow-root-sm-persistence.ck │ │ │ ├── grow-root-sm.c │ │ │ ├── grow-root-sm.ck │ │ │ ├── grow-seq-lg-persistence.ck │ │ │ ├── grow-seq-lg.c │ │ │ ├── grow-seq-lg.ck │ │ │ ├── grow-seq-sm-persistence.ck │ │ │ ├── grow-seq-sm.c │ │ │ ├── grow-seq-sm.ck │ │ │ ├── grow-seq.inc │ │ │ ├── grow-sparse-persistence.ck │ │ │ ├── grow-sparse.c │ │ │ ├── grow-sparse.ck │ │ │ ├── grow-tell-persistence.ck │ │ │ ├── grow-tell.c │ │ │ ├── grow-tell.ck │ │ │ ├── grow-two-files-persistence.ck │ │ │ ├── grow-two-files.c │ │ │ ├── grow-two-files.ck │ │ │ ├── mk-tree.c │ │ │ ├── mk-tree.h │ │ │ ├── syn-rw-persistence.ck │ │ │ ├── syn-rw.c │ │ │ ├── syn-rw.ck │ │ │ ├── syn-rw.h │ │ │ └── tar.c │ │ ├── seq-test.c │ │ └── seq-test.h │ ├── internal │ │ ├── list.c │ │ ├── stdio.c │ │ └── stdlib.c │ ├── lib.c │ ├── lib.h │ ├── lib.pm │ ├── main.c │ ├── main.h │ ├── make-grade │ ├── random.pm │ ├── tests.pm │ ├── threads │ │ ├── Grading │ │ ├── Make.tests │ │ ├── Rubric.alarm │ │ ├── Rubric.mlfqs │ │ ├── Rubric.priority │ │ ├── alarm-multiple.ck │ │ ├── alarm-negative.c │ │ ├── alarm-negative.ck │ │ ├── alarm-priority.c │ │ ├── alarm-priority.ck │ │ ├── alarm-simultaneous.c │ │ ├── alarm-simultaneous.ck │ │ ├── alarm-single.ck │ │ ├── alarm-wait.c │ │ ├── alarm-zero.c │ │ ├── alarm-zero.ck │ │ ├── alarm.pm │ │ ├── matmul_data.h │ │ ├── mlfqs-block.c │ │ ├── mlfqs-block.ck │ │ ├── mlfqs-fair-2.ck │ │ ├── mlfqs-fair-20.ck │ │ ├── mlfqs-fair.c │ │ ├── mlfqs-load-1.c │ │ ├── mlfqs-load-1.ck │ │ ├── mlfqs-load-60.c │ │ ├── mlfqs-load-60.ck │ │ ├── mlfqs-load-avg.c │ │ ├── mlfqs-load-avg.ck │ │ ├── mlfqs-nice-10.ck │ │ ├── mlfqs-nice-2.ck │ │ ├── mlfqs-recent-1.c │ │ ├── mlfqs-recent-1.ck │ │ ├── mlfqs.pm │ │ ├── mt-matmul-16.ck │ │ ├── mt-matmul-2.ck │ │ ├── mt-matmul-4.ck │ │ ├── mt-matmul.c │ │ ├── priority-change.c │ │ ├── priority-change.ck │ │ ├── priority-condvar.c │ │ ├── priority-condvar.ck │ │ ├── priority-donate-chain.c │ │ ├── priority-donate-chain.ck │ │ ├── priority-donate-lower.c │ │ ├── priority-donate-lower.ck │ │ ├── priority-donate-multiple.c │ │ ├── priority-donate-multiple.ck │ │ ├── priority-donate-multiple2.c │ │ ├── priority-donate-multiple2.ck │ │ ├── priority-donate-nest.c │ │ ├── priority-donate-nest.ck │ │ ├── priority-donate-one.c │ │ ├── priority-donate-one.ck │ │ ├── priority-donate-sema.c │ │ ├── priority-donate-sema.ck │ │ ├── priority-fifo.c │ │ ├── priority-fifo.ck │ │ ├── priority-preempt.c │ │ ├── priority-preempt.ck │ │ ├── priority-sema.c │ │ ├── priority-sema.ck │ │ ├── priority-starve-sema.c │ │ ├── priority-starve-sema.ck │ │ ├── priority-starve.c │ │ ├── priority-starve.ck │ │ ├── smfs-hierarchy-16.ck │ │ ├── smfs-hierarchy-256.ck │ │ ├── smfs-hierarchy-32.ck │ │ ├── smfs-hierarchy-64.ck │ │ ├── smfs-hierarchy-8.ck │ │ ├── smfs-hierarchy.c │ │ ├── smfs-prio-change.c │ │ ├── smfs-prio-change.ck │ │ ├── smfs-starve-0.ck │ │ ├── smfs-starve-1.ck │ │ ├── smfs-starve-16.ck │ │ ├── smfs-starve-2.ck │ │ ├── smfs-starve-256.ck │ │ ├── smfs-starve-4.ck │ │ ├── smfs-starve-64.ck │ │ ├── smfs-starve-8.ck │ │ ├── smfs-starve.c │ │ ├── st-matmul.ck │ │ ├── tests.c │ │ └── tests.h │ ├── userprog │ │ ├── Grading │ │ ├── Make.tests │ │ ├── Rubric.functionality │ │ ├── Rubric.robustness │ │ ├── args-dbl-space.ck │ │ ├── args-many.ck │ │ ├── args-multiple.ck │ │ ├── args-none.ck │ │ ├── args-single.ck │ │ ├── args.c │ │ ├── bad-jump.c │ │ ├── bad-jump.ck │ │ ├── bad-jump2.c │ │ ├── bad-jump2.ck │ │ ├── bad-read.c │ │ ├── bad-read.ck │ │ ├── bad-read2.c │ │ ├── bad-read2.ck │ │ ├── bad-write.c │ │ ├── bad-write.ck │ │ ├── bad-write2.c │ │ ├── bad-write2.ck │ │ ├── boundary.c │ │ ├── boundary.h │ │ ├── child-bad.c │ │ ├── child-close.c │ │ ├── child-rox.c │ │ ├── child-simple.c │ │ ├── close-bad-fd.c │ │ ├── close-bad-fd.ck │ │ ├── close-normal.c │ │ ├── close-normal.ck │ │ ├── close-stdin.c │ │ ├── close-stdin.ck │ │ ├── close-stdout.c │ │ ├── close-stdout.ck │ │ ├── close-twice.c │ │ ├── close-twice.ck │ │ ├── compute-e.c │ │ ├── create-bad-ptr.c │ │ ├── create-bad-ptr.ck │ │ ├── create-bound.c │ │ ├── create-bound.ck │ │ ├── create-empty.c │ │ ├── create-empty.ck │ │ ├── create-exists.c │ │ ├── create-exists.ck │ │ ├── create-long.c │ │ ├── create-long.ck │ │ ├── create-normal.c │ │ ├── create-normal.ck │ │ ├── create-null.c │ │ ├── create-null.ck │ │ ├── do-nothing.c │ │ ├── do-nothing.ck │ │ ├── exec-arg.c │ │ ├── exec-arg.ck │ │ ├── exec-bad-ptr.c │ │ ├── exec-bad-ptr.ck │ │ ├── exec-bound-2.c │ │ ├── exec-bound-2.ck │ │ ├── exec-bound-3.c │ │ ├── exec-bound-3.ck │ │ ├── exec-bound.c │ │ ├── exec-bound.ck │ │ ├── exec-missing.c │ │ ├── exec-missing.ck │ │ ├── exec-multiple.c │ │ ├── exec-multiple.ck │ │ ├── exec-once.c │ │ ├── exec-once.ck │ │ ├── exit.c │ │ ├── exit.ck │ │ ├── floating-point.c │ │ ├── floating-point.ck │ │ ├── fp-asm-helper.c │ │ ├── fp-asm.c │ │ ├── fp-asm.ck │ │ ├── fp-init.c │ │ ├── fp-init.ck │ │ ├── fp-kernel-e.c │ │ ├── fp-kernel-e.ck │ │ ├── fp-simul.c │ │ ├── fp-simul.ck │ │ ├── fp-syscall.c │ │ ├── fp-syscall.ck │ │ ├── halt.c │ │ ├── halt.ck │ │ ├── iloveos.c │ │ ├── iloveos.ck │ │ ├── kernel │ │ │ ├── Make.tests │ │ │ ├── Rubric │ │ │ ├── fp-kasm.c │ │ │ ├── fp-kasm.ck │ │ │ ├── fp-kinit.c │ │ │ ├── fp-kinit.ck │ │ │ ├── tests.c │ │ │ └── tests.h │ │ ├── lib │ │ │ ├── .gitignore │ │ │ └── user │ │ │ │ ├── .dummy │ │ │ │ └── .gitignore │ │ ├── multi-child-fd.c │ │ ├── multi-child-fd.ck │ │ ├── multi-recurse.c │ │ ├── multi-recurse.ck │ │ ├── multithreading │ │ │ ├── Make.tests │ │ │ ├── Rubric │ │ │ ├── arr-search.c │ │ │ ├── arr-search.ck │ │ │ ├── create-many.c │ │ │ ├── create-many.ck │ │ │ ├── create-reuse.c │ │ │ ├── create-reuse.ck │ │ │ ├── create-simple.c │ │ │ ├── create-simple.ck │ │ │ ├── exec-thread-1.c │ │ │ ├── exec-thread-1.ck │ │ │ ├── exec-thread-n.c │ │ │ ├── exec-thread-n.ck │ │ │ ├── exit-clean-1.ck │ │ │ ├── exit-clean-2.ck │ │ │ ├── exit-clean.c │ │ │ ├── exit-simple.c │ │ │ ├── exit-simple.ck │ │ │ ├── file-join.c │ │ │ ├── file-join.ck │ │ │ ├── join-exit-1.c │ │ │ ├── join-exit-1.ck │ │ │ ├── join-exit-2.c │ │ │ ├── join-exit-2.ck │ │ │ ├── join-fail.c │ │ │ ├── join-fail.ck │ │ │ ├── join-recur.c │ │ │ ├── join-recur.ck │ │ │ ├── lock-acq-fail.c │ │ │ ├── lock-acq-fail.ck │ │ │ ├── lock-data.c │ │ │ ├── lock-data.ck │ │ │ ├── lock-dbl-acq.c │ │ │ ├── lock-dbl-acq.ck │ │ │ ├── lock-dbl-rel.c │ │ │ ├── lock-dbl-rel.ck │ │ │ ├── lock-init-fail.c │ │ │ ├── lock-init-fail.ck │ │ │ ├── lock-ll.c │ │ │ ├── lock-ll.ck │ │ │ ├── lock-simple.c │ │ │ ├── lock-simple.ck │ │ │ ├── multi-oom-mt.c │ │ │ ├── multi-oom-mt.ck │ │ │ ├── pcb-syn.c │ │ │ ├── pcb-syn.ck │ │ │ ├── reuse-stack.c │ │ │ ├── reuse-stack.ck │ │ │ ├── sema-init-fail.c │ │ │ ├── sema-init-fail.ck │ │ │ ├── sema-simple.c │ │ │ ├── sema-simple.ck │ │ │ ├── sema-up-fail.c │ │ │ ├── sema-up-fail.ck │ │ │ ├── sema-wait-many.c │ │ │ ├── sema-wait-many.ck │ │ │ ├── sema-wait.c │ │ │ ├── sema-wait.ck │ │ │ ├── synch-many.c │ │ │ ├── synch-many.ck │ │ │ ├── wait-fail.c │ │ │ └── wait-fail.ck │ │ ├── no-vm │ │ │ ├── Make.tests │ │ │ ├── Rubric │ │ │ ├── multi-oom.c │ │ │ └── multi-oom.ck │ │ ├── open-bad-ptr.c │ │ ├── open-bad-ptr.ck │ │ ├── open-boundary.c │ │ ├── open-boundary.ck │ │ ├── open-empty.c │ │ ├── open-empty.ck │ │ ├── open-missing.c │ │ ├── open-missing.ck │ │ ├── open-normal.c │ │ ├── open-normal.ck │ │ ├── open-null.c │ │ ├── open-null.ck │ │ ├── open-twice.c │ │ ├── open-twice.ck │ │ ├── practice.c │ │ ├── practice.ck │ │ ├── read-bad-fd.c │ │ ├── read-bad-fd.ck │ │ ├── read-bad-ptr.c │ │ ├── read-bad-ptr.ck │ │ ├── read-boundary.c │ │ ├── read-boundary.ck │ │ ├── read-normal.c │ │ ├── read-normal.ck │ │ ├── read-stdout.c │ │ ├── read-stdout.ck │ │ ├── read-zero.c │ │ ├── read-zero.ck │ │ ├── rox-child.c │ │ ├── rox-child.ck │ │ ├── rox-child.inc │ │ ├── rox-multichild.c │ │ ├── rox-multichild.ck │ │ ├── rox-simple.c │ │ ├── rox-simple.ck │ │ ├── sample.inc │ │ ├── sample.txt │ │ ├── sc-bad-arg.c │ │ ├── sc-bad-arg.ck │ │ ├── sc-bad-sp.c │ │ ├── sc-bad-sp.ck │ │ ├── sc-boundary-2.c │ │ ├── sc-boundary-2.ck │ │ ├── sc-boundary-3.c │ │ ├── sc-boundary-3.ck │ │ ├── sc-boundary.c │ │ ├── sc-boundary.ck │ │ ├── stack-align-0.c │ │ ├── stack-align-0.ck │ │ ├── stack-align-1.ck │ │ ├── stack-align-2.ck │ │ ├── stack-align-3.ck │ │ ├── stack-align-4.ck │ │ ├── stack-align.c │ │ ├── wait-bad-pid.c │ │ ├── wait-bad-pid.ck │ │ ├── wait-killed.c │ │ ├── wait-killed.ck │ │ ├── wait-simple.c │ │ ├── wait-simple.ck │ │ ├── wait-twice.c │ │ ├── wait-twice.ck │ │ ├── write-bad-fd.c │ │ ├── write-bad-fd.ck │ │ ├── write-bad-ptr.c │ │ ├── write-bad-ptr.ck │ │ ├── write-boundary.c │ │ ├── write-boundary.ck │ │ ├── write-normal.c │ │ ├── write-normal.ck │ │ ├── write-stdin.c │ │ ├── write-stdin.ck │ │ ├── write-zero.c │ │ └── write-zero.ck │ └── vm │ │ ├── Grading │ │ ├── Make.tests │ │ ├── Rubric.functionality │ │ ├── Rubric.robustness │ │ ├── child-inherit.c │ │ ├── child-linear.c │ │ ├── child-mm-wrt.c │ │ ├── child-qsort-mm.c │ │ ├── child-qsort.c │ │ ├── child-sort.c │ │ ├── mmap-bad-fd.c │ │ ├── mmap-bad-fd.ck │ │ ├── mmap-clean.c │ │ ├── mmap-clean.ck │ │ ├── mmap-close.c │ │ ├── mmap-close.ck │ │ ├── mmap-exit.c │ │ ├── mmap-exit.ck │ │ ├── mmap-inherit.c │ │ ├── mmap-inherit.ck │ │ ├── mmap-misalign.c │ │ ├── mmap-misalign.ck │ │ ├── mmap-null.c │ │ ├── mmap-null.ck │ │ ├── mmap-over-code.c │ │ ├── mmap-over-code.ck │ │ ├── mmap-over-data.c │ │ ├── mmap-over-data.ck │ │ ├── mmap-over-stk.c │ │ ├── mmap-over-stk.ck │ │ ├── mmap-overlap.c │ │ ├── mmap-overlap.ck │ │ ├── mmap-read.c │ │ ├── mmap-read.ck │ │ ├── mmap-remove.c │ │ ├── mmap-remove.ck │ │ ├── mmap-shuffle.c │ │ ├── mmap-shuffle.ck │ │ ├── mmap-twice.c │ │ ├── mmap-twice.ck │ │ ├── mmap-unmap.c │ │ ├── mmap-unmap.ck │ │ ├── mmap-write.c │ │ ├── mmap-write.ck │ │ ├── mmap-zero.c │ │ ├── mmap-zero.ck │ │ ├── page-linear.c │ │ ├── page-linear.ck │ │ ├── page-merge-mm.c │ │ ├── page-merge-mm.ck │ │ ├── page-merge-par.c │ │ ├── page-merge-par.ck │ │ ├── page-merge-seq.c │ │ ├── page-merge-seq.ck │ │ ├── page-merge-stk.c │ │ ├── page-merge-stk.ck │ │ ├── page-parallel.c │ │ ├── page-parallel.ck │ │ ├── page-shuffle.c │ │ ├── page-shuffle.ck │ │ ├── parallel-merge.c │ │ ├── parallel-merge.h │ │ ├── process_death.pm │ │ ├── pt-bad-addr.c │ │ ├── pt-bad-addr.ck │ │ ├── pt-bad-read.c │ │ ├── pt-bad-read.ck │ │ ├── pt-big-stk-obj.c │ │ ├── pt-big-stk-obj.ck │ │ ├── pt-grow-bad.c │ │ ├── pt-grow-bad.ck │ │ ├── pt-grow-pusha.c │ │ ├── pt-grow-pusha.ck │ │ ├── pt-grow-stack.c │ │ ├── pt-grow-stack.ck │ │ ├── pt-grow-stk-sc.c │ │ ├── pt-grow-stk-sc.ck │ │ ├── pt-write-code-2.c │ │ ├── pt-write-code.c │ │ ├── pt-write-code.ck │ │ ├── pt-write-code2.ck │ │ ├── qsort.c │ │ ├── qsort.h │ │ ├── sample.inc │ │ └── sample.txt ├── threads │ ├── .gitignore │ ├── Make.vars │ ├── Makefile │ ├── fixed-point.h │ ├── flags.h │ ├── init.c │ ├── init.h │ ├── interrupt.c │ ├── interrupt.h │ ├── intr-stubs.S │ ├── intr-stubs.h │ ├── io.h │ ├── kernel.lds.S │ ├── loader.S │ ├── loader.h │ ├── malloc.c │ ├── malloc.h │ ├── palloc.c │ ├── palloc.h │ ├── pte.h │ ├── start.S │ ├── switch.S │ ├── switch.h │ ├── synch.c │ ├── synch.h │ ├── thread.c │ ├── thread.h │ └── vaddr.h ├── userprog │ ├── .gitignore │ ├── Make.vars │ ├── Makefile │ ├── exception.c │ ├── exception.h │ ├── gdt.c │ ├── gdt.h │ ├── pagedir.c │ ├── pagedir.h │ ├── process.c │ ├── process.h │ ├── syscall.c │ ├── syscall.h │ ├── tss.c │ └── tss.h ├── utils │ ├── .gitignore │ ├── Makefile │ ├── Pintos.pm │ ├── backtrace │ ├── pintos │ ├── pintos-gdb │ ├── pintos-mkdisk │ ├── pintos-set-cmdline │ ├── pintos-test │ ├── setitimer-helper.c │ ├── squish-pty.c │ └── squish-unix.c └── vm │ ├── .gitignore │ ├── Make.vars │ └── Makefile └── test.txt /Berkeley-CS162-Docker/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.9" 2 | services: 3 | cs162: 4 | image: cs162/workspace:latest 5 | tty: true 6 | volumes: 7 | - ./.workspace:/home/vagrant 8 | ports: 9 | - "16222:22" 10 | -------------------------------------------------------------------------------- /Project Design & Report Documentation/PDF/Project_File_System_Design.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/Project Design & Report Documentation/PDF/Project_File_System_Design.pdf -------------------------------------------------------------------------------- /Project Design & Report Documentation/PDF/Project_File_System_Report.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/Project Design & Report Documentation/PDF/Project_File_System_Report.pdf -------------------------------------------------------------------------------- /Project Design & Report Documentation/PDF/Project_Threads_Design.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/Project Design & Report Documentation/PDF/Project_Threads_Design.pdf -------------------------------------------------------------------------------- /Project Design & Report Documentation/PDF/Project_Threads_Report.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/Project Design & Report Documentation/PDF/Project_Threads_Report.pdf -------------------------------------------------------------------------------- /Project Design & Report Documentation/PDF/Project_User_Programs_Design.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/Project Design & Report Documentation/PDF/Project_User_Programs_Design.pdf -------------------------------------------------------------------------------- /Project Design & Report Documentation/PDF/Project_User_Programs_Report.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/Project Design & Report Documentation/PDF/Project_User_Programs_Report.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # COMPSCI-162 2 | ![GitHub repo size](https://img.shields.io/github/repo-size/reallinshengxiang/COMPSCI-162) 3 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/README.md: -------------------------------------------------------------------------------- 1 | CS 162 Group Repository 2 | ======================= 3 | 4 | This repository contains code for CS 162 group projects. 5 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/.gitignore: -------------------------------------------------------------------------------- 1 | cscope.files 2 | cscope.out 3 | TAGS 4 | tags 5 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/devices/ide.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_IDE_H 2 | #define DEVICES_IDE_H 3 | 4 | void ide_init(void); 5 | 6 | #endif /* devices/ide.h */ 7 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/devices/kbd.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_KBD_H 2 | #define DEVICES_KBD_H 3 | 4 | #include 5 | 6 | void kbd_init(void); 7 | void kbd_print_stats(void); 8 | 9 | #endif /* devices/kbd.h */ 10 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/devices/partition.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_PARTITION_H 2 | #define DEVICES_PARTITION_H 3 | 4 | struct block; 5 | 6 | void partition_scan(struct block*); 7 | 8 | #endif /* devices/partition.h */ 9 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/devices/pit.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_PIT_H 2 | #define DEVICES_PIT_H 3 | 4 | #include 5 | 6 | void pit_configure_channel(int channel, int mode, int frequency); 7 | 8 | #endif /* devices/pit.h */ 9 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/devices/rtc.h: -------------------------------------------------------------------------------- 1 | #ifndef RTC_H 2 | #define RTC_H 3 | 4 | typedef unsigned long time_t; 5 | 6 | time_t rtc_get_time(void); 7 | 8 | #endif 9 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/devices/speaker.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_SPEAKER_H 2 | #define DEVICES_SPEAKER_H 3 | 4 | void speaker_on(int frequency); 5 | void speaker_off(void); 6 | void speaker_beep(void); 7 | 8 | #endif /* devices/speaker.h */ 9 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/devices/vga.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_VGA_H 2 | #define DEVICES_VGA_H 3 | 4 | void vga_putc(int); 5 | 6 | #endif /* devices/vga.h */ 7 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/examples/.gitignore: -------------------------------------------------------------------------------- 1 | cat 2 | cmp 3 | cp 4 | echo 5 | halt 6 | hex-dump 7 | ls 8 | mcat 9 | mcp 10 | mkdir 11 | pwd 12 | rm 13 | shell 14 | bubsort 15 | insult 16 | lineup 17 | matmult 18 | recursor 19 | *.d 20 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/examples/lib/.gitignore: -------------------------------------------------------------------------------- 1 | *.d 2 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/examples/lib/user/.dummy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/group43-proj-file-systems-completed/src/examples/lib/user/.dummy -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/examples/lib/user/.gitignore: -------------------------------------------------------------------------------- 1 | *.d 2 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/filesys/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | bochsrc.txt 3 | bochsout.txt 4 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/filesys/Makefile: -------------------------------------------------------------------------------- 1 | include ../Makefile.kernel 2 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/lib/kernel/stdio.h: -------------------------------------------------------------------------------- 1 | #ifndef __LIB_KERNEL_STDIO_H 2 | #define __LIB_KERNEL_STDIO_H 3 | 4 | void putbuf(const char*, size_t); 5 | 6 | #endif /* lib/kernel/stdio.h */ 7 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/lib/user/entry.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int main(int, char*[]); 4 | void _start(int argc, char* argv[]); 5 | 6 | void _start(int argc, char* argv[]) { exit(main(argc, argv)); } 7 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/cksum.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTS_CKSUM_H 2 | #define TESTS_CKSUM_H 3 | 4 | #include 5 | 6 | unsigned long cksum(const void*, size_t); 7 | 8 | #endif /* tests/cksum.h */ 9 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/filesys/base/lg-create.c: -------------------------------------------------------------------------------- 1 | /* Tests that create properly zeros out the contents of a fairly 2 | large file. */ 3 | 4 | #define TEST_SIZE 75678 5 | #include "tests/filesys/create.inc" 6 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/filesys/base/sm-create.c: -------------------------------------------------------------------------------- 1 | /* Tests that create properly zeros out the contents of a fairly 2 | small file. */ 3 | 4 | #define TEST_SIZE 5678 5 | #include "tests/filesys/create.inc" 6 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/filesys/extended/Rubric.robustness: -------------------------------------------------------------------------------- 1 | Robustness of file system: 2 | 1 dir-empty-name 3 | 1 dir-open 4 | 1 dir-over-file 5 | 1 dir-under-file 6 | 7 | 3 dir-rm-cwd 8 | 2 dir-rm-parent 9 | 1 dir-rm-root 10 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/filesys/extended/dir-empty-name-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/filesys/extended/dir-mkdir-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({'a' => {'b' => ["\0" x 512]}}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/filesys/extended/dir-open-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"xyzzy" => {}}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/filesys/extended/dir-over-file-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"abc" => {}}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/filesys/extended/dir-rm-parent-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"a" => {"b" => {}}}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/filesys/extended/dir-rm-root-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"a" => ["\0" x 243]}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/filesys/extended/dir-rm-tree-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/filesys/extended/dir-rmdir-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/filesys/extended/dir-under-file-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"abc" => ['']}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/filesys/extended/grow-create-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"blargle" => ['']}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/filesys/extended/grow-create.c: -------------------------------------------------------------------------------- 1 | /* Create a file of size 0. */ 2 | 3 | #define TEST_SIZE 0 4 | #include "tests/filesys/create.inc" 5 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/filesys/extended/grow-dir-lg.c: -------------------------------------------------------------------------------- 1 | /* Creates a directory, 2 | then creates 50 files in that directory. */ 3 | 4 | #define FILE_CNT 50 5 | #define DIRECTORY "/x" 6 | #include "tests/filesys/extended/grow-dir.inc" 7 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/filesys/extended/grow-file-size-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::random; 6 | check_archive ({"testfile" => [random_bytes (2134)]}); 7 | pass; 8 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/filesys/extended/grow-root-lg.c: -------------------------------------------------------------------------------- 1 | /* Creates 50 files in the root directory. */ 2 | 3 | #define FILE_CNT 50 4 | #include "tests/filesys/extended/grow-dir.inc" 5 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/filesys/extended/grow-root-sm.c: -------------------------------------------------------------------------------- 1 | /* Creates 20 files in the root directory. */ 2 | 3 | #define FILE_CNT 20 4 | #include "tests/filesys/extended/grow-dir.inc" 5 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/filesys/extended/grow-seq-lg-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::random; 6 | check_archive ({"testme" => [random_bytes (72943)]}); 7 | pass; 8 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/filesys/extended/grow-seq-lg.c: -------------------------------------------------------------------------------- 1 | /* Grows a file from 0 bytes to 72,943 bytes, 1,234 bytes at a 2 | time. */ 3 | 4 | #define TEST_SIZE 72943 5 | #include "tests/filesys/extended/grow-seq.inc" 6 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/filesys/extended/grow-seq-sm-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::random; 6 | check_archive ({"testme" => [random_bytes (5678)]}); 7 | pass; 8 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/filesys/extended/grow-seq-sm.c: -------------------------------------------------------------------------------- 1 | /* Grows a file from 0 bytes to 5,678 bytes, 1,234 bytes at a 2 | time. */ 3 | 4 | #define TEST_SIZE 5678 5 | #include "tests/filesys/extended/grow-seq.inc" 6 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/filesys/extended/grow-sparse-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"testfile" => ["\0" x 76543]}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/filesys/extended/grow-tell-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::random; 6 | check_archive ({"foobar" => [random_bytes (2134)]}); 7 | pass; 8 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/filesys/extended/test-coalesce.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']); 6 | (bobby) end 7 | EOF 8 | pass; 9 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/filesys/extended/testhitrate.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']); 6 | (bobby) end 7 | EOF 8 | pass; 9 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/main.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTS_MAIN_H 2 | #define TESTS_MAIN_H 3 | 4 | void test_main(void); 5 | 6 | #endif /* tests/main.h */ 7 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/threads/Rubric.alarm: -------------------------------------------------------------------------------- 1 | Functionality and robustness of alarm clock: 2 | 4 alarm-single 3 | 4 alarm-multiple 4 | 4 alarm-simultaneous 5 | 4 alarm-priority 6 | 7 | 1 alarm-zero 8 | 1 alarm-negative 9 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/threads/alarm-multiple.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use tests::tests; 3 | use tests::threads::alarm; 4 | check_alarm (7); 5 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/threads/alarm-single.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use tests::tests; 3 | use tests::threads::alarm; 4 | check_alarm (1); 5 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/threads/mlfqs-fair-2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::threads::mlfqs; 6 | 7 | check_mlfqs_fair ([0, 0], 50); 8 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/threads/mlfqs-fair-20.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::threads::mlfqs; 6 | 7 | check_mlfqs_fair ([(0) x 20], 20); 8 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/threads/mlfqs-nice-10.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::threads::mlfqs; 6 | 7 | check_mlfqs_fair ([0...9], 25); 8 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/threads/mlfqs-nice-2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::threads::mlfqs; 6 | 7 | check_mlfqs_fair ([0, 5], 50); 8 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/userprog/create-bad-ptr.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (create-bad-ptr) begin 7 | create-bad-ptr: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/userprog/create-normal.c: -------------------------------------------------------------------------------- 1 | /* Creates an ordinary empty file. */ 2 | 3 | #include "tests/lib.h" 4 | #include "tests/main.h" 5 | 6 | void test_main(void) { CHECK(create("quux.dat", 0), "create quux.dat"); } 7 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/userprog/create-null.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (create-null) begin 7 | create-null: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/userprog/do-nothing.c: -------------------------------------------------------------------------------- 1 | /* Does absolutely nothing. */ 2 | 3 | #include "tests/lib.h" 4 | 5 | int main(int argc UNUSED, char* argv[] UNUSED) { return 162; } 6 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/userprog/do-nothing.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | do-nothing: exit(162) 7 | EOF 8 | pass; 9 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/userprog/exec-arg.c: -------------------------------------------------------------------------------- 1 | /* Tests argument passing to child processes. */ 2 | 3 | #include 4 | #include "tests/main.h" 5 | 6 | void test_main(void) { wait(exec("child-args childarg")); } 7 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/userprog/exec-bound-2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (exec-bound-2) begin 7 | exec-bound-2: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/userprog/exec-bound-3.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (exec-bound-3) begin 7 | exec-bound-3: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/userprog/exit.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (exit) begin 7 | exit: exit(57) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/userprog/halt.c: -------------------------------------------------------------------------------- 1 | /* Tests the halt system call. */ 2 | 3 | #include "tests/lib.h" 4 | #include "tests/main.h" 5 | 6 | void test_main(void) { 7 | halt(); 8 | fail("should have halted"); 9 | } 10 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/userprog/kernel/Rubric: -------------------------------------------------------------------------------- 1 | Functionality of features that require the kernel: 2 | 3 | - Test floating point correctness 4 | 5 fp-kasm 5 | 6 | - Test floating point robustness 7 | 2 fp-kinit 8 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/userprog/lib/.gitignore: -------------------------------------------------------------------------------- 1 | *.d 2 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/userprog/lib/user/.dummy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/group43-proj-file-systems-completed/src/tests/userprog/lib/user/.dummy -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/userprog/lib/user/.gitignore: -------------------------------------------------------------------------------- 1 | *.d 2 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/userprog/no-vm/Rubric: -------------------------------------------------------------------------------- 1 | Functionality of features that VM might break: 2 | 3 | 1 multi-oom 4 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/userprog/rox-child.c: -------------------------------------------------------------------------------- 1 | /* Ensure that the executable of a running process cannot be 2 | modified, even by a child process. */ 3 | 4 | #define CHILD_CNT "1" 5 | #include "tests/userprog/rox-child.inc" 6 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/userprog/sc-bad-arg.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sc-bad-arg) begin 7 | sc-bad-arg: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/userprog/sc-bad-sp.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sc-bad-sp) begin 7 | sc-bad-sp: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/userprog/sc-boundary-2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sc-boundary-2) begin 7 | sc-boundary-2: exit(67) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/userprog/sc-boundary-3.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sc-boundary-3) begin 7 | sc-boundary-3: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/userprog/sc-boundary.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sc-boundary) begin 7 | sc-boundary: exit(42) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/userprog/stack-align-0.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | stack-align-0: exit(12) 7 | EOF 8 | pass; 9 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/vm/mmap-unmap.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::vm::process_death; 6 | 7 | check_process_death ('mmap-unmap'); 8 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/vm/page-merge-mm.c: -------------------------------------------------------------------------------- 1 | #include "tests/main.h" 2 | #include "tests/vm/parallel-merge.h" 3 | 4 | void test_main(void) { parallel_merge("child-qsort-mm", 80); } 5 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/vm/page-merge-par.c: -------------------------------------------------------------------------------- 1 | #include "tests/main.h" 2 | #include "tests/vm/parallel-merge.h" 3 | 4 | void test_main(void) { parallel_merge("child-sort", 123); } 5 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/vm/page-merge-stk.c: -------------------------------------------------------------------------------- 1 | #include "tests/main.h" 2 | #include "tests/vm/parallel-merge.h" 3 | 4 | void test_main(void) { parallel_merge("child-qsort", 72); } 5 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/vm/parallel-merge.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTS_VM_PARALLEL_MERGE 2 | #define TESTS_VM_PARALLEL_MERGE 1 3 | 4 | void parallel_merge(const char* child_name, int exit_status); 5 | 6 | #endif /* tests/vm/parallel-merge.h */ 7 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/vm/pt-bad-addr.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::vm::process_death; 6 | 7 | check_process_death ('pt-bad-addr'); 8 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/vm/pt-write-code.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::vm::process_death; 6 | 7 | check_process_death ('pt-write-code'); 8 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/tests/vm/qsort.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTS_VM_QSORT_H 2 | #define TESTS_VM_QSORT_H 1 3 | 4 | #include 5 | 6 | void qsort_bytes(unsigned char* buf, size_t size); 7 | 8 | #endif /* tests/vm/qsort.h */ 9 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/threads/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | bochsrc.txt 3 | bochsout.txt 4 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/threads/Makefile: -------------------------------------------------------------------------------- 1 | include ../Makefile.kernel 2 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/userprog/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | bochsrc.txt 3 | bochsout.txt 4 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/userprog/Makefile: -------------------------------------------------------------------------------- 1 | include ../Makefile.kernel 2 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/utils/.gitignore: -------------------------------------------------------------------------------- 1 | setitimer-helper 2 | squish-pty 3 | squish-unix 4 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/vm/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | bochsrc.txt 3 | bochsout.txt 4 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/src/vm/Makefile: -------------------------------------------------------------------------------- 1 | include ../Makefile.kernel 2 | -------------------------------------------------------------------------------- /group43-proj-file-systems-completed/test.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/group43-proj-file-systems-completed/test.txt -------------------------------------------------------------------------------- /group43-proj-threads-completed/README.md: -------------------------------------------------------------------------------- 1 | CS 162 Group Repository 2 | ======================= 3 | 4 | This repository contains code for CS 162 group projects. 5 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/.gitignore: -------------------------------------------------------------------------------- 1 | cscope.files 2 | cscope.out 3 | TAGS 4 | tags 5 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/devices/ide.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_IDE_H 2 | #define DEVICES_IDE_H 3 | 4 | void ide_init(void); 5 | 6 | #endif /* devices/ide.h */ 7 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/devices/kbd.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_KBD_H 2 | #define DEVICES_KBD_H 3 | 4 | #include 5 | 6 | void kbd_init(void); 7 | void kbd_print_stats(void); 8 | 9 | #endif /* devices/kbd.h */ 10 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/devices/partition.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_PARTITION_H 2 | #define DEVICES_PARTITION_H 3 | 4 | struct block; 5 | 6 | void partition_scan(struct block*); 7 | 8 | #endif /* devices/partition.h */ 9 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/devices/pit.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_PIT_H 2 | #define DEVICES_PIT_H 3 | 4 | #include 5 | 6 | void pit_configure_channel(int channel, int mode, int frequency); 7 | 8 | #endif /* devices/pit.h */ 9 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/devices/rtc.h: -------------------------------------------------------------------------------- 1 | #ifndef RTC_H 2 | #define RTC_H 3 | 4 | typedef unsigned long time_t; 5 | 6 | time_t rtc_get_time(void); 7 | 8 | #endif 9 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/devices/speaker.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_SPEAKER_H 2 | #define DEVICES_SPEAKER_H 3 | 4 | void speaker_on(int frequency); 5 | void speaker_off(void); 6 | void speaker_beep(void); 7 | 8 | #endif /* devices/speaker.h */ 9 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/devices/vga.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_VGA_H 2 | #define DEVICES_VGA_H 3 | 4 | void vga_putc(int); 5 | 6 | #endif /* devices/vga.h */ 7 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/examples/.gitignore: -------------------------------------------------------------------------------- 1 | cat 2 | cmp 3 | cp 4 | echo 5 | halt 6 | hex-dump 7 | ls 8 | mcat 9 | mcp 10 | mkdir 11 | pwd 12 | rm 13 | shell 14 | bubsort 15 | insult 16 | lineup 17 | matmult 18 | recursor 19 | *.d 20 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/examples/lib/.gitignore: -------------------------------------------------------------------------------- 1 | *.d 2 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/examples/lib/user/.dummy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/group43-proj-threads-completed/src/examples/lib/user/.dummy -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/examples/lib/user/.gitignore: -------------------------------------------------------------------------------- 1 | *.d 2 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/filesys/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | bochsrc.txt 3 | bochsout.txt 4 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/filesys/Makefile: -------------------------------------------------------------------------------- 1 | include ../Makefile.kernel 2 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/lib/kernel/stdio.h: -------------------------------------------------------------------------------- 1 | #ifndef __LIB_KERNEL_STDIO_H 2 | #define __LIB_KERNEL_STDIO_H 3 | 4 | void putbuf(const char*, size_t); 5 | 6 | #endif /* lib/kernel/stdio.h */ 7 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/lib/stdbool.h: -------------------------------------------------------------------------------- 1 | #ifndef __LIB_STDBOOL_H 2 | #define __LIB_STDBOOL_H 3 | 4 | #define bool _Bool 5 | #define true 1 6 | #define false 0 7 | #define __bool_true_false_are_defined 1 8 | 9 | #endif /* lib/stdbool.h */ 10 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/lib/user/entry.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int main(int, char*[]); 4 | void _start(int argc, char* argv[]); 5 | 6 | void _start(int argc, char* argv[]) { exit(main(argc, argv)); } 7 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/cksum.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTS_CKSUM_H 2 | #define TESTS_CKSUM_H 3 | 4 | #include 5 | 6 | unsigned long cksum(const void*, size_t); 7 | 8 | #endif /* tests/cksum.h */ 9 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/filesys/base/lg-create.c: -------------------------------------------------------------------------------- 1 | /* Tests that create properly zeros out the contents of a fairly 2 | large file. */ 3 | 4 | #define TEST_SIZE 75678 5 | #include "tests/filesys/create.inc" 6 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/filesys/base/sm-create.c: -------------------------------------------------------------------------------- 1 | /* Tests that create properly zeros out the contents of a fairly 2 | small file. */ 3 | 4 | #define TEST_SIZE 5678 5 | #include "tests/filesys/create.inc" 6 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/filesys/extended/Rubric.robustness: -------------------------------------------------------------------------------- 1 | Robustness of file system: 2 | 1 dir-empty-name 3 | 1 dir-open 4 | 1 dir-over-file 5 | 1 dir-under-file 6 | 7 | 3 dir-rm-cwd 8 | 2 dir-rm-parent 9 | 1 dir-rm-root 10 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/filesys/extended/dir-empty-name-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/filesys/extended/dir-mkdir-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({'a' => {'b' => ["\0" x 512]}}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/filesys/extended/dir-open-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"xyzzy" => {}}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/filesys/extended/dir-over-file-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"abc" => {}}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/filesys/extended/dir-rm-parent-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"a" => {"b" => {}}}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/filesys/extended/dir-rm-root-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"a" => ["\0" x 243]}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/filesys/extended/dir-rm-tree-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/filesys/extended/dir-rmdir-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/filesys/extended/dir-under-file-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"abc" => ['']}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/filesys/extended/grow-create-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"blargle" => ['']}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/filesys/extended/grow-create.c: -------------------------------------------------------------------------------- 1 | /* Create a file of size 0. */ 2 | 3 | #define TEST_SIZE 0 4 | #include "tests/filesys/create.inc" 5 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/filesys/extended/grow-dir-lg.c: -------------------------------------------------------------------------------- 1 | /* Creates a directory, 2 | then creates 50 files in that directory. */ 3 | 4 | #define FILE_CNT 50 5 | #define DIRECTORY "/x" 6 | #include "tests/filesys/extended/grow-dir.inc" 7 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/filesys/extended/grow-file-size-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::random; 6 | check_archive ({"testfile" => [random_bytes (2134)]}); 7 | pass; 8 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/filesys/extended/grow-root-lg.c: -------------------------------------------------------------------------------- 1 | /* Creates 50 files in the root directory. */ 2 | 3 | #define FILE_CNT 50 4 | #include "tests/filesys/extended/grow-dir.inc" 5 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/filesys/extended/grow-root-sm.c: -------------------------------------------------------------------------------- 1 | /* Creates 20 files in the root directory. */ 2 | 3 | #define FILE_CNT 20 4 | #include "tests/filesys/extended/grow-dir.inc" 5 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/filesys/extended/grow-seq-lg-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::random; 6 | check_archive ({"testme" => [random_bytes (72943)]}); 7 | pass; 8 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/filesys/extended/grow-seq-lg.c: -------------------------------------------------------------------------------- 1 | /* Grows a file from 0 bytes to 72,943 bytes, 1,234 bytes at a 2 | time. */ 3 | 4 | #define TEST_SIZE 72943 5 | #include "tests/filesys/extended/grow-seq.inc" 6 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/filesys/extended/grow-seq-sm-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::random; 6 | check_archive ({"testme" => [random_bytes (5678)]}); 7 | pass; 8 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/filesys/extended/grow-seq-sm.c: -------------------------------------------------------------------------------- 1 | /* Grows a file from 0 bytes to 5,678 bytes, 1,234 bytes at a 2 | time. */ 3 | 4 | #define TEST_SIZE 5678 5 | #include "tests/filesys/extended/grow-seq.inc" 6 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/filesys/extended/grow-sparse-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"testfile" => ["\0" x 76543]}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/filesys/extended/grow-tell-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::random; 6 | check_archive ({"foobar" => [random_bytes (2134)]}); 7 | pass; 8 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/main.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTS_MAIN_H 2 | #define TESTS_MAIN_H 3 | 4 | void test_main(void); 5 | 6 | #endif /* tests/main.h */ 7 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/threads/Grading: -------------------------------------------------------------------------------- 1 | # Percentage of the testing point total designated for each set of 2 | # tests. 3 | 4 | 20.0% tests/threads/Rubric.alarm 5 | 40.0% tests/threads/Rubric.priority 6 | 40.0% tests/threads/Rubric.mlfqs 7 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/threads/Rubric.alarm: -------------------------------------------------------------------------------- 1 | Functionality and robustness of alarm clock: 2 | 4 alarm-single 3 | 4 alarm-multiple 4 | 4 alarm-simultaneous 5 | 4 alarm-priority 6 | 7 | 1 alarm-zero 8 | 1 alarm-negative 9 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/threads/alarm-multiple.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use tests::tests; 3 | use tests::threads::alarm; 4 | check_alarm (7); 5 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/threads/alarm-single.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use tests::tests; 3 | use tests::threads::alarm; 4 | check_alarm (1); 5 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/threads/mlfqs-fair-2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::threads::mlfqs; 6 | 7 | check_mlfqs_fair ([0, 0], 50); 8 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/threads/mlfqs-fair-20.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::threads::mlfqs; 6 | 7 | check_mlfqs_fair ([(0) x 20], 20); 8 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/threads/mlfqs-nice-10.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::threads::mlfqs; 6 | 7 | check_mlfqs_fair ([0...9], 25); 8 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/threads/mlfqs-nice-2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::threads::mlfqs; 6 | 7 | check_mlfqs_fair ([0, 5], 50); 8 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/userprog/create-bad-ptr.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (create-bad-ptr) begin 7 | create-bad-ptr: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/userprog/create-normal.c: -------------------------------------------------------------------------------- 1 | /* Creates an ordinary empty file. */ 2 | 3 | #include "tests/lib.h" 4 | #include "tests/main.h" 5 | 6 | void test_main(void) { CHECK(create("quux.dat", 0), "create quux.dat"); } 7 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/userprog/create-null.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (create-null) begin 7 | create-null: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/userprog/do-nothing.c: -------------------------------------------------------------------------------- 1 | /* Does absolutely nothing. */ 2 | 3 | #include "tests/lib.h" 4 | 5 | int main(int argc UNUSED, char* argv[] UNUSED) { return 162; } 6 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/userprog/do-nothing.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | do-nothing: exit(162) 7 | EOF 8 | pass; 9 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/userprog/exec-arg.c: -------------------------------------------------------------------------------- 1 | /* Tests argument passing to child processes. */ 2 | 3 | #include 4 | #include "tests/main.h" 5 | 6 | void test_main(void) { wait(exec("child-args childarg")); } 7 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/userprog/exec-bound-2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (exec-bound-2) begin 7 | exec-bound-2: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/userprog/exec-bound-3.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (exec-bound-3) begin 7 | exec-bound-3: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/userprog/exit.c: -------------------------------------------------------------------------------- 1 | /* Tests the exit system call. */ 2 | 3 | #include "tests/lib.h" 4 | #include "tests/main.h" 5 | 6 | void test_main(void) { 7 | exit(57); 8 | fail("should have called exit(57)"); 9 | } 10 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/userprog/exit.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (exit) begin 7 | exit: exit(57) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/userprog/fp-init.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (fp-init) begin 7 | (fp-init) Success! 8 | fp-init: exit(162) 9 | EOF 10 | pass; 11 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/userprog/halt.c: -------------------------------------------------------------------------------- 1 | /* Tests the halt system call. */ 2 | 3 | #include "tests/lib.h" 4 | #include "tests/main.h" 5 | 6 | void test_main(void) { 7 | halt(); 8 | fail("should have halted"); 9 | } 10 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/userprog/kernel/Rubric: -------------------------------------------------------------------------------- 1 | Functionality of features that require the kernel: 2 | 3 | - Test floating point correctness 4 | 5 fp-kasm 5 | 6 | - Test floating point robustness 7 | 2 fp-kinit 8 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/userprog/kernel/fp-kasm.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (fp-kasm) begin 7 | (fp-kasm) PASS 8 | (fp-kasm) end 9 | EOF 10 | pass; 11 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/userprog/lib/.gitignore: -------------------------------------------------------------------------------- 1 | *.d 2 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/userprog/lib/user/.dummy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/group43-proj-threads-completed/src/tests/userprog/lib/user/.dummy -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/userprog/lib/user/.gitignore: -------------------------------------------------------------------------------- 1 | *.d 2 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/userprog/no-vm/Rubric: -------------------------------------------------------------------------------- 1 | Functionality of features that VM might break: 2 | 3 | 1 multi-oom 4 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/userprog/rox-child.c: -------------------------------------------------------------------------------- 1 | /* Ensure that the executable of a running process cannot be 2 | modified, even by a child process. */ 3 | 4 | #define CHILD_CNT "1" 5 | #include "tests/userprog/rox-child.inc" 6 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/userprog/sc-bad-arg.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sc-bad-arg) begin 7 | sc-bad-arg: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/userprog/sc-bad-sp.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sc-bad-sp) begin 7 | sc-bad-sp: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/userprog/sc-boundary-2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sc-boundary-2) begin 7 | sc-boundary-2: exit(67) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/userprog/sc-boundary-3.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sc-boundary-3) begin 7 | sc-boundary-3: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/userprog/sc-boundary.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sc-boundary) begin 7 | sc-boundary: exit(42) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/userprog/stack-align-0.c: -------------------------------------------------------------------------------- 1 | /* Does absolutely nothing. */ 2 | 3 | #include "tests/lib.h" 4 | 5 | int main(int argc UNUSED, char* argv[] UNUSED) { 6 | register unsigned int esp asm("esp"); 7 | return esp % 16; 8 | } 9 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/userprog/stack-align-0.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | stack-align-0: exit(12) 7 | EOF 8 | pass; 9 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/vm/mmap-unmap.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::vm::process_death; 6 | 7 | check_process_death ('mmap-unmap'); 8 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/vm/page-merge-mm.c: -------------------------------------------------------------------------------- 1 | #include "tests/main.h" 2 | #include "tests/vm/parallel-merge.h" 3 | 4 | void test_main(void) { parallel_merge("child-qsort-mm", 80); } 5 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/vm/page-merge-par.c: -------------------------------------------------------------------------------- 1 | #include "tests/main.h" 2 | #include "tests/vm/parallel-merge.h" 3 | 4 | void test_main(void) { parallel_merge("child-sort", 123); } 5 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/vm/page-merge-stk.c: -------------------------------------------------------------------------------- 1 | #include "tests/main.h" 2 | #include "tests/vm/parallel-merge.h" 3 | 4 | void test_main(void) { parallel_merge("child-qsort", 72); } 5 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/vm/parallel-merge.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTS_VM_PARALLEL_MERGE 2 | #define TESTS_VM_PARALLEL_MERGE 1 3 | 4 | void parallel_merge(const char* child_name, int exit_status); 5 | 6 | #endif /* tests/vm/parallel-merge.h */ 7 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/vm/pt-bad-addr.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::vm::process_death; 6 | 7 | check_process_death ('pt-bad-addr'); 8 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/vm/pt-write-code.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::vm::process_death; 6 | 7 | check_process_death ('pt-write-code'); 8 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/tests/vm/qsort.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTS_VM_QSORT_H 2 | #define TESTS_VM_QSORT_H 1 3 | 4 | #include 5 | 6 | void qsort_bytes(unsigned char* buf, size_t size); 7 | 8 | #endif /* tests/vm/qsort.h */ 9 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/threads/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | bochsrc.txt 3 | bochsout.txt 4 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/threads/Makefile: -------------------------------------------------------------------------------- 1 | include ../Makefile.kernel 2 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/userprog/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | bochsrc.txt 3 | bochsout.txt 4 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/userprog/Makefile: -------------------------------------------------------------------------------- 1 | include ../Makefile.kernel 2 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/utils/.gitignore: -------------------------------------------------------------------------------- 1 | setitimer-helper 2 | squish-pty 3 | squish-unix 4 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/vm/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | bochsrc.txt 3 | bochsout.txt 4 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/src/vm/Makefile: -------------------------------------------------------------------------------- 1 | include ../Makefile.kernel 2 | -------------------------------------------------------------------------------- /group43-proj-threads-completed/test.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/group43-proj-threads-completed/test.txt -------------------------------------------------------------------------------- /group43-proj-userprog-completed/README.md: -------------------------------------------------------------------------------- 1 | CS 162 Group Repository 2 | ======================= 3 | 4 | This repository contains code for CS 162 group projects. 5 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/.gitignore: -------------------------------------------------------------------------------- 1 | cscope.files 2 | cscope.out 3 | TAGS 4 | tags 5 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/devices/ide.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_IDE_H 2 | #define DEVICES_IDE_H 3 | 4 | void ide_init(void); 5 | 6 | #endif /* devices/ide.h */ 7 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/devices/kbd.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_KBD_H 2 | #define DEVICES_KBD_H 3 | 4 | #include 5 | 6 | void kbd_init(void); 7 | void kbd_print_stats(void); 8 | 9 | #endif /* devices/kbd.h */ 10 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/devices/partition.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_PARTITION_H 2 | #define DEVICES_PARTITION_H 3 | 4 | struct block; 5 | 6 | void partition_scan(struct block*); 7 | 8 | #endif /* devices/partition.h */ 9 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/devices/pit.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_PIT_H 2 | #define DEVICES_PIT_H 3 | 4 | #include 5 | 6 | void pit_configure_channel(int channel, int mode, int frequency); 7 | 8 | #endif /* devices/pit.h */ 9 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/devices/rtc.h: -------------------------------------------------------------------------------- 1 | #ifndef RTC_H 2 | #define RTC_H 3 | 4 | typedef unsigned long time_t; 5 | 6 | time_t rtc_get_time(void); 7 | 8 | #endif 9 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/devices/speaker.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_SPEAKER_H 2 | #define DEVICES_SPEAKER_H 3 | 4 | void speaker_on(int frequency); 5 | void speaker_off(void); 6 | void speaker_beep(void); 7 | 8 | #endif /* devices/speaker.h */ 9 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/devices/vga.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_VGA_H 2 | #define DEVICES_VGA_H 3 | 4 | void vga_putc(int); 5 | 6 | #endif /* devices/vga.h */ 7 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/examples/.gitignore: -------------------------------------------------------------------------------- 1 | cat 2 | cmp 3 | cp 4 | echo 5 | halt 6 | hex-dump 7 | ls 8 | mcat 9 | mcp 10 | mkdir 11 | pwd 12 | rm 13 | shell 14 | bubsort 15 | insult 16 | lineup 17 | matmult 18 | recursor 19 | *.d 20 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/examples/lib/.gitignore: -------------------------------------------------------------------------------- 1 | *.d 2 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/examples/lib/user/.dummy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/group43-proj-userprog-completed/src/examples/lib/user/.dummy -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/examples/lib/user/.gitignore: -------------------------------------------------------------------------------- 1 | *.d 2 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/filesys/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | bochsrc.txt 3 | bochsout.txt 4 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/filesys/Makefile: -------------------------------------------------------------------------------- 1 | include ../Makefile.kernel 2 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/lib/kernel/stdio.h: -------------------------------------------------------------------------------- 1 | #ifndef __LIB_KERNEL_STDIO_H 2 | #define __LIB_KERNEL_STDIO_H 3 | 4 | void putbuf(const char*, size_t); 5 | 6 | #endif /* lib/kernel/stdio.h */ 7 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/lib/stdbool.h: -------------------------------------------------------------------------------- 1 | #ifndef __LIB_STDBOOL_H 2 | #define __LIB_STDBOOL_H 3 | 4 | #define bool _Bool 5 | #define true 1 6 | #define false 0 7 | #define __bool_true_false_are_defined 1 8 | 9 | #endif /* lib/stdbool.h */ 10 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/lib/user/entry.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int main(int, char*[]); 4 | void _start(int argc, char* argv[]); 5 | 6 | void _start(int argc, char* argv[]) { exit(main(argc, argv)); } 7 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/cksum.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTS_CKSUM_H 2 | #define TESTS_CKSUM_H 3 | 4 | #include 5 | 6 | unsigned long cksum(const void*, size_t); 7 | 8 | #endif /* tests/cksum.h */ 9 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/filesys/base/lg-create.c: -------------------------------------------------------------------------------- 1 | /* Tests that create properly zeros out the contents of a fairly 2 | large file. */ 3 | 4 | #define TEST_SIZE 75678 5 | #include "tests/filesys/create.inc" 6 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/filesys/base/sm-create.c: -------------------------------------------------------------------------------- 1 | /* Tests that create properly zeros out the contents of a fairly 2 | small file. */ 3 | 4 | #define TEST_SIZE 5678 5 | #include "tests/filesys/create.inc" 6 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/filesys/extended/Rubric.robustness: -------------------------------------------------------------------------------- 1 | Robustness of file system: 2 | 1 dir-empty-name 3 | 1 dir-open 4 | 1 dir-over-file 5 | 1 dir-under-file 6 | 7 | 3 dir-rm-cwd 8 | 2 dir-rm-parent 9 | 1 dir-rm-root 10 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/filesys/extended/dir-empty-name-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/filesys/extended/dir-mkdir-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({'a' => {'b' => ["\0" x 512]}}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/filesys/extended/dir-open-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"xyzzy" => {}}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/filesys/extended/dir-over-file-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"abc" => {}}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/filesys/extended/dir-rm-parent-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"a" => {"b" => {}}}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/filesys/extended/dir-rm-root-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"a" => ["\0" x 243]}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/filesys/extended/dir-rm-tree-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/filesys/extended/dir-rmdir-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/filesys/extended/dir-under-file-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"abc" => ['']}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/filesys/extended/grow-create-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"blargle" => ['']}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/filesys/extended/grow-create.c: -------------------------------------------------------------------------------- 1 | /* Create a file of size 0. */ 2 | 3 | #define TEST_SIZE 0 4 | #include "tests/filesys/create.inc" 5 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/filesys/extended/grow-dir-lg.c: -------------------------------------------------------------------------------- 1 | /* Creates a directory, 2 | then creates 50 files in that directory. */ 3 | 4 | #define FILE_CNT 50 5 | #define DIRECTORY "/x" 6 | #include "tests/filesys/extended/grow-dir.inc" 7 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/filesys/extended/grow-file-size-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::random; 6 | check_archive ({"testfile" => [random_bytes (2134)]}); 7 | pass; 8 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/filesys/extended/grow-root-lg.c: -------------------------------------------------------------------------------- 1 | /* Creates 50 files in the root directory. */ 2 | 3 | #define FILE_CNT 50 4 | #include "tests/filesys/extended/grow-dir.inc" 5 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/filesys/extended/grow-root-sm.c: -------------------------------------------------------------------------------- 1 | /* Creates 20 files in the root directory. */ 2 | 3 | #define FILE_CNT 20 4 | #include "tests/filesys/extended/grow-dir.inc" 5 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/filesys/extended/grow-seq-lg-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::random; 6 | check_archive ({"testme" => [random_bytes (72943)]}); 7 | pass; 8 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/filesys/extended/grow-seq-lg.c: -------------------------------------------------------------------------------- 1 | /* Grows a file from 0 bytes to 72,943 bytes, 1,234 bytes at a 2 | time. */ 3 | 4 | #define TEST_SIZE 72943 5 | #include "tests/filesys/extended/grow-seq.inc" 6 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/filesys/extended/grow-seq-sm-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::random; 6 | check_archive ({"testme" => [random_bytes (5678)]}); 7 | pass; 8 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/filesys/extended/grow-seq-sm.c: -------------------------------------------------------------------------------- 1 | /* Grows a file from 0 bytes to 5,678 bytes, 1,234 bytes at a 2 | time. */ 3 | 4 | #define TEST_SIZE 5678 5 | #include "tests/filesys/extended/grow-seq.inc" 6 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/filesys/extended/grow-sparse-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"testfile" => ["\0" x 76543]}); 6 | pass; 7 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/filesys/extended/grow-tell-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::random; 6 | check_archive ({"foobar" => [random_bytes (2134)]}); 7 | pass; 8 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/main.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTS_MAIN_H 2 | #define TESTS_MAIN_H 3 | 4 | void test_main(void); 5 | 6 | #endif /* tests/main.h */ 7 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/threads/Grading: -------------------------------------------------------------------------------- 1 | # Percentage of the testing point total designated for each set of 2 | # tests. 3 | 4 | 20.0% tests/threads/Rubric.alarm 5 | 40.0% tests/threads/Rubric.priority 6 | 40.0% tests/threads/Rubric.mlfqs 7 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/threads/Rubric.alarm: -------------------------------------------------------------------------------- 1 | Functionality and robustness of alarm clock: 2 | 4 alarm-single 3 | 4 alarm-multiple 4 | 4 alarm-simultaneous 5 | 4 alarm-priority 6 | 7 | 1 alarm-zero 8 | 1 alarm-negative 9 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/threads/alarm-multiple.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use tests::tests; 3 | use tests::threads::alarm; 4 | check_alarm (7); 5 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/threads/alarm-single.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use tests::tests; 3 | use tests::threads::alarm; 4 | check_alarm (1); 5 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/threads/mlfqs-fair-2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::threads::mlfqs; 6 | 7 | check_mlfqs_fair ([0, 0], 50); 8 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/threads/mlfqs-fair-20.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::threads::mlfqs; 6 | 7 | check_mlfqs_fair ([(0) x 20], 20); 8 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/threads/mlfqs-nice-10.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::threads::mlfqs; 6 | 7 | check_mlfqs_fair ([0...9], 25); 8 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/threads/mlfqs-nice-2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::threads::mlfqs; 6 | 7 | check_mlfqs_fair ([0, 5], 50); 8 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/userprog/create-bad-ptr.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (create-bad-ptr) begin 7 | create-bad-ptr: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/userprog/create-normal.c: -------------------------------------------------------------------------------- 1 | /* Creates an ordinary empty file. */ 2 | 3 | #include "tests/lib.h" 4 | #include "tests/main.h" 5 | 6 | void test_main(void) { CHECK(create("quux.dat", 0), "create quux.dat"); } 7 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/userprog/create-null.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (create-null) begin 7 | create-null: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/userprog/do-nothing.c: -------------------------------------------------------------------------------- 1 | /* Does absolutely nothing. */ 2 | 3 | #include "tests/lib.h" 4 | 5 | int main(int argc UNUSED, char* argv[] UNUSED) { return 162; } 6 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/userprog/do-nothing.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | do-nothing: exit(162) 7 | EOF 8 | pass; 9 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/userprog/exec-arg.c: -------------------------------------------------------------------------------- 1 | /* Tests argument passing to child processes. */ 2 | 3 | #include 4 | #include "tests/main.h" 5 | 6 | void test_main(void) { wait(exec("child-args childarg")); } 7 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/userprog/exec-bound-2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (exec-bound-2) begin 7 | exec-bound-2: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/userprog/exec-bound-3.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (exec-bound-3) begin 7 | exec-bound-3: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/userprog/exit.c: -------------------------------------------------------------------------------- 1 | /* Tests the exit system call. */ 2 | 3 | #include "tests/lib.h" 4 | #include "tests/main.h" 5 | 6 | void test_main(void) { 7 | exit(57); 8 | fail("should have called exit(57)"); 9 | } 10 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/userprog/exit.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (exit) begin 7 | exit: exit(57) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/userprog/fp-init.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (fp-init) begin 7 | (fp-init) Success! 8 | fp-init: exit(162) 9 | EOF 10 | pass; 11 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/userprog/halt.c: -------------------------------------------------------------------------------- 1 | /* Tests the halt system call. */ 2 | 3 | #include "tests/lib.h" 4 | #include "tests/main.h" 5 | 6 | void test_main(void) { 7 | halt(); 8 | fail("should have halted"); 9 | } 10 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/userprog/kernel/Rubric: -------------------------------------------------------------------------------- 1 | Functionality of features that require the kernel: 2 | 3 | - Test floating point correctness 4 | 5 fp-kasm 5 | 6 | - Test floating point robustness 7 | 2 fp-kinit 8 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/userprog/kernel/fp-kasm.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (fp-kasm) begin 7 | (fp-kasm) PASS 8 | (fp-kasm) end 9 | EOF 10 | pass; 11 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/userprog/lib/.gitignore: -------------------------------------------------------------------------------- 1 | *.d 2 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/userprog/lib/user/.dummy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/group43-proj-userprog-completed/src/tests/userprog/lib/user/.dummy -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/userprog/lib/user/.gitignore: -------------------------------------------------------------------------------- 1 | *.d 2 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/userprog/no-vm/Rubric: -------------------------------------------------------------------------------- 1 | Functionality of features that VM might break: 2 | 3 | 1 multi-oom 4 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/userprog/rox-child.c: -------------------------------------------------------------------------------- 1 | /* Ensure that the executable of a running process cannot be 2 | modified, even by a child process. */ 3 | 4 | #define CHILD_CNT "1" 5 | #include "tests/userprog/rox-child.inc" 6 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/userprog/sc-bad-arg.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sc-bad-arg) begin 7 | sc-bad-arg: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/userprog/sc-bad-sp.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sc-bad-sp) begin 7 | sc-bad-sp: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/userprog/sc-boundary-2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sc-boundary-2) begin 7 | sc-boundary-2: exit(67) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/userprog/sc-boundary-3.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sc-boundary-3) begin 7 | sc-boundary-3: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/userprog/sc-boundary.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sc-boundary) begin 7 | sc-boundary: exit(42) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/userprog/stack-align-0.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | stack-align-0: exit(12) 7 | EOF 8 | pass; 9 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/vm/mmap-unmap.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::vm::process_death; 6 | 7 | check_process_death ('mmap-unmap'); 8 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/vm/page-merge-mm.c: -------------------------------------------------------------------------------- 1 | #include "tests/main.h" 2 | #include "tests/vm/parallel-merge.h" 3 | 4 | void test_main(void) { parallel_merge("child-qsort-mm", 80); } 5 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/vm/page-merge-par.c: -------------------------------------------------------------------------------- 1 | #include "tests/main.h" 2 | #include "tests/vm/parallel-merge.h" 3 | 4 | void test_main(void) { parallel_merge("child-sort", 123); } 5 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/vm/page-merge-stk.c: -------------------------------------------------------------------------------- 1 | #include "tests/main.h" 2 | #include "tests/vm/parallel-merge.h" 3 | 4 | void test_main(void) { parallel_merge("child-qsort", 72); } 5 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/vm/parallel-merge.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTS_VM_PARALLEL_MERGE 2 | #define TESTS_VM_PARALLEL_MERGE 1 3 | 4 | void parallel_merge(const char* child_name, int exit_status); 5 | 6 | #endif /* tests/vm/parallel-merge.h */ 7 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/vm/pt-bad-addr.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::vm::process_death; 6 | 7 | check_process_death ('pt-bad-addr'); 8 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/vm/pt-write-code.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::vm::process_death; 6 | 7 | check_process_death ('pt-write-code'); 8 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/tests/vm/qsort.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTS_VM_QSORT_H 2 | #define TESTS_VM_QSORT_H 1 3 | 4 | #include 5 | 6 | void qsort_bytes(unsigned char* buf, size_t size); 7 | 8 | #endif /* tests/vm/qsort.h */ 9 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/threads/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | bochsrc.txt 3 | bochsout.txt 4 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/threads/Makefile: -------------------------------------------------------------------------------- 1 | include ../Makefile.kernel 2 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/userprog/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | bochsrc.txt 3 | bochsout.txt 4 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/userprog/Makefile: -------------------------------------------------------------------------------- 1 | include ../Makefile.kernel 2 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/userprog/syscall.h: -------------------------------------------------------------------------------- 1 | #ifndef USERPROG_SYSCALL_H 2 | #define USERPROG_SYSCALL_H 3 | 4 | void syscall_init(void); 5 | extern struct lock filesys_lock; 6 | 7 | #endif /* userprog/syscall.h */ 8 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/utils/.gitignore: -------------------------------------------------------------------------------- 1 | setitimer-helper 2 | squish-pty 3 | squish-unix 4 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/vm/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | bochsrc.txt 3 | bochsout.txt 4 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/src/vm/Makefile: -------------------------------------------------------------------------------- 1 | include ../Makefile.kernel 2 | -------------------------------------------------------------------------------- /group43-proj-userprog-completed/test.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/group43-proj-userprog-completed/test.txt -------------------------------------------------------------------------------- /hw-http-rs/Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: all build run 2 | 3 | all: build 4 | 5 | 6 | build: 7 | cargo build --release 8 | 9 | install: 10 | cargo install --path . 11 | 12 | run: build 13 | ./target/debug/http_server_rs --files www/ 14 | -------------------------------------------------------------------------------- /hw-http-rs/rust-toolchain.toml: -------------------------------------------------------------------------------- 1 | [toolchain] 2 | channel = "1.66.1" 3 | -------------------------------------------------------------------------------- /hw-http-rs/src/main.rs: -------------------------------------------------------------------------------- 1 | mod args; 2 | mod http; 3 | mod server; 4 | mod stats; 5 | 6 | #[cfg(test)] 7 | mod tests; 8 | 9 | use anyhow::Result; 10 | 11 | fn main() -> Result<()> { 12 | server::main() 13 | } 14 | -------------------------------------------------------------------------------- /hw-http-rs/src/tests/mod.rs: -------------------------------------------------------------------------------- 1 | mod args; 2 | mod http; 3 | mod stats; 4 | -------------------------------------------------------------------------------- /hw-http-rs/www/my_documents/WEB_SCALE.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-http-rs/www/my_documents/WEB_SCALE.jpg -------------------------------------------------------------------------------- /hw-http-rs/www/my_documents/contributors.txt: -------------------------------------------------------------------------------- 1 | ============================ 2 | ======= Contributors ======= 3 | ============================ 4 | 1. David Culler 5 | 2. Arka Bhattacharya 6 | 3. William Liu 7 | 4. Alan Ton 8 | 5. You 9 | -------------------------------------------------------------------------------- /hw-http-rs/www/my_documents/http-meme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-http-rs/www/my_documents/http-meme.png -------------------------------------------------------------------------------- /hw-intro/limits: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-intro/limits -------------------------------------------------------------------------------- /hw-intro/map: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-intro/map -------------------------------------------------------------------------------- /hw-intro/map.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-intro/map.o -------------------------------------------------------------------------------- /hw-intro/printer.c: -------------------------------------------------------------------------------- 1 | #ifdef CS162 2 | printf("CS 162 is the best!\n"); 3 | #else 4 | printf("CS 362 is the best!\n"); 5 | #endif 6 | -------------------------------------------------------------------------------- /hw-intro/recurse.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int recur(int i) { 4 | printf("i is %i. Address of i is %p\n", i, &i); 5 | 6 | if (i > 0) { 7 | return recur(i - 1); 8 | } 9 | 10 | return 0; 11 | } 12 | -------------------------------------------------------------------------------- /hw-intro/recurse.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-intro/recurse.o -------------------------------------------------------------------------------- /hw-intro/ssh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-intro/ssh -------------------------------------------------------------------------------- /hw-intro/words/count: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-intro/words/count -------------------------------------------------------------------------------- /hw-intro/words/wc_sort.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-intro/words/wc_sort.o -------------------------------------------------------------------------------- /hw-intro/words/wc_sort_arm.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-intro/words/wc_sort_arm.o -------------------------------------------------------------------------------- /hw-intro/words/word.txt: -------------------------------------------------------------------------------- 1 | wergr 2 | dw 3 | FGHTH 4 | S 5 | aaa -------------------------------------------------------------------------------- /hw-intro/words/words: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-intro/words/words -------------------------------------------------------------------------------- /hw-intro/words/words.txt: -------------------------------------------------------------------------------- 1 | def 2 | c 3 | abc 4 | aA 5 | aa -------------------------------------------------------------------------------- /hw-list/debug.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-list/debug.o -------------------------------------------------------------------------------- /hw-list/list.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-list/list.o -------------------------------------------------------------------------------- /hw-list/lwords: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-list/lwords -------------------------------------------------------------------------------- /hw-list/lwords.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-list/lwords.o -------------------------------------------------------------------------------- /hw-list/lwords_arm.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-list/lwords_arm.o -------------------------------------------------------------------------------- /hw-list/pthread: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-list/pthread -------------------------------------------------------------------------------- /hw-list/pthread.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-list/pthread.o -------------------------------------------------------------------------------- /hw-list/pwords: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-list/pwords -------------------------------------------------------------------------------- /hw-list/pwords.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-list/pwords.o -------------------------------------------------------------------------------- /hw-list/word_count.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-list/word_count.o -------------------------------------------------------------------------------- /hw-list/word_count_arm.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-list/word_count_arm.o -------------------------------------------------------------------------------- /hw-list/word_count_l.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-list/word_count_l.o -------------------------------------------------------------------------------- /hw-list/word_count_p.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-list/word_count_p.o -------------------------------------------------------------------------------- /hw-list/word_helpers.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-list/word_helpers.o -------------------------------------------------------------------------------- /hw-list/word_helpers_arm.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-list/word_helpers_arm.o -------------------------------------------------------------------------------- /hw-list/words: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-list/words -------------------------------------------------------------------------------- /hw-list/words.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-list/words.o -------------------------------------------------------------------------------- /hw-list/words.txt: -------------------------------------------------------------------------------- 1 | abc def AaA 2 | bbb zzz aaa 3 | a -------------------------------------------------------------------------------- /hw-list/words_arm.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-list/words_arm.o -------------------------------------------------------------------------------- /hw-map-reduce-rs/.gitignore: -------------------------------------------------------------------------------- 1 | target/ 2 | src/proto/ 3 | mr-* 4 | -------------------------------------------------------------------------------- /hw-map-reduce-rs/data/alphabet2/letters1.txt: -------------------------------------------------------------------------------- 1 | a b c d e f g h i j k l m n o p q r s t u v w x y z 2 | -------------------------------------------------------------------------------- /hw-map-reduce-rs/data/alphabet2/letters2.txt: -------------------------------------------------------------------------------- 1 | a 2 | b 3 | c 4 | d 5 | e 6 | f 7 | g 8 | h 9 | i 10 | j 11 | k 12 | l 13 | m 14 | n 15 | o 16 | p 17 | q 18 | r 19 | s 20 | t 21 | u 22 | v 23 | w 24 | x 25 | y 26 | z 27 | 28 | -------------------------------------------------------------------------------- /hw-map-reduce-rs/rust-toolchain.toml: -------------------------------------------------------------------------------- 1 | [toolchain] 2 | channel = "1.66.1" 3 | -------------------------------------------------------------------------------- /hw-map-reduce-rs/src/autograder/mod.rs: -------------------------------------------------------------------------------- 1 | // Empty file. -------------------------------------------------------------------------------- /hw-map-reduce-rs/src/task/mod.rs: -------------------------------------------------------------------------------- 1 | //! If you wish to encapsulate logic related to 2 | //! task and job management, you can do so here. 3 | //! 4 | // You are not required to modify this file. 5 | -------------------------------------------------------------------------------- /hw-map-reduce-rs/src/worker/args.rs: -------------------------------------------------------------------------------- 1 | use clap::Parser; 2 | 3 | /// A MapReduce worker 4 | #[derive(Parser, Debug)] 5 | #[clap(author, version, about, long_about = None)] 6 | pub struct Args { 7 | // The worker does not take any arguments 8 | } 9 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/devices/ide.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_IDE_H 2 | #define DEVICES_IDE_H 3 | 4 | void ide_init(void); 5 | 6 | #endif /* devices/ide.h */ 7 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/devices/kbd.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_KBD_H 2 | #define DEVICES_KBD_H 3 | 4 | #include 5 | 6 | void kbd_init(void); 7 | void kbd_print_stats(void); 8 | 9 | #endif /* devices/kbd.h */ 10 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/devices/partition.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_PARTITION_H 2 | #define DEVICES_PARTITION_H 3 | 4 | struct block; 5 | 6 | void partition_scan(struct block*); 7 | 8 | #endif /* devices/partition.h */ 9 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/devices/pit.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_PIT_H 2 | #define DEVICES_PIT_H 3 | 4 | #include 5 | 6 | void pit_configure_channel(int channel, int mode, int frequency); 7 | 8 | #endif /* devices/pit.h */ 9 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/devices/rtc.h: -------------------------------------------------------------------------------- 1 | #ifndef RTC_H 2 | #define RTC_H 3 | 4 | typedef unsigned long time_t; 5 | 6 | time_t rtc_get_time(void); 7 | 8 | #endif 9 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/devices/speaker.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_SPEAKER_H 2 | #define DEVICES_SPEAKER_H 3 | 4 | void speaker_on(int frequency); 5 | void speaker_off(void); 6 | void speaker_beep(void); 7 | 8 | #endif /* devices/speaker.h */ 9 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/devices/vga.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_VGA_H 2 | #define DEVICES_VGA_H 3 | 4 | void vga_putc(int); 5 | 6 | #endif /* devices/vga.h */ 7 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/filesys/Makefile: -------------------------------------------------------------------------------- 1 | include ../Makefile.kernel 2 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/memory/Makefile: -------------------------------------------------------------------------------- 1 | include ../Makefile.kernel 2 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/cksum.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTS_CKSUM_H 2 | #define TESTS_CKSUM_H 3 | 4 | #include 5 | 6 | unsigned long cksum(const void*, size_t); 7 | 8 | #endif /* tests/cksum.h */ 9 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/filesys/base/lg-create.c: -------------------------------------------------------------------------------- 1 | /* Tests that create properly zeros out the contents of a fairly 2 | large file. */ 3 | 4 | #define TEST_SIZE 75678 5 | #include "tests/filesys/create.inc" 6 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/filesys/base/sm-create.c: -------------------------------------------------------------------------------- 1 | /* Tests that create properly zeros out the contents of a fairly 2 | small file. */ 3 | 4 | #define TEST_SIZE 5678 5 | #include "tests/filesys/create.inc" 6 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/filesys/extended/Rubric.robustness: -------------------------------------------------------------------------------- 1 | Robustness of file system: 2 | 1 dir-empty-name 3 | 1 dir-open 4 | 1 dir-over-file 5 | 1 dir-under-file 6 | 7 | 3 dir-rm-cwd 8 | 2 dir-rm-parent 9 | 1 dir-rm-root 10 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/filesys/extended/dir-empty-name-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({}); 6 | pass; 7 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/filesys/extended/dir-mkdir-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({'a' => {'b' => ["\0" x 512]}}); 6 | pass; 7 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/filesys/extended/dir-open-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"xyzzy" => {}}); 6 | pass; 7 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/filesys/extended/dir-over-file-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"abc" => {}}); 6 | pass; 7 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/filesys/extended/dir-rm-parent-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"a" => {"b" => {}}}); 6 | pass; 7 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/filesys/extended/dir-rm-root-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"a" => ["\0" x 243]}); 6 | pass; 7 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/filesys/extended/dir-rm-tree-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({}); 6 | pass; 7 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/filesys/extended/dir-rmdir-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({}); 6 | pass; 7 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/filesys/extended/dir-under-file-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"abc" => ['']}); 6 | pass; 7 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/filesys/extended/grow-create-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"blargle" => ['']}); 6 | pass; 7 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/filesys/extended/grow-create.c: -------------------------------------------------------------------------------- 1 | /* Create a file of size 0. */ 2 | 3 | #define TEST_SIZE 0 4 | #include "tests/filesys/create.inc" 5 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/filesys/extended/grow-dir-lg.c: -------------------------------------------------------------------------------- 1 | /* Creates a directory, 2 | then creates 50 files in that directory. */ 3 | 4 | #define FILE_CNT 50 5 | #define DIRECTORY "/x" 6 | #include "tests/filesys/extended/grow-dir.inc" 7 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/filesys/extended/grow-file-size-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::random; 6 | check_archive ({"testfile" => [random_bytes (2134)]}); 7 | pass; 8 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/filesys/extended/grow-root-lg.c: -------------------------------------------------------------------------------- 1 | /* Creates 50 files in the root directory. */ 2 | 3 | #define FILE_CNT 50 4 | #include "tests/filesys/extended/grow-dir.inc" 5 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/filesys/extended/grow-root-sm.c: -------------------------------------------------------------------------------- 1 | /* Creates 20 files in the root directory. */ 2 | 3 | #define FILE_CNT 20 4 | #include "tests/filesys/extended/grow-dir.inc" 5 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/filesys/extended/grow-seq-lg-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::random; 6 | check_archive ({"testme" => [random_bytes (72943)]}); 7 | pass; 8 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/filesys/extended/grow-seq-lg.c: -------------------------------------------------------------------------------- 1 | /* Grows a file from 0 bytes to 72,943 bytes, 1,234 bytes at a 2 | time. */ 3 | 4 | #define TEST_SIZE 72943 5 | #include "tests/filesys/extended/grow-seq.inc" 6 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/filesys/extended/grow-seq-sm-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::random; 6 | check_archive ({"testme" => [random_bytes (5678)]}); 7 | pass; 8 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/filesys/extended/grow-seq-sm.c: -------------------------------------------------------------------------------- 1 | /* Grows a file from 0 bytes to 5,678 bytes, 1,234 bytes at a 2 | time. */ 3 | 4 | #define TEST_SIZE 5678 5 | #include "tests/filesys/extended/grow-seq.inc" 6 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/filesys/extended/grow-sparse-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"testfile" => ["\0" x 76543]}); 6 | pass; 7 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/filesys/extended/grow-tell-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::random; 6 | check_archive ({"foobar" => [random_bytes (2134)]}); 7 | pass; 8 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/filesys/extended/mk-tree.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTS_FILESYS_EXTENDED_MK_TREE_H 2 | #define TESTS_FILESYS_EXTENDED_MK_TREE_H 3 | 4 | void make_tree(int at, int bt, int ct, int dt); 5 | 6 | #endif /* tests/filesys/extended/mk-tree.h */ 7 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/main.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTS_MAIN_H 2 | #define TESTS_MAIN_H 3 | 4 | void test_main(void); 5 | 6 | #endif /* tests/main.h */ 7 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/memory/malloc-fit.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (malloc-fit) begin 7 | (malloc-fit) end 8 | malloc-fit: exit(0) 9 | EOF 10 | pass; 11 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/memory/pt-bad-addr.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::vm::process_death; 6 | 7 | check_process_death ('pt-bad-addr'); 8 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/memory/pt-write-code.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::vm::process_death; 6 | 7 | check_process_death ('pt-write-code'); 8 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/memory/realloc-1.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (realloc-1) begin 7 | (realloc-1) end 8 | realloc-1: exit(0) 9 | EOF 10 | pass; 11 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/memory/realloc-2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (realloc-2) begin 7 | (realloc-2) end 8 | realloc-2: exit(0) 9 | EOF 10 | pass; 11 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/memory/realloc-3.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (realloc-3) begin 7 | (realloc-3) end 8 | realloc-3: exit(0) 9 | EOF 10 | pass; 11 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/memory/sbrk-fail-2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sbrk-fail-2) begin 7 | sbrk-fail-2: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/memory/sbrk-large.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sbrk-large) begin 7 | (sbrk-large) end 8 | sbrk-large: exit(0) 9 | EOF 10 | pass; 11 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/memory/sbrk-many.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sbrk-many) begin 7 | (sbrk-many) end 8 | sbrk-many: exit(0) 9 | EOF 10 | pass; 11 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/memory/sbrk-mebi.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sbrk-mebi) begin 7 | (sbrk-mebi) end 8 | sbrk-mebi: exit(0) 9 | EOF 10 | pass; 11 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/memory/sbrk-none.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sbrk-none) begin 7 | sbrk-none: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/memory/sbrk-oom.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTS_MEMORY_SBRK_OOM_H 2 | #define TESTS_MEMORY_SBRK_OOM_H 3 | 4 | void test_sbrk_oom(int num_iterations, int step_size); 5 | 6 | #endif /* tests/memory/sbrk-oom.h */ 7 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/memory/sbrk-rv.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sbrk-rv) begin 7 | (sbrk-rv) end 8 | sbrk-rv: exit(0) 9 | EOF 10 | pass; 11 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/memory/sbrk-simple.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTS_MEMORY_SBRK_SIMPLE_H 2 | #define TESTS_MEMORY_SBRK_SIMPLE_H 3 | 4 | void test_sbrk(int amount); 5 | 6 | #endif /* tests/memory/sbrk-oom.h */ 7 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/memory/sbrk-zero.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sbrk-zero) begin 7 | (sbrk-zero) end 8 | sbrk-zero: exit(0) 9 | EOF 10 | pass; 11 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/threads/Grading: -------------------------------------------------------------------------------- 1 | # Percentage of the testing point total designated for each set of 2 | # tests. 3 | 4 | 20.0% tests/threads/Rubric.alarm 5 | 40.0% tests/threads/Rubric.priority 6 | 40.0% tests/threads/Rubric.mlfqs 7 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/threads/Rubric.alarm: -------------------------------------------------------------------------------- 1 | Functionality and robustness of alarm clock: 2 | 4 alarm-single 3 | 4 alarm-multiple 4 | 4 alarm-simultaneous 5 | 4 alarm-priority 6 | 7 | 1 alarm-zero 8 | 1 alarm-negative 9 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/threads/alarm-multiple.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use tests::tests; 3 | use tests::threads::alarm; 4 | check_alarm (7); 5 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/threads/alarm-single.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use tests::tests; 3 | use tests::threads::alarm; 4 | check_alarm (1); 5 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/threads/alarm-zero.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (alarm-zero) begin 7 | (alarm-zero) PASS 8 | (alarm-zero) end 9 | EOF 10 | pass; 11 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/threads/mlfqs-fair-2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::threads::mlfqs; 6 | 7 | check_mlfqs_fair ([0, 0], 50); 8 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/threads/mlfqs-fair-20.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::threads::mlfqs; 6 | 7 | check_mlfqs_fair ([(0) x 20], 20); 8 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/threads/mlfqs-nice-10.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::threads::mlfqs; 6 | 7 | check_mlfqs_fair ([0...9], 25); 8 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/threads/mlfqs-nice-2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::threads::mlfqs; 6 | 7 | check_mlfqs_fair ([0, 5], 50); 8 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/userprog/bad-jump.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected (IGNORE_USER_FAULTS => 1, [<<'EOF']); 6 | (bad-jump) begin 7 | bad-jump: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/userprog/bad-jump2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected (IGNORE_USER_FAULTS => 1, [<<'EOF']); 6 | (bad-jump2) begin 7 | bad-jump2: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/userprog/bad-read.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected (IGNORE_USER_FAULTS => 1, [<<'EOF']); 6 | (bad-read) begin 7 | bad-read: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/userprog/bad-read2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected (IGNORE_USER_FAULTS => 1, [<<'EOF']); 6 | (bad-read2) begin 7 | bad-read2: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/userprog/bad-write.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected (IGNORE_USER_FAULTS => 1, [<<'EOF']); 6 | (bad-write) begin 7 | bad-write: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/userprog/create-bad-ptr.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (create-bad-ptr) begin 7 | create-bad-ptr: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/userprog/create-empty.c: -------------------------------------------------------------------------------- 1 | /* Tries to create a file with the empty string as its name. */ 2 | 3 | #include "tests/lib.h" 4 | #include "tests/main.h" 5 | 6 | void test_main(void) { msg("create(\"\"): %d", create("", 0)); } 7 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/userprog/create-normal.c: -------------------------------------------------------------------------------- 1 | /* Creates an ordinary empty file. */ 2 | 3 | #include "tests/lib.h" 4 | #include "tests/main.h" 5 | 6 | void test_main(void) { CHECK(create("quux.dat", 0), "create quux.dat"); } 7 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/userprog/create-null.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (create-null) begin 7 | create-null: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/userprog/do-nothing.c: -------------------------------------------------------------------------------- 1 | /* Does absolutely nothing. */ 2 | 3 | #include "tests/lib.h" 4 | 5 | int main(int argc UNUSED, char* argv[] UNUSED) { return 162; } 6 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/userprog/do-nothing.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | do-nothing: exit(162) 7 | EOF 8 | pass; 9 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/userprog/exec-arg.c: -------------------------------------------------------------------------------- 1 | /* Tests argument passing to child processes. */ 2 | 3 | #include 4 | #include "tests/main.h" 5 | 6 | void test_main(void) { wait(exec("child-args childarg")); } 7 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/userprog/exec-bound-2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (exec-bound-2) begin 7 | exec-bound-2: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/userprog/exec-bound-3.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (exec-bound-3) begin 7 | exec-bound-3: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/userprog/exec-once.c: -------------------------------------------------------------------------------- 1 | /* Executes and waits for a single child process. */ 2 | 3 | #include 4 | #include "tests/lib.h" 5 | #include "tests/main.h" 6 | 7 | void test_main(void) { wait(exec("child-simple")); } 8 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/userprog/exit.c: -------------------------------------------------------------------------------- 1 | /* Tests the exit system call. */ 2 | 3 | #include "tests/lib.h" 4 | #include "tests/main.h" 5 | 6 | void test_main(void) { 7 | exit(57); 8 | fail("should have called exit(57)"); 9 | } 10 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/userprog/exit.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (exit) begin 7 | exit: exit(57) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/userprog/halt.c: -------------------------------------------------------------------------------- 1 | /* Tests the halt system call. */ 2 | 3 | #include "tests/lib.h" 4 | #include "tests/main.h" 5 | 6 | void test_main(void) { 7 | halt(); 8 | fail("should have halted"); 9 | } 10 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/userprog/no-vm/Rubric: -------------------------------------------------------------------------------- 1 | Functionality of features that VM might break: 2 | 3 | 1 multi-oom 4 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/userprog/open-empty.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (open-empty) begin 7 | (open-empty) end 8 | open-empty: exit(0) 9 | EOF 10 | pass; 11 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/userprog/rox-child.c: -------------------------------------------------------------------------------- 1 | /* Ensure that the executable of a running process cannot be 2 | modified, even by a child process. */ 3 | 4 | #define CHILD_CNT "1" 5 | #include "tests/userprog/rox-child.inc" 6 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/userprog/rox-multichild.c: -------------------------------------------------------------------------------- 1 | /* Ensure that the executable of a running process cannot be 2 | modified, even in the presence of multiple children. */ 3 | 4 | #define CHILD_CNT "5" 5 | #include "tests/userprog/rox-child.inc" 6 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/userprog/sc-bad-arg.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sc-bad-arg) begin 7 | sc-bad-arg: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/userprog/sc-bad-sp.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sc-bad-sp) begin 7 | sc-bad-sp: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/userprog/sc-boundary-2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sc-boundary-2) begin 7 | sc-boundary-2: exit(67) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/userprog/sc-boundary-3.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sc-boundary-3) begin 7 | sc-boundary-3: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/userprog/sc-boundary.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sc-boundary) begin 7 | sc-boundary: exit(42) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/userprog/stack-align-0.c: -------------------------------------------------------------------------------- 1 | /* Does absolutely nothing. */ 2 | 3 | #include "tests/lib.h" 4 | 5 | int main(int argc UNUSED, char* argv[] UNUSED) { 6 | register unsigned int esp asm("esp"); 7 | return esp % 16; 8 | } 9 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/userprog/stack-align-0.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | stack-align-0: exit(12) 7 | EOF 8 | pass; 9 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/vm/mmap-unmap.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::vm::process_death; 6 | 7 | check_process_death ('mmap-unmap'); 8 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/vm/page-merge-mm.c: -------------------------------------------------------------------------------- 1 | #include "tests/main.h" 2 | #include "tests/vm/parallel-merge.h" 3 | 4 | void test_main(void) { parallel_merge("child-qsort-mm", 80); } 5 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/vm/page-merge-par.c: -------------------------------------------------------------------------------- 1 | #include "tests/main.h" 2 | #include "tests/vm/parallel-merge.h" 3 | 4 | void test_main(void) { parallel_merge("child-sort", 123); } 5 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/vm/page-merge-stk.c: -------------------------------------------------------------------------------- 1 | #include "tests/main.h" 2 | #include "tests/vm/parallel-merge.h" 3 | 4 | void test_main(void) { parallel_merge("child-qsort", 72); } 5 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/vm/parallel-merge.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTS_VM_PARALLEL_MERGE 2 | #define TESTS_VM_PARALLEL_MERGE 1 3 | 4 | void parallel_merge(const char* child_name, int exit_status); 5 | 6 | #endif /* tests/vm/parallel-merge.h */ 7 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/vm/pt-bad-addr.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::vm::process_death; 6 | 7 | check_process_death ('pt-bad-addr'); 8 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/vm/pt-grow-bad.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected (IGNORE_USER_FAULTS => 1, [<<'EOF']); 6 | (pt-grow-bad) begin 7 | pt-grow-bad: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/vm/pt-write-code.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::vm::process_death; 6 | 7 | check_process_death ('pt-write-code'); 8 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/tests/vm/qsort.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTS_VM_QSORT_H 2 | #define TESTS_VM_QSORT_H 1 3 | 4 | #include 5 | 6 | void qsort_bytes(unsigned char* buf, size_t size); 7 | 8 | #endif /* tests/vm/qsort.h */ 9 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/threads/Makefile: -------------------------------------------------------------------------------- 1 | include ../Makefile.kernel 2 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/userprog/Makefile: -------------------------------------------------------------------------------- 1 | include ../Makefile.kernel 2 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/userprog/syscall.h: -------------------------------------------------------------------------------- 1 | #ifndef USERPROG_SYSCALL_H 2 | #define USERPROG_SYSCALL_H 3 | 4 | void syscall_exit(int status); 5 | void syscall_init(void); 6 | 7 | #endif /* userprog/syscall.h */ 8 | -------------------------------------------------------------------------------- /hw-memory/pintos/src/vm/Makefile: -------------------------------------------------------------------------------- 1 | include ../Makefile.kernel 2 | -------------------------------------------------------------------------------- /hw-shell/shell: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-shell/shell -------------------------------------------------------------------------------- /hw-shell/shell.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-shell/shell.o -------------------------------------------------------------------------------- /hw-shell/test_pip.txt: -------------------------------------------------------------------------------- 1 | Line 1 2 | Line 2 3 | Line 3 4 | Line 4 5 | Line 5 6 | -------------------------------------------------------------------------------- /hw-shell/test_redirection_in: -------------------------------------------------------------------------------- 1 | i love pintos and cs162 2 | -------------------------------------------------------------------------------- /hw-shell/test_redirection_out: -------------------------------------------------------------------------------- 1 | 1 5 24 2 | -------------------------------------------------------------------------------- /hw-shell/tokenizer.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/hw-shell/tokenizer.o -------------------------------------------------------------------------------- /lab-grpc-rs/rust-toolchain.toml: -------------------------------------------------------------------------------- 1 | [toolchain] 2 | channel = "1.62.1" 3 | -------------------------------------------------------------------------------- /lab-grpc-rs/src/rpc/mod.rs: -------------------------------------------------------------------------------- 1 | //! Automatically generated utilities for RPCs. 2 | //! 3 | 4 | pub mod kv_store { 5 | include!("kv_store.rs"); 6 | } 7 | -------------------------------------------------------------------------------- /proj-pregame/src/.gitignore: -------------------------------------------------------------------------------- 1 | cscope.files 2 | cscope.out 3 | TAGS 4 | tags 5 | -------------------------------------------------------------------------------- /proj-pregame/src/devices/ide.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_IDE_H 2 | #define DEVICES_IDE_H 3 | 4 | void ide_init(void); 5 | 6 | #endif /* devices/ide.h */ 7 | -------------------------------------------------------------------------------- /proj-pregame/src/devices/kbd.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_KBD_H 2 | #define DEVICES_KBD_H 3 | 4 | #include 5 | 6 | void kbd_init(void); 7 | void kbd_print_stats(void); 8 | 9 | #endif /* devices/kbd.h */ 10 | -------------------------------------------------------------------------------- /proj-pregame/src/devices/partition.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_PARTITION_H 2 | #define DEVICES_PARTITION_H 3 | 4 | struct block; 5 | 6 | void partition_scan(struct block*); 7 | 8 | #endif /* devices/partition.h */ 9 | -------------------------------------------------------------------------------- /proj-pregame/src/devices/pit.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_PIT_H 2 | #define DEVICES_PIT_H 3 | 4 | #include 5 | 6 | void pit_configure_channel(int channel, int mode, int frequency); 7 | 8 | #endif /* devices/pit.h */ 9 | -------------------------------------------------------------------------------- /proj-pregame/src/devices/rtc.h: -------------------------------------------------------------------------------- 1 | #ifndef RTC_H 2 | #define RTC_H 3 | 4 | typedef unsigned long time_t; 5 | 6 | time_t rtc_get_time(void); 7 | 8 | #endif 9 | -------------------------------------------------------------------------------- /proj-pregame/src/devices/speaker.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_SPEAKER_H 2 | #define DEVICES_SPEAKER_H 3 | 4 | void speaker_on(int frequency); 5 | void speaker_off(void); 6 | void speaker_beep(void); 7 | 8 | #endif /* devices/speaker.h */ 9 | -------------------------------------------------------------------------------- /proj-pregame/src/devices/vga.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_VGA_H 2 | #define DEVICES_VGA_H 3 | 4 | void vga_putc(int); 5 | 6 | #endif /* devices/vga.h */ 7 | -------------------------------------------------------------------------------- /proj-pregame/src/examples/.gitignore: -------------------------------------------------------------------------------- 1 | cat 2 | cmp 3 | cp 4 | echo 5 | halt 6 | hex-dump 7 | ls 8 | mcat 9 | mcp 10 | mkdir 11 | pwd 12 | rm 13 | shell 14 | bubsort 15 | insult 16 | lineup 17 | matmult 18 | recursor 19 | *.d 20 | -------------------------------------------------------------------------------- /proj-pregame/src/examples/lib/.gitignore: -------------------------------------------------------------------------------- 1 | *.d 2 | -------------------------------------------------------------------------------- /proj-pregame/src/examples/lib/user/.dummy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/proj-pregame/src/examples/lib/user/.dummy -------------------------------------------------------------------------------- /proj-pregame/src/examples/lib/user/.gitignore: -------------------------------------------------------------------------------- 1 | *.d 2 | -------------------------------------------------------------------------------- /proj-pregame/src/filesys/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | bochsrc.txt 3 | bochsout.txt 4 | -------------------------------------------------------------------------------- /proj-pregame/src/filesys/Makefile: -------------------------------------------------------------------------------- 1 | include ../Makefile.kernel 2 | -------------------------------------------------------------------------------- /proj-pregame/src/lib/kernel/console.h: -------------------------------------------------------------------------------- 1 | #ifndef __LIB_KERNEL_CONSOLE_H 2 | #define __LIB_KERNEL_CONSOLE_H 3 | 4 | void console_init(void); 5 | void console_panic(void); 6 | void console_print_stats(void); 7 | 8 | #endif /* lib/kernel/console.h */ 9 | -------------------------------------------------------------------------------- /proj-pregame/src/lib/kernel/stdio.h: -------------------------------------------------------------------------------- 1 | #ifndef __LIB_KERNEL_STDIO_H 2 | #define __LIB_KERNEL_STDIO_H 3 | 4 | void putbuf(const char*, size_t); 5 | 6 | #endif /* lib/kernel/stdio.h */ 7 | -------------------------------------------------------------------------------- /proj-pregame/src/lib/stdbool.h: -------------------------------------------------------------------------------- 1 | #ifndef __LIB_STDBOOL_H 2 | #define __LIB_STDBOOL_H 3 | 4 | #define bool _Bool 5 | #define true 1 6 | #define false 0 7 | #define __bool_true_false_are_defined 1 8 | 9 | #endif /* lib/stdbool.h */ 10 | -------------------------------------------------------------------------------- /proj-pregame/src/lib/user/entry.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int main(int , char* []); 4 | void _start(int argc, char* argv[]); 5 | 6 | void _start(int argc, char* argv[]) 7 | { 8 | exit(main(argc, argv)); 9 | } 10 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/cksum.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTS_CKSUM_H 2 | #define TESTS_CKSUM_H 3 | 4 | #include 5 | 6 | unsigned long cksum(const void*, size_t); 7 | 8 | #endif /* tests/cksum.h */ 9 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/filesys/base/lg-create.c: -------------------------------------------------------------------------------- 1 | /* Tests that create properly zeros out the contents of a fairly 2 | large file. */ 3 | 4 | #define TEST_SIZE 75678 5 | #include "tests/filesys/create.inc" 6 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/filesys/base/sm-create.c: -------------------------------------------------------------------------------- 1 | /* Tests that create properly zeros out the contents of a fairly 2 | small file. */ 3 | 4 | #define TEST_SIZE 5678 5 | #include "tests/filesys/create.inc" 6 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/filesys/base/syn-read.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTS_FILESYS_BASE_SYN_READ_H 2 | #define TESTS_FILESYS_BASE_SYN_READ_H 3 | 4 | #define BUF_SIZE 1024 5 | static const char file_name[] = "data"; 6 | 7 | #endif /* tests/filesys/base/syn-read.h */ 8 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/filesys/extended/Rubric.robustness: -------------------------------------------------------------------------------- 1 | Robustness of file system: 2 | 1 dir-empty-name 3 | 1 dir-open 4 | 1 dir-over-file 5 | 1 dir-under-file 6 | 7 | 3 dir-rm-cwd 8 | 2 dir-rm-parent 9 | 1 dir-rm-root 10 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/filesys/extended/dir-empty-name-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({}); 6 | pass; 7 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/filesys/extended/dir-mkdir-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({'a' => {'b' => ["\0" x 512]}}); 6 | pass; 7 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/filesys/extended/dir-open-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"xyzzy" => {}}); 6 | pass; 7 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/filesys/extended/dir-over-file-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"abc" => {}}); 6 | pass; 7 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/filesys/extended/dir-rm-parent-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"a" => {"b" => {}}}); 6 | pass; 7 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/filesys/extended/dir-rm-root-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"a" => ["\0" x 243]}); 6 | pass; 7 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/filesys/extended/dir-rm-tree-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({}); 6 | pass; 7 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/filesys/extended/dir-rmdir-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({}); 6 | pass; 7 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/filesys/extended/dir-under-file-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"abc" => ['']}); 6 | pass; 7 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/filesys/extended/grow-create-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"blargle" => ['']}); 6 | pass; 7 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/filesys/extended/grow-create.c: -------------------------------------------------------------------------------- 1 | /* Create a file of size 0. */ 2 | 3 | #define TEST_SIZE 0 4 | #include "tests/filesys/create.inc" 5 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/filesys/extended/grow-dir-lg.c: -------------------------------------------------------------------------------- 1 | /* Creates a directory, 2 | then creates 50 files in that directory. */ 3 | 4 | #define FILE_CNT 50 5 | #define DIRECTORY "/x" 6 | #include "tests/filesys/extended/grow-dir.inc" 7 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/filesys/extended/grow-file-size-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::random; 6 | check_archive ({"testfile" => [random_bytes (2134)]}); 7 | pass; 8 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/filesys/extended/grow-root-lg.c: -------------------------------------------------------------------------------- 1 | /* Creates 50 files in the root directory. */ 2 | 3 | #define FILE_CNT 50 4 | #include "tests/filesys/extended/grow-dir.inc" 5 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/filesys/extended/grow-root-sm.c: -------------------------------------------------------------------------------- 1 | /* Creates 20 files in the root directory. */ 2 | 3 | #define FILE_CNT 20 4 | #include "tests/filesys/extended/grow-dir.inc" 5 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/filesys/extended/grow-seq-lg-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::random; 6 | check_archive ({"testme" => [random_bytes (72943)]}); 7 | pass; 8 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/filesys/extended/grow-seq-lg.c: -------------------------------------------------------------------------------- 1 | /* Grows a file from 0 bytes to 72,943 bytes, 1,234 bytes at a 2 | time. */ 3 | 4 | #define TEST_SIZE 72943 5 | #include "tests/filesys/extended/grow-seq.inc" 6 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/filesys/extended/grow-seq-sm-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::random; 6 | check_archive ({"testme" => [random_bytes (5678)]}); 7 | pass; 8 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/filesys/extended/grow-seq-sm.c: -------------------------------------------------------------------------------- 1 | /* Grows a file from 0 bytes to 5,678 bytes, 1,234 bytes at a 2 | time. */ 3 | 4 | #define TEST_SIZE 5678 5 | #include "tests/filesys/extended/grow-seq.inc" 6 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/filesys/extended/grow-sparse-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"testfile" => ["\0" x 76543]}); 6 | pass; 7 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/filesys/extended/grow-tell-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::random; 6 | check_archive ({"foobar" => [random_bytes (2134)]}); 7 | pass; 8 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/filesys/extended/mk-tree.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTS_FILESYS_EXTENDED_MK_TREE_H 2 | #define TESTS_FILESYS_EXTENDED_MK_TREE_H 3 | 4 | void make_tree(int at, int bt, int ct, int dt); 5 | 6 | #endif /* tests/filesys/extended/mk-tree.h */ 7 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/main.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTS_MAIN_H 2 | #define TESTS_MAIN_H 3 | 4 | void test_main(void); 5 | 6 | #endif /* tests/main.h */ 7 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/threads/Grading: -------------------------------------------------------------------------------- 1 | # Percentage of the testing point total designated for each set of 2 | # tests. 3 | 4 | 20.0% tests/threads/Rubric.alarm 5 | 40.0% tests/threads/Rubric.priority 6 | 40.0% tests/threads/Rubric.mlfqs 7 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/threads/Rubric.alarm: -------------------------------------------------------------------------------- 1 | Functionality and robustness of alarm clock: 2 | 4 alarm-single 3 | 4 alarm-multiple 4 | 4 alarm-simultaneous 5 | 4 alarm-priority 6 | 7 | 1 alarm-zero 8 | 1 alarm-negative 9 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/threads/alarm-multiple.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use tests::tests; 3 | use tests::threads::alarm; 4 | check_alarm (7); 5 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/threads/alarm-negative.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (alarm-negative) begin 7 | (alarm-negative) PASS 8 | (alarm-negative) end 9 | EOF 10 | pass; 11 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/threads/alarm-single.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use tests::tests; 3 | use tests::threads::alarm; 4 | check_alarm (1); 5 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/threads/alarm-zero.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (alarm-zero) begin 7 | (alarm-zero) PASS 8 | (alarm-zero) end 9 | EOF 10 | pass; 11 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/threads/mlfqs-fair-2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::threads::mlfqs; 6 | 7 | check_mlfqs_fair ([0, 0], 50); 8 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/threads/mlfqs-fair-20.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::threads::mlfqs; 6 | 7 | check_mlfqs_fair ([(0) x 20], 20); 8 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/threads/mlfqs-nice-10.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::threads::mlfqs; 6 | 7 | check_mlfqs_fair ([0...9], 25); 8 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/threads/mlfqs-nice-2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::threads::mlfqs; 6 | 7 | check_mlfqs_fair ([0, 5], 50); 8 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/bad-jump.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected (IGNORE_USER_FAULTS => 1, [<<'EOF']); 6 | (bad-jump) begin 7 | bad-jump: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/bad-jump2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected (IGNORE_USER_FAULTS => 1, [<<'EOF']); 6 | (bad-jump2) begin 7 | bad-jump2: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/bad-read.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected (IGNORE_USER_FAULTS => 1, [<<'EOF']); 6 | (bad-read) begin 7 | bad-read: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/bad-read2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected (IGNORE_USER_FAULTS => 1, [<<'EOF']); 6 | (bad-read2) begin 7 | bad-read2: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/bad-write.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected (IGNORE_USER_FAULTS => 1, [<<'EOF']); 6 | (bad-write) begin 7 | bad-write: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/bad-write2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected (IGNORE_USER_FAULTS => 1, [<<'EOF']); 6 | (bad-write2) begin 7 | bad-write2: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/create-bad-ptr.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (create-bad-ptr) begin 7 | create-bad-ptr: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/create-empty.c: -------------------------------------------------------------------------------- 1 | /* Tries to create a file with the empty string as its name. */ 2 | 3 | #include "tests/lib.h" 4 | #include "tests/main.h" 5 | 6 | void test_main(void) { msg("create(\"\"): %d", create("", 0)); } 7 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/create-normal.c: -------------------------------------------------------------------------------- 1 | /* Creates an ordinary empty file. */ 2 | 3 | #include "tests/lib.h" 4 | #include "tests/main.h" 5 | 6 | void test_main(void) { CHECK(create("quux.dat", 0), "create quux.dat"); } 7 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/create-null.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (create-null) begin 7 | create-null: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/do-not-much.c: -------------------------------------------------------------------------------- 1 | /* Does pretty much nothing. */ 2 | 3 | #include "tests/lib.h" 4 | 5 | int main(int argc, char* argv[] UNUSED) { 6 | return argc; 7 | } 8 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/do-not-much.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | do-not-much: exit(1) 7 | EOF 8 | pass; 9 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/do-nothing.c: -------------------------------------------------------------------------------- 1 | /* Does absolutely nothing. */ 2 | 3 | #include "tests/lib.h" 4 | 5 | int main(int argc UNUSED, char* argv[] UNUSED) { return 162; } 6 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/do-nothing.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | do-nothing: exit(162) 7 | EOF 8 | pass; 9 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/exec-arg.c: -------------------------------------------------------------------------------- 1 | /* Tests argument passing to child processes. */ 2 | 3 | #include 4 | #include "tests/main.h" 5 | 6 | void test_main(void) { wait(exec("child-args childarg")); } 7 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/exec-bound-2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (exec-bound-2) begin 7 | exec-bound-2: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/exec-bound-3.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (exec-bound-3) begin 7 | exec-bound-3: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/exec-once.c: -------------------------------------------------------------------------------- 1 | /* Executes and waits for a single child process. */ 2 | 3 | #include 4 | #include "tests/lib.h" 5 | #include "tests/main.h" 6 | 7 | void test_main(void) { wait(exec("child-simple")); } 8 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/exit.c: -------------------------------------------------------------------------------- 1 | /* Tests the exit system call. */ 2 | 3 | #include "tests/lib.h" 4 | #include "tests/main.h" 5 | 6 | void test_main(void) { 7 | exit(57); 8 | fail("should have called exit(57)"); 9 | } 10 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/exit.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (exit) begin 7 | exit: exit(57) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/fp-init.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (fp-init) begin 7 | (fp-init) Success! 8 | fp-init: exit(162) 9 | EOF 10 | pass; 11 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/halt.c: -------------------------------------------------------------------------------- 1 | /* Tests the halt system call. */ 2 | 3 | #include "tests/lib.h" 4 | #include "tests/main.h" 5 | 6 | void test_main(void) { 7 | halt(); 8 | fail("should have halted"); 9 | } 10 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/kernel/Rubric: -------------------------------------------------------------------------------- 1 | Functionality of features that require the kernel: 2 | 3 | - Test floating point correctness 4 | 5 fp-kasm 5 | 6 | - Test floating point robustness 7 | 2 fp-kinit 8 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/kernel/fp-kasm.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (fp-kasm) begin 7 | (fp-kasm) PASS 8 | (fp-kasm) end 9 | EOF 10 | pass; 11 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/kernel/fp-kinit.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (fp-kinit) begin 7 | (fp-kinit) PASS 8 | (fp-kinit) end 9 | EOF 10 | pass; 11 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/lib/.gitignore: -------------------------------------------------------------------------------- 1 | *.d 2 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/lib/user/.dummy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/proj-pregame/src/tests/userprog/lib/user/.dummy -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/lib/user/.gitignore: -------------------------------------------------------------------------------- 1 | *.d 2 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/no-vm/Rubric: -------------------------------------------------------------------------------- 1 | Functionality of features that VM might break: 2 | 3 | 1 multi-oom 4 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/open-empty.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (open-empty) begin 7 | (open-empty) end 8 | open-empty: exit(0) 9 | EOF 10 | pass; 11 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/open-missing.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (open-missing) begin 7 | (open-missing) end 8 | open-missing: exit(0) 9 | EOF 10 | pass; 11 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/open-normal.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (open-normal) begin 7 | (open-normal) end 8 | open-normal: exit(0) 9 | EOF 10 | pass; 11 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/rox-child.c: -------------------------------------------------------------------------------- 1 | /* Ensure that the executable of a running process cannot be 2 | modified, even by a child process. */ 3 | 4 | #define CHILD_CNT "1" 5 | #include "tests/userprog/rox-child.inc" 6 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/rox-multichild.c: -------------------------------------------------------------------------------- 1 | /* Ensure that the executable of a running process cannot be 2 | modified, even in the presence of multiple children. */ 3 | 4 | #define CHILD_CNT "5" 5 | #include "tests/userprog/rox-child.inc" 6 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/sc-bad-arg.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sc-bad-arg) begin 7 | sc-bad-arg: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/sc-bad-sp.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sc-bad-sp) begin 7 | sc-bad-sp: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/sc-boundary-2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sc-boundary-2) begin 7 | sc-boundary-2: exit(67) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/sc-boundary-3.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sc-boundary-3) begin 7 | sc-boundary-3: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/sc-boundary.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sc-boundary) begin 7 | sc-boundary: exit(42) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/stack-align-0.c: -------------------------------------------------------------------------------- 1 | /* Does absolutely nothing. */ 2 | 3 | #include "tests/lib.h" 4 | 5 | int main(int argc UNUSED, char* argv[] UNUSED) { 6 | register unsigned int esp asm("esp"); 7 | return esp % 16; 8 | } 9 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/stack-align-0.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | stack-align-0: exit(12) 7 | EOF 8 | pass; 9 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/stack-align-v.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | stack-align-v: exit(8) 7 | EOF 8 | pass; 9 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/userprog/wait-simple.c: -------------------------------------------------------------------------------- 1 | /* Wait for a subprocess to finish. */ 2 | 3 | #include 4 | #include "tests/lib.h" 5 | #include "tests/main.h" 6 | 7 | void test_main(void) { msg("wait(exec()) = %d", wait(exec("child-simple"))); } 8 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/vm/mmap-unmap.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::vm::process_death; 6 | 7 | check_process_death ('mmap-unmap'); 8 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/vm/page-merge-mm.c: -------------------------------------------------------------------------------- 1 | #include "tests/main.h" 2 | #include "tests/vm/parallel-merge.h" 3 | 4 | void test_main(void) { parallel_merge("child-qsort-mm", 80); } 5 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/vm/page-merge-par.c: -------------------------------------------------------------------------------- 1 | #include "tests/main.h" 2 | #include "tests/vm/parallel-merge.h" 3 | 4 | void test_main(void) { parallel_merge("child-sort", 123); } 5 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/vm/page-merge-stk.c: -------------------------------------------------------------------------------- 1 | #include "tests/main.h" 2 | #include "tests/vm/parallel-merge.h" 3 | 4 | void test_main(void) { parallel_merge("child-qsort", 72); } 5 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/vm/parallel-merge.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTS_VM_PARALLEL_MERGE 2 | #define TESTS_VM_PARALLEL_MERGE 1 3 | 4 | void parallel_merge(const char* child_name, int exit_status); 5 | 6 | #endif /* tests/vm/parallel-merge.h */ 7 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/vm/pt-bad-addr.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::vm::process_death; 6 | 7 | check_process_death ('pt-bad-addr'); 8 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/vm/pt-bad-read.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (pt-bad-read) begin 7 | (pt-bad-read) open "sample.txt" 8 | pt-bad-read: exit(-1) 9 | EOF 10 | pass; 11 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/vm/pt-grow-bad.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected (IGNORE_USER_FAULTS => 1, [<<'EOF']); 6 | (pt-grow-bad) begin 7 | pt-grow-bad: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/vm/pt-grow-pusha.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected (IGNORE_EXIT_CODES => 1, [<<'EOF']); 6 | (pt-grow-pusha) begin 7 | (pt-grow-pusha) end 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/vm/pt-write-code.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::vm::process_death; 6 | 7 | check_process_death ('pt-write-code'); 8 | -------------------------------------------------------------------------------- /proj-pregame/src/tests/vm/qsort.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTS_VM_QSORT_H 2 | #define TESTS_VM_QSORT_H 1 3 | 4 | #include 5 | 6 | void qsort_bytes(unsigned char* buf, size_t size); 7 | 8 | #endif /* tests/vm/qsort.h */ 9 | -------------------------------------------------------------------------------- /proj-pregame/src/threads/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | bochsrc.txt 3 | bochsout.txt 4 | -------------------------------------------------------------------------------- /proj-pregame/src/threads/Makefile: -------------------------------------------------------------------------------- 1 | include ../Makefile.kernel 2 | -------------------------------------------------------------------------------- /proj-pregame/src/threads/flags.h: -------------------------------------------------------------------------------- 1 | #ifndef THREADS_FLAGS_H 2 | #define THREADS_FLAGS_H 3 | 4 | /* EFLAGS Register. */ 5 | #define FLAG_MBS 0x00000002 /* Must be set. */ 6 | #define FLAG_IF 0x00000200 /* Interrupt Flag. */ 7 | 8 | #endif /* threads/flags.h */ 9 | -------------------------------------------------------------------------------- /proj-pregame/src/userprog/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | bochsrc.txt 3 | bochsout.txt 4 | -------------------------------------------------------------------------------- /proj-pregame/src/userprog/Makefile: -------------------------------------------------------------------------------- 1 | include ../Makefile.kernel 2 | -------------------------------------------------------------------------------- /proj-pregame/src/userprog/syscall.h: -------------------------------------------------------------------------------- 1 | #ifndef USERPROG_SYSCALL_H 2 | #define USERPROG_SYSCALL_H 3 | 4 | void syscall_init(void); 5 | 6 | #endif /* userprog/syscall.h */ 7 | -------------------------------------------------------------------------------- /proj-pregame/src/utils/.gitignore: -------------------------------------------------------------------------------- 1 | setitimer-helper 2 | squish-pty 3 | squish-unix 4 | -------------------------------------------------------------------------------- /proj-pregame/src/vm/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | bochsrc.txt 3 | bochsout.txt 4 | -------------------------------------------------------------------------------- /proj-pregame/src/vm/Makefile: -------------------------------------------------------------------------------- 1 | include ../Makefile.kernel 2 | -------------------------------------------------------------------------------- /staff_solution_proj1/README.md: -------------------------------------------------------------------------------- 1 | CS 162 Group Repository 2 | ======================= 3 | 4 | This repository contains code for CS 162 group projects. 5 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/.gitignore: -------------------------------------------------------------------------------- 1 | cscope.files 2 | cscope.out 3 | TAGS 4 | tags 5 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/devices/ide.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_IDE_H 2 | #define DEVICES_IDE_H 3 | 4 | void ide_init(void); 5 | 6 | #endif /* devices/ide.h */ 7 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/devices/kbd.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_KBD_H 2 | #define DEVICES_KBD_H 3 | 4 | #include 5 | 6 | void kbd_init(void); 7 | void kbd_print_stats(void); 8 | 9 | #endif /* devices/kbd.h */ 10 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/devices/partition.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_PARTITION_H 2 | #define DEVICES_PARTITION_H 3 | 4 | struct block; 5 | 6 | void partition_scan(struct block*); 7 | 8 | #endif /* devices/partition.h */ 9 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/devices/pit.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_PIT_H 2 | #define DEVICES_PIT_H 3 | 4 | #include 5 | 6 | void pit_configure_channel(int channel, int mode, int frequency); 7 | 8 | #endif /* devices/pit.h */ 9 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/devices/rtc.h: -------------------------------------------------------------------------------- 1 | #ifndef RTC_H 2 | #define RTC_H 3 | 4 | typedef unsigned long time_t; 5 | 6 | time_t rtc_get_time(void); 7 | 8 | #endif 9 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/devices/speaker.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_SPEAKER_H 2 | #define DEVICES_SPEAKER_H 3 | 4 | void speaker_on(int frequency); 5 | void speaker_off(void); 6 | void speaker_beep(void); 7 | 8 | #endif /* devices/speaker.h */ 9 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/devices/vga.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICES_VGA_H 2 | #define DEVICES_VGA_H 3 | 4 | void vga_putc(int); 5 | 6 | #endif /* devices/vga.h */ 7 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/examples/.gitignore: -------------------------------------------------------------------------------- 1 | cat 2 | cmp 3 | cp 4 | echo 5 | halt 6 | hex-dump 7 | ls 8 | mcat 9 | mcp 10 | mkdir 11 | pwd 12 | rm 13 | shell 14 | bubsort 15 | insult 16 | lineup 17 | matmult 18 | recursor 19 | *.d 20 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/examples/lib/.gitignore: -------------------------------------------------------------------------------- 1 | *.d 2 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/examples/lib/user/.dummy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/staff_solution_proj1/src/examples/lib/user/.dummy -------------------------------------------------------------------------------- /staff_solution_proj1/src/examples/lib/user/.gitignore: -------------------------------------------------------------------------------- 1 | *.d 2 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/filesys/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | bochsrc.txt 3 | bochsout.txt 4 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/filesys/Makefile: -------------------------------------------------------------------------------- 1 | include ../Makefile.kernel 2 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/lib/kernel/console.h: -------------------------------------------------------------------------------- 1 | #ifndef __LIB_KERNEL_CONSOLE_H 2 | #define __LIB_KERNEL_CONSOLE_H 3 | 4 | void console_init(void); 5 | void console_panic(void); 6 | void console_print_stats(void); 7 | 8 | #endif /* lib/kernel/console.h */ 9 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/lib/kernel/stdio.h: -------------------------------------------------------------------------------- 1 | #ifndef __LIB_KERNEL_STDIO_H 2 | #define __LIB_KERNEL_STDIO_H 3 | 4 | void putbuf(const char*, size_t); 5 | 6 | #endif /* lib/kernel/stdio.h */ 7 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/lib/stdbool.h: -------------------------------------------------------------------------------- 1 | #ifndef __LIB_STDBOOL_H 2 | #define __LIB_STDBOOL_H 3 | 4 | #define bool _Bool 5 | #define true 1 6 | #define false 0 7 | #define __bool_true_false_are_defined 1 8 | 9 | #endif /* lib/stdbool.h */ 10 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/lib/user/entry.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int main(int, char*[]); 4 | void _start(int argc, char* argv[]); 5 | 6 | void _start(int argc, char* argv[]) { exit(main(argc, argv)); } 7 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/cksum.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTS_CKSUM_H 2 | #define TESTS_CKSUM_H 3 | 4 | #include 5 | 6 | unsigned long cksum(const void*, size_t); 7 | 8 | #endif /* tests/cksum.h */ 9 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/filesys/base/lg-create.c: -------------------------------------------------------------------------------- 1 | /* Tests that create properly zeros out the contents of a fairly 2 | large file. */ 3 | 4 | #define TEST_SIZE 75678 5 | #include "tests/filesys/create.inc" 6 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/filesys/base/sm-create.c: -------------------------------------------------------------------------------- 1 | /* Tests that create properly zeros out the contents of a fairly 2 | small file. */ 3 | 4 | #define TEST_SIZE 5678 5 | #include "tests/filesys/create.inc" 6 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/filesys/extended/Rubric.robustness: -------------------------------------------------------------------------------- 1 | Robustness of file system: 2 | 1 dir-empty-name 3 | 1 dir-open 4 | 1 dir-over-file 5 | 1 dir-under-file 6 | 7 | 3 dir-rm-cwd 8 | 2 dir-rm-parent 9 | 1 dir-rm-root 10 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/filesys/extended/dir-empty-name-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({}); 6 | pass; 7 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/filesys/extended/dir-mkdir-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({'a' => {'b' => ["\0" x 512]}}); 6 | pass; 7 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/filesys/extended/dir-open-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"xyzzy" => {}}); 6 | pass; 7 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/filesys/extended/dir-over-file-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"abc" => {}}); 6 | pass; 7 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/filesys/extended/dir-rm-parent-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"a" => {"b" => {}}}); 6 | pass; 7 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/filesys/extended/dir-rm-root-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"a" => ["\0" x 243]}); 6 | pass; 7 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/filesys/extended/dir-rm-tree-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({}); 6 | pass; 7 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/filesys/extended/dir-rmdir-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({}); 6 | pass; 7 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/filesys/extended/dir-under-file-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"abc" => ['']}); 6 | pass; 7 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/filesys/extended/grow-create-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"blargle" => ['']}); 6 | pass; 7 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/filesys/extended/grow-create.c: -------------------------------------------------------------------------------- 1 | /* Create a file of size 0. */ 2 | 3 | #define TEST_SIZE 0 4 | #include "tests/filesys/create.inc" 5 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/filesys/extended/grow-dir-lg.c: -------------------------------------------------------------------------------- 1 | /* Creates a directory, 2 | then creates 50 files in that directory. */ 3 | 4 | #define FILE_CNT 50 5 | #define DIRECTORY "/x" 6 | #include "tests/filesys/extended/grow-dir.inc" 7 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/filesys/extended/grow-file-size-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::random; 6 | check_archive ({"testfile" => [random_bytes (2134)]}); 7 | pass; 8 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/filesys/extended/grow-root-lg.c: -------------------------------------------------------------------------------- 1 | /* Creates 50 files in the root directory. */ 2 | 3 | #define FILE_CNT 50 4 | #include "tests/filesys/extended/grow-dir.inc" 5 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/filesys/extended/grow-root-sm.c: -------------------------------------------------------------------------------- 1 | /* Creates 20 files in the root directory. */ 2 | 3 | #define FILE_CNT 20 4 | #include "tests/filesys/extended/grow-dir.inc" 5 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/filesys/extended/grow-seq-lg-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::random; 6 | check_archive ({"testme" => [random_bytes (72943)]}); 7 | pass; 8 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/filesys/extended/grow-seq-lg.c: -------------------------------------------------------------------------------- 1 | /* Grows a file from 0 bytes to 72,943 bytes, 1,234 bytes at a 2 | time. */ 3 | 4 | #define TEST_SIZE 72943 5 | #include "tests/filesys/extended/grow-seq.inc" 6 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/filesys/extended/grow-seq-sm-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::random; 6 | check_archive ({"testme" => [random_bytes (5678)]}); 7 | pass; 8 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/filesys/extended/grow-seq-sm.c: -------------------------------------------------------------------------------- 1 | /* Grows a file from 0 bytes to 5,678 bytes, 1,234 bytes at a 2 | time. */ 3 | 4 | #define TEST_SIZE 5678 5 | #include "tests/filesys/extended/grow-seq.inc" 6 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/filesys/extended/grow-sparse-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_archive ({"testfile" => ["\0" x 76543]}); 6 | pass; 7 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/filesys/extended/grow-tell-persistence.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::random; 6 | check_archive ({"foobar" => [random_bytes (2134)]}); 7 | pass; 8 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/filesys/extended/mk-tree.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTS_FILESYS_EXTENDED_MK_TREE_H 2 | #define TESTS_FILESYS_EXTENDED_MK_TREE_H 3 | 4 | void make_tree(int at, int bt, int ct, int dt); 5 | 6 | #endif /* tests/filesys/extended/mk-tree.h */ 7 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/main.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTS_MAIN_H 2 | #define TESTS_MAIN_H 3 | 4 | void test_main(void); 5 | 6 | #endif /* tests/main.h */ 7 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/threads/Grading: -------------------------------------------------------------------------------- 1 | # Percentage of the testing point total designated for each set of 2 | # tests. 3 | 4 | 20.0% tests/threads/Rubric.alarm 5 | 40.0% tests/threads/Rubric.priority 6 | 40.0% tests/threads/Rubric.mlfqs 7 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/threads/Rubric.alarm: -------------------------------------------------------------------------------- 1 | Functionality and robustness of alarm clock: 2 | 4 alarm-single 3 | 4 alarm-multiple 4 | 4 alarm-simultaneous 5 | 4 alarm-priority 6 | 7 | 1 alarm-zero 8 | 1 alarm-negative 9 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/threads/alarm-multiple.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use tests::tests; 3 | use tests::threads::alarm; 4 | check_alarm (7); 5 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/threads/alarm-single.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use tests::tests; 3 | use tests::threads::alarm; 4 | check_alarm (1); 5 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/threads/alarm-zero.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (alarm-zero) begin 7 | (alarm-zero) PASS 8 | (alarm-zero) end 9 | EOF 10 | pass; 11 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/threads/mlfqs-fair-2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::threads::mlfqs; 6 | 7 | check_mlfqs_fair ([0, 0], 50); 8 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/threads/mlfqs-fair-20.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::threads::mlfqs; 6 | 7 | check_mlfqs_fair ([(0) x 20], 20); 8 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/threads/mlfqs-nice-10.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::threads::mlfqs; 6 | 7 | check_mlfqs_fair ([0...9], 25); 8 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/threads/mlfqs-nice-2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::threads::mlfqs; 6 | 7 | check_mlfqs_fair ([0, 5], 50); 8 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/bad-jump.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected (IGNORE_USER_FAULTS => 1, [<<'EOF']); 6 | (bad-jump) begin 7 | bad-jump: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/bad-jump2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected (IGNORE_USER_FAULTS => 1, [<<'EOF']); 6 | (bad-jump2) begin 7 | bad-jump2: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/bad-read.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected (IGNORE_USER_FAULTS => 1, [<<'EOF']); 6 | (bad-read) begin 7 | bad-read: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/bad-read2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected (IGNORE_USER_FAULTS => 1, [<<'EOF']); 6 | (bad-read2) begin 7 | bad-read2: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/bad-write.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected (IGNORE_USER_FAULTS => 1, [<<'EOF']); 6 | (bad-write) begin 7 | bad-write: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/bad-write2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected (IGNORE_USER_FAULTS => 1, [<<'EOF']); 6 | (bad-write2) begin 7 | bad-write2: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/create-bad-ptr.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (create-bad-ptr) begin 7 | create-bad-ptr: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/create-empty.c: -------------------------------------------------------------------------------- 1 | /* Tries to create a file with the empty string as its name. */ 2 | 3 | #include "tests/lib.h" 4 | #include "tests/main.h" 5 | 6 | void test_main(void) { msg("create(\"\"): %d", create("", 0)); } 7 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/create-normal.c: -------------------------------------------------------------------------------- 1 | /* Creates an ordinary empty file. */ 2 | 3 | #include "tests/lib.h" 4 | #include "tests/main.h" 5 | 6 | void test_main(void) { CHECK(create("quux.dat", 0), "create quux.dat"); } 7 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/create-null.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (create-null) begin 7 | create-null: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/do-nothing.c: -------------------------------------------------------------------------------- 1 | /* Does absolutely nothing. */ 2 | 3 | #include "tests/lib.h" 4 | 5 | int main(int argc UNUSED, char* argv[] UNUSED) { return 162; } 6 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/do-nothing.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | do-nothing: exit(162) 7 | EOF 8 | pass; 9 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/exec-arg.c: -------------------------------------------------------------------------------- 1 | /* Tests argument passing to child processes. */ 2 | 3 | #include 4 | #include "tests/main.h" 5 | 6 | void test_main(void) { wait(exec("child-args childarg")); } 7 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/exec-bound-2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (exec-bound-2) begin 7 | exec-bound-2: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/exec-bound-3.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (exec-bound-3) begin 7 | exec-bound-3: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/exec-once.c: -------------------------------------------------------------------------------- 1 | /* Executes and waits for a single child process. */ 2 | 3 | #include 4 | #include "tests/lib.h" 5 | #include "tests/main.h" 6 | 7 | void test_main(void) { wait(exec("child-simple")); } 8 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/exit.c: -------------------------------------------------------------------------------- 1 | /* Tests the exit system call. */ 2 | 3 | #include "tests/lib.h" 4 | #include "tests/main.h" 5 | 6 | void test_main(void) { 7 | exit(57); 8 | fail("should have called exit(57)"); 9 | } 10 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/exit.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (exit) begin 7 | exit: exit(57) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/fp-init.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (fp-init) begin 7 | (fp-init) Success! 8 | fp-init: exit(162) 9 | EOF 10 | pass; 11 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/halt.c: -------------------------------------------------------------------------------- 1 | /* Tests the halt system call. */ 2 | 3 | #include "tests/lib.h" 4 | #include "tests/main.h" 5 | 6 | void test_main(void) { 7 | halt(); 8 | fail("should have halted"); 9 | } 10 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/kernel/Rubric: -------------------------------------------------------------------------------- 1 | Functionality of features that require the kernel: 2 | 3 | - Test floating point correctness 4 | 5 fp-kasm 5 | 6 | - Test floating point robustness 7 | 2 fp-kinit 8 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/kernel/fp-kasm.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (fp-kasm) begin 7 | (fp-kasm) PASS 8 | (fp-kasm) end 9 | EOF 10 | pass; 11 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/kernel/fp-kinit.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (fp-kinit) begin 7 | (fp-kinit) PASS 8 | (fp-kinit) end 9 | EOF 10 | pass; 11 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/lib/.gitignore: -------------------------------------------------------------------------------- 1 | *.d 2 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/lib/user/.dummy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/staff_solution_proj1/src/tests/userprog/lib/user/.dummy -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/lib/user/.gitignore: -------------------------------------------------------------------------------- 1 | *.d 2 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/no-vm/Rubric: -------------------------------------------------------------------------------- 1 | Functionality of features that VM might break: 2 | 3 | 1 multi-oom 4 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/open-empty.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (open-empty) begin 7 | (open-empty) end 8 | open-empty: exit(0) 9 | EOF 10 | pass; 11 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/open-normal.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (open-normal) begin 7 | (open-normal) end 8 | open-normal: exit(0) 9 | EOF 10 | pass; 11 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/rox-child.c: -------------------------------------------------------------------------------- 1 | /* Ensure that the executable of a running process cannot be 2 | modified, even by a child process. */ 3 | 4 | #define CHILD_CNT "1" 5 | #include "tests/userprog/rox-child.inc" 6 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/rox-multichild.c: -------------------------------------------------------------------------------- 1 | /* Ensure that the executable of a running process cannot be 2 | modified, even in the presence of multiple children. */ 3 | 4 | #define CHILD_CNT "5" 5 | #include "tests/userprog/rox-child.inc" 6 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/sc-bad-arg.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sc-bad-arg) begin 7 | sc-bad-arg: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/sc-bad-sp.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sc-bad-sp) begin 7 | sc-bad-sp: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/sc-boundary-2.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sc-boundary-2) begin 7 | sc-boundary-2: exit(67) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/sc-boundary-3.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sc-boundary-3) begin 7 | sc-boundary-3: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/sc-boundary.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | (sc-boundary) begin 7 | sc-boundary: exit(42) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/stack-align-0.c: -------------------------------------------------------------------------------- 1 | /* Does absolutely nothing. */ 2 | 3 | #include "tests/lib.h" 4 | 5 | int main(int argc UNUSED, char* argv[] UNUSED) { 6 | register unsigned int esp asm("esp"); 7 | return esp % 16; 8 | } 9 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/userprog/stack-align-0.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected ([<<'EOF']); 6 | stack-align-0: exit(12) 7 | EOF 8 | pass; 9 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/vm/mmap-unmap.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::vm::process_death; 6 | 7 | check_process_death ('mmap-unmap'); 8 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/vm/page-merge-mm.c: -------------------------------------------------------------------------------- 1 | #include "tests/main.h" 2 | #include "tests/vm/parallel-merge.h" 3 | 4 | void test_main(void) { parallel_merge("child-qsort-mm", 80); } 5 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/vm/page-merge-par.c: -------------------------------------------------------------------------------- 1 | #include "tests/main.h" 2 | #include "tests/vm/parallel-merge.h" 3 | 4 | void test_main(void) { parallel_merge("child-sort", 123); } 5 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/vm/page-merge-stk.c: -------------------------------------------------------------------------------- 1 | #include "tests/main.h" 2 | #include "tests/vm/parallel-merge.h" 3 | 4 | void test_main(void) { parallel_merge("child-qsort", 72); } 5 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/vm/parallel-merge.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTS_VM_PARALLEL_MERGE 2 | #define TESTS_VM_PARALLEL_MERGE 1 3 | 4 | void parallel_merge(const char* child_name, int exit_status); 5 | 6 | #endif /* tests/vm/parallel-merge.h */ 7 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/vm/pt-bad-addr.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::vm::process_death; 6 | 7 | check_process_death ('pt-bad-addr'); 8 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/vm/pt-grow-bad.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | check_expected (IGNORE_USER_FAULTS => 1, [<<'EOF']); 6 | (pt-grow-bad) begin 7 | pt-grow-bad: exit(-1) 8 | EOF 9 | pass; 10 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/vm/pt-write-code.ck: -------------------------------------------------------------------------------- 1 | # -*- perl -*- 2 | use strict; 3 | use warnings; 4 | use tests::tests; 5 | use tests::vm::process_death; 6 | 7 | check_process_death ('pt-write-code'); 8 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/tests/vm/qsort.h: -------------------------------------------------------------------------------- 1 | #ifndef TESTS_VM_QSORT_H 2 | #define TESTS_VM_QSORT_H 1 3 | 4 | #include 5 | 6 | void qsort_bytes(unsigned char* buf, size_t size); 7 | 8 | #endif /* tests/vm/qsort.h */ 9 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/threads/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | bochsrc.txt 3 | bochsout.txt 4 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/threads/Makefile: -------------------------------------------------------------------------------- 1 | include ../Makefile.kernel 2 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/userprog/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | bochsrc.txt 3 | bochsout.txt 4 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/userprog/Makefile: -------------------------------------------------------------------------------- 1 | include ../Makefile.kernel 2 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/utils/.gitignore: -------------------------------------------------------------------------------- 1 | setitimer-helper 2 | squish-pty 3 | squish-unix 4 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/vm/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | bochsrc.txt 3 | bochsout.txt 4 | -------------------------------------------------------------------------------- /staff_solution_proj1/src/vm/Makefile: -------------------------------------------------------------------------------- 1 | include ../Makefile.kernel 2 | -------------------------------------------------------------------------------- /staff_solution_proj1/test.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shengxiang-Lin/COMPSCI-162/17a57f5441af44f47c6fe919b841cd15fe715a85/staff_solution_proj1/test.txt --------------------------------------------------------------------------------