返回首页

ZVM特性:ZVM for Safety 双核分治

01 概述

安全关键场景要求外设驱动、文件系统和网络协议栈发生阻塞或故障时,不能影响内核的客户OS管理及CPU、内存等关键资源管理。ZVM for Safety采用同特权级双核分治避免上述故障影响核心控制功能,并通过访问控制和任务委托完成两核间受控协作。

02 同特权级双核分治

首先需要明确关键控制功能与数据服务的运行位置。图1对比微内核的上下特权级分治与ZVM for Safety的EL2内双核分治。

双核分治模式对比

图1. 双核分治模式对比

微内核方案

采用上下特权级分治,将外设驱动、VirtIO和网络/存储协议栈等置于EL1,将客户OS管理及CPU、内存等硬件资源管理保留在EL2。两类功能协作需要跨越EL1与EL2,伴随异常级切换和上下文保存/恢复开销。

ZVM for Safety方案

将控制功能与数据服务分别固定在同一特权级EL2内的控制核和数据核。控制核和数据核是同一内核实例中的不同组件固定运行在两个不同的物理CPU核心上。两核协作保持在EL2内,由函数接口直接完成,无异常级切换,仅保留函数调用开销。

这种同特权级双核分治在降低协作开销的同时,也将安全关键功能收敛到控制核,使控制核形成最小可信计算基(TCB)。功能安全认证只需认证控制核中的组件。控制核中的关键组件后续还可采用Rust等内存安全语言重写,进一步提升安全关键部分的可信性。

03 内存访问控制

双核职责固定后,ZVM首先按资源归属划分内存,控制核与数据核拥有各自独立的堆栈、页表、锁及其他私有数据,并设置共享区用于必要的状态交换。通过MMU限制数据核只能访问自身内存区和共享区,不能访问控制核私有内存;通过SMMU限制网卡、存储等设备的DMA访问范围在数据核内存区内,避免设备越界访问控制核关键内存。共享区对数据核默认只读,确需修改时由控制核统一授权。

共享区主要承载两核必须交换的管理状态。以镜像管理为例,数据核通过TF卡驱动读取客户OS镜像的分区信息,并需要将其登记到共享区中的镜像管理表,供控制核统一管理。

ZVM采用访问授权模式,控制核通过访问控制列表(ACL)管理共享区访问权限,数据核发起写入请求后,由控制核检查并授权相应访问。

图2以镜像分区信息登记为例。

访问控制:控制核授权数据核访问共享内存区

图2. 访问控制:控制核授权数据核访问共享内存区

① 发起请求:

数据核根据TF卡中的镜像分区信息发起镜像管理表写入请求

② ACL检查授权:

控制核依据访问控制列表(ACL)检查目标共享区并完成授权

③ 完成写入:

数据核获得授权后将分区信息写入镜像管理表对应表项

该机制将共享管理状态的写入纳入控制核访问控制,数据核的任何写入操作都需先经过控制核授权。

04 数据操作委托代理

访问授权解决共享管理数据的受控写入,但控制核发起的管理任务还可能涉及实际设备I/O:以客户OS快照为例,控制核负责发起快照任务,快照数据需要通过TF卡驱动写入TF卡;驱动固定在数据核,因此具体I/O由数据核完成。

ZVM采用委托代理模式,将控制核需要的设备操作委托给数据核代理执行并返回结果。

图3给出客户OS快照写入TF卡的委托过程。

委托代理:控制核委托数据核代理其完成数据操作

图3. 委托代理:控制核委托数据核代理其完成数据操作

① 任务委托:

控制核生成快照任务,并将TF卡写入操作委托给数据核

② 代理执行:

数据核调用本地TF卡驱动将快照数据写入TF卡

③ 返回结果:

写入完成后,数据核向控制核返回执行结果

控制核保留任务决策与结果处理,数据核保留设备及驱动状态。设备访问始终在数据核内完成,跨核仅传递任务和结果。

"上述机制共同构成ZVM的双核协作方式:控制功能与数据服务在EL2内按物理核分治,共享区承载必要的状态交换,访问授权和任务委托分别约束共享数据写入与设备I/O。控制核保留关键管理与决策,数据核执行数据访问和设备操作,两核协作不引入异常级切换。由此,数据侧负载与故障对关键控制功能的影响被限制在明确边界内,同时避免传统跨特权级协作带来的异常级切换开销,为安全关键场景下的隔离性与执行确定性提供支撑。"