# ECNU-OSLab-2025-Task **Repository Path**: xu-ke-123/ecnu-oslab-2025-task ## Basic Information - **Project Name**: ECNU-OSLab-2025-Task - **Description**: 华东师范大学-计算机科学与技术学院-操作系统实验仓库 实验内容:从0到1的小型内核实现 维护者:石亮(老师)、夏浩东(助教)、许珂(助教) - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 7 - **Forks**: 2 - **Created**: 2025-09-15 - **Last Updated**: 2026-04-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ECNU OSLab 2025 ## 简介 本实验是华东师范大学计算机科学与技术学院的**操作系统课程实验(2025秋)** (由石亮教授授课, 助教夏浩东设计) 实验目标是基于C语言和RISC-V体系结构**从零开始设计实现一个简单的操作系统内核(大约5500行代码)** 建议参考MIT的xv6-riscv:**git://g.csail.mit.edu/xv6-labs-2020** (**util** 分支) ## 和MIT的xv6实验有何区别 - MIT的xv6实验本质上是**在一个基础的能运行的内核上做修改**以通过测试 你做的修改依赖于已有代码, 通常不需要增加或修改太多行代码就能达成目的 每次新的实验都基于新的分支, 不保留之前实验的修改 - 从0到1的OS实验并不基于任何已经能运行的内核, 你需要**从头开始一步步搭建内核** 这意味着你调用的几乎所有函数都是自己写的, 实验结束时你至少要产出3000+行代码 实验具有连续性, 你这次写的代码下次还会用到, 所以要对自己的代码负责 听起来更具挑战性, 但是不用太担心, 助教会提供大的逻辑框架, 你还能查看xv6的实现作为指导 - 三种类型的OS实验: **锦上添花型**: 基于一个完整的能运行的内核, 增加新的功能或特性, 如xv6 **完型填空型**: 内核基本完整, 但是在某些函数中挖去了一部分关键代码等你来填, 如chcore **从零开始型**: 给出设计框架和各阶段目标, 从头开始一步步实现一个简单内核 ## 从头开始“造轮子”有什么意义 已知现有的OS内核都是千万行级别的代码, 完全不是一个人能搞定的, 那造一个这样简单的轮子有什么用呢? 1. 首先, 作为这个领域的初学者, 要想深刻体会OS内核的运行原理, 光靠阅读别人的代码是远远不够的 最好一边阅读一边动手实现简单的demo, 这个demo不需要复杂的算法和优异的性能, 只需要体现最基础最核心的设计思想 **每一个优秀的车辆工程师在小时候总是拆过和装过许多玩具汽车** 2. 其次, 跳脱出操作系统这个大背景, 动手写内核也是锻炼软件系统级别编程能力的好机会 真实的软件开发不可能像算法比赛一样提交单个文件就够了 你可以把它单纯看作一个普通的项目去开发, 了解如何编写和管理一个多文件的大型项目 ## 实验开始前的准备 1. 基础知识: 建议超过课程进度, 尽快学习完OS的基本知识, 不用很深入但是要有了解 2. 环境配置: 我们沿用xv6-riscv-2020的实验环境, 以能成功运行xv6-riscv-2020为检验标准 3. 常用工具: vscode + git + markdown 4. 编译纠错: Makefile + gcc + gdb + 程序编译运行基本知识 5. 其他知识: C语言语法(尤其是多文件组织) + qemu简单了解 + risc-v简单了解 ## 你能获得的帮助 1. 助教会为每一次实验搭建框架, 并提供必要的代码 (通常是硬件相关和Makefile) 2. 助教会为每一次实验编写实验指导书和PPT, 介绍实验目标、背景知识、实验思路、测试用例等 3. xv6的资料非常多, 代码也是开源的, 你应该多阅读多思考 4. 我们会建立一个课程实验的微信群, 有问题可以发到群里, 鼓励大家互帮互助 ## 你需要具备的素养 1. 热爱OS并愿意付出相当比例的时间投入这个实验, 混子劝退 2. 能够独立思考和独立解决问题, 写内核遇到的问题会比普通的实验多得多, 大多数时间只能靠自己 3. 对系统底层原理有好奇心, 不希望只是调用成熟接口, 希望自己动手实现自己调用的函数 4. 能够静下心 Code and Debug, 平静面对失败, 永不言弃 ## 让我们开始:建立仓库 1. 在线上建立代码托管仓库(小白建议使用gitee, 国产的没有网络问题), git clone到本地 2. 在本地使用Markdown编写README文件, 简单介绍你的项目 3. 练习和熟悉 vscode + git + markdown, 后面需要长期用到