user avatar
code and readme is update
lxz authored
71ca75d6

安徽理工大学 小型内核实现

项目信息

项目详情

项目名称 基于xv6-riscv的娱乐型操作系统
项目编号 T202410361994439
指导老师 蒋社想
队伍成员 罗献政、史金鹏、蒋成浩
队伍名称 憋说啊,一切从容应对!

项目概述

本项目基于xv6-riscv操作系统,旨在实现一个娱乐型操作系统。我们在xv6-riscv的基础上增加了路径相关系统调用、工作目录的显示,并实现了部分函数。该项目不仅是一个学习操作系统原理的平台,也是一个展示团队协作和创新能力的机会。


环境依赖

  • 操作系统: Ubuntu 20.04
  • QEMU版本: Qemu-7.0.0 for RISC-V64
  • 编译工具: riscv64-unknown-elf-* 系列编译器

运行方式

  1. 编译并运行: 在项目根目录下执行以下命令进行编译并启动QEMU:

    make qemu
  2. 调试模式: 如果需要调试,可以按照以下步骤操作:

    • 在第一个终端中启动QEMU并等待GDB连接:

      make qemu-gdb
    • 在第二个终端中启动GDB并连接到QEMU:

      gdb-multiarch kernel-qemu

      配置GDB:

      set architecture riscv:rv64
      target remote :1234
  3. 恢复项目环境: 如果需要清理项目并恢复到初始状态,可以执行以下命令:

    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的教学操作系统,具体参考链接如下:


未来计划

  1. 解决当前遗留bug: 修复已知问题,提升系统的稳定性和性能。
  2. 设计合适的项目组织结构: 优化代码结构,提高代码的可维护性和扩展性。
  3. 完善文件系统: 增强文件系统的功能,支持更多的文件操作和权限管理。
  4. 完善内存和进程模块: 优化内存管理和进程调度算法,提升系统的效率。
  5. 增加网络相关模块: 实现基本的网络通信功能,使系统能够与其他设备进行交互。

总结

本项目基于xv6-riscv操作系统,通过增加路径相关系统调用、工作目录显示等功能,构建了一个娱乐型的操作系统。我们希望通过这个项目,不仅能够深入理解操作系统的工作原理,还能够在实践中提升编程能力和团队协作能力。未来,我们将继续完善项目,增加更多功能,使其成为一个更加完整和实用的操作系统。