决赛共两道题:题1 CAgent(满分 200 分)与题2 复杂软件构建与内核优化 / BuildStorm(满分 200 分),两题各占 50%。决赛总成绩满分按 100 分记:每题按「本题得分 ÷ 200 × 50」折算后相加。 注意:作品需要保证初赛测例能通过测试(后期主办方会进行复测)
本次决赛测例因为涉及操作系统内核(参赛作品)调用工具链编译第三方操作系统。工具链自身较为庞大。所以不能像以往一样自编译, 给同学们作为参考的镜像在
链接: https://pan.baidu.com/s/1zTb2NPCp9HE_l_M-3-oczg?pwd=kyva 提取码: kyva
测例部分源码和测试脚本在本目录下。
本题在 glibc 环境下进行,考查选手内核运行 CAgent 任务时的基础命令执行、时间处理、系统信息查询、网络状态查询以及文件系统操作能力。共包含 Easy、Medium、Hard 三个难度等级的 10 个测试,满分 200 分(基础分 + 时间奖励,时间奖励为基础分的 10%)。
最终得分按以下公式计算:
最终得分 = 基础分 + 时间奖励
时间奖励 = 基础分 × 10%(当执行时间 < 超时 × 50%)
| 难度 | 权重 | 超时 | 测试数 | 基础分 | 满分 |
|---|---|---|---|---|---|
| Easy | 13.5 | 20s | 4 | 54.0 | 59.4 |
| Medium | 20.0 | 25-30s | 5 | 100.0 | 110.0 |
| Hard | 27.0 | 35s | 1 | 27.0 | 30.6 |
| 总计 | - | - | 10 | 181.0 | 200 |
-
Easy:每项基础分 13.5 分,执行时间小于 10s 时额外获得 1.35 分,每项最高 14.85 分,共 4 项,最高 59.4 分
测试 任务 验证 超时 factorial 计算 10! 输出含 362880020s date 100 天前星期几 输出含星期名 20s cpu CPU 核心数 输出含数字 20s kernel 内核版本 输出含版本号 20s -
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 -
Hard:基础分 27.0 分,执行时间小于 17.5s 时额外获得 2.7 分,最高 29.7 分
测试 任务 验证 超时 fs-search 查找 .sh文件计数输出含数字 35s
任何测试验证失败,该测试得 0 分。
# 运行测试
./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 分。
本题满分 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 以伪造更快耗时,视为作弊。
本部分验证选手内核能否跑起 Rust 工具链——即能否正确支撑动态链接(glibc)、基础文件与进程系统调用,让 rustc/cargo 正常运行并完成一次最小项目的完整构建。
rustc --version与cargo --version均能正常输出版本号(串口打印TOOLCHAIN_RESULT status=OK)。此项验证工具链二进制能加载运行(动态链接、基础 syscall)(8 分)- 能用
cargo new新建一个最小项目并cargo build编出可执行文件、运行输出Hello, world!(串口打印MINIBUILD_RESULT status=OK)。此项验证「依赖解析 → 代码生成 → 链接 → 运行」全链路(12 分)
在多核配置(-smp 8 -m 8G)下,从零编译 arceos-helloworld。计时以 guest 内 /proc/uptime 为准,仅覆盖 cargo xtask arceos build 编译命令本体,构建助手 tg-xtask 的预编与环境准备不计入。
- 编译成功:串口显示执行成功,即编译成功、产物存在且大小不小于 500KB。此为门槛分,编不出则本题 0 分(40 分)
- 编译加速分:在编译成功的前提下,按耗时 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 分)
#### 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 配置。
本题为人工评审,脚本不参与判定。选手须提交一份内核设计与优化文档,说明为跑通/加速本测例所做的工作。
- 问题(bug 或性能瓶颈)定位与根因分析(6 分)
- 修复或优化的设计与实现(6 分)
- 实验分析:修改前后的编译时间、加速比等数据对比(4 分)
- AI 使用说明与可复现步骤,审核者能据此重现开发过程(4 分)
- 上述题目在 QEMU 模拟的 RISC-V64 与 LoongArch64 平台上进行测试,两平台规则一致;第 1 题与第 2 题均仅测试 glibc 环境。
- 两题各占 50%,决赛满分按 100 分记:第 1 题 CAgent 满分 200 分,第 2 题复杂软件构建与内核优化满分 200 分;每题按「本题得分 ÷ 200 × 50」折算后相加得决赛成绩(满分 100)。
- CAgent 题基础分与时间奖励分别计算:每个测试验证成功后获得基础分,执行时间小于该测试超时的 50% 时额外获得基础分 10% 的时间奖励;测试失败得 0 分。
- 编译成功为门槛,时间分为进阶:编译题「成功 40 分 + 加速 120 分」,编不出则该题(含成功分与时间分)全为 0。
- 时间加速分以 Linux 内核为标尺:在同一磁盘、同一评测机、同一 QEMU 配置下实测 Linux 编译耗时作为基线 B。
- 须为 8 物理核方才准确,评测机核数不足时时间分无效;judge 会依据串口
cores字段给出告警。 - 计时与防作弊:耗时由 guest 内
/proc/uptime测得并打印在BUILDSTORM_RESULT的elapsed_s;篡改系统时钟或/proc/uptime伪造耗时视为作弊。 - 请仔细阅读全国大学生OS比赛官网上公布的技术方案文档。