我的Xv6实验代码,基于 原仓库(git://g.csail.mit.edu/xv6-labs-2020
)
分支 util
- 实现Xv6的编译、启动
- 编写
sleep
find
等一些用户态应用程序,以熟悉Xv6。
分支 syscall
- 实现
trace
用于跟踪系统调用 - 实现
sysinfo
用于获取系统信息。
分支 pagetable
- 实现
vmprint
用于打印页表 - 实现各进程独立的内核页表
- 将用户页表中的映射内容同步到内核页表,以便内核态可以直接访问用户态的内存。
分支 traps
- 实现
backtrace
用于打印函数调用栈 - 利用时钟中断实现自定义定时器
alarm
分支 lazy
- 基于
page fault
实现惰性内存分配
分支 cow
- 基于
page fault
实现写时复制,优化fork
的性能 - 基于引用计数维护内存页的生命周期
分支 thread
- 实现用户态线程切换
uthread
- (非Xv6) 利用
pthread_mutex
修复并发bug - (非Xv6) 利用
pthread_cond
实现barrier
分支 lock
- 实现多核内存分配器,优化
kalloc
性能 - 利用哈希桶优化
bcache
,减少锁的竞争
分支 fs
- 为原有
inode
添加二级间接索引,以支持更大的文件 - 实现符号链接文件
symlink
,并在其他系统调用中提供支持
分支 mmap
- 实现
mmap
系统调用,以支持内存映射文件 - 实现
munmap
系统调用,以支持解除内存映射 - 需要支持最基本的
mmap
特性(MAP_PRIVATE
MAP_SHARED
) munmap
需要支持部分解除映射,必要时立即将修改写回文件
分支 net
- 补全
e1000
网卡驱动,以支持Xv6的网络功能 - 需要根据手册
e1000_transmit
e1000_receive
功能,即发送和接收数据包