1510|7

623

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

不可分割的原子操作——《RISC-V体系结构编程与实践 》读书笔记 [复制链接]

不可分割的原子操作——《RISC-V体系结构编程与实践 》读书笔记

    原子操作无论在软件设计中中,还是硬件设计中都有所涉及。什么是原子操作呢?原子操作是指“保证指令以原子的方式执行,执行过程不会被打断。”名词解释总是如此地晦涩难懂!
咱们的处理器工作都是以“加载-执行”的模式运行。因此,对数据的操作也就分为了“读-改-写”三步,即将数据从内存中读出来到寄存器,对寄存器中的数据进行运算,处理,再将新数据写回内存的三步。因此,上述三步只要有一步被打断,则新数据就很难保证正确,系统稳定性则很保证。
    如何解决呢?要依靠处理器提供硬件支持。RISC-V指令集的A扩展指令集提供两种方式:一是经典的LR和SC指令,部分参考资料也称其为LL/SC指令;另一种是原子内存访问指令。
    LL是load-link的缩写,其在内存地址读取一个值,处理器会监控这个内存地址。对于RISC-V来说,它会注册一个保留集。
    SC是Store-conditional的缩写,其会监测store指令的执行结果。如果执行失败了,需要跳转到LR指令处,重新执行原子加载以及原子存储操作,但不管结果如何,保留集中的数据都会失效。
    RISC-V手册中并未约定LL/SC指令的实现,各个芯片设计厂商可以自由发挥。而对于原子内存访问操作指令,RISC-V指令集,它允许在靠近数据的地方原子地实现“读-改-写”操作,其汇编格式如下:

amo <op>, w/d rd, rs2, (rs1)

举个例子,用AMOADD指令实现atomic_add()函数:

void atomic_add(int i, unsigned long *p){
unsigned long result;
asm volatile("# atomic_add\n"
"amoadd.d %[result], %[i], (%[p])\n"
:[result]"=&r"(result),[p]"+r"(p)
:[i]"r"(i)
:"memory");
}

    还有其它利用汇编语言实现的原子操作,如amomax,cmpxchg()函数等。
    文中还有一个使用cmpxchg()函数实现的无锁链表,这个挺有意义的,但限于片幅,大家还是购买图片自行查阅吧!嘿嘿

 

 

 

 

 

最新回复

不可分割的原子操作   详情 回复 发表于 2023-6-6 14:12
点赞 关注

回复
举报

6587

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

看了楼主的笔记,马上就有读读《RISC-V体系结构编程与实践 》的欲望了

 
 

回复

6773

帖子

2

TA的资源

版主

板凳
 

用汇编实现原子操作,这个想法挺好的!

 
 
 

回复

6841

帖子

11

TA的资源

版主

4
 
这书好贵呀!楼主别让他吃灰,不看了借给我看看。

点评

今天京东有5折封顶价,还可以叠加满减券  详情 回复 发表于 2023-5-31 23:33
 
 
 

回复

623

帖子

0

TA的资源

纯净的硅(高级)

5
 
lugl4313820 发表于 2023-5-31 10:28 这书好贵呀!楼主别让他吃灰,不看了借给我看看。

今天京东有5折封顶价,还可以叠加满减券

点评

是嘛,感谢提供这么好的信息,我下单回来学习一下。  详情 回复 发表于 2023-6-1 05:47
 
 
 

回复

6841

帖子

11

TA的资源

版主

6
 
jobszheng5 发表于 2023-5-31 23:33 今天京东有5折封顶价,还可以叠加满减券

是嘛,感谢提供这么好的信息,我下单回来学习一下。

 
 
 

回复

6069

帖子

4

TA的资源

版主

7
 

不可分割的原子操作

点评

谢谢版主捧场   详情 回复 发表于 2023-6-8 09:51
 
 
 

回复

623

帖子

0

TA的资源

纯净的硅(高级)

8
 
damiaa 发表于 2023-6-6 14:12 不可分割的原子操作

谢谢版主捧场 

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表