跳转至

系统调用块

系统调用块是特殊类型的定义块方式,旨在实现跨特权级、跨模块的高效调用。其设计支持调用方与实现方的分离定义,适用于操作系统、嵌入式系统及安全敏感场景下的模块化调用。

架构组成

系统调用块由两部分构成:

  • 调用方定义:位于调用发起端,使用 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:指定块体在内存中的位置(分离块模式)。

块执行流程

系统调用块的执行流程如下:

  1. 注册:软件将块体指令序列与权限信息注册到 CAC_TABLE 中,通过 B.TEXT 或直接嵌入指令。
  2. 调用:调用方执行 XB 指令,使用 ACR-ID 和 C-ID 定位目标块体。
  3. 执行:
    • 若为 一体块模式(CAC_TABLE 嵌入指令),直接加载并执行指令序列。
    • 若为 分离块模式(CAC_TABLE 指向外部PC地址),通过 B.TEXT 获取块体地址并跳转执行。

示意图如下:

XB

一体块与分离块模式区分:

特性 一体块模式 分离块模式
CAC_TABLE 内容 直接嵌入指令序列 存储块体PC地址
指令获取方式 无需访问内存,直接加载 需通过 B.TEXT 跳转
适用场景 高频、小型块体(如模板函数、上下文切换) 较大、独立模块(如系统调用、复杂算法)
性能 高(减少访存延迟) 常规

所有模式下,B.IOR 指令均用于定义输入输出寄存器,确保跨模块数据一致性。

执行机制图示:

XB 指令
获取ID → 查找 CAC_TABLE[128]
判断表项类型:
   ├─ 一体块模式:加载嵌入指令 → 执行
   └─ 分离块模式:获取 B.TEXT 地址 → 跳转执行

权限与安全控制

  • 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 状态
}

设计优势

  • 灵活性:支持一体块与分离块两种模式,适应不同性能与复杂度需求。
  • 安全性:权限控制机制防止越权调用。
  • 高效性:一体块模式减少访存开销,提升高频调用性能。
  • 模块化:调用方与实现方解耦,便于系统维护与升级。