支持自动评测的操作系统内核实验 全国大学生系统能力大赛 —— 操作系统赛 官网与支撑平台
实验过程的自动评测和管理
- 在线虚拟实验环境
-
借助虚拟机管理平台实现多节点实验服务器快速部署,避免了软件版本冲突问题,节约学生安装实验环境花费的时间,随时随地在线流畅使用。实验后能够长期保存学生实验过程资料。
- 内核实验自动评测
-
利用git和虚拟机,实现作业自动发布、提交、编译、运行、评测,并将测试结果、可能发生错误的代码反馈给学生,整个过程不需要人工参与。
- 实验过程自动化管理
-
操作系统内核实验是一个互相衔接的体系,学生通过了某个实验评测,系统自动发布下一次实验的内容, 让有能力的同学尽早开始高难度实验,实现个体差异化培养,提升整体实验课效果。
- 师资培训服务
-
联合新工科联盟,每年暑期举办师资培训班, 2022《操作系统课程设计》师资培训 在线开课
小型操作系统实验体系
采用分层设计原则,设计了6个相互关联的操作系统实验,学生可以从简单到复杂,最终构造出一个相对完整的操作系统。 每个操作系统实验都设置多个不同难度级别的挑战性任务,并自动评测,节省教师工作量的同时,让学生获得内核开发的成就感。
- 实验1:启动和系统初始化
-
通过分析硬件启动过程,理解操作系统内核的链接、加载和重定位。通过实现一个串口输出函数。
- 实验2:内存管理实验
-
理解MIPS内存布局,实现操作系统对物理内存和虚拟内存空间的管理。
- 实验3:进程管理
-
实现时钟中断处理程序,编写进程创建、进程中止和进程调度程序,实现进程管理。
- 实验4:系统调用
-
掌握MIPS 平台上系统调用的实现方法,实现相关系统调用。
- 实验5:文件系统
-
实现一个简单的文件系统,掌握文件系统的实现方法。
- 实验6:命令解释程序
-
实现一个具有基本功能的命令解释程序,将6部分链接起来,使之成为一个可运行的操作系统。
操作系统内核实验详细介绍
RISC-V架构的小型操作系统实验体系
RISC-V是一种完全开源、构架简单、易于移植、模块化设计的精简指令集构架。拥有丰富的开源工具链支持。而xv6操作系统是麻省理工学院开发的一个并发、多核的宏内核操作系统。
RISC-V构架的小型操作系统实验体系基于xv6-riscv环境,即xv6操作系统面向RISC-V构架的移植。本体系具有技术先进性、结构简洁性、知识面涵盖全面性等特点。
xv6-riscv涵盖了操作系统的各个要素:内存映射,文件系统,进程切换,临界区竞争保护等。学生通过该实验体系不但能学习到操作系统的核心知识,还能熟悉RISC-V体系结构的基础知识。本实验体系由9个实验组成,每个实验带有自动测评功能,在实现了知识考核的难度和深度的同时,还具备What
You See Is What You Get – 所见即所得的操作简洁性。
- 实验1:XV6入门
-
系列实验采用MIT的XV6-RISC-V操作系统作为实验基本环境。该实验需要学生在XV6-RISC-V上进行初步的编译、调试操作。并为系统增加若干简单的应用程序。
- 实验2:内存分配
-
该实验要求使用伙伴内存管理系统来分配和释放内核中的文件描述结构,这样的话,xv6-riscv就能拥有超过给定限制的打开文件描述符。更进一步地要求,在用户内存管理中,使用延后的方法分配内存。
- 实验3:fork调用的写时拷贝
-
该实验为fork调用实现内存的写时拷贝。当系统执行fork调用时,如果将父进程的所有用户态内存拷贝到子进程空间,不但费时,也有可能造成内存消耗过多。本实验在要求在内核中实现内存管理的写时拷贝,即fork时只增加对父进程用户态内存的引用,只有当对内存写时,才进行拷贝。实验自带的cowtest程序首先分配大量内存,然后进行fork调用。如果不进行写时拷贝(COW)优化处理,则执行cowtest不会通过。当实验者在内存管理系统中实现了写时拷贝后,cowtest测试程序可以通过。
- 实验4:文件系统
-
该实验的目的是通过让实验者修改XV6-Riscv内核增加对大文件的支持,以及增加对符号链接文件的支持,熟悉和掌握文件块的索引和读写对于文件系统的重要地位,熟悉和掌握文件系统按照路径名寻找文件的过程。
- 实验5:mmap系统调用
-
该实验要求实验者通过修改XV6-Riscv内核增加对mmap系统调用以及munmap系统调用的支持。mmap以及munmap系统调用让UNIX程序可以对它们的地址空间进行精细的控制。这些系统调用可以:
- 让进程共享内存
- 把文件映射到进程地址空间
- 作为用户态内存缺页异常方案的一部分(例如垃圾回收算法)发挥作用
- 实验6:锁
-
该实验可以让实验者通过重新设计代码来提高并发性。多核机器的一个通用的问题是高的锁冲突。提高并发性包括改变数据结构和锁策略来减少冲突。本实验为内存分配机制和块缓冲机制设计锁机制
- 实验7:网络
-
该实验需要实验者为xv6-riscv操作系统内核完善网卡驱动,并且为xv6-riscv操作系统添加UDP网络套接字支持。
- 实验8:简单的xv6 shell
-
该实验任务是为xv6写一个简单的shell。该shell可以运行带参数的命令,处理输入和输出重定向,并且创建双端管道。
- 实验9:用户态线程和闹钟
-
该实验通过实现用户态线程以及闹钟让实验者熟悉在上下文切换和系统调用过程中,线程状态是如何保留和恢复的。同时让实验者熟悉将类中断的事件递交程序的方法。 该实现的任务是通过补充代码,完成线程的状态保存(主要是寄存器等信息),最终完成用户态线程的创建以及切换。通过补充代码,增加设置闹钟的系统调用,以完成闹钟的按时唤醒功能。
xv6-riscv的页表
操作系统实验清单
操作系统实验涵盖了从内核实验、系统编程、操作系统应用的完整实验体系,按照难度梯度分为4大类实验:操作系统内核实验、操作系统模拟实验、操作系统编程实验以及操作系统应用实验。
实验分类 | 实验名称 | 实验内容 | 实验手册 | 实验代码 |
---|---|---|---|---|
操作系统内核实验 |
内核、Boot和printf | 通过分析硬件启动过程,理解操作系统内核的链接、加载和重定位。通过实现一个串口输出函数。 | ||
内存管理 | 理解MIPS内存布局,实现操作系统对物理内存和虚拟内存空间的管理。 | |||
进程与异常 | 实现时钟中断处理程序,编写进程创建、进程中止和进程调度程序,实现进程管理。 | |||
系统调用与fork | 掌握MIPS 平台上系统调用的实现方法,实现相关系统调用。同时,实现fork函数。 | |||
文件系统 | 实现一个简单的文件系统,掌握文件系统的实现方法。 | |||
管道与Shell | 实现一个具有基本功能的命令解释程序,将6部分链接起来,使之成为一个可运行的操作系统。 | |||
操作系统模拟实验 |
进程管理 | 在模拟框架内,补充进程管理相关数据结构,实现进程创建、运行原语。 | ||
处理机调度(进程调度) | 在模拟框架内,实现5类常见处理机(进程)调度算法。 | |||
分区存储管理 | 在模拟框架内,补充分区存储管理相关数据结构,实现分区存储管理的3类算法。 | |||
段式存储管理 | 在模拟框架内,实现段式存储管理的分配、回收算法,实现对多进程的支持。 | |||
请求页式存储管理 | 在模拟框架内,实现请求页式存储管理的3类页面置换算法,并分析这3类算法在不同情况下的表现。 | |||
设备管理 | 在模拟框架内,实现设备管理相关数据结构,实现设备分配、回收算法。 | |||
文件管理 | 在模拟框架内,实现磁盘块的分配算法和回收算法。实现小型文件系统需要的基本接口,并可进行演示。 | |||
操作系统应用实验 |
Bash脚本实验 | Bash变量,Bash传递参数,Bash数组,Bash运算符,Bash中字符串处理,Bash逻辑运算,Bash算数运算,Bash分支语句,Bash循环语句,Bash函数,Bash输入输出重定向,开机启动脚本。 |
RISC-V构架的小型操作系统实验清单
RISC-V构架的小型操作系统实验涵盖了从RISC-V体系结构紧密相关知识、操作系统通用知识、网络与协议栈知识、通用编程知识等知识点,以较为紧凑的实验布局构成了完整的操作系统实验体系。按照知识点涵盖分为4大类:RISC-V体系结构紧密相关实验、操作系统通用实验、网络与协议栈实验、通用编程知识实验。
实验分类 | 实验名称 | 实验内容 | 实验手册 | 实验代码 |
---|---|---|---|---|
RISC-V体系结构紧密相关实验 |
用户态线程和闹钟 | 用户态线程切换与闹钟 | ||
内存分配 | 内存的延迟分配 | |||
fork调用的写时拷贝 | fork涉及的内存写时拷贝 | |||
mmap系统调用 | 内存映射与虚存管理 | |||
操作系统通用实验 |
文件系统 | 大文件支持与符号链接 | ||
锁 | 内存分配与磁盘缓存的锁 | |||
网络与协议栈实验 |
网络 | 套接字与网络设备驱动 | ||
通用编程实验 |
xv6入门 | xv6的编译、调试以及增加用户命令 | ||
简单的xv6-shell | 实现一个简单的shell |