我的Xv6实验代码,基于 原仓库(git://g.csail.mit.edu/xv6-labs-2020)
分支 util
- 实现Xv6的编译、启动
- 编写
sleepfind等一些用户态应用程序,以熟悉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_PRIVATEMAP_SHARED) munmap需要支持部分解除映射,必要时立即将修改写回文件
分支 net
- 补全
e1000网卡驱动,以支持Xv6的网络功能 - 需要根据手册
e1000_transmite1000_receive功能,即发送和接收数据包