XV6实验
XV6 Labs
参考
Lab Utils
- Slepp实验:写一个用户程序,调用sleep system call实现,执行sleep 10,表示程序等待10个时钟周期
- pingpong实验:写一个程序,使用unix system calls在两个进程间”ping-pong“一个字节,使用一对pipe,一个pipe对应一个方向,另外一个pipe对应另外一个方向
- find实验:实现find用户程序 ,即在某个路径中,找出某个文件
- xargs实验:实现类似unix xargs类似功能,比如echo hello too|xargs echo bye,要输出bye hello too
Lab System Calls
- System call tracing实验:实现
trace
系统调用,跟踪指定的系统调用 - Sysinfo实验:实现一个
sysinfo
系统调用,可以实现打印当前空闲内存大小(字节)、可用进程数
Lab Page tables
- Print a page table实验:定义一个函数,接收一个页表基址,并按指定格式打印各级PTE的地址和内容
- A kernel page table per process实验:原始XV6中每个进程的PCB里只有用户空间的页表,该实验需要修改PCB,让每个进程也维护一个独立的内核页表,且该内核页表与全局的内核页表相同
- Simplify copyin/copyinstr实验:在上一个lab的基础上,在每个进程的内核页表中,也加上用户空间的映射。这样的话在内核中调用copyin/copyinstr就可以直接使用用户空间的地址了,不必像之前那样,由于内核页表中没有用户空间地址的映射,得先手动把传入的user_addr翻译成物理地址再进行数据的传递
Lab Traps
- Back trace实验:在内核中实现一个
backtrace()
函数,通过边历各级栈帧打印当前的函数调用链 - Alarm实验:添加一个新的
sigalarm(interval, handler)
系统调用(类似一个用户级的中断)。如果一个应用调用sigalarm(n, fn)
,那么在每n ticks个cpu time后,kernel应该导致应用函数fn被调用
Lab Lazy allocation
- Eliminate allocation from sbrk()实验:为实现内存惰性分配做铺垫,在使用该函数时,内核不再立即分配物理内存,仅修改PCB里的堆顶位置变量
sz
- Lazy allocation实验:实现内核对于来自用户空间的page fault的处理,实现内存惰性分配
- Lazytests and Usertests实验:继续修改内核内存分配相关的代码,让这些测试全能通过,主要是处理一些特殊情况
Lab Copy on Write
- COW fork实验:利用page fault实现fork系统调用的写时复制机制
Lab Multithreading
- Uthread:switching between threads实验:实现用户级的线程
- Using threads实验:优化用户级的线程
- Barrier实验:实现同步屏障
Lab Lock
- 分别在物理内存⻚管理和⽂件缓存⻚管理这两个场景中降低锁竞争,提⾼并发程度进⽽提升性能
Lab File system
- 让xv6支持大文件(原来只支持268MB以下的⽂件)
- 实现符号链接(软链接)
Lab mmap
- 实现mmap系统调用
Lab network driver
- 为网卡(NIC)编写⼀个xv6设备驱动程序
简历写法
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.