本项目基于CS162开源架构Pintos,在原先简单的Pintos系统上实现了: 一、同步: 实现了优先级调度算法,支持优先级捐赠。 实现了4.4BSD调度算法,支持线程动态地更新优先级 优化了时间片计时功能,进而优化了原先“忙等待”的线程让出机制,
二、用户程序: 实现了进程管理、文件操作等系统调用 拓展了PCB的用途:使其可以跟踪父子进程、记录进程的文件描述符等 严格检查了系统调用时的参数传递:主要依赖硬件级MMU的地址检查,辅以页错误机制处理错误地址
三、虚拟内存 实现了按需分页:虚拟内存中的地址只有在初次访问时才从物理内存中申请页空间 实现了页替代算法:使用时钟算法在物理空间的层面上替换掉访问频率低的页 实现了内存映射:对于进程访问的文件,不再频繁地I/O,而是提供了将文件映射到内存中的接口 重塑了进程代码段、静态数据段、动态数据段的加载。 实现了页交换机制:提供了SWAP磁盘分区用以接纳内存紧张时非0或不可写回文件的页
四、文件系统 重塑了原先的inode结构:可以更加灵活地、碎片化地利用磁盘中的扇区 实现了文件的扩张机制,允许暂不分配文件中间连续为空的扇区 实现了磁盘块的缓存机制,不再因为某些inode数值改动频繁地写回磁盘 实现了多层次的目录机制,可以像大多数操作系统一样进行目录的嵌套
环境要求: Ubuntu 18.04+ 或类似Linux环境 GCC 编译工具链 QEMU 或 Bochs 模拟器
编译命令: cd src/vm make
运行测试: make check PROJECT=1 make check PROJECT=2 make check PROJECT=3 make check PROJECT=4