Repository files navigation

2026年全国大学生OS比赛--内核赛道--线上决赛测例

决赛测例(决赛满分按 100 分记)

决赛共两道题:题1 CAgent(满分 200 分)与题2 复杂软件构建与内核优化 / BuildStorm(满分 200 分),两题各占 50%。决赛总成绩满分按 100 分记:每题按「本题得分 ÷ 200 × 50」折算后相加。 注意:作品需要保证初赛测例能通过测试(后期主办方会进行复测)

本次决赛测例因为涉及操作系统内核(参赛作品)调用工具链编译第三方操作系统。工具链自身较为庞大。所以不能像以往一样自编译, 给同学们作为参考的镜像在

链接: https://pan.baidu.com/s/1zTb2NPCp9HE_l_M-3-oczg?pwd=kyva 提取码: kyva

测例部分源码和测试脚本在本目录下。

1. 支持运行 CAgent 测试(glibc)

本题在 glibc 环境下进行,考查选手内核运行 CAgent 任务时的基础命令执行、时间处理、系统信息查询、网络状态查询以及文件系统操作能力。共包含 Easy、Medium、Hard 三个难度等级的 10 个测试,满分 200 分(基础分 + 时间奖励,时间奖励为基础分的 10%)。

最终得分按以下公式计算:

最终得分 = 基础分 + 时间奖励
时间奖励 = 基础分 × 10%(当执行时间 < 超时 × 50%)

测试点(满分 200 分)

难度权重超时测试数基础分满分
Easy13.520s454.059.4
Medium20.025-30s5100.0110.0
Hard27.035s127.030.6
总计--10181.0200
  1. Easy:每项基础分 13.5 分,执行时间小于 10s 时额外获得 1.35 分,每项最高 14.85 分,共 4 项,最高 59.4 分

    测试任务验证超时
    factorial计算 10!输出含 362880020s
    date100 天前星期几输出含星期名20s
    cpuCPU 核心数输出含数字20s
    kernel内核版本输出含版本号20s
  2. Medium:每项基础分 20.0 分,执行时间小于对应超时的 50% 时额外获得 2.0 分,每项最高 22.0 分,共 5 项,最高 110.0 分

    测试任务验证超时奖励阈值
    network统计 TCP 连接数输出含数字25s< 12.5s
    fs-create创建文件写内容文件存在且内容正确25s< 12.5s
    fs-readwrite写入读取求和输出含 1530s< 15s
    fs-directory创建目录和文件目录含 ≥3 文件30s< 15s
    fs-usage磁盘使用情况输出含数字和单位25s< 12.5s
  3. Hard:基础分 27.0 分,执行时间小于 17.5s 时额外获得 2.7 分,最高 29.7 分

    测试任务验证超时
    fs-search查找 .sh 文件计数输出含数字35s

任何测试验证失败,该测试得 0 分。

测试用例:scripts/cagent_testcode.sh

使用方法

# 运行测试
./scripts/cagent_testcode.sh
# 查看评分
./scripts/cagent_testcode.sh | python3 judge/judge_cagent-glibc.py | jq .# 总分
./scripts/cagent_testcode.sh | python3 judge/judge_cagent-glibc.py | jq '[.[].score] | add'

评分示例

  • 获得时间奖励:factorial 执行时间为 8500ms,小于 10000ms,得分为 13.5 + 1.35 = 14.85 分
  • 无时间奖励:fs-readwrite 执行时间为 18000ms,不小于 15000ms,得分为 20.0 分
  • 测试失败:任何测试验证失败,该测试得 0 分

2. 支持复杂软件构建与内核优化(glibc)

本题满分 200 分,整体仅在 glibc 环境下进行。

本测例考查选手内核在真实重负载下运行复杂用户态软件的综合能力:选手内核挂载平台统一提供的磁盘镜像(含 Debian 用户态 + Rust 工具链 + tgoskits 源码 + cargo 离线缓存),在其上从源码全量编译 arceos-helloworld——这是一次数百 crate 的真实 Rust 编译(完整的依赖解析、rustc 代码生成、链接流程,重度文件读写、多线程、mmap、成千上万次系统调用)。能把这次编译完整跑通,意味着内核的文件系统、内存管理、进程调度、系统调用兼容性都达到了可用级别。

评测在多核配置(-smp 8 -m 8G,评测机须有不少于 8 个物理核)下进行,按「编译是否成功 + 编译耗时对标 Linux 基线」打分。全程离线(CARGO_NET_OFFLINE=true),依赖已预置于磁盘缓存。编译耗时以 guest 内 /proc/uptime 计时,仅覆盖编译命令本体;篡改系统时钟或 /proc/uptime 以伪造更快耗时,视为作弊。

2.1 支持运行复杂软件构建环境

本部分验证选手内核能否跑起 Rust 工具链——即能否正确支撑动态链接(glibc)、基础文件与进程系统调用,让 rustc/cargo 正常运行并完成一次最小项目的完整构建。

测试点(20 分)
  1. rustc --versioncargo --version 均能正常输出版本号(串口打印 TOOLCHAIN_RESULT status=OK)。此项验证工具链二进制能加载运行(动态链接、基础 syscall)(8 分)
  2. 能用 cargo new 新建一个最小项目并 cargo build 编出可执行文件、运行输出 Hello, world!(串口打印 MINIBUILD_RESULT status=OK)。此项验证「依赖解析 → 代码生成 → 链接 → 运行」全链路(12 分)
测试用例:scripts/buildstorm_testcode.sh 中的环境检查段

2.2 支持编译复杂软件

在多核配置(-smp 8 -m 8G)下,从零编译 arceos-helloworld。计时以 guest 内 /proc/uptime 为准,仅覆盖 cargo xtask arceos build 编译命令本体,构建助手 tg-xtask 的预编与环境准备不计入。

测试点(160 分)
  1. 编译成功:串口显示执行成功,即编译成功、产物存在且大小不小于 500KB。此为门槛分,编不出则本题 0 分(40 分)
  2. 编译加速分:在编译成功的前提下,按耗时 t(elapsed_s)与 Linux 基线 B 的关系,用公式 120 × clamp((2·B − t) / B, 0, 1) 计算。其含义为:追平基线(t ≤ B)得满分 120,慢到基线两倍(t ≥ 2·B)得 0,中间随耗时增加按直线均匀递减。例如 t=400s 得 120 分、t=450s 约 105 分、t=500s 得 90 分、t=600s 得 60 分、t=700s 得 30 分、t≥800s 得 0 分(120 分)
测试用例:scripts/buildstorm_testcode.sh
样例输出
#### OS COMP TEST GROUP START buildstorm ####
rustc 1.98.0-nightly (xxxxxxxxx 2026-05-27)
cargo 1.98.0-nightly (xxxxxxxxx 2026-05-26)
工具链返回成功
MINIBUILD返回成功
BUILDSTORM返回成功
#### OS COMP TEST GROUP END buildstorm ####
  • TOOLCHAIN_RESULT / MINIBUILD_RESULT:第 2.1 部分两个测试点的判定标记。
  • BUILDSTORM_RESULT:编译主结果;elapsed_s 为 guest 内计时的编译耗时,cores 供 judge 校验 qemu 配置。

2.3 内核设计优化实现文档

本题为人工评审,脚本不参与判定。选手须提交一份内核设计与优化文档,说明为跑通/加速本测例所做的工作。

测试点(20 分)
  1. 问题(bug 或性能瓶颈)定位与根因分析(6 分)
  2. 修复或优化的设计与实现(6 分)
  3. 实验分析:修改前后的编译时间、加速比等数据对比(4 分)
  4. AI 使用说明与可复现步骤,审核者能据此重现开发过程(4 分)

比赛成绩占比说明&具体评分细则

  1. 上述题目在 QEMU 模拟的 RISC-V64 与 LoongArch64 平台上进行测试,两平台规则一致;第 1 题与第 2 题均仅测试 glibc 环境。
  2. 两题各占 50%,决赛满分按 100 分记:第 1 题 CAgent 满分 200 分,第 2 题复杂软件构建与内核优化满分 200 分;每题按「本题得分 ÷ 200 × 50」折算后相加得决赛成绩(满分 100)。
  3. CAgent 题基础分与时间奖励分别计算:每个测试验证成功后获得基础分,执行时间小于该测试超时的 50% 时额外获得基础分 10% 的时间奖励;测试失败得 0 分。
  4. 编译成功为门槛,时间分为进阶:编译题「成功 40 分 + 加速 120 分」,编不出则该题(含成功分与时间分)全为 0。
  5. 时间加速分以 Linux 内核为标尺:在同一磁盘、同一评测机、同一 QEMU 配置下实测 Linux 编译耗时作为基线 B。
  6. 须为 8 物理核方才准确,评测机核数不足时时间分无效;judge 会依据串口 cores 字段给出告警。
  7. 计时与防作弊:耗时由 guest 内 /proc/uptime 测得并打印在 BUILDSTORM_RESULTelapsed_s;篡改系统时钟或 /proc/uptime 伪造耗时视为作弊。
  8. 请仔细阅读全国大学生OS比赛官网上公布的技术方案文档。

About

No description, website, or topics provided.

Resources

Stars

160 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

2026年全国大学生OS比赛--内核赛道--线上决赛测例

决赛测例(决赛满分按 100 分记)

决赛共两道题:题1 CAgent(满分 200 分)与题2 复杂软件构建与内核优化 / BuildStorm(满分 200 分),两题各占 50%。决赛总成绩满分按 100 分记:每题按「本题得分 ÷ 200 × 50」折算后相加。 注意:作品需要保证初赛测例能通过测试(后期主办方会进行复测)

本次决赛测例因为涉及操作系统内核(参赛作品)调用工具链编译第三方操作系统。工具链自身较为庞大。所以不能像以往一样自编译, 给同学们作为参考的镜像在

链接: https://pan.baidu.com/s/1zTb2NPCp9HE_l_M-3-oczg?pwd=kyva 提取码: kyva

测例部分源码和测试脚本在本目录下。

1. 支持运行 CAgent 测试(glibc)

本题在 glibc 环境下进行,考查选手内核运行 CAgent 任务时的基础命令执行、时间处理、系统信息查询、网络状态查询以及文件系统操作能力。共包含 Easy、Medium、Hard 三个难度等级的 10 个测试,满分 200 分(基础分 + 时间奖励,时间奖励为基础分的 10%)。

最终得分按以下公式计算:

最终得分 = 基础分 + 时间奖励
时间奖励 = 基础分 × 10%(当执行时间 < 超时 × 50%)

测试点(满分 200 分)

难度权重超时测试数基础分满分
Easy13.520s454.059.4
Medium20.025-30s5100.0110.0
Hard27.035s127.030.6
总计--10181.0200
  1. Easy:每项基础分 13.5 分,执行时间小于 10s 时额外获得 1.35 分,每项最高 14.85 分,共 4 项,最高 59.4 分

    测试任务验证超时
    factorial计算 10!输出含 362880020s
    date100 天前星期几输出含星期名20s
    cpuCPU 核心数输出含数字20s
    kernel内核版本输出含版本号20s
  2. Medium:每项基础分 20.0 分,执行时间小于对应超时的 50% 时额外获得 2.0 分,每项最高 22.0 分,共 5 项,最高 110.0 分

    测试任务验证超时奖励阈值
    network统计 TCP 连接数输出含数字25s< 12.5s
    fs-create创建文件写内容文件存在且内容正确25s< 12.5s
    fs-readwrite写入读取求和输出含 1530s< 15s
    fs-directory创建目录和文件目录含 ≥3 文件30s< 15s
    fs-usage磁盘使用情况输出含数字和单位25s< 12.5s
  3. Hard:基础分 27.0 分,执行时间小于 17.5s 时额外获得 2.7 分,最高 29.7 分

    测试任务验证超时
    fs-search查找 .sh 文件计数输出含数字35s

任何测试验证失败,该测试得 0 分。

测试用例:scripts/cagent_testcode.sh

使用方法

# 运行测试
./scripts/cagent_testcode.sh
# 查看评分
./scripts/cagent_testcode.sh | python3 judge/judge_cagent-glibc.py | jq .# 总分
./scripts/cagent_testcode.sh | python3 judge/judge_cagent-glibc.py | jq '[.[].score] | add'

评分示例

  • 获得时间奖励:factorial 执行时间为 8500ms,小于 10000ms,得分为 13.5 + 1.35 = 14.85 分
  • 无时间奖励:fs-readwrite 执行时间为 18000ms,不小于 15000ms,得分为 20.0 分
  • 测试失败:任何测试验证失败,该测试得 0 分

2. 支持复杂软件构建与内核优化(glibc)

本题满分 200 分,整体仅在 glibc 环境下进行。

本测例考查选手内核在真实重负载下运行复杂用户态软件的综合能力:选手内核挂载平台统一提供的磁盘镜像(含 Debian 用户态 + Rust 工具链 + tgoskits 源码 + cargo 离线缓存),在其上从源码全量编译 arceos-helloworld——这是一次数百 crate 的真实 Rust 编译(完整的依赖解析、rustc 代码生成、链接流程,重度文件读写、多线程、mmap、成千上万次系统调用)。能把这次编译完整跑通,意味着内核的文件系统、内存管理、进程调度、系统调用兼容性都达到了可用级别。

评测在多核配置(-smp 8 -m 8G,评测机须有不少于 8 个物理核)下进行,按「编译是否成功 + 编译耗时对标 Linux 基线」打分。全程离线(CARGO_NET_OFFLINE=true),依赖已预置于磁盘缓存。编译耗时以 guest 内 /proc/uptime 计时,仅覆盖编译命令本体;篡改系统时钟或 /proc/uptime 以伪造更快耗时,视为作弊。

2.1 支持运行复杂软件构建环境

本部分验证选手内核能否跑起 Rust 工具链——即能否正确支撑动态链接(glibc)、基础文件与进程系统调用,让 rustc/cargo 正常运行并完成一次最小项目的完整构建。

测试点(20 分)
  1. rustc --versioncargo --version 均能正常输出版本号(串口打印 TOOLCHAIN_RESULT status=OK)。此项验证工具链二进制能加载运行(动态链接、基础 syscall)(8 分)
  2. 能用 cargo new 新建一个最小项目并 cargo build 编出可执行文件、运行输出 Hello, world!(串口打印 MINIBUILD_RESULT status=OK)。此项验证「依赖解析 → 代码生成 → 链接 → 运行」全链路(12 分)
测试用例:scripts/buildstorm_testcode.sh 中的环境检查段

2.2 支持编译复杂软件

在多核配置(-smp 8 -m 8G)下,从零编译 arceos-helloworld。计时以 guest 内 /proc/uptime 为准,仅覆盖 cargo xtask arceos build 编译命令本体,构建助手 tg-xtask 的预编与环境准备不计入。

测试点(160 分)
  1. 编译成功:串口显示执行成功,即编译成功、产物存在且大小不小于 500KB。此为门槛分,编不出则本题 0 分(40 分)
  2. 编译加速分:在编译成功的前提下,按耗时 t(elapsed_s)与 Linux 基线 B 的关系,用公式 120 × clamp((2·B − t) / B, 0, 1) 计算。其含义为:追平基线(t ≤ B)得满分 120,慢到基线两倍(t ≥ 2·B)得 0,中间随耗时增加按直线均匀递减。例如 t=400s 得 120 分、t=450s 约 105 分、t=500s 得 90 分、t=600s 得 60 分、t=700s 得 30 分、t≥800s 得 0 分(120 分)
测试用例:scripts/buildstorm_testcode.sh
样例输出
#### OS COMP TEST GROUP START buildstorm ####
rustc 1.98.0-nightly (xxxxxxxxx 2026-05-27)
cargo 1.98.0-nightly (xxxxxxxxx 2026-05-26)
工具链返回成功
MINIBUILD返回成功
BUILDSTORM返回成功
#### OS COMP TEST GROUP END buildstorm ####
  • TOOLCHAIN_RESULT / MINIBUILD_RESULT:第 2.1 部分两个测试点的判定标记。
  • BUILDSTORM_RESULT:编译主结果;elapsed_s 为 guest 内计时的编译耗时,cores 供 judge 校验 qemu 配置。

2.3 内核设计优化实现文档

本题为人工评审,脚本不参与判定。选手须提交一份内核设计与优化文档,说明为跑通/加速本测例所做的工作。

测试点(20 分)
  1. 问题(bug 或性能瓶颈)定位与根因分析(6 分)
  2. 修复或优化的设计与实现(6 分)
  3. 实验分析:修改前后的编译时间、加速比等数据对比(4 分)
  4. AI 使用说明与可复现步骤,审核者能据此重现开发过程(4 分)

比赛成绩占比说明&具体评分细则

  1. 上述题目在 QEMU 模拟的 RISC-V64 与 LoongArch64 平台上进行测试,两平台规则一致;第 1 题与第 2 题均仅测试 glibc 环境。
  2. 两题各占 50%,决赛满分按 100 分记:第 1 题 CAgent 满分 200 分,第 2 题复杂软件构建与内核优化满分 200 分;每题按「本题得分 ÷ 200 × 50」折算后相加得决赛成绩(满分 100)。
  3. CAgent 题基础分与时间奖励分别计算:每个测试验证成功后获得基础分,执行时间小于该测试超时的 50% 时额外获得基础分 10% 的时间奖励;测试失败得 0 分。
  4. 编译成功为门槛,时间分为进阶:编译题「成功 40 分 + 加速 120 分」,编不出则该题(含成功分与时间分)全为 0。
  5. 时间加速分以 Linux 内核为标尺:在同一磁盘、同一评测机、同一 QEMU 配置下实测 Linux 编译耗时作为基线 B。
  6. 须为 8 物理核方才准确,评测机核数不足时时间分无效;judge 会依据串口 cores 字段给出告警。
  7. 计时与防作弊:耗时由 guest 内 /proc/uptime 测得并打印在 BUILDSTORM_RESULTelapsed_s;篡改系统时钟或 /proc/uptime 伪造耗时视为作弊。
  8. 请仔细阅读全国大学生OS比赛官网上公布的技术方案文档。

About

No description, website, or topics provided.

Resources

Stars

160 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

2026年全国大学生OS比赛--内核赛道--线上决赛测例

决赛测例(决赛满分按 100 分记)

决赛共两道题:题1 CAgent(满分 200 分)与题2 复杂软件构建与内核优化 / BuildStorm(满分 200 分),两题各占 50%。决赛总成绩满分按 100 分记:每题按「本题得分 ÷ 200 × 50」折算后相加。 注意:作品需要保证初赛测例能通过测试(后期主办方会进行复测)

本次决赛测例因为涉及操作系统内核(参赛作品)调用工具链编译第三方操作系统。工具链自身较为庞大。所以不能像以往一样自编译, 给同学们作为参考的镜像在

链接: https://pan.baidu.com/s/1zTb2NPCp9HE_l_M-3-oczg?pwd=kyva 提取码: kyva

测例部分源码和测试脚本在本目录下。

1. 支持运行 CAgent 测试(glibc)

本题在 glibc 环境下进行,考查选手内核运行 CAgent 任务时的基础命令执行、时间处理、系统信息查询、网络状态查询以及文件系统操作能力。共包含 Easy、Medium、Hard 三个难度等级的 10 个测试,满分 200 分(基础分 + 时间奖励,时间奖励为基础分的 10%)。

最终得分按以下公式计算:

最终得分 = 基础分 + 时间奖励
时间奖励 = 基础分 × 10%(当执行时间 < 超时 × 50%)

测试点(满分 200 分)

难度权重超时测试数基础分满分
Easy13.520s454.059.4
Medium20.025-30s5100.0110.0
Hard27.035s127.030.6
总计--10181.0200
  1. Easy:每项基础分 13.5 分,执行时间小于 10s 时额外获得 1.35 分,每项最高 14.85 分,共 4 项,最高 59.4 分

    测试任务验证超时
    factorial计算 10!输出含 362880020s
    date100 天前星期几输出含星期名20s
    cpuCPU 核心数输出含数字20s
    kernel内核版本输出含版本号20s
  2. Medium:每项基础分 20.0 分,执行时间小于对应超时的 50% 时额外获得 2.0 分,每项最高 22.0 分,共 5 项,最高 110.0 分

    测试任务验证超时奖励阈值
    network统计 TCP 连接数输出含数字25s< 12.5s
    fs-create创建文件写内容文件存在且内容正确25s< 12.5s
    fs-readwrite写入读取求和输出含 1530s< 15s
    fs-directory创建目录和文件目录含 ≥3 文件30s< 15s
    fs-usage磁盘使用情况输出含数字和单位25s< 12.5s
  3. Hard:基础分 27.0 分,执行时间小于 17.5s 时额外获得 2.7 分,最高 29.7 分

    测试任务验证超时
    fs-search查找 .sh 文件计数输出含数字35s

任何测试验证失败,该测试得 0 分。

测试用例:scripts/cagent_testcode.sh

使用方法

# 运行测试
./scripts/cagent_testcode.sh
# 查看评分
./scripts/cagent_testcode.sh | python3 judge/judge_cagent-glibc.py | jq .# 总分
./scripts/cagent_testcode.sh | python3 judge/judge_cagent-glibc.py | jq '[.[].score] | add'

评分示例

  • 获得时间奖励:factorial 执行时间为 8500ms,小于 10000ms,得分为 13.5 + 1.35 = 14.85 分
  • 无时间奖励:fs-readwrite 执行时间为 18000ms,不小于 15000ms,得分为 20.0 分
  • 测试失败:任何测试验证失败,该测试得 0 分

2. 支持复杂软件构建与内核优化(glibc)

本题满分 200 分,整体仅在 glibc 环境下进行。

本测例考查选手内核在真实重负载下运行复杂用户态软件的综合能力:选手内核挂载平台统一提供的磁盘镜像(含 Debian 用户态 + Rust 工具链 + tgoskits 源码 + cargo 离线缓存),在其上从源码全量编译 arceos-helloworld——这是一次数百 crate 的真实 Rust 编译(完整的依赖解析、rustc 代码生成、链接流程,重度文件读写、多线程、mmap、成千上万次系统调用)。能把这次编译完整跑通,意味着内核的文件系统、内存管理、进程调度、系统调用兼容性都达到了可用级别。

评测在多核配置(-smp 8 -m 8G,评测机须有不少于 8 个物理核)下进行,按「编译是否成功 + 编译耗时对标 Linux 基线」打分。全程离线(CARGO_NET_OFFLINE=true),依赖已预置于磁盘缓存。编译耗时以 guest 内 /proc/uptime 计时,仅覆盖编译命令本体;篡改系统时钟或 /proc/uptime 以伪造更快耗时,视为作弊。

2.1 支持运行复杂软件构建环境

本部分验证选手内核能否跑起 Rust 工具链——即能否正确支撑动态链接(glibc)、基础文件与进程系统调用,让 rustc/cargo 正常运行并完成一次最小项目的完整构建。

测试点(20 分)
  1. rustc --versioncargo --version 均能正常输出版本号(串口打印 TOOLCHAIN_RESULT status=OK)。此项验证工具链二进制能加载运行(动态链接、基础 syscall)(8 分)
  2. 能用 cargo new 新建一个最小项目并 cargo build 编出可执行文件、运行输出 Hello, world!(串口打印 MINIBUILD_RESULT status=OK)。此项验证「依赖解析 → 代码生成 → 链接 → 运行」全链路(12 分)
测试用例:scripts/buildstorm_testcode.sh 中的环境检查段

2.2 支持编译复杂软件

在多核配置(-smp 8 -m 8G)下,从零编译 arceos-helloworld。计时以 guest 内 /proc/uptime 为准,仅覆盖 cargo xtask arceos build 编译命令本体,构建助手 tg-xtask 的预编与环境准备不计入。

测试点(160 分)
  1. 编译成功:串口显示执行成功,即编译成功、产物存在且大小不小于 500KB。此为门槛分,编不出则本题 0 分(40 分)
  2. 编译加速分:在编译成功的前提下,按耗时 t(elapsed_s)与 Linux 基线 B 的关系,用公式 120 × clamp((2·B − t) / B, 0, 1) 计算。其含义为:追平基线(t ≤ B)得满分 120,慢到基线两倍(t ≥ 2·B)得 0,中间随耗时增加按直线均匀递减。例如 t=400s 得 120 分、t=450s 约 105 分、t=500s 得 90 分、t=600s 得 60 分、t=700s 得 30 分、t≥800s 得 0 分(120 分)
测试用例:scripts/buildstorm_testcode.sh
样例输出
#### OS COMP TEST GROUP START buildstorm ####
rustc 1.98.0-nightly (xxxxxxxxx 2026-05-27)
cargo 1.98.0-nightly (xxxxxxxxx 2026-05-26)
工具链返回成功
MINIBUILD返回成功
BUILDSTORM返回成功
#### OS COMP TEST GROUP END buildstorm ####
  • TOOLCHAIN_RESULT / MINIBUILD_RESULT:第 2.1 部分两个测试点的判定标记。
  • BUILDSTORM_RESULT:编译主结果;elapsed_s 为 guest 内计时的编译耗时,cores 供 judge 校验 qemu 配置。

2.3 内核设计优化实现文档

本题为人工评审,脚本不参与判定。选手须提交一份内核设计与优化文档,说明为跑通/加速本测例所做的工作。

测试点(20 分)
  1. 问题(bug 或性能瓶颈)定位与根因分析(6 分)
  2. 修复或优化的设计与实现(6 分)
  3. 实验分析:修改前后的编译时间、加速比等数据对比(4 分)
  4. AI 使用说明与可复现步骤,审核者能据此重现开发过程(4 分)

比赛成绩占比说明&具体评分细则

  1. 上述题目在 QEMU 模拟的 RISC-V64 与 LoongArch64 平台上进行测试,两平台规则一致;第 1 题与第 2 题均仅测试 glibc 环境。
  2. 两题各占 50%,决赛满分按 100 分记:第 1 题 CAgent 满分 200 分,第 2 题复杂软件构建与内核优化满分 200 分;每题按「本题得分 ÷ 200 × 50」折算后相加得决赛成绩(满分 100)。
  3. CAgent 题基础分与时间奖励分别计算:每个测试验证成功后获得基础分,执行时间小于该测试超时的 50% 时额外获得基础分 10% 的时间奖励;测试失败得 0 分。
  4. 编译成功为门槛,时间分为进阶:编译题「成功 40 分 + 加速 120 分」,编不出则该题(含成功分与时间分)全为 0。
  5. 时间加速分以 Linux 内核为标尺:在同一磁盘、同一评测机、同一 QEMU 配置下实测 Linux 编译耗时作为基线 B。
  6. 须为 8 物理核方才准确,评测机核数不足时时间分无效;judge 会依据串口 cores 字段给出告警。
  7. 计时与防作弊:耗时由 guest 内 /proc/uptime 测得并打印在 BUILDSTORM_RESULTelapsed_s;篡改系统时钟或 /proc/uptime 伪造耗时视为作弊。
  8. 请仔细阅读全国大学生OS比赛官网上公布的技术方案文档。

About

No description, website, or topics provided.

Resources

Stars

160 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

2026年全国大学生OS比赛--内核赛道--线上决赛测例

决赛测例(决赛满分按 100 分记)

决赛共两道题:题1 CAgent(满分 200 分)与题2 复杂软件构建与内核优化 / BuildStorm(满分 200 分),两题各占 50%。决赛总成绩满分按 100 分记:每题按「本题得分 ÷ 200 × 50」折算后相加。 注意:作品需要保证初赛测例能通过测试(后期主办方会进行复测)

本次决赛测例因为涉及操作系统内核(参赛作品)调用工具链编译第三方操作系统。工具链自身较为庞大。所以不能像以往一样自编译, 给同学们作为参考的镜像在

链接: https://pan.baidu.com/s/1zTb2NPCp9HE_l_M-3-oczg?pwd=kyva 提取码: kyva

测例部分源码和测试脚本在本目录下。

1. 支持运行 CAgent 测试(glibc)

本题在 glibc 环境下进行,考查选手内核运行 CAgent 任务时的基础命令执行、时间处理、系统信息查询、网络状态查询以及文件系统操作能力。共包含 Easy、Medium、Hard 三个难度等级的 10 个测试,满分 200 分(基础分 + 时间奖励,时间奖励为基础分的 10%)。

最终得分按以下公式计算:

最终得分 = 基础分 + 时间奖励
时间奖励 = 基础分 × 10%(当执行时间 < 超时 × 50%)

测试点(满分 200 分)

难度权重超时测试数基础分满分
Easy13.520s454.059.4
Medium20.025-30s5100.0110.0
Hard27.035s127.030.6
总计--10181.0200
  1. Easy:每项基础分 13.5 分,执行时间小于 10s 时额外获得 1.35 分,每项最高 14.85 分,共 4 项,最高 59.4 分

    测试任务验证超时
    factorial计算 10!输出含 362880020s
    date100 天前星期几输出含星期名20s
    cpuCPU 核心数输出含数字20s
    kernel内核版本输出含版本号20s
  2. Medium:每项基础分 20.0 分,执行时间小于对应超时的 50% 时额外获得 2.0 分,每项最高 22.0 分,共 5 项,最高 110.0 分

    测试任务验证超时奖励阈值
    network统计 TCP 连接数输出含数字25s< 12.5s
    fs-create创建文件写内容文件存在且内容正确25s< 12.5s
    fs-readwrite写入读取求和输出含 1530s< 15s
    fs-directory创建目录和文件目录含 ≥3 文件30s< 15s
    fs-usage磁盘使用情况输出含数字和单位25s< 12.5s
  3. Hard:基础分 27.0 分,执行时间小于 17.5s 时额外获得 2.7 分,最高 29.7 分

    测试任务验证超时
    fs-search查找 .sh 文件计数输出含数字35s

任何测试验证失败,该测试得 0 分。

测试用例:scripts/cagent_testcode.sh

使用方法

# 运行测试
./scripts/cagent_testcode.sh
# 查看评分
./scripts/cagent_testcode.sh | python3 judge/judge_cagent-glibc.py | jq .# 总分
./scripts/cagent_testcode.sh | python3 judge/judge_cagent-glibc.py | jq '[.[].score] | add'

评分示例

  • 获得时间奖励:factorial 执行时间为 8500ms,小于 10000ms,得分为 13.5 + 1.35 = 14.85 分
  • 无时间奖励:fs-readwrite 执行时间为 18000ms,不小于 15000ms,得分为 20.0 分
  • 测试失败:任何测试验证失败,该测试得 0 分

2. 支持复杂软件构建与内核优化(glibc)

本题满分 200 分,整体仅在 glibc 环境下进行。

本测例考查选手内核在真实重负载下运行复杂用户态软件的综合能力:选手内核挂载平台统一提供的磁盘镜像(含 Debian 用户态 + Rust 工具链 + tgoskits 源码 + cargo 离线缓存),在其上从源码全量编译 arceos-helloworld——这是一次数百 crate 的真实 Rust 编译(完整的依赖解析、rustc 代码生成、链接流程,重度文件读写、多线程、mmap、成千上万次系统调用)。能把这次编译完整跑通,意味着内核的文件系统、内存管理、进程调度、系统调用兼容性都达到了可用级别。

评测在多核配置(-smp 8 -m 8G,评测机须有不少于 8 个物理核)下进行,按「编译是否成功 + 编译耗时对标 Linux 基线」打分。全程离线(CARGO_NET_OFFLINE=true),依赖已预置于磁盘缓存。编译耗时以 guest 内 /proc/uptime 计时,仅覆盖编译命令本体;篡改系统时钟或 /proc/uptime 以伪造更快耗时,视为作弊。

2.1 支持运行复杂软件构建环境

本部分验证选手内核能否跑起 Rust 工具链——即能否正确支撑动态链接(glibc)、基础文件与进程系统调用,让 rustc/cargo 正常运行并完成一次最小项目的完整构建。

测试点(20 分)
  1. rustc --versioncargo --version 均能正常输出版本号(串口打印 TOOLCHAIN_RESULT status=OK)。此项验证工具链二进制能加载运行(动态链接、基础 syscall)(8 分)
  2. 能用 cargo new 新建一个最小项目并 cargo build 编出可执行文件、运行输出 Hello, world!(串口打印 MINIBUILD_RESULT status=OK)。此项验证「依赖解析 → 代码生成 → 链接 → 运行」全链路(12 分)
测试用例:scripts/buildstorm_testcode.sh 中的环境检查段

2.2 支持编译复杂软件

在多核配置(-smp 8 -m 8G)下,从零编译 arceos-helloworld。计时以 guest 内 /proc/uptime 为准,仅覆盖 cargo xtask arceos build 编译命令本体,构建助手 tg-xtask 的预编与环境准备不计入。

测试点(160 分)
  1. 编译成功:串口显示执行成功,即编译成功、产物存在且大小不小于 500KB。此为门槛分,编不出则本题 0 分(40 分)
  2. 编译加速分:在编译成功的前提下,按耗时 t(elapsed_s)与 Linux 基线 B 的关系,用公式 120 × clamp((2·B − t) / B, 0, 1) 计算。其含义为:追平基线(t ≤ B)得满分 120,慢到基线两倍(t ≥ 2·B)得 0,中间随耗时增加按直线均匀递减。例如 t=400s 得 120 分、t=450s 约 105 分、t=500s 得 90 分、t=600s 得 60 分、t=700s 得 30 分、t≥800s 得 0 分(120 分)
测试用例:scripts/buildstorm_testcode.sh
样例输出
#### OS COMP TEST GROUP START buildstorm ####
rustc 1.98.0-nightly (xxxxxxxxx 2026-05-27)
cargo 1.98.0-nightly (xxxxxxxxx 2026-05-26)
工具链返回成功
MINIBUILD返回成功
BUILDSTORM返回成功
#### OS COMP TEST GROUP END buildstorm ####
  • TOOLCHAIN_RESULT / MINIBUILD_RESULT:第 2.1 部分两个测试点的判定标记。
  • BUILDSTORM_RESULT:编译主结果;elapsed_s 为 guest 内计时的编译耗时,cores 供 judge 校验 qemu 配置。

2.3 内核设计优化实现文档

本题为人工评审,脚本不参与判定。选手须提交一份内核设计与优化文档,说明为跑通/加速本测例所做的工作。

测试点(20 分)
  1. 问题(bug 或性能瓶颈)定位与根因分析(6 分)
  2. 修复或优化的设计与实现(6 分)
  3. 实验分析:修改前后的编译时间、加速比等数据对比(4 分)
  4. AI 使用说明与可复现步骤,审核者能据此重现开发过程(4 分)

比赛成绩占比说明&具体评分细则

  1. 上述题目在 QEMU 模拟的 RISC-V64 与 LoongArch64 平台上进行测试,两平台规则一致;第 1 题与第 2 题均仅测试 glibc 环境。
  2. 两题各占 50%,决赛满分按 100 分记:第 1 题 CAgent 满分 200 分,第 2 题复杂软件构建与内核优化满分 200 分;每题按「本题得分 ÷ 200 × 50」折算后相加得决赛成绩(满分 100)。
  3. CAgent 题基础分与时间奖励分别计算:每个测试验证成功后获得基础分,执行时间小于该测试超时的 50% 时额外获得基础分 10% 的时间奖励;测试失败得 0 分。
  4. 编译成功为门槛,时间分为进阶:编译题「成功 40 分 + 加速 120 分」,编不出则该题(含成功分与时间分)全为 0。
  5. 时间加速分以 Linux 内核为标尺:在同一磁盘、同一评测机、同一 QEMU 配置下实测 Linux 编译耗时作为基线 B。
  6. 须为 8 物理核方才准确,评测机核数不足时时间分无效;judge 会依据串口 cores 字段给出告警。
  7. 计时与防作弊:耗时由 guest 内 /proc/uptime 测得并打印在 BUILDSTORM_RESULTelapsed_s;篡改系统时钟或 /proc/uptime 伪造耗时视为作弊。
  8. 请仔细阅读全国大学生OS比赛官网上公布的技术方案文档。

About

No description, website, or topics provided.

Resources

Stars

160 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

2026年全国大学生OS比赛--内核赛道--线上决赛测例

决赛测例(决赛满分按 100 分记)

决赛共两道题:题1 CAgent(满分 200 分)与题2 复杂软件构建与内核优化 / BuildStorm(满分 200 分),两题各占 50%。决赛总成绩满分按 100 分记:每题按「本题得分 ÷ 200 × 50」折算后相加。 注意:作品需要保证初赛测例能通过测试(后期主办方会进行复测)

本次决赛测例因为涉及操作系统内核(参赛作品)调用工具链编译第三方操作系统。工具链自身较为庞大。所以不能像以往一样自编译, 给同学们作为参考的镜像在

链接: https://pan.baidu.com/s/1zTb2NPCp9HE_l_M-3-oczg?pwd=kyva 提取码: kyva

测例部分源码和测试脚本在本目录下。

1. 支持运行 CAgent 测试(glibc)

本题在 glibc 环境下进行,考查选手内核运行 CAgent 任务时的基础命令执行、时间处理、系统信息查询、网络状态查询以及文件系统操作能力。共包含 Easy、Medium、Hard 三个难度等级的 10 个测试,满分 200 分(基础分 + 时间奖励,时间奖励为基础分的 10%)。

最终得分按以下公式计算:

最终得分 = 基础分 + 时间奖励
时间奖励 = 基础分 × 10%(当执行时间 < 超时 × 50%)

测试点(满分 200 分)

难度权重超时测试数基础分满分
Easy13.520s454.059.4
Medium20.025-30s5100.0110.0
Hard27.035s127.030.6
总计--10181.0200
  1. Easy:每项基础分 13.5 分,执行时间小于 10s 时额外获得 1.35 分,每项最高 14.85 分,共 4 项,最高 59.4 分

    测试任务验证超时
    factorial计算 10!输出含 362880020s
    date100 天前星期几输出含星期名20s
    cpuCPU 核心数输出含数字20s
    kernel内核版本输出含版本号20s
  2. Medium:每项基础分 20.0 分,执行时间小于对应超时的 50% 时额外获得 2.0 分,每项最高 22.0 分,共 5 项,最高 110.0 分

    测试任务验证超时奖励阈值
    network统计 TCP 连接数输出含数字25s< 12.5s
    fs-create创建文件写内容文件存在且内容正确25s< 12.5s
    fs-readwrite写入读取求和输出含 1530s< 15s
    fs-directory创建目录和文件目录含 ≥3 文件30s< 15s
    fs-usage磁盘使用情况输出含数字和单位25s< 12.5s
  3. Hard:基础分 27.0 分,执行时间小于 17.5s 时额外获得 2.7 分,最高 29.7 分

    测试任务验证超时
    fs-search查找 .sh 文件计数输出含数字35s

任何测试验证失败,该测试得 0 分。

测试用例:scripts/cagent_testcode.sh

使用方法

# 运行测试
./scripts/cagent_testcode.sh
# 查看评分
./scripts/cagent_testcode.sh | python3 judge/judge_cagent-glibc.py | jq .# 总分
./scripts/cagent_testcode.sh | python3 judge/judge_cagent-glibc.py | jq '[.[].score] | add'

评分示例

  • 获得时间奖励:factorial 执行时间为 8500ms,小于 10000ms,得分为 13.5 + 1.35 = 14.85 分
  • 无时间奖励:fs-readwrite 执行时间为 18000ms,不小于 15000ms,得分为 20.0 分
  • 测试失败:任何测试验证失败,该测试得 0 分

2. 支持复杂软件构建与内核优化(glibc)

本题满分 200 分,整体仅在 glibc 环境下进行。

本测例考查选手内核在真实重负载下运行复杂用户态软件的综合能力:选手内核挂载平台统一提供的磁盘镜像(含 Debian 用户态 + Rust 工具链 + tgoskits 源码 + cargo 离线缓存),在其上从源码全量编译 arceos-helloworld——这是一次数百 crate 的真实 Rust 编译(完整的依赖解析、rustc 代码生成、链接流程,重度文件读写、多线程、mmap、成千上万次系统调用)。能把这次编译完整跑通,意味着内核的文件系统、内存管理、进程调度、系统调用兼容性都达到了可用级别。

评测在多核配置(-smp 8 -m 8G,评测机须有不少于 8 个物理核)下进行,按「编译是否成功 + 编译耗时对标 Linux 基线」打分。全程离线(CARGO_NET_OFFLINE=true),依赖已预置于磁盘缓存。编译耗时以 guest 内 /proc/uptime 计时,仅覆盖编译命令本体;篡改系统时钟或 /proc/uptime 以伪造更快耗时,视为作弊。

2.1 支持运行复杂软件构建环境

本部分验证选手内核能否跑起 Rust 工具链——即能否正确支撑动态链接(glibc)、基础文件与进程系统调用,让 rustc/cargo 正常运行并完成一次最小项目的完整构建。

测试点(20 分)
  1. rustc --versioncargo --version 均能正常输出版本号(串口打印 TOOLCHAIN_RESULT status=OK)。此项验证工具链二进制能加载运行(动态链接、基础 syscall)(8 分)
  2. 能用 cargo new 新建一个最小项目并 cargo build 编出可执行文件、运行输出 Hello, world!(串口打印 MINIBUILD_RESULT status=OK)。此项验证「依赖解析 → 代码生成 → 链接 → 运行」全链路(12 分)
测试用例:scripts/buildstorm_testcode.sh 中的环境检查段

2.2 支持编译复杂软件

在多核配置(-smp 8 -m 8G)下,从零编译 arceos-helloworld。计时以 guest 内 /proc/uptime 为准,仅覆盖 cargo xtask arceos build 编译命令本体,构建助手 tg-xtask 的预编与环境准备不计入。

测试点(160 分)
  1. 编译成功:串口显示执行成功,即编译成功、产物存在且大小不小于 500KB。此为门槛分,编不出则本题 0 分(40 分)
  2. 编译加速分:在编译成功的前提下,按耗时 t(elapsed_s)与 Linux 基线 B 的关系,用公式 120 × clamp((2·B − t) / B, 0, 1) 计算。其含义为:追平基线(t ≤ B)得满分 120,慢到基线两倍(t ≥ 2·B)得 0,中间随耗时增加按直线均匀递减。例如 t=400s 得 120 分、t=450s 约 105 分、t=500s 得 90 分、t=600s 得 60 分、t=700s 得 30 分、t≥800s 得 0 分(120 分)
测试用例:scripts/buildstorm_testcode.sh
样例输出
#### OS COMP TEST GROUP START buildstorm ####
rustc 1.98.0-nightly (xxxxxxxxx 2026-05-27)
cargo 1.98.0-nightly (xxxxxxxxx 2026-05-26)
工具链返回成功
MINIBUILD返回成功
BUILDSTORM返回成功
#### OS COMP TEST GROUP END buildstorm ####
  • TOOLCHAIN_RESULT / MINIBUILD_RESULT:第 2.1 部分两个测试点的判定标记。
  • BUILDSTORM_RESULT:编译主结果;elapsed_s 为 guest 内计时的编译耗时,cores 供 judge 校验 qemu 配置。

2.3 内核设计优化实现文档

本题为人工评审,脚本不参与判定。选手须提交一份内核设计与优化文档,说明为跑通/加速本测例所做的工作。

测试点(20 分)
  1. 问题(bug 或性能瓶颈)定位与根因分析(6 分)
  2. 修复或优化的设计与实现(6 分)
  3. 实验分析:修改前后的编译时间、加速比等数据对比(4 分)
  4. AI 使用说明与可复现步骤,审核者能据此重现开发过程(4 分)

比赛成绩占比说明&具体评分细则

  1. 上述题目在 QEMU 模拟的 RISC-V64 与 LoongArch64 平台上进行测试,两平台规则一致;第 1 题与第 2 题均仅测试 glibc 环境。
  2. 两题各占 50%,决赛满分按 100 分记:第 1 题 CAgent 满分 200 分,第 2 题复杂软件构建与内核优化满分 200 分;每题按「本题得分 ÷ 200 × 50」折算后相加得决赛成绩(满分 100)。
  3. CAgent 题基础分与时间奖励分别计算:每个测试验证成功后获得基础分,执行时间小于该测试超时的 50% 时额外获得基础分 10% 的时间奖励;测试失败得 0 分。
  4. 编译成功为门槛,时间分为进阶:编译题「成功 40 分 + 加速 120 分」,编不出则该题(含成功分与时间分)全为 0。
  5. 时间加速分以 Linux 内核为标尺:在同一磁盘、同一评测机、同一 QEMU 配置下实测 Linux 编译耗时作为基线 B。
  6. 须为 8 物理核方才准确,评测机核数不足时时间分无效;judge 会依据串口 cores 字段给出告警。
  7. 计时与防作弊:耗时由 guest 内 /proc/uptime 测得并打印在 BUILDSTORM_RESULTelapsed_s;篡改系统时钟或 /proc/uptime 伪造耗时视为作弊。
  8. 请仔细阅读全国大学生OS比赛官网上公布的技术方案文档。

About

No description, website, or topics provided.

Resources

Stars

160 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

2026年全国大学生OS比赛--内核赛道--线上决赛测例

决赛测例(决赛满分按 100 分记)

决赛共两道题:题1 CAgent(满分 200 分)与题2 复杂软件构建与内核优化 / BuildStorm(满分 200 分),两题各占 50%。决赛总成绩满分按 100 分记:每题按「本题得分 ÷ 200 × 50」折算后相加。 注意:作品需要保证初赛测例能通过测试(后期主办方会进行复测)

本次决赛测例因为涉及操作系统内核(参赛作品)调用工具链编译第三方操作系统。工具链自身较为庞大。所以不能像以往一样自编译, 给同学们作为参考的镜像在

链接: https://pan.baidu.com/s/1zTb2NPCp9HE_l_M-3-oczg?pwd=kyva 提取码: kyva

测例部分源码和测试脚本在本目录下。

1. 支持运行 CAgent 测试(glibc)

本题在 glibc 环境下进行,考查选手内核运行 CAgent 任务时的基础命令执行、时间处理、系统信息查询、网络状态查询以及文件系统操作能力。共包含 Easy、Medium、Hard 三个难度等级的 10 个测试,满分 200 分(基础分 + 时间奖励,时间奖励为基础分的 10%)。

最终得分按以下公式计算:

最终得分 = 基础分 + 时间奖励
时间奖励 = 基础分 × 10%(当执行时间 < 超时 × 50%)

测试点(满分 200 分)

难度权重超时测试数基础分满分
Easy13.520s454.059.4
Medium20.025-30s5100.0110.0
Hard27.035s127.030.6
总计--10181.0200
  1. Easy:每项基础分 13.5 分,执行时间小于 10s 时额外获得 1.35 分,每项最高 14.85 分,共 4 项,最高 59.4 分

    测试任务验证超时
    factorial计算 10!输出含 362880020s
    date100 天前星期几输出含星期名20s
    cpuCPU 核心数输出含数字20s
    kernel内核版本输出含版本号20s
  2. Medium:每项基础分 20.0 分,执行时间小于对应超时的 50% 时额外获得 2.0 分,每项最高 22.0 分,共 5 项,最高 110.0 分

    测试任务验证超时奖励阈值
    network统计 TCP 连接数输出含数字25s< 12.5s
    fs-create创建文件写内容文件存在且内容正确25s< 12.5s
    fs-readwrite写入读取求和输出含 1530s< 15s
    fs-directory创建目录和文件目录含 ≥3 文件30s< 15s
    fs-usage磁盘使用情况输出含数字和单位25s< 12.5s
  3. Hard:基础分 27.0 分,执行时间小于 17.5s 时额外获得 2.7 分,最高 29.7 分

    测试任务验证超时
    fs-search查找 .sh 文件计数输出含数字35s

任何测试验证失败,该测试得 0 分。

测试用例:scripts/cagent_testcode.sh

使用方法

# 运行测试
./scripts/cagent_testcode.sh
# 查看评分
./scripts/cagent_testcode.sh | python3 judge/judge_cagent-glibc.py | jq .# 总分
./scripts/cagent_testcode.sh | python3 judge/judge_cagent-glibc.py | jq '[.[].score] | add'

评分示例

  • 获得时间奖励:factorial 执行时间为 8500ms,小于 10000ms,得分为 13.5 + 1.35 = 14.85 分
  • 无时间奖励:fs-readwrite 执行时间为 18000ms,不小于 15000ms,得分为 20.0 分
  • 测试失败:任何测试验证失败,该测试得 0 分

2. 支持复杂软件构建与内核优化(glibc)

本题满分 200 分,整体仅在 glibc 环境下进行。

本测例考查选手内核在真实重负载下运行复杂用户态软件的综合能力:选手内核挂载平台统一提供的磁盘镜像(含 Debian 用户态 + Rust 工具链 + tgoskits 源码 + cargo 离线缓存),在其上从源码全量编译 arceos-helloworld——这是一次数百 crate 的真实 Rust 编译(完整的依赖解析、rustc 代码生成、链接流程,重度文件读写、多线程、mmap、成千上万次系统调用)。能把这次编译完整跑通,意味着内核的文件系统、内存管理、进程调度、系统调用兼容性都达到了可用级别。

评测在多核配置(-smp 8 -m 8G,评测机须有不少于 8 个物理核)下进行,按「编译是否成功 + 编译耗时对标 Linux 基线」打分。全程离线(CARGO_NET_OFFLINE=true),依赖已预置于磁盘缓存。编译耗时以 guest 内 /proc/uptime 计时,仅覆盖编译命令本体;篡改系统时钟或 /proc/uptime 以伪造更快耗时,视为作弊。

2.1 支持运行复杂软件构建环境

本部分验证选手内核能否跑起 Rust 工具链——即能否正确支撑动态链接(glibc)、基础文件与进程系统调用,让 rustc/cargo 正常运行并完成一次最小项目的完整构建。

测试点(20 分)
  1. rustc --versioncargo --version 均能正常输出版本号(串口打印 TOOLCHAIN_RESULT status=OK)。此项验证工具链二进制能加载运行(动态链接、基础 syscall)(8 分)
  2. 能用 cargo new 新建一个最小项目并 cargo build 编出可执行文件、运行输出 Hello, world!(串口打印 MINIBUILD_RESULT status=OK)。此项验证「依赖解析 → 代码生成 → 链接 → 运行」全链路(12 分)
测试用例:scripts/buildstorm_testcode.sh 中的环境检查段

2.2 支持编译复杂软件

在多核配置(-smp 8 -m 8G)下,从零编译 arceos-helloworld。计时以 guest 内 /proc/uptime 为准,仅覆盖 cargo xtask arceos build 编译命令本体,构建助手 tg-xtask 的预编与环境准备不计入。

测试点(160 分)
  1. 编译成功:串口显示执行成功,即编译成功、产物存在且大小不小于 500KB。此为门槛分,编不出则本题 0 分(40 分)
  2. 编译加速分:在编译成功的前提下,按耗时 t(elapsed_s)与 Linux 基线 B 的关系,用公式 120 × clamp((2·B − t) / B, 0, 1) 计算。其含义为:追平基线(t ≤ B)得满分 120,慢到基线两倍(t ≥ 2·B)得 0,中间随耗时增加按直线均匀递减。例如 t=400s 得 120 分、t=450s 约 105 分、t=500s 得 90 分、t=600s 得 60 分、t=700s 得 30 分、t≥800s 得 0 分(120 分)
测试用例:scripts/buildstorm_testcode.sh
样例输出
#### OS COMP TEST GROUP START buildstorm ####
rustc 1.98.0-nightly (xxxxxxxxx 2026-05-27)
cargo 1.98.0-nightly (xxxxxxxxx 2026-05-26)
工具链返回成功
MINIBUILD返回成功
BUILDSTORM返回成功
#### OS COMP TEST GROUP END buildstorm ####
  • TOOLCHAIN_RESULT / MINIBUILD_RESULT:第 2.1 部分两个测试点的判定标记。
  • BUILDSTORM_RESULT:编译主结果;elapsed_s 为 guest 内计时的编译耗时,cores 供 judge 校验 qemu 配置。

2.3 内核设计优化实现文档

本题为人工评审,脚本不参与判定。选手须提交一份内核设计与优化文档,说明为跑通/加速本测例所做的工作。

测试点(20 分)
  1. 问题(bug 或性能瓶颈)定位与根因分析(6 分)
  2. 修复或优化的设计与实现(6 分)
  3. 实验分析:修改前后的编译时间、加速比等数据对比(4 分)
  4. AI 使用说明与可复现步骤,审核者能据此重现开发过程(4 分)

比赛成绩占比说明&具体评分细则

  1. 上述题目在 QEMU 模拟的 RISC-V64 与 LoongArch64 平台上进行测试,两平台规则一致;第 1 题与第 2 题均仅测试 glibc 环境。
  2. 两题各占 50%,决赛满分按 100 分记:第 1 题 CAgent 满分 200 分,第 2 题复杂软件构建与内核优化满分 200 分;每题按「本题得分 ÷ 200 × 50」折算后相加得决赛成绩(满分 100)。
  3. CAgent 题基础分与时间奖励分别计算:每个测试验证成功后获得基础分,执行时间小于该测试超时的 50% 时额外获得基础分 10% 的时间奖励;测试失败得 0 分。
  4. 编译成功为门槛,时间分为进阶:编译题「成功 40 分 + 加速 120 分」,编不出则该题(含成功分与时间分)全为 0。
  5. 时间加速分以 Linux 内核为标尺:在同一磁盘、同一评测机、同一 QEMU 配置下实测 Linux 编译耗时作为基线 B。
  6. 须为 8 物理核方才准确,评测机核数不足时时间分无效;judge 会依据串口 cores 字段给出告警。
  7. 计时与防作弊:耗时由 guest 内 /proc/uptime 测得并打印在 BUILDSTORM_RESULTelapsed_s;篡改系统时钟或 /proc/uptime 伪造耗时视为作弊。
  8. 请仔细阅读全国大学生OS比赛官网上公布的技术方案文档。

About

No description, website, or topics provided.

Resources

Stars

160 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

2026年全国大学生OS比赛--内核赛道--线上决赛测例

决赛测例(决赛满分按 100 分记)

决赛共两道题:题1 CAgent(满分 200 分)与题2 复杂软件构建与内核优化 / BuildStorm(满分 200 分),两题各占 50%。决赛总成绩满分按 100 分记:每题按「本题得分 ÷ 200 × 50」折算后相加。 注意:作品需要保证初赛测例能通过测试(后期主办方会进行复测)

本次决赛测例因为涉及操作系统内核(参赛作品)调用工具链编译第三方操作系统。工具链自身较为庞大。所以不能像以往一样自编译, 给同学们作为参考的镜像在

链接: https://pan.baidu.com/s/1zTb2NPCp9HE_l_M-3-oczg?pwd=kyva 提取码: kyva

测例部分源码和测试脚本在本目录下。

1. 支持运行 CAgent 测试(glibc)

本题在 glibc 环境下进行,考查选手内核运行 CAgent 任务时的基础命令执行、时间处理、系统信息查询、网络状态查询以及文件系统操作能力。共包含 Easy、Medium、Hard 三个难度等级的 10 个测试,满分 200 分(基础分 + 时间奖励,时间奖励为基础分的 10%)。

最终得分按以下公式计算:

最终得分 = 基础分 + 时间奖励
时间奖励 = 基础分 × 10%(当执行时间 < 超时 × 50%)

测试点(满分 200 分)

难度权重超时测试数基础分满分
Easy13.520s454.059.4
Medium20.025-30s5100.0110.0
Hard27.035s127.030.6
总计--10181.0200
  1. Easy:每项基础分 13.5 分,执行时间小于 10s 时额外获得 1.35 分,每项最高 14.85 分,共 4 项,最高 59.4 分

    测试任务验证超时
    factorial计算 10!输出含 362880020s
    date100 天前星期几输出含星期名20s
    cpuCPU 核心数输出含数字20s
    kernel内核版本输出含版本号20s
  2. Medium:每项基础分 20.0 分,执行时间小于对应超时的 50% 时额外获得 2.0 分,每项最高 22.0 分,共 5 项,最高 110.0 分

    测试任务验证超时奖励阈值
    network统计 TCP 连接数输出含数字25s< 12.5s
    fs-create创建文件写内容文件存在且内容正确25s< 12.5s
    fs-readwrite写入读取求和输出含 1530s< 15s
    fs-directory创建目录和文件目录含 ≥3 文件30s< 15s
    fs-usage磁盘使用情况输出含数字和单位25s< 12.5s
  3. Hard:基础分 27.0 分,执行时间小于 17.5s 时额外获得 2.7 分,最高 29.7 分

    测试任务验证超时
    fs-search查找 .sh 文件计数输出含数字35s

任何测试验证失败,该测试得 0 分。

测试用例:scripts/cagent_testcode.sh

使用方法

# 运行测试
./scripts/cagent_testcode.sh
# 查看评分
./scripts/cagent_testcode.sh | python3 judge/judge_cagent-glibc.py | jq .# 总分
./scripts/cagent_testcode.sh | python3 judge/judge_cagent-glibc.py | jq '[.[].score] | add'

评分示例

  • 获得时间奖励:factorial 执行时间为 8500ms,小于 10000ms,得分为 13.5 + 1.35 = 14.85 分
  • 无时间奖励:fs-readwrite 执行时间为 18000ms,不小于 15000ms,得分为 20.0 分
  • 测试失败:任何测试验证失败,该测试得 0 分

2. 支持复杂软件构建与内核优化(glibc)

本题满分 200 分,整体仅在 glibc 环境下进行。

本测例考查选手内核在真实重负载下运行复杂用户态软件的综合能力:选手内核挂载平台统一提供的磁盘镜像(含 Debian 用户态 + Rust 工具链 + tgoskits 源码 + cargo 离线缓存),在其上从源码全量编译 arceos-helloworld——这是一次数百 crate 的真实 Rust 编译(完整的依赖解析、rustc 代码生成、链接流程,重度文件读写、多线程、mmap、成千上万次系统调用)。能把这次编译完整跑通,意味着内核的文件系统、内存管理、进程调度、系统调用兼容性都达到了可用级别。

评测在多核配置(-smp 8 -m 8G,评测机须有不少于 8 个物理核)下进行,按「编译是否成功 + 编译耗时对标 Linux 基线」打分。全程离线(CARGO_NET_OFFLINE=true),依赖已预置于磁盘缓存。编译耗时以 guest 内 /proc/uptime 计时,仅覆盖编译命令本体;篡改系统时钟或 /proc/uptime 以伪造更快耗时,视为作弊。

2.1 支持运行复杂软件构建环境

本部分验证选手内核能否跑起 Rust 工具链——即能否正确支撑动态链接(glibc)、基础文件与进程系统调用,让 rustc/cargo 正常运行并完成一次最小项目的完整构建。

测试点(20 分)
  1. rustc --versioncargo --version 均能正常输出版本号(串口打印 TOOLCHAIN_RESULT status=OK)。此项验证工具链二进制能加载运行(动态链接、基础 syscall)(8 分)
  2. 能用 cargo new 新建一个最小项目并 cargo build 编出可执行文件、运行输出 Hello, world!(串口打印 MINIBUILD_RESULT status=OK)。此项验证「依赖解析 → 代码生成 → 链接 → 运行」全链路(12 分)
测试用例:scripts/buildstorm_testcode.sh 中的环境检查段

2.2 支持编译复杂软件

在多核配置(-smp 8 -m 8G)下,从零编译 arceos-helloworld。计时以 guest 内 /proc/uptime 为准,仅覆盖 cargo xtask arceos build 编译命令本体,构建助手 tg-xtask 的预编与环境准备不计入。

测试点(160 分)
  1. 编译成功:串口显示执行成功,即编译成功、产物存在且大小不小于 500KB。此为门槛分,编不出则本题 0 分(40 分)
  2. 编译加速分:在编译成功的前提下,按耗时 t(elapsed_s)与 Linux 基线 B 的关系,用公式 120 × clamp((2·B − t) / B, 0, 1) 计算。其含义为:追平基线(t ≤ B)得满分 120,慢到基线两倍(t ≥ 2·B)得 0,中间随耗时增加按直线均匀递减。例如 t=400s 得 120 分、t=450s 约 105 分、t=500s 得 90 分、t=600s 得 60 分、t=700s 得 30 分、t≥800s 得 0 分(120 分)
测试用例:scripts/buildstorm_testcode.sh
样例输出
#### OS COMP TEST GROUP START buildstorm ####
rustc 1.98.0-nightly (xxxxxxxxx 2026-05-27)
cargo 1.98.0-nightly (xxxxxxxxx 2026-05-26)
工具链返回成功
MINIBUILD返回成功
BUILDSTORM返回成功
#### OS COMP TEST GROUP END buildstorm ####
  • TOOLCHAIN_RESULT / MINIBUILD_RESULT:第 2.1 部分两个测试点的判定标记。
  • BUILDSTORM_RESULT:编译主结果;elapsed_s 为 guest 内计时的编译耗时,cores 供 judge 校验 qemu 配置。

2.3 内核设计优化实现文档

本题为人工评审,脚本不参与判定。选手须提交一份内核设计与优化文档,说明为跑通/加速本测例所做的工作。

测试点(20 分)
  1. 问题(bug 或性能瓶颈)定位与根因分析(6 分)
  2. 修复或优化的设计与实现(6 分)
  3. 实验分析:修改前后的编译时间、加速比等数据对比(4 分)
  4. AI 使用说明与可复现步骤,审核者能据此重现开发过程(4 分)

比赛成绩占比说明&具体评分细则

  1. 上述题目在 QEMU 模拟的 RISC-V64 与 LoongArch64 平台上进行测试,两平台规则一致;第 1 题与第 2 题均仅测试 glibc 环境。
  2. 两题各占 50%,决赛满分按 100 分记:第 1 题 CAgent 满分 200 分,第 2 题复杂软件构建与内核优化满分 200 分;每题按「本题得分 ÷ 200 × 50」折算后相加得决赛成绩(满分 100)。
  3. CAgent 题基础分与时间奖励分别计算:每个测试验证成功后获得基础分,执行时间小于该测试超时的 50% 时额外获得基础分 10% 的时间奖励;测试失败得 0 分。
  4. 编译成功为门槛,时间分为进阶:编译题「成功 40 分 + 加速 120 分」,编不出则该题(含成功分与时间分)全为 0。
  5. 时间加速分以 Linux 内核为标尺:在同一磁盘、同一评测机、同一 QEMU 配置下实测 Linux 编译耗时作为基线 B。
  6. 须为 8 物理核方才准确,评测机核数不足时时间分无效;judge 会依据串口 cores 字段给出告警。
  7. 计时与防作弊:耗时由 guest 内 /proc/uptime 测得并打印在 BUILDSTORM_RESULTelapsed_s;篡改系统时钟或 /proc/uptime 伪造耗时视为作弊。
  8. 请仔细阅读全国大学生OS比赛官网上公布的技术方案文档。

About

No description, website, or topics provided.

Resources

Stars

160 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

2026年全国大学生OS比赛--内核赛道--线上决赛测例

决赛测例(决赛满分按 100 分记)

决赛共两道题:题1 CAgent(满分 200 分)与题2 复杂软件构建与内核优化 / BuildStorm(满分 200 分),两题各占 50%。决赛总成绩满分按 100 分记:每题按「本题得分 ÷ 200 × 50」折算后相加。 注意:作品需要保证初赛测例能通过测试(后期主办方会进行复测)

本次决赛测例因为涉及操作系统内核(参赛作品)调用工具链编译第三方操作系统。工具链自身较为庞大。所以不能像以往一样自编译, 给同学们作为参考的镜像在

链接: https://pan.baidu.com/s/1zTb2NPCp9HE_l_M-3-oczg?pwd=kyva 提取码: kyva

测例部分源码和测试脚本在本目录下。

1. 支持运行 CAgent 测试(glibc)

本题在 glibc 环境下进行,考查选手内核运行 CAgent 任务时的基础命令执行、时间处理、系统信息查询、网络状态查询以及文件系统操作能力。共包含 Easy、Medium、Hard 三个难度等级的 10 个测试,满分 200 分(基础分 + 时间奖励,时间奖励为基础分的 10%)。

最终得分按以下公式计算:

最终得分 = 基础分 + 时间奖励
时间奖励 = 基础分 × 10%(当执行时间 < 超时 × 50%)

测试点(满分 200 分)

难度权重超时测试数基础分满分
Easy13.520s454.059.4
Medium20.025-30s5100.0110.0
Hard27.035s127.030.6
总计--10181.0200
  1. Easy:每项基础分 13.5 分,执行时间小于 10s 时额外获得 1.35 分,每项最高 14.85 分,共 4 项,最高 59.4 分

    测试任务验证超时
    factorial计算 10!输出含 362880020s
    date100 天前星期几输出含星期名20s
    cpuCPU 核心数输出含数字20s
    kernel内核版本输出含版本号20s
  2. Medium:每项基础分 20.0 分,执行时间小于对应超时的 50% 时额外获得 2.0 分,每项最高 22.0 分,共 5 项,最高 110.0 分

    测试任务验证超时奖励阈值
    network统计 TCP 连接数输出含数字25s< 12.5s
    fs-create创建文件写内容文件存在且内容正确25s< 12.5s
    fs-readwrite写入读取求和输出含 1530s< 15s
    fs-directory创建目录和文件目录含 ≥3 文件30s< 15s
    fs-usage磁盘使用情况输出含数字和单位25s< 12.5s
  3. Hard:基础分 27.0 分,执行时间小于 17.5s 时额外获得 2.7 分,最高 29.7 分

    测试任务验证超时
    fs-search查找 .sh 文件计数输出含数字35s

任何测试验证失败,该测试得 0 分。

测试用例:scripts/cagent_testcode.sh

使用方法

# 运行测试
./scripts/cagent_testcode.sh
# 查看评分
./scripts/cagent_testcode.sh | python3 judge/judge_cagent-glibc.py | jq .# 总分
./scripts/cagent_testcode.sh | python3 judge/judge_cagent-glibc.py | jq '[.[].score] | add'

评分示例

  • 获得时间奖励:factorial 执行时间为 8500ms,小于 10000ms,得分为 13.5 + 1.35 = 14.85 分
  • 无时间奖励:fs-readwrite 执行时间为 18000ms,不小于 15000ms,得分为 20.0 分
  • 测试失败:任何测试验证失败,该测试得 0 分

2. 支持复杂软件构建与内核优化(glibc)

本题满分 200 分,整体仅在 glibc 环境下进行。

本测例考查选手内核在真实重负载下运行复杂用户态软件的综合能力:选手内核挂载平台统一提供的磁盘镜像(含 Debian 用户态 + Rust 工具链 + tgoskits 源码 + cargo 离线缓存),在其上从源码全量编译 arceos-helloworld——这是一次数百 crate 的真实 Rust 编译(完整的依赖解析、rustc 代码生成、链接流程,重度文件读写、多线程、mmap、成千上万次系统调用)。能把这次编译完整跑通,意味着内核的文件系统、内存管理、进程调度、系统调用兼容性都达到了可用级别。

评测在多核配置(-smp 8 -m 8G,评测机须有不少于 8 个物理核)下进行,按「编译是否成功 + 编译耗时对标 Linux 基线」打分。全程离线(CARGO_NET_OFFLINE=true),依赖已预置于磁盘缓存。编译耗时以 guest 内 /proc/uptime 计时,仅覆盖编译命令本体;篡改系统时钟或 /proc/uptime 以伪造更快耗时,视为作弊。

2.1 支持运行复杂软件构建环境

本部分验证选手内核能否跑起 Rust 工具链——即能否正确支撑动态链接(glibc)、基础文件与进程系统调用,让 rustc/cargo 正常运行并完成一次最小项目的完整构建。

测试点(20 分)
  1. rustc --versioncargo --version 均能正常输出版本号(串口打印 TOOLCHAIN_RESULT status=OK)。此项验证工具链二进制能加载运行(动态链接、基础 syscall)(8 分)
  2. 能用 cargo new 新建一个最小项目并 cargo build 编出可执行文件、运行输出 Hello, world!(串口打印 MINIBUILD_RESULT status=OK)。此项验证「依赖解析 → 代码生成 → 链接 → 运行」全链路(12 分)
测试用例:scripts/buildstorm_testcode.sh 中的环境检查段

2.2 支持编译复杂软件

在多核配置(-smp 8 -m 8G)下,从零编译 arceos-helloworld。计时以 guest 内 /proc/uptime 为准,仅覆盖 cargo xtask arceos build 编译命令本体,构建助手 tg-xtask 的预编与环境准备不计入。

测试点(160 分)
  1. 编译成功:串口显示执行成功,即编译成功、产物存在且大小不小于 500KB。此为门槛分,编不出则本题 0 分(40 分)
  2. 编译加速分:在编译成功的前提下,按耗时 t(elapsed_s)与 Linux 基线 B 的关系,用公式 120 × clamp((2·B − t) / B, 0, 1) 计算。其含义为:追平基线(t ≤ B)得满分 120,慢到基线两倍(t ≥ 2·B)得 0,中间随耗时增加按直线均匀递减。例如 t=400s 得 120 分、t=450s 约 105 分、t=500s 得 90 分、t=600s 得 60 分、t=700s 得 30 分、t≥800s 得 0 分(120 分)
测试用例:scripts/buildstorm_testcode.sh
样例输出
#### OS COMP TEST GROUP START buildstorm ####
rustc 1.98.0-nightly (xxxxxxxxx 2026-05-27)
cargo 1.98.0-nightly (xxxxxxxxx 2026-05-26)
工具链返回成功
MINIBUILD返回成功
BUILDSTORM返回成功
#### OS COMP TEST GROUP END buildstorm ####
  • TOOLCHAIN_RESULT / MINIBUILD_RESULT:第 2.1 部分两个测试点的判定标记。
  • BUILDSTORM_RESULT:编译主结果;elapsed_s 为 guest 内计时的编译耗时,cores 供 judge 校验 qemu 配置。

2.3 内核设计优化实现文档

本题为人工评审,脚本不参与判定。选手须提交一份内核设计与优化文档,说明为跑通/加速本测例所做的工作。

测试点(20 分)
  1. 问题(bug 或性能瓶颈)定位与根因分析(6 分)
  2. 修复或优化的设计与实现(6 分)
  3. 实验分析:修改前后的编译时间、加速比等数据对比(4 分)
  4. AI 使用说明与可复现步骤,审核者能据此重现开发过程(4 分)

比赛成绩占比说明&具体评分细则

  1. 上述题目在 QEMU 模拟的 RISC-V64 与 LoongArch64 平台上进行测试,两平台规则一致;第 1 题与第 2 题均仅测试 glibc 环境。
  2. 两题各占 50%,决赛满分按 100 分记:第 1 题 CAgent 满分 200 分,第 2 题复杂软件构建与内核优化满分 200 分;每题按「本题得分 ÷ 200 × 50」折算后相加得决赛成绩(满分 100)。
  3. CAgent 题基础分与时间奖励分别计算:每个测试验证成功后获得基础分,执行时间小于该测试超时的 50% 时额外获得基础分 10% 的时间奖励;测试失败得 0 分。
  4. 编译成功为门槛,时间分为进阶:编译题「成功 40 分 + 加速 120 分」,编不出则该题(含成功分与时间分)全为 0。
  5. 时间加速分以 Linux 内核为标尺:在同一磁盘、同一评测机、同一 QEMU 配置下实测 Linux 编译耗时作为基线 B。
  6. 须为 8 物理核方才准确,评测机核数不足时时间分无效;judge 会依据串口 cores 字段给出告警。
  7. 计时与防作弊:耗时由 guest 内 /proc/uptime 测得并打印在 BUILDSTORM_RESULTelapsed_s;篡改系统时钟或 /proc/uptime 伪造耗时视为作弊。
  8. 请仔细阅读全国大学生OS比赛官网上公布的技术方案文档。

About

No description, website, or topics provided.

Resources

Stars

160 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages