Semaphores2 (SEMA42)
1. 简介¶
SEMA42是一个内存映射模块,它提供了实现信号量的多核系统所需的强大硬件支持,并提供了一种通过单一写入访问实现“锁定和解锁”操作的简单机制。硬件信号量模块(hardware semaphore module)提供硬件强制门(hardware-enforced gates)以及与门机制(gating mechanisms)相关的其他有用的系统功能。
1.1. 多核编程:软件门¶
多处理器系统需要一种功能,该功能可用于安全轻松地为系统软件提供锁定机制,以控制对共享数据结构、共享硬件资源等的访问。该软件使用门控机制来序列化(和同步)对共享数据和/或资源的访问,以防止竞争条件并保持不同进程和域之间的内存一致性。
考虑以下对典型用例的描述:域X进入要更新共享数据值的代码段。域必须首先获取一个信号量(semaphore)。将此视为软件门的锁定(或关闭)。在门锁定之后,一个架构合理的软件系统不允许其他进程(或域)执行相同的代码段或修改受门保护的共享数据结构。 换句话说,系统锁定了其他进程/域。许多软件实现在锁定功能中包括一个自旋等待循环(spin-wait loop),直到门锁定。在域X获得锁后,域X继续执行并更新受特定锁保护的数据值。域X完成更新后,它解锁(或打开)软件门,允许其他进程/域访问更新的数据值。
正确实施的系统解决方案必须遵循以下重要规则:
- 门变量必须保护对共享数据值或共享硬件资源的所有写入。
- 域锁定门后,系统必须阻止其他进程/域访问共享数据或资源。软件约定强制执行此操作。
- 锁定特定门的域是唯一可以打开(解锁)该门的域。
硬件门中标识锁定域的信息对于系统级调试非常有用。
1.2. 特征¶
SEMA42将硬件强制信号量实现为IPS映射的从属外围设备。 功能集包括:
- 在支持多达15个域的多域配置中支持16个硬件强制门。在本文中,dmX表示域X。
- Gates显示为具有读写访问权限的16项字节大小的数组。
- 域通过将domainID_number+1写入适当的门来锁定门,并且必须读回门值以验证锁定操作是否成功。
- 门锁定后,锁定域通过写入零(0)来解锁门。
- 每个硬件门都显示为一个 16态、4 位状态机。
- 16态实现
- 如果门(Gate)= 0h,则状态(State)= 解锁 (Unlocked)
- 如果门(Gate)= 1h,则状态(State)= 被域主人(Domain master)0 锁定
- 如果门(Gate)= 2h,则状态(State)= 被域主人(Domain master)1 锁定
- …
- 如果门(Gate)= Fh,则状态(State)= 被域主人(Domain master)14 锁定
- SEMA42使用逻辑域编号和指定的数据模式作为参考属性来验证所有写操作。
- 门锁定后,锁定域必须通过写入零来解锁门。
- 支持安全重置机制以清除各个门的内容,以及清除所有的能力
- 提供编程模型访问的内存映射从外设
2. 内存映射/寄存器定义¶
您只能在超级用户模式下访问这些寄存器。用户访问因错误而终止。
2.1. SEMA42 寄存器说明¶
2.1.1. SEMA42 内存映射¶
SEMA42基地址:4029_8000h
| Offset | Register | Width (In bits) | Access | Reset value |
|---|---|---|---|---|
| 0h - Fh | Gate Register (GATE0 - GATE15) | 8 | RW | 00h |
| 42h | Reset Gate Read (RSTGT_R) | 16 | RO | 0000h |
| 42h | Reset Gate Write (RSTGT_W) | 16 | WO | See description |
2.1.2. 门寄存器 (GATE0 - GATE15)¶
Offset
For n = 0 to 15
| Register | Offset |
|---|---|
| GATEn | 0h + (n + 3 - 2 × (n mod 4)) |
功能
SEMA42在4位有限状态机中实现每个信号量门,在字节数据结构中右对齐。硬件使用逻辑域标识符号和数据模式来验证所有尝试的写入操作。只有域主人(Domain master)可以修改门寄存器。门锁定后,只有锁定域必须打开(解锁)门。
您可以在一次访问中读取多个门值。 但是您一次只能更新一个门,通过写操作。 如果您尝试写入既不是解锁值 (00h) 也不是适当的锁定值 (domainID_number + 1) 的值时,SEMA42将其视为“无操作”并且不会更改任何门状态。尝试以大于8个位(字节)的大小在单对齐访问中写入多个门会产生错误终止,并且不允许任何门状态更改。
2.1.3. 复位门读取 (RSTGT_R)¶
Offset
| Register | Offset |
|---|---|
| RSTGT_R | 42h |
功能
本节和复位门写入 (RSTGT_W) 描述了相同的寄存器。本节介绍了寄存器的一般操作,还展示了读取寄存器时寄存器字段的显示方式。复位门写入 (RSTGT_W) 显示了当您写入寄存器时寄存器字段的显示方式。
硬件门实现的目的是指定锁定域(locking domain)必须解锁门(unlock the gate)的协议。 但是某些系统可能需要重置功能来重新初始化任何门的状态,而无需系统级重启。为了支持这种特殊的门复位要求,SEMA42实现了一种安全复位机制,允许您通过遵循特定的双写访问模式来初始化硬件门(或所有门)。
安全门重置:
- 使用与维护软件看门狗定时器所需的技术相似的技术。
- 需要使用来自同一域的预定义数据模式进行两次连续写入。
您必须这样做才能强制清除指定的门。所需的访问模式如下:
- 域对 RSTGT 内存位置执行 16 位写入。最高有效字节 (RSTGT_W[RSTGDP]) 必须是 E2h。最低有效字节的值与此引用无关,可以是任何值。
- 然后同一个域对 RSTGT 位置执行第二次 16 位写入。对于此写入,高字节 (RSTGT_W[RSTGDP]) 是第一个数据模式 (1Dh) 的逻辑补码,低字节 (RSTGT_W[RSTGTN]) 指定要复位的门。此门域可以指定要清除的单个门或所有门。如果同一个域在第二次访问时写入了不正确的数据或另一个域执行了第二次写入访问,则 SEMA42 中止特殊的门复位序列并且不断言错误信号。
- 读取 RSTGT 位置返回信息的 2 位复位状态机 (RSTGT_R[RSTGSM]) 实现这些功能:
- 执行重置的域 (RSTGT_R[RSTGMS])
- 最后清除的门数 (RSTGT_R[RSTGTN]) RSTGT 寄存器的读取不会以任何方式影响安全复位有限状态机。