安徽理工大学 小型内核实现
项目信息
项目详情
项目名称 | 基于xv6-riscv的娱乐型操作系统 |
---|---|
项目编号 | T202410361994439 |
指导老师 | 蒋社想 |
队伍成员 | 罗献政、史金鹏、蒋成浩 |
队伍名称 | 憋说啊,一切从容应对! |
项目概述
本项目基于xv6-riscv
操作系统,旨在实现一个娱乐型操作系统。我们在xv6-riscv
的基础上增加了路径相关系统调用、工作目录的显示,并实现了部分函数。该项目不仅是一个学习操作系统原理的平台,也是一个展示团队协作和创新能力的机会。
环境依赖
- 操作系统: Ubuntu 20.04
- QEMU版本: Qemu-7.0.0 for RISC-V64
-
编译工具:
riscv64-unknown-elf-*
系列编译器
运行方式
-
编译并运行: 在项目根目录下执行以下命令进行编译并启动QEMU:
make qemu
-
调试模式: 如果需要调试,可以按照以下步骤操作:
-
在第一个终端中启动QEMU并等待GDB连接:
make qemu-gdb
-
在第二个终端中启动GDB并连接到QEMU:
gdb-multiarch kernel-qemu
配置GDB:
set architecture riscv:rv64 target remote :1234
-
-
恢复项目环境: 如果需要清理项目并恢复到初始状态,可以执行以下命令:
make clean
项目结构
项目的文件组织结构如下:
.
├── kernel/ # 内核相关代码
│ ├── entry.S # 启动模块
│ ├── bio.c # 块I/O操作
│ ├── console.c # 控制台处理
│ ├── exec.c # 进程执行
│ ├── file.c # 文件操作
│ ├── fs.c # 文件系统模块
│ ├── kalloc.c # 内核内存分配器
│ ├── kernel.ld # 内核链接脚本
│ ├── kernelvec.S # 内核向量表
│ ├── log.c # 日志函数
│ ├── main.c # 主内核初始化
│ ├── pipe.c # 管道操作
│ ├── plic.c # 平台级中断控制器
│ ├── printf.c # 打印函数
│ ├── proc.c # 进程模块
│ ├── ramdisk.c # RAM磁盘支持
│ ├── sleeplock.c # 睡眠锁机制
│ ├── spinlock.c # 锁机制模块
│ ├── start.c # 内核启动代码
│ ├── string.c # 字符串操作函数
│ ├── swtch.S # 上下文切换汇编代码
│ ├── syscall.c # 系统调用模块
│ ├── sysfile.c # 系统文件操作
│ ├── trap.c # 中断异常模块
│ └── vm.c # 内存管理模块
|── user/ # 用户态相关代码
| ├── cat.c # 文件查看工具
| ├── echo.c # 输出文本工具
| ├── forktest.c # 测试进程创建
| ├── grep.c # 文本搜索工具
| ├── grind.c # 性能测试工具
| ├── init.c # 初始化程序
| ├── initcode.S # 初始化代码(汇编)
| ├── kill.c # 发送信号给进程
| ├── ln.c # 创建链接
| ├── ls.c # 列出目录内容
| ├── mkdir.c # 创建目录
| ├── printf.c # 打印格式化字符串
| ├── pwd.c # 显示当前工作目录
| ├── rm.c # 删除文件或目录
| ├── sh.c # Shell解释器
| ├── stressfs.c # 文件系统压力测试
| ├── ulib.c # 用户库函数
| ├── umalloc.c # 用户空间内存分配
| ├── user.h # 用户态头文件
| ├── user.ld # 用户态链接脚本
| ├── usertests.c # 用户态测试程序
| ├── usys.pl # 用户态系统调用接口
| ├── wc.c # 统计行、字和字符数
| └── zombie.c # 处理僵尸进程
|—— mkfs/
|—— mkfs # 创建文件系统
代码模块
内核模块
-
机器启动模块: 负责初始化硬件和加载内核。 详细文档
-
内存管理模块: 实现页表管理和物理内存分配。 详细文档
-
进程模块: 实现进程创建、调度和同步。 详细文档
-
文件系统模块: 实现文件系统的读写操作、目录管理和路径解析。 详细文档
-
信号相关模块: 实现信号处理机制。
-
系统调用模块: 提供用户态和内核态之间的接口。
-
中断异常模块: 处理硬件中断和异常。
-
锁机制模块: 实现自旋锁和睡眠锁,确保并发安全。
-
相关库模块: 提供常用的库函数,如字符串操作、内存拷贝等。
-
设备管理模块: 实现UART、磁盘等设备的驱动程序。 详细文档
完成情况
- 新增路径相关系统调用: 实现了路径解析和文件查找的功能。
- 工作目录显示: 实现了当前工作目录的显示功能。
- 增加了pwd命令实现
- 实现了子工作目录下执行命令
- 部分函数实现: 实现了一些辅助函数,增强了系统的功能。
代码参考
本项目参考了xv6-riscv
的教学操作系统,具体参考链接如下:
未来计划
- 解决当前遗留bug: 修复已知问题,提升系统的稳定性和性能。
- 设计合适的项目组织结构: 优化代码结构,提高代码的可维护性和扩展性。
- 完善文件系统: 增强文件系统的功能,支持更多的文件操作和权限管理。
- 完善内存和进程模块: 优化内存管理和进程调度算法,提升系统的效率。
- 增加网络相关模块: 实现基本的网络通信功能,使系统能够与其他设备进行交互。
总结
本项目基于xv6-riscv
操作系统,通过增加路径相关系统调用、工作目录显示等功能,构建了一个娱乐型的操作系统。我们希望通过这个项目,不仅能够深入理解操作系统的工作原理,还能够在实践中提升编程能力和团队协作能力。未来,我们将继续完善项目,增加更多功能,使其成为一个更加完整和实用的操作系统。