README.md 10.8 KB
Newer Older
Don't Panic's avatar
Don't Panic committed
# 题目:proj0-contest-and-lab-for-os-course
Don't Panic's avatar
Don't Panic committed
# 基于分布式评测技术的操作系统实验平台
## 平台简介
本平台是一种新型分布式操作系统实验教学平台,它汲取众多方案所长,并且针对其优缺点加以改良,扬长避短,运用分布式技术解决了评测占用资源多、实验占用服务器资源多、学生上手门槛高等教学开展过程中所遇到的难题。能够切实满足全国普通高校的教学需要。按照功能主要分为三个部分,**实验代码上传器、实验平台后端(评测主机+评测从机)、实验平台前端(成绩系统)**。另外,还有相对应的预置实验环境、实验题目、实验报告等内容。

本平台在内核开发实验方案的基础上,通过运用分布式技术,建立一套全新的操作系统实验环境和评测环境,并通过代码上传器、Web成绩系统、消息队列等设施,建立了评测环境-实验环境-成绩系统三者之间的桥梁。学生能够在开箱即用的预制虚拟实验环境中,基于实际的操作系统内核框架,编写与调试操作系统课程的实验代码,从零起步,循序渐进,以系统能力培养目标为导向,实验题目为主线,逐步实现一个简单而又功能完整的操作系统内核,将理论知识与工程开发相结合,从而提高其动手实践能力。实验做完后,学生可以将代码通过实验平台环境中的代码自动上传器,一键将代码上传至评测系统中,从而使虚拟实验环境与评测系统无缝衔接。评测系统会自动对学生所做的实验代码进行量化评分。学生在做完实验后,可以及时查看实验评分结果,从而根据反馈完善自己的实验代码。同时,评测结果也会被录入到成绩系统中,供教师查阅代码和检查教学进度。评测程序自动进行,评测指标灵活多样,客观公正,无需教师介入和手动检查,减轻了教师实验验机的工作负担。教师还可以在学期初自动导入学生列表,期末自动对成绩进行汇总与导出,从而使该平台无缝对接教务系统。

| 了解更多 | 文档 | 代码/视频 |
| :----: | :----: | :----:|
| 实验平台 | [作品设计报告.pdf](./DocumentsEtc/Documentation/%E4%BD%9C%E5%93%81%E8%AE%BE%E8%AE%A1%E6%8A%A5%E5%91%8A.pdf)    [实验平台简介.pdf](./DocumentsEtc/Documentation/%E5%AE%9E%E9%AA%8C%E5%B9%B3%E5%8F%B0%E7%AE%80%E4%BB%8B.pdf)| [演示视频](./DocumentsEtc/Vedio/) |
| 实验代码上传器 |[代码上传器.pdf](./DocumentsEtc/Documentation/%E4%BB%A3%E7%A0%81%E4%B8%8A%E4%BC%A0%E5%99%A8.pdf)|[代码上传器代码-uploader](./platform-code/uploader/)|
| 实验平台后端_评测主机 |[实验平台后端_评测主机.pdf](./DocumentsEtc/Documentation/%E5%AE%9E%E9%AA%8C%E5%B9%B3%E5%8F%B0%E5%90%8E%E7%AB%AF-%E8%AF%84%E6%B5%8B%E4%B8%BB%E6%9C%BA.pdf)|[评测主机代码-host](./platform-code/host/)|
|实验平台后端_评测从机|[实验平台后端-评测从机.pdf](./DocumentsEtc/Documentation/%E5%AE%9E%E9%AA%8C%E5%B9%B3%E5%8F%B0%E5%90%8E%E7%AB%AF-%E8%AF%84%E6%B5%8B%E4%BB%8E%E6%9C%BA.pdf)|[评测从机代码-worker](./platform-code/worker/)|
| 实验平台前端 |[实验平台前端.pdf](./DocumentsEtc/Documentation/%E5%AE%9E%E9%AA%8C%E5%B9%B3%E5%8F%B0%E5%89%8D%E7%AB%AF.pdf)|[前端代码-frontend](./platform-code/frontend/)|
|其他|[实验指导书](./DocumentsEtc/Documentation/%E5%AE%9E%E9%AA%8C%E6%8C%87%E5%AF%BC%E4%B9%A6.pdf)|

## 架构图
### 整体架构图
![img.png](./DocumentsEtc/Other/架构图2.png)
### 分布式评测架构图
![img.png](./DocumentsEtc/Other/架构图1.png)

## 平台特点
1、平台引入了分布式评测技术,利用机房闲置的计算资源,辅助成绩系统进行内核实验代码评测,从而缓解了评测服务器单机性能瓶颈,使得平台得以在不占用过多的服务器资源的前提下对学生所写的内核实验代码进行自动化评测。从而达到在服务器设备资源有限的情况下,灵活而又有效地满足高并发场景下评测需求;

2、采用了真实内核开发实验方案,让学生基于真正的操作系统内核代码进行实验,而不是传统的模拟实验,此种方案能让学生通过真实操作系统内核开发实验获得能力的提升;

3、本实验平台既规避了模拟实验无法让学生真正地了解内核运作原理的弊端,又避免了内核开发实验学生搭建环境环节门槛过高、学生在该环节耗费精力过多的问题,也创新性地解决了中心化实验环境和评测环境消耗资源过大,不易于在普通高校开展的核心问题。

## 使用说明
### 方法一:连接远程服务器进行使用(推荐)
1、安装好虚拟机软件VMware Workstation Pro,下载解压镜像(下载地址:https://void.cowtransfer.com/s/5a8896626cce43)


2、打开虚拟机,点击左上角文件->打开->在弹出窗口中找到解压好的镜像文件夹,选择a.VMX

![img.png](./DocumentsEtc/Other/2-1.png)

![img.png](./DocumentsEtc/Other/2-2.png)

3、在os-lab中找到自己需要编写的实验lab2(这里以lab2为例)

![img.png](./DocumentsEtc/Other/3-1.png)
![img.png](./DocumentsEtc/Other/3-2.png)

4、使用Vcode打开lab2编写实验

![img.png](./DocumentsEtc/Other/4-1.png)

5、编写完成后直接点击lab2中的uploader.sh上传代码

![img.png](./DocumentsEtc/Other/5.png)

6、使用账号,密码登录平台查看结果(平台网址:http://8.141.174.40:8080/ )

![img.png](./DocumentsEtc/Other/6-1.png)

### 方法二:本地部署(比较复杂,不推荐)
请参考四个模块每个模块的readme.md,或每个模块对应文档。

## 平台基本模块
### 实验环境模块

预设实验环境被放置在一个虚拟机镜像当中,其中含有有与实验题目对应的交叉编译环境(如GNU编译工具链)、用于测试的模拟器(如QEMU)、VSCode代码编辑器等内核开发工具和调试器(如GDB)。同时,其中也预置了我们编写的代码上传器,用于自动化地将学生做完的实验代码提交至评测端。学生可以在环境中开箱即用地开展内核开发实验,以期节省学生搭建环境的时间成本,降低学生实验初期准备工作的难度,降低学生在初期时出现畏难情绪的概率。学生能够在该环境中,基于实际的操作系统内核框架,编写与调试操作系统课程的实验代码,从零起步,循序渐进,以系统能力培养目标为导向,实验题目为主线,逐步实现一个简单而又功能完整的操作系统内核,将理论知识与工程开发相结合,从而提高其动手实践能力。
### 评测功能模块
评测主机采用 SpringBoot 框架进行开发,Java 作为开发语言,MySQL 作为数据库。评测采用 QEMU 作为模拟器,GNU 工具链作为编译环境,Linux 系统(CentOS、Ubuntu 等)作为宿主机来运行评测环境,Python 或 Bash 等脚本语言来编写评测程序。评测机程序以微服务的形式存在,可以被灵活地部署在任何装有 JDK 的宿主机或者容器中。评测主机会在启动后,通过Kafka API连接Kafka引导服务器(Kafka Bootstrap Server),作为消费者(Consumer)订阅名为judging-result (评测结果)的消息队列话题,并作为生产者(Producer)预备向名为judging-task(评测任务)的消息队列话题(Topic)发布消息;与之对应的是,评测从机会在启动后,通过Kafka API连接Kafka引导服务器(Kafka Bootstrap Server),作为消费者(Consumer)订阅名为judging-task (评测任务)的消息队列话题(Topic)中的一部分分区(Partition),并作为生产者(Producer)预备向名为judging-result(评测结果)的消息队列话题发布消息。评测机将评测结果通过 kafka 消息队列送回至成绩系统,并持久化存储至MySQl数据库中。

![img.png](./DocumentsEtc/Other/2流程图.png)

评测代码:

```
import os
from .score_system import begin_judge, \
    begin_compile, \
    end_judge, \
    pass_testpoint, \
    pending_testpoint, \
    reject_testpoint, \
    compile_error, \
    runtime_error

begin_compile()
# compile_error(compile_msg)
begin_judge()
# runtime_error(qemu_msg)
test_point_id_list = [1, 2, 3]
for id in test_point_id_list:
    pending_testpoint(id)
    # runtime_error(reason=reason, test_point_id=id)
    pass_testpoint(id)
    # reject_testpoint(id)
end_judge()
```

### 上传功能模块
代码上传器基于混合开发(Hybrid)技术编写,利用Vue.js和Node.js技术分别实现界面交互和处理逻辑,两者之间通过Electron IPC进行交互,最后利用Electron CLI将编写好的逻辑进行打包,形成可跨平台运行的二进制程序包。虚拟实验环境中内置了自动代码上传器,学生在做完实验题目,并调试通过之后,双击实验目录中的代码上传器启动脚本,即可启动自动代码上传器。代码上传器会自动按照文件忽略规则过滤掉与实验代码无关的代码(内核实验题目均只评测特定代码文件内的代码),上传器会将需要上传的代码归纳整理,最后运用Zip算法对其进行压缩打包,形成压缩包,将压缩包通过HTTP请求,上传到评测系统主机,完成提交工作。

### 平台前端模块
Web 前端负责界面渲染,将后端传来的成绩信息和实验信息等渲染成 Web 界面,以向学生展示相关的信息。采用 Vue.js 框架进行开发,采用 JavaScript、 HTML、 CSS 作为开发语言。前后端通过 Restful HTTP API 进行通信,前后端分离开发,并共同部署在服务器中。


## 演示视频
### 实验编写上传

Don't Panic's avatar
Don't Panic committed
![ExperimentWritingUploadDetailedProcess1](/uploads/d6bd9e72db7e2e5313bd2ede8a4fb3db/ExperimentWritingUploadDetailedProcess1.mp4)

![ExperimentWritingUploadDetailedProcess2](/uploads/2c6018c0fe2f81a184dc466bdd4affe5/ExperimentWritingUploadDetailedProcess2.mp4)

![ExperimentWritingUploadDetailedProcess3](/uploads/1a6396fce4815a94b3593ee74eecbd52/ExperimentWritingUploadDetailedProcess3.mp4)

### 成绩评测展示

![PerformanceEvaluationDisplay](/uploads/e87b7b4c2353bf3732daabe5f9702272/PerformanceEvaluationDisplay.mp4)

Don't Panic's avatar
Don't Panic committed
### 分布式评测演示

Don't Panic's avatar
Don't Panic committed
![DistributedEvaluationDemonstration-1](/uploads/d340ec541734d9029cc9fbbcaaae92b0/DistributedEvaluationDemonstration-1.mp4)

![DistributedEvaluationDemonstration-2](/uploads/a45b04b42400b4e699a7398a2ddc0992/DistributedEvaluationDemonstration-2.mp4)

![DistributedEvaluationDemonstration-3](/uploads/ca1dce6c15f91a2acad7022376699487/DistributedEvaluationDemonstration-3.mp4)
Don't Panic's avatar
Don't Panic committed

Don't Panic's avatar
Don't Panic committed
### 教师上传评测代码

![TeachersUploadEvaluationCode](/uploads/a57d4a67b2692c7a6971e3badbae9fc0/TeachersUploadEvaluationCode.mp4)

### 查看导出学生成绩
Don't Panic's avatar
Don't Panic committed

Don't Panic's avatar
Don't Panic committed
![ViewAndExportStudentGrades](/uploads/7c10b8219b2408c24b56ff4aa3798d5c/ViewAndExportStudentGrades.mp4)