# OSLab **Repository Path**: sethan/oslab ## Basic Information - **Project Name**: OSLab - **Description**: 北航(BUAA)计算机学院/软件学院2024年操作系统课程设计,实现了一个相对完整的MOS操作系统。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: docs - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-03-07 - **Last Updated**: 2025-03-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MOS (MIPS Operating System) 实验项目 一个基于 MIPS 架构的简易操作系统实现,包含内存管理、进程调度、文件系统、进程间通信等核心功能。本项目为北京航空航天大学计算机学院《操作系统》课程实验成果,涵盖 Lab0 至 Lab6 的全部内容。 --- ## 📖 项目概述 本项目通过逐步实现操作系统的核心模块,深入理解操作系统的工作原理。实验内容覆盖以下主题: - **Lab0**: 实验环境搭建与工具链使用(Git、Shell、Makefile) - **Lab1**: ELF 文件解析与启动过程 - **Lab2**: 物理内存管理与页表机制 - **Lab3**: 进程管理与调度 - **Lab4**: 系统调用与 fork 机制 - **Lab5**: 文件系统设计与实现 - **Lab6**: 管道通信与 Shell 实现 --- ## 🛠️ 功能特性 - **内存管理** 支持二级页表、TLB 管理、ASID 机制,实现虚拟地址到物理地址的转换。 - **进程调度** 基于优先级的时间片轮转调度算法,支持进程创建、销毁及上下文切换。 - **文件系统** 实现类 UNIX 文件系统结构,支持文件读写、目录管理及文件描述符机制。 - **进程通信** 通过匿名管道实现进程间通信,支持 `|` 重定向操作。 - **Shell 交互** 支持基本命令解析、外部程序加载(如 `ls.b`、`cat.b`)及管道操作。 --- ## 🧩 实验内容速览 ### Lab1: ELF 解析与启动 - 实现 `readelf` 工具解析 ELF 文件头 - 理解 MIPS 上电启动流程与内核加载机制 ### Lab2: 物理内存管理 - 实现双向链表管理空闲页 - 设计二级页表结构,支持 `page_alloc` 和 `page_free` ### Lab3: 进程管理 - 定义进程控制块(PCB)结构 - 实现进程调度器与时钟中断处理 ### Lab4: 系统调用与 fork - 添加系统调用入口(如 `syscall_exofork`) - 实现写时复制(Copy-on-Write)机制 ### Lab5: 文件系统 - 生成文件系统镜像 `fs.img` - 实现磁盘布局(超级块、位图、数据块) - 支持 `open`/`read`/`write` 系统调用 ### Lab6: 管道与 Shell - 通过共享内存实现匿名管道 - 支持 Shell 命令链式调用(如 `ls.b | cat.b > motd`) --- ## 🛠️ 环境配置 ### 依赖工具 - **模拟器**: QEMU(MIPS 版本) - **编译工具链**: MIPS交叉编译工具链(`mips-linux-gnu-gcc`) - **调试工具**: GDB(配合 QEMU 远程调试) ### 环境安装(Ubuntu) ```bash # 安装依赖 可能需要安装的依赖包: build-essential cpp gcc gcc-12-multilib g++ gdb gcc-mips-linux-gnu gdb-multiarch make binutils autoconf clang clang-format valgrind ctags python3-pyelftools git vim nano Shell zsh tmux QEMU qemu-system-mips qemu-utils qemu-user # 克隆仓库 git clone https://gitee.com/sethan/oslab.git cd OSLab ``` --- ## 🚀 编译与运行 ### 编译内核 ```bash make # 编译当前实验阶段的内核 make fs-image # 生成文件系统镜像(仅 Lab5+) make qemu # 启动 QEMU 运行内核 ``` ### GDB 调试 ```bash make dbg_run # 启动 QEMU 并等待 GDB 连接 make dbg # 附加 GDB 调试器 make connect # 连接 QEMU 串口终端(需先运行 dbg_pts) ``` --- ## 📚 实验阶段管理 通过 `.mos-this-lab` 文件指定当前实验阶段(默认为 Lab6),编译时将自动启用对应功能: ```bash echo 2 > .mos-this-lab # 切换到 Lab2(物理内存管理) make clean && make # 重新编译 ``` --- ## 📚 实验报告与思考题 每个实验的详细分析与思考题解答可参考对应报告: - [Lab1 报告](./docs/lab1实验报告.md) - [Lab2 报告](./docs/lab2实验报告.md) - [Lab3 报告](./docs/lab3实验报告.md) - [Lab4 报告](./docs/lab4实验报告.md) - [Lab5 报告](./docs/lab5实验报告.md) - [Lab6 报告](./docs/lab6实验报告.md) --- ## 🙌 贡献与许可 - **许可证**:本项目基于 MIT 许可证开源,详见 [LICENSE](./LICENSE)。 --- > 🌟 提示:实验代码与报告为课程学习记录,核心设计思路可复用,但请遵守学术诚信原则。