# 操作系统实践课 **Repository Path**: fu--fu/OSClass ## Basic Information - **Project Name**: 操作系统实践课 - **Description**: 操作系统实践课,一步步从0搭建出自己的操作系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-23 - **Last Updated**: 2025-12-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RISC-V OS 项目 一个基于RISC-V架构的教学型操作系统,实现了完整的内存管理、进程管理和调度系统。 ## 🎯 项目特性 ### 已实现功能 - ✅ **物理内存管理(PMM)** - 页式内存分配 - 空闲页管理 - 内存统计 - ✅ **虚拟内存管理(VMM)** - 三级页表(Sv39) - 地址映射 - 页表遍历和销毁 - ✅ **进程管理** - 进程创建/销毁 - fork系统调用 - 进程树管理 - 进程状态转换 - 优先级管理 - ✅ **进程调度** - 轮转调度(Round Robin) - 优先级调度(Priority) - 多级反馈队列(MLFQ) - 简化版CFS - ✅ **同步原语** - 自旋锁(Spinlock) - 信号量(Semaphore) - 条件变量(Condition Variable) - 读写锁(Read-Write Lock) - ✅ **上下文切换** - 寄存器保存/恢复 - 栈切换 - 调度器切换 ## 📁 项目结构 ``` riscv-os/ ├── kernel/ │ ├── proc/ # 进程管理 │ │ ├── proc.c # 进程管理核心 │ │ ├── swtch.S # 上下文切换 │ │ ├── sched.c # 调度算法 │ │ └── sched.h # 调度器接口 │ ├── sync/ # 同步原语 │ │ ├── sem.c # 信号量、条件变量、读写锁 │ │ └── sem.h │ ├── mm/ # 内存管理 │ └── test/ # 测试用例 ├── docs/ # 文档 │ ├── LAB5_PROCESS_MANAGEMENT.md # 实验5详细文档 │ ├── 实验5_快速使用指南.md # 快速使用指南 │ └── 实验5_实现总结.md # 实现总结 └── README.md ``` ## 🚀 快速开始 ### 环境要求 - RISC-V工具链(riscv64-unknown-elf-gcc) - QEMU模拟器(qemu-system-riscv64) - Make构建工具 ### 编译与运行 ```bash cd kernel make clean make make qemu ``` ## 📖 文档 ### 实验5:进程管理与调度 - **[详细实验文档](docs/LAB5_PROCESS_MANAGEMENT.md)** - 完整的理论基础、实现细节和设计决策 - **[快速使用指南](docs/实验5_快速使用指南.md)** - API参考、典型场景和调试技巧 - **[实现总结](docs/实验5_实现总结.md)** - 功能清单、性能指标和学习建议 ## 💻 使用示例 ### 创建进程 ```c #include "proc.h" void my_task(void) { printf("Hello from process!\n"); } int main() { proc_init(); int pid = create_process(my_task, "my_task"); scheduler(); // 启动调度器 } ``` ### Fork进程 ```c int pid = fork_process(); if(pid == 0) { printf("I am child\n"); exit_process(0); } else { int status; wait_process(&status); } ``` ### 使用信号量 ```c #include "sync/sem.h" struct semaphore mutex; sem_init(&mutex, 1, "mutex"); sem_wait(&mutex); // 临界区 sem_signal(&mutex); ``` ## 🧪 测试 ```c #include "test/test_proc_advanced.h" test_process_advanced(); // 运行完整测试套件 // 或运行特定测试 test_fork_basic(); // Fork测试 test_mlfq_sched(); // MLFQ调度测试 test_semaphore(); // 信号量测试 ``` ## 🎓 学习资源 1. **《xv6手册》** - MIT 6.S081课程 2. **《操作系统概念》** - Silberschatz等著 3. **RISC-V规范** - https://riscv.org/specifications/ ## 🙏 致谢 本项目参考了xv6操作系统的设计思想,感谢MIT PDOS实验室的优秀工作。 --- **祝你学习愉快!** 🎉