调度、核心与事件 · 第 26 / 30 课 · 约 15 分钟
跨核心划分工作
拆分独立作业,并合并结果。
01 / 解释
理解概念
多个核心可以独立执行不同任务。运行前可以划分独立工作:一个工作任务处理偶数索引作业,另一个处理奇数索引作业。结果仍需要约定的合并方法。
系统实验室的核心通道使用独立 VM 实例。本挑战在一个 VM 上顺序计算同样的分工;输出验证的是任务分解,不代表并行硬件执行。独立结果位置足够时,应避免共享写入。
02 / 试做
观察实际执行
偶数索引任务处理地址 0 和 2:1² + 3² = 10。系统视图显示两个工作任务通道。
STORE 1 0
STORE 2 1
STORE 3 2
STORE 4 3
LOAD [0]
MUL R0
COPY R0 R1
LOAD [2]
MUL R0
ADD R1
PRINT
HALT用单步一次跟踪一条指令。你可以修改示例并重新执行。
03 / 挑战
让它正确运行
内存 0–3 已预设四个作业值。偶数任务计算 value[0]² + value[2]²,奇数任务计算 value[1]² + value[3]²。调用两个任务,依次输出偶数总和、奇数总和及合计。
检查器为 3 个测试案例分别在全新机器上运行当前编辑器程序,并自行提供输入和预设内存。实验室当前输出和内存不会决定结果。
CALL evenWorker
PRINT
CALL oddWorker
PRINT
LOAD R1
ADD R2
PRINT
HALT
evenWorker:
#
RETURN
oddWorker:
#
RETURN需要提示?
在 R0 中计算平方,将第一个平方保存在任务结果寄存器中,再加上第二个平方。
查看完整示例答案
阅读程序,预测每条指令的效果,再在实验室逐步执行。
CALL evenWorker
PRINT
CALL oddWorker
PRINT
LOAD R1
ADD R2
PRINT
HALT
evenWorker: LOAD [0]
MUL R0
COPY R0 R1
LOAD [2]
MUL R0
ADD R1
COPY R0 R1
RETURN
oddWorker: LOAD [1]
MUL R0
COPY R0 R2
LOAD [3]
MUL R0
ADD R2
COPY R0 R2
RETURN表情符号 CPU 实验室
表情符号程序
输入 LOAD、ADD 或其他操作码,再按空格插入表情符号。Ctrl/⌘ + Enter 运行或暂停;Escape 暂停;Ctrl/⌘ + ] 缩进。Tab 移动焦点。标签使用冒号,跳转使用从零开始的指令地址。
指令映射与断点(0)
断点在指令执行前停止。运行会跳过一次当前已停止断点并继续;单步直接执行它。编辑源代码会清除旧断点和机器状态。
CPU 寄存器
- R0
- 0
- R1
- 0
- R2
- 0
- R3
- 0
- R4
- 0
- R5
- 0
- R6
- 0
- R7
- 0
栈与循环帧
SP = 255 − 数据深度 − 调用深度。栈独立于内存。
数据栈(底 → 顶)
空
调用返回地址(底 → 顶)
空
循环帧
空
输出与输入
执行 PRINT 指令以查看输出。
排队的输入: 空
内存 · 256 字节 · 0 个非零
每个单元显示地址:数值。R = 本步读取;W = 本步写入。选择单元以检查,或在执行前初始化。方向键移动,Home/End 定位行首或行尾,Ctrl/⌘ + Home/End 定位整个内存的起点或终点。
执行轨迹 · 0 项
下方显示最近记录。检查任意从零开始的索引,查看完整独立的执行前后状态。
检查你的挑战
随时可以检查。全部案例通过后才记录完成。
进度仅使用 localStorage,保留在此浏览器,从不发送至服务器。