# Labs

- [Lab 1 Xv6 and Unix utilities](/build_a_os/labs/lab-1-xv6-and-unix-utilities.md): Implement some user tools.
- [Lab 2 Shell](/build_a_os/labs/lab-2-shell.md): Write a simple shell in OS
- [Lab 3 Buddy Allocator](/build_a_os/labs/lab-3-buddy-allocator.md): Understand and improve physical memory allocator
- [Lab 4 Lazy](/build_a_os/labs/lab-4-lazy.md): Allocate user memory lazily
- [Lab 5 Copy-on-Write Fork for xv6](/build_a_os/labs/lab-5-copy-on-write-fork-for-xv6.md): Your task is to implement copy-on-write fork in the xv6 kernel
- [Lab 6 RISC-V assembly](/build_a_os/labs/lab-6-risc-v-assembly.md): warmup and learn assembly
- [Lab 6 Uthread: switching between threads](/build_a_os/labs/lab-6-uthread-switching-between-threads.md): Design the context switch mechanism for a user-level threading system
- [Lab 6 Alarm](/build_a_os/labs/lab-6-alarm.md): Implement a primitive form of user-level interrupt/fault handlers.
- [Lab 7 Lock](/build_a_os/labs/lab-7-lock.md): Re-designing code to increase parallelism
- [Lab 8 File System: Large Files](/build_a_os/labs/lab-8-file-system-large-files.md): Increase the maximum size of an xv6 file.
- [Lab 8 File System: Symbolic links](/build_a_os/labs/lab-8-file-system-symbolic-links.md): Add symbolic links to xv6
- [Lab 9 mmap](/build_a_os/labs/untitled.md): Implement features relevant to memory-mapping a file
- [Lab 10 Networking Part 1](/build_a_os/labs/lab-10-networking-part-1.md): Complete the implementation of the E1000 networking driver
- [Lab 10 Networking Part 2](/build_a_os/labs/lab-10-networking-part-2.md): Implement network sockets
