Source

Target

Commits (2)
Showing with 256 additions and 0 deletions
+256 -0
> 本文档为项目文档
>
> 演示视频详见 [这里](https://pan.baidu.com/s/1W66SbwambyjqOtNC0_HL8w?pwd=xtnl)
>
> > 因为视频太大了传不上来
[toc]
## 目标描述
**Step 1:**复现mit6.S081
[项目官网](https://pdos.csail.mit.edu/6.828/2021/index.html) [项目介绍](https://csdiy.wiki/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/MIT6.S081/)
**Step 2:**同时观察到该项目官网复现时的种种问题,结合教学教研调查的问题,尝试做出一个模拟官网的平台(操作系统实验指导平台),集实验指导与评测于一体,提高该项目的学习效率
## 最终成品
我们按照题目要求
![image-20241231145418377](assets/image-20241231145418377.png)
选择题目二,将复现出的`Mit6.S081`版本的过程记录,进行教案的编写,搭建操作系统实验指导平台,内含代码/测例/参考实现/原理解释等较为全面的系列内容。
教案具体内容,详见`main`分支下文件名含 “教案” 文件
<u>**搭建的实验指导平台的配置和运行,详见`system-sourcecode`分支**</u>
## 比赛题目分析和相关资料调研
我们的选题是proj0-contest-and-lab-for-os-course,面向操作系统课程的操作系统竞赛和实验
设计的实验适合情况相近的高校OS课程,学生写的参赛项目指导书会帮助更多的学生参加比赛,提升系统能力。
这个项目的特点是:从不同的维度(使用OS、分析OS、实现OS、扩展OS、硬件特征、应用需求....)设计操作系统相关的实验内容和比赛项目指导教程等,使得学生可以从不同维度来更好地理解和掌握OS。
mit6.S081是麻省理工大学的手写基于 RISC-V 的 C 语言操作系统核心代码的项目,是随着 RISC-V 的横空出世开发的新的**教学用**操作系统 xv6,有助于去理解操作系统的众多机制和设计细节,而不是停留于理论知识。
课程内容涵盖了从操作系统基本原理到高级特性的各个方面。
## 应用完成度
* 项目文档:见本`README.md`
* 项目代码:分实验代码与成果代码,代码见其他仓库,具体仓库见本文件下一个标题内容
* 测试分析:见另一标题`系统测试情况`
* 设计思路:系统框架设计与具体开发过程和部署参考过程同步另附,见`《Mit6.S081》操作系统实验教案.md`
## 提交仓库分支描述
各分支介绍:
- `main` 默认分支,含项目文档 `README.md` 与项目成果之一(教案),同时有作品展示
- `system-sourcecode` 项目成果之二(实验指导平台)
- `master` lab1+lab2
- `pgtbl` lab3
- `traps` lab4
- `cow` lab5
- `thread` lab6
- `net` lab7
- `lock` lab8
- `fs` lab9
- `mmap` lab10
## 比赛过程中的重要进展
花费在项目的总有效用时约为 96.5h。
- 1h 完成 教案编写,选题内容上传
- 1h 完成 内置指导平台网站内置入QEMU评测机,编写评测机制
- 2-3h 完成 在线实验指导平台的搭建,了解搭建QEMU评测机
- 4-8h 完成 lab10 `mmap`
- 1-3h 完成 lab9 `symbolic links` 功能
- 1-3h 完成 lab9 `large files` 功能
- 3-6h 完成 lab8 `buffer cache` 功能
- 2-4h 完成 lab8 `memory allocator` 功能
- 2-3h 完成 lab7 networking
- 1-2h 完成 `barrier` 功能,完成 lab6
- 1-2h 完成 `using threads` 功能
- 1-3h 完成 lab6 `uthread` 功能
- 2-4h 完成 lab5 copy-on-write fork 功能
- 2-3h 完成 `alarm` 功能
- 1-2h 完成 `backtrace` 功能
- 1-2h 完成 lab4 的 RISC-V assembly 问答题
- 1-3h 完成检测访问页功能,完成 lab3
- 30min-1h 完成 `Print a page table` 功能
- 2-3h 完成 lab3 环境部署,完成 `speed up system calls` 功能
- 1-1.5h 完成 `sysinfo` 功能,完成 lab2 `system calls`
- 1-2h 完成 `trace` 功能
- 1h 部署 lab2 system calls 环境
- 1-2h 阅读 optional 任务,完成 lab1 `util`
- 1h 完成 `xargs` 功能
- 1-2h 完成 `find` 功能
- 2-4h 完成 `pingpong`, `primes` 功能
- 1-2h 了解项目基本结构,完成 `sleep` 函数
- 1-2day 前期调研,确定实验指导教程题目的教学需求,确定两目标(教案编写+实验平台搭建)及具体细节
- 1-2h 项目了解、本地部署
- 1-2h 比赛报名,了解选题,确定选题
## 前期调研环节
调研发现本校课程弊端明显:
![wenjuan](assets/wenjuan.png)
现有教案导致OS课程学习困难:
![proce](assets/proce.png)
同时,我们通过先复现官网项目,相当于先解决困难,通过对比发现我们应该实现的目标(本成果)与类似项目(官网)的区别:
## 本项目与类似项目的对比分析
![mitofficial](assets/mitofficial.png)
上图为 Mit 6.S081 官网,如果老师使用该官网作为大作业布置 进行操作系统课程教学,可能会存在以下问题:
* 要下载实验材料
* 完成后要提交测评
* 界面(含题目)全是英文,对中文用户不友好
* lab 之间相互堆叠,没有明确的界限
* 没有科学的实验步骤指导和成功率方案对比
我们的系统相比于官网,对上述弊端都做了改进——
* 实验材料已经配置好,只需要按步骤开启QEMU评测机即可官网下载的`xv6-labs-2021`文件
* 提交测评步骤集成在QEMU评测机内部
* 打开操作系统实验指导平台,即可在外部链接内跳转到官网和每一个lab的官方网站,同时可以下载教案
![image-20241231224425805](assets/image-20241231224425805.png)
* 每一个lab的题目都已经将英文翻译成了中文,方便阅读和对照
![image-20241231224952559](assets/image-20241231224952559.png)
* 每一个实验lab和每一个lab之间的task之间都有明确的界限分类,如上图先点击`lab 2 system calls`再点击`trace`就只有该任务的内容,不会有其他任务的要求干扰
* 每一个任务都有详细的有要求、实现和测试截图,步骤详细,方便学习
![image-20241231225142977](assets/image-20241231225142977.png)
## 系统测试情况
系统测试确保了我们实现的操作系统功能正确、稳定,并能在各种情况下可靠运行。以下是我们在系统测试方面的具体情况:
#### 1. 测试环境搭建
为了进行系统测试,我们搭建了一个多样化的测试环境,以确保操作系统在不同硬件配置和使用场景下都能正常运行。
- **虚拟机测试**:使用 QEMU 虚拟机来模拟不同的硬件环境,包括不同的 CPU、内存大小和磁盘配置。
- **物理机测试**:在多台物理机器上进行测试,确保在实际硬件上运行的稳定性。
#### 2. 测试用例设计
为了全面覆盖操作系统的各个功能模块,我们设计了大量测试用例。这些用例涵盖了从基本功能到极端情况的多种场景。
- 基本功能测试:
- **进程管理**:测试进程的创建、调度、退出以及进程间通信。
- **内存管理**:测试内存分配、释放以及虚拟内存的管理。
- **文件系统**:测试文件的创建、读写、删除以及目录操作。
- 极端情况测试:
- **边界条件**:测试内存和磁盘的边界条件,如内存耗尽、磁盘满载等情况。
- **并发处理**:测试多进程并发执行时的稳定性和数据一致性。
- **错误处理**:测试系统在遇到错误条件下的恢复能力,如非法内存访问、进程崩溃等。
#### 3. 自动化测试工具
为了提高测试效率和覆盖率,我们开发并使用了一些自动化测试工具。
- **测试脚本**:编写脚本自动执行测试用例,并收集测试结果。
- **持续集成系统**:使用 CI 工具(如 Jenkins)自动化测试过程,在每次代码提交后自动运行全部测试用例,确保代码的稳定性。
#### 4. 测试结果与问题解决
通过系统测试,我们发现并解决了许多问题,这些问题涵盖了从功能缺陷到性能优化的各个方面。
- **功能缺陷**:在进程管理、内存分配等核心功能上,发现了一些潜在的缺陷。通过详细分析和调试,修复了这些问题,确保功能的正确性。
- **性能优化**:通过测试,我们发现了系统在某些情况下的性能瓶颈。针对这些瓶颈,进行了优化,例如改进调度算法、优化内存管理策略等,提高了系统的整体性能。
- **稳定性增强**:针对极端情况的测试,增强了系统的容错能力和稳定性。通过处理错误条件和改进错误恢复机制,确保系统在各种情况下都能稳定运行。
#### 5. 回顾与改进
在测试过程中,我们不仅发现了系统的缺陷,也总结了测试方法和策略的改进点。
- **测试覆盖率**:不断改进测试用例,确保覆盖系统的各个功能模块和边界情况。
- **自动化水平**:提高测试的自动化水平,减少人工干预,提高测试效率。
- **测试反馈机制**:建立完善的测试反馈机制,及时发现和解决问题,保证代码质量。
## 遇到的主要问题和解决方法
在比赛过程中,遇到了许多挑战,包括但不限于:
1. **复杂的概念理解**: 操作系统的概念,如内存管理、进程调度和文件系统,往往抽象且复杂。在学习和复现这些内容时,需要深入理解其工作原理。
- **解决方案**:通过查阅文档、课程资料以及与同伴讨论,加深对概念的理解。同时,动手实践,通过编写代码和调试,加深对理论知识的掌握。
2. **代码调试**: 操作系统级别的编程,错误往往隐藏得很深,调试难度大。
- **解决方案**:使用高级调试工具(如 GDB)以及系统日志,定位问题根源。通过阅读源码,理解系统调用的实现细节,逐步解决问题。
3. **时间管理**: 比赛时间紧张,需要在短时间内完成大量工作。
- **解决方案**:制定详细的时间计划,合理分配任务优先级,保证每个阶段的任务都能按时完成。
## 分工和协作
#### 1. 分工情况
1. **项目管理与进程管理模块**
- **职责**:负责整体项目的进度把控和任务分配。同时,成员A还负责进程管理模块的实现,包括进程的创建、调度、切换以及进程间通信。
- 具体任务:
- 制定项目计划和时间表。
- 分配任务并跟踪各成员的进度。
- 实现进程管理相关的系统调用和调度算法。
2. **内存管理与文件系统模块**
- **职责**:主要负责内存管理和文件系统模块的实现,确保操作系统能够高效地进行内存分配和文件操作。
- 具体任务:
- 设计并实现内存分配算法和虚拟内存管理机制。
- 开发文件系统的核心功能,包括文件读写、目录管理等。
- 优化内存和文件系统的性能。
3. **系统调用接口与系统测试**
- **职责**:负责系统调用接口的设计与实现,以及系统的全面测试,确保系统功能的正确性和稳定性。
- 具体任务:
- 设计并实现操作系统提供给用户空间的系统调用接口。
- 编写测试用例,进行全面的系统测试。
- 使用调试工具定位并修复系统缺陷。
#### 2. 协作情况
1. 因为团队是个人,所以协作情况近似为个人协作。
2. **代码审查**
- 为了保证代码质量,我们实行了代码审查机制。每个模块的代码在合并到主分支前,都需要经过其他成员的审查。通过代码审查,我们不仅发现并修复了潜在的问题,还促进了团队成员之间的技术交流。
- 代码审查过程中,我们注重代码的可读性、性能优化以及遵循编码规范。
#### 3. 协作成果
通过明确的分工和高效的协作,我们成功地完成了复现 MIT 6.S081 课程内容的任务。每个成员在各自的职责范围内充分发挥了自己的优势,同时通过团队合作克服了各类技术难题,保证了项目的顺利进行。
- **进程管理模块**:实现了高效的进程调度和管理机制,确保了多进程环境下系统的稳定性和性能。
- **内存管理和文件系统模块**:开发了稳健的内存管理和文件系统功能,提升了系统的资源管理能力。
- **系统调用接口和系统测试**:设计并实现了完善的系统调用接口,通过全面的系统测试,确保了系统的功能完整性和稳定性。
## 比赛收获
#### 一、技术技能的提升
通过此次比赛,我在以下技术技能方面有了显著提升:
1. **操作系统核心原理**: 对操作系统的内核、进程管理、内存管理、文件系统等核心原理有了更深入的理解。
2. **系统编程能力**: 提升了在 C 语言和汇编语言上的编程能力,掌握了系统编程的一些高级技巧。
3. **调试技巧**: 学会了使用多种调试工具,提升了解决复杂问题的能力。
#### 二、个人收获与反思
通过此次比赛,我不仅在技术上得到了提升,还在以下几个方面有了深刻的收获:
1. **学习方法**: 通过自主学习和团队合作,培养了高效的学习方法和解决问题的能力。
2. **耐心与毅力**: 面对复杂的技术难题,需要耐心和毅力,不断尝试不同的方法,直到找到解决方案。
3. **批判性思维**: 在解决问题的过程中,培养了批判性思维能力,能够从多个角度分析问题,找到最佳解决方案。
总的来说,复现 MIT 6.S081 课程的比赛不仅让我在技术上得到了提升,更重要的是培养了我在学习、解决问题和团队合作方面的能力。这些收获将对我未来的学习和职业发展产生深远的影响。
assets/image-20240601145255762.png

53.3 KB

assets/image-20240601145427331.png

6.37 KB

assets/image-20240601150019590.png

34.5 KB

assets/image-20240601150729272.png

24.8 KB

assets/image-20240815150345890.png

23.9 KB

assets/image-20240815150507565.png

8.05 KB

assets/image-20240815184849521.png

110 KB

assets/image-20240816203546237.png

14.5 KB

assets/image-20240816231147551.png

4.85 KB

assets/image-20240816233222920.png

4.55 KB

assets/image-20240816234110413.png

5.52 KB

assets/image-20241229153805053-1735660499726-1.png

8.71 KB

assets/image-20241229153805053.png

8.71 KB

assets/image-20241229162143142-1735660520868-3.png

17 KB

assets/image-20241229162143142.png

17 KB

assets/image-20241229162153778-1735660536822-5.png

4.18 KB

assets/image-20241229162153778.png

4.18 KB

assets/image-20241229165833073-1735660555143-7.png

7.01 KB

assets/image-20241229165833073.png

7.01 KB