内存屏障linux,Linux内存屏障

简介

现代处理器在执行指令时,使用多种技术,提高指令的执行效率,例如多级cache,流水线,多发射,乱序执行等。

这些技术的引入,导致对主存的访问顺序并不一定是编码时的顺序,也就是说,对主存的访问,是乱序的,代码中后一条指令对主存的访问可能发生在前一条指令对主存访问之前。

当程序的正确性依赖于对内存的访问顺序时,这样就会带来一系列问题。

当然对主存的乱序访问主要发生在两个阶段

1:在程序编译时,编译器对指令重排导致。

2:程序执行时,多cpu之间的交互导致的乱序访问。

大部分情况下,乱序访问并不一定带来问题,但在某些特定情况下,乱序访问导致程序与预期行为不符,因此现代处理器以及OS

提供了一些可以保证内存访问有序的指令和接口。

Cache

由于CPU访问外部主存至少在几十个CPU周期,因此CPU在内部设置了一系列的缓存空间,加速对主存数据的访问。这样就存在主存数据与CPU内Cache数据的一致性问题,CPU cache与主存之间的数据并不是实时同步,其中一个CPU对某个主存数据进行的修改,其他CPU也不一定能立即感知到。

现代CPU通过提供一些特殊的指令,可以在CPU修改完数据后,将Cache中的数据强制同步到主存,从而确保Cache与主存数据一致,也可以通过特殊指令强制CPU从主存读取数据刷新Cache中的数据。

流水线

现代CPU为了提高指令执行效率,将一条指令的执行步骤划分成多个阶段,然后按照流水线的方式进行执行,例如经典的五级流水线将

指令划分为“取指”“译码”“执行”“访存”“写回”,这样当执行一条指令的下一个过程时,下一条指令的上一个过程开始同步执行。

多发射

随着CPU技术的发展,人们不满足于一次只执行一条指令,从而发展出了一次执行多条指令的技术,类似于存在多条流水线,不同的流水线执行豪无关联的不同的指令。

乱序执行

对于一个程序中,先后并无关系的两条指令,现代CPU可以进行乱序执行,例如对主存中两个不同地址的读写操作,其执行顺序并不一定是代码中的先后顺序。

内存屏障指令

为了确保不同的CPU访问到的数据是一致的,通过一些特殊的CPU指令和接口确保代码前后位置的执行是有序完成的,这样的技术被称为内存屏障。

在Linux内核代码中,提供了以下一些接口完成内存屏障的功能(不同的CPU体系,使用了CPU特定指令)。

mb():适用于多处理器和单处理器的内存屏障。

rmb():适用于多处理器和单处理器的读内存屏障。

wmb():适用于多处理器和单处理器的写内存屏障。

smp_mb():适用于多处理器的内存屏障。

smp_rmb():适用于多处理器的读内存屏障。

smp_wmb():适用于多处理器的写内存屏障。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/488301.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Windows 7上安装Team Foundation Server(TFS)的代理服务器(Agent)

自2009年微软发布Windows 7以来,经过8年的市场验证,Windows 7已经成为史上应用最为广泛的操作系统。但是面对技术变化的日新月异,2015年微软正式停止了对Windows 7的主流支持,并将于2020年正式结束对Windows 7的所有技术支持。这一…

python中的魔法方法__new___python魔法方法,详解__new__()和__init__()

魔法方法__new__()和__init__()真是困扰了我好久。其实就是对__new__()一直不是很理解。今天做一个小小的总结吧,在这个知识点上真是花了太久的时间了。首先回顾一下类与对象python中一切皆为对象,python类本身也是一种对象,我们可以称其为类…

王喜文:图解新基建,细说新机遇(100图)

来源:智造智库去年8月22日,华为创始人任正非签发总裁办邮件,大力推荐技术大神王喜文博士的5G科普PPT《认识5G,发展5G》,并报送董事会成员、监事会成员,主送全体员工,要求华为全员学习。任正非的…

基于OpenGL编写一个简易的2D渲染框架-07 鼠标事件和键盘事件

这次为程序添加鼠标事件和键盘事件 当检测到鼠标事件和键盘事件的信息时,捕获其信息并将信息传送到需要信息的对象处理。为此,需要一个可以分派信息的对象,这个对象能够正确的把信息交到正确的对象。 实现思路: 要实现以上的功能&…

重新定义Wi-Fi功能,Wi-Fi 6为什么要分两步?

来源:传感器技术Wi-Fi 6重新定义Wi-Fi,先是双频并发,然后才是6GHz下的160MHz。Wi-Fi是什么?它是一个基于IEEE 802.11标准的无线局域网技术。如今,Wi-Fi已经覆盖了绝大部分的室内场景,你的手机、电脑、智能音…

python爬虫系统实验报告问题的分析_Python爬虫总结——常见的报错、问题及解决方案...

在爬虫开发时,我们时常会遇到各种BUG各种问题,下面是我初步汇总的一些报错和解决方案。在以后的学习中,如果遇到其他问题,我也会在这里进行更新。各位如有什么补充,欢迎评论区留言~~~问题:IP被封&#xff0…

linux qt检测u盘热插拔,【QT】动态监测U盘插拔

前言在项目中,遇到一个需求:需要动态监测U盘插入,自动读取U盘文件并打开。为了实现这个功能,我们可以使用RegisterDeviceNotification注册设备事件的通知,然后在程序中处理WM_DEVICECHANGE消息来实现步骤RegisterDevic…

童年乐趣

每个人在童年的时候,都无比天真~那时候的我们感情丰富,热血无敌,想跟着四驱兄弟去赛车;想陪着海尔兄弟去冒险;会在孙悟空被误会时流下热泪;也会在哪吒被冤枉时义愤填膺…… 虽然现在看起来有点智障&#xf…

《科学》:中德解析新冠主要蛋白酶晶体结构,有助抑制剂研发

来源:澎湃新闻自新型冠状病毒引起的疫情暴发以来,科学家们一直在努力寻找有效的病毒抑制剂。当地时间3月20日,顶级学术期刊《科学》在线发表了一篇题为“Crystal structure of SARS-CoV-2 main protease provides a basis for design of impr…

render_notebook()结果没有图_来自百度的良心产品!百度iOS截长图App

我们知道百度是国内最大的搜索引擎,但你知道它也会出品一些和搜索无关的精品工具?例如在最近,百度就推出了一款iOS平台上的滚动截长图App,要知道iOS系统一直以来就不支持系统级别的截长图,百度这工具可谓是非常实用了&…

linux emmc vfs错误,Hi3519a EMMC挂载EXT4文件系统失败

环境:hi3519AV100 Hi3519A V100R001C02SPC010问题:使用Hitool5.0.46烧写EMMC,成功烧写uboot、Image和EXT4文件系统,uboot和内核都可以正常启动,报错加载不了文件系统参考文档启动参数设置如下:setenv boota…

2017前端资源汇总

来源于:https://zhuanlan.zhihu.com/p/25229274 Any software that can be written in JavaScript will eventually be written in JavaScript. 下面的项目都列出了github的星数和npmjs上最近一个月的下载数例如 github 106.5k/stars npmjs 93.3k/lm 指有10万6千个github星&…

2020年度国家科学技术奖提名项目公示丨附全名单

来源:科学技术部3月24日,科学技术部发布了《国家科学技术奖励工作办公室公告第95号》文件。该文件称,2020年度国家科学技术奖提名工作已结束,并对2020年度国家自然科学奖、国家技术发明奖通用项目、国家科学技术进步奖通用项目受理…

linux实验试题 cp,cp命令实验,cp命令

cp命令实验,cp命令创建条件[rootlocalhost ~]#mkdir /source[rootlocalhost~]#mkdir /target[rootlocalhost~]#cp /etc/l*.conf /source[rootlocalhost~]#ll /sourcetotal20-rw-r--r--. 1 root root 28 Aug 10 09:24 ld.so.conf-rw-r-----. 1 root root 191 Aug 10 …

codevs 1052:地鼠游戏

http://codevs.cn/problem/1052/ 题目描述 Description 王钢是一名学习成绩优异的学生,在平时的学习中,他总能利用一切时间认真高效地学习,他不但学习刻苦,而且善于经常总结、完善自己的学习方法,所以他总能在每次考试…

机载雷达发展简史:从蝙蝠到机载相控阵

来源:军事高科技在线 从地基起步蝙蝠,虽然像人一样拥有双眼,但它看起东西来,用到的却不是眼睛。蝙蝠从鼻子里发出的超声波在传输过程中遇到物体后会立刻反弹,根据声波发射和回波接收之间的…

苹果手机时区改不了怎么办_天价手机摔了怎么办?苹果:你尽管摔,坏了算我输。...

智能手机比起过去的功能机,好处多到数不过来,但有一点智能手机怎么都比不上功能机,那就是不抗摔。当年的很多功能机那都是可以用来砸核桃的,抗摔性一流,基本不存在摔坏的说法,但智能手机就不一样了&#xf…

linux制作html文档,生成Kernel文档(转换rst为阅读友好的html)

0x00 Kernal与rstLinux kernal的文档使用rst结构化文本编写,阅读kernal\msm-4.1.4\README文档可知,可以通过make htmldocs生成可读的html那就试一试,果然报错了HOSTCC scripts/basic/fixdepDocumentation/Makefile:24: The sphinx-build comm…

简单的python识别的代码_python+opencv实现的简单人脸识别代码示例

#源码如下:#!/usr/bin/env python#codingutf-8import osfrom PIL import Image, ImageDrawimport cvdef detect_object(image):检测图片,获取人脸在图片中的坐标grayscale cv.CreateImage((image.width, image.height), 8, 1)cv.CvtColor(image, graysc…

2020 最新自动驾驶技术报告出炉:Waymo、特斯拉、沃尔沃技术方案大起底

来源:《2020 自动驾驶技术报告》进入 2020 年,自动驾驶技术的跨越式路线与渐进式路线之间的阵营划分已经十分明显。但最终自动驾驶要完全实现无人化,其技术还需要进行不断的迭代和发展。对于自动驾驶的技术进展,WEVOLVER 发布的《…