RISC-V的lr指令中reservation是什么?其硬件实现机制是怎样的?
RISC-V LR/SC 指令中 reservation 相关问题解答
你提到的这段描述出自RISC-V非特权ISA手册的8.2 Load-Reserved/Store-Conditional Instructions章节,相关问题解答如下:
1. reservation的定义
reservation是RISC-V为实现无锁原子操作引入的、单个Hart专属的地址有效性标记,和它绑定的reservation set(保留集)就是LR指令加载地址对应的内存区间,基础实现中至少覆盖LR访问的字/双字范围。它的核心作用是标识:从LR执行完成到后续SC执行前,这段地址对应的内存是否被其他修改操作改动过,以此判断SC的条件写是否可以执行。
2. 硬件层面的实现逻辑
主流实现逻辑如下:
- 每个Hart内置独立的保留控制逻辑,基础实现仅需一组寄存器:包含
保留地址标记、有效位两个核心字段,性能更高的实现可以扩展为多组表项,支持同时持有多个未完成的reservation。 - 执行LR指令时,硬件会将访问的内存地址对齐到保留集粒度(通常是缓存行大小)后写入
保留地址标记,同时将有效位置1,完成reservation的注册。 - 系统中所有发起内存写的主设备(其他Hart、DMA控制器等)的写请求地址,都会被广播到所有Hart的保留控制逻辑:如果写地址落在某个Hart的有效保留集范围内,硬件会自动将该Hart的
有效位清0,也就是直接失效对应的reservation。 - 执行SC指令时,硬件会先检查两个条件:当前Hart的
有效位是否为1、SC要写的地址完全落在当前保留集范围内。如果都满足则执行写操作,清0有效位并返回成功状态;任意条件不满足则直接拒绝写操作,返回失败状态。
3. Hart感知reservation失效的机制
reservation的失效是纯硬件异步完成的,不需要Hart主动感知:
- 其他Hart的写操作触发当前Hart reservation失效时,硬件会直接修改保留控制逻辑的
有效位,这个过程对Hart的指令执行完全透明,没有任何感知信号。 - Hart只有在执行SC指令的时候,才会读取自身保留控制逻辑的
有效位状态,以此判断之前持有的reservation是否有效:如果SC指令返回执行失败,就说明对应的reservation已经被其他操作失效。 - 除了其他Hart的写操作之外,异常、中断、上下文切换、主动执行内存屏障指令等场景,也会触发硬件清0当前Hart的
有效位,这类场景下执行SC也会返回失败。
内容的提问来源于stack exchange,提问作者Wanghz
相关产品推荐
相关产品推荐

