系统调用块¶
系统调用块是特殊类型的定义块方式,旨在实现跨特权级、跨模块的高效调用。其设计支持调用方与实现方的分离定义,适用于操作系统、嵌入式系统及安全敏感场景下的模块化调用。
架构组成¶
系统调用块由两部分构成:
- 调用方定义:位于调用发起端,使用 XB 指令指定调用目标(目标ACR与功能ID)。
- 实现方定义:位于目标模块或特权级,包含块头的剩余部分(通过 CAC_TABLE 表项)和块体指令实现。
调用方与实现方可分布于处理器或特权级上下文中。
XB 指令与 CAC_TABLE¶
XB 指令用于触发系统调用块执行,其核心机制依赖于 XBINFO 寄存器中的 CAC_TABLE 表。
- XBINFO 寄存器存储 CAC_TABLE 的基址,每个 ACR 维护独立的表。
- XB 指令的 C-ID 参数作为索引,访问 CAC_TABLE 中的 32 字节定义入口。
- 该入口定义一个完整的块头(包括 B.IOR、B.TEXT 等指令)或指向分离块体的地址。
CAC_TABLE 不包含提交指令,仅用于定义块属性和参数绑定。
块头定义与指令支持¶
CAC_TABLE 表项通过以下指令定义块头属性:
- B.CATR:设置块属性(如执行模式、权限标志)。
- B.IOR:定义输入输出寄存器(RI/RO),用于参数传递与返回值。
- B.TEXT:指定块体在内存中的位置(分离块模式)。
块执行流程¶
系统调用块的执行流程如下:
- 注册:软件将块体指令序列与权限信息注册到 CAC_TABLE 中,通过 B.TEXT 或直接嵌入指令。
- 调用:调用方执行 XB 指令,使用 ACR-ID 和 C-ID 定位目标块体。
- 执行:
- 若为 一体块模式(CAC_TABLE 嵌入指令),直接加载并执行指令序列。
- 若为 分离块模式(CAC_TABLE 指向外部PC地址),通过 B.TEXT 获取块体地址并跳转执行。
示意图如下:

一体块与分离块模式区分:
| 特性 | 一体块模式 | 分离块模式 |
|---|---|---|
| CAC_TABLE 内容 | 直接嵌入指令序列 | 存储块体PC地址 |
| 指令获取方式 | 无需访问内存,直接加载 | 需通过 B.TEXT 跳转 |
| 适用场景 | 高频、小型块体(如模板函数、上下文切换) | 较大、独立模块(如系统调用、复杂算法) |
| 性能 | 高(减少访存延迟) | 常规 |
所有模式下,B.IOR 指令均用于定义输入输出寄存器,确保跨模块数据一致性。
执行机制图示:
权限与安全控制¶
- XB 指令调用的目标 ACR 必须 特权级不低于当前 ACR。
- 若权限不足,触发 E_INST(EC_PERM) 异常,保障系统安全。
使用场景与示例¶
场景 1:跨模块系统调用(分离块模式) 用途:模块 A 调用模块 B 的文件读取功能。
; 调用方(模块 A)
XB ACR1, 20 ; 调用目标 ACR1,功能 ID 20
; 实现方(模块 B)
CAC_TABLE[20] = DECOUPLED {
B.IOR [R1], [R2] ; 输入:文件描述符在 R1,输出:数据地址在 R2
B.TEXT BLOCK_B_FILE_READ ; 指向块体 PC
}
场景 2:轻量级任务调度(一体块模式) 用途:快速执行上下文切换。
; 调用方(调度器)
XB ACR0, 5 ; 调用任务切换功能,ID 5
; 实现方(ACR0)
CAC_TABLE[5] = COUPLED {
PUSH R3 ; 保存当前状态
POP R4 ; 恢复新任务状态
}
场景 3:权限控制模板调用(分离块模式) 用途:低特权模块调用高特权加密功能。
; 调用方(低特权模块)
XB ACR2, 8 ; 调用加密功能,ID 8
; 实现方(ACR2)
CAC_TABLE[8] = DECOUPLED {
B.IOR [R5], [R6] ; 输入:数据在 R5,输出:密文在 R6
B.TEXT BLOCK_ENCRYPT
}
场景 4:硬件访问路径(一体块模式) 用途:高频 GPIO 操作。
; 调用方
XB ACR1, 10 ; 调用 GPIO 功能,ID 10
; 实现方
CAC_TABLE[10] = COUPLED {
WRITE_GPIO R7 ; 执行 GPIO 控制
READ_GPIO R8 ; 读取 GPIO 状态
}
设计优势¶
- 灵活性:支持一体块与分离块两种模式,适应不同性能与复杂度需求。
- 安全性:权限控制机制防止越权调用。
- 高效性:一体块模式减少访存开销,提升高频调用性能。
- 模块化:调用方与实现方解耦,便于系统维护与升级。