操作系统中cpu如何工作_驱动转化成 cpu指令-程序员宅基地

技术标签: 操作系统  cpu  

扩充小知识:

                          

这些硬件设备在一条总线上链接,他们通过这条线进行数据交互,里面的带头大哥就是CPU,拥有最高指挥权。那么它是如何工作的呢?

  A.取指单元(从内存中取得指令);

  B.解码单元(完成解码[讲内存中取到的数据转换成CPU真正能运行的指令]);

  C.执行单元(开始执行指令,根据指令的需求去调用不同的硬件去干活。);

我们通过上面知道了MMU是CPU的一部分,但是CPU有还要其他的部件吗?当然是有的啦,比如指令寄存器芯片,指令计数器芯片,堆栈指针。

  指令寄存器芯片:就是CPU用于将内存中的数据取出来存放的地方;

  指令计数器芯片:就是CPU为了记录上一次在内存中取数据的位置,方便下一次取值;

  堆栈指针:CPU每次取完指令后,就会把堆栈指针指向下一个指令在内存中的位置。

  他们的工作周期和CPU是一样快的速度,跟CPU的工作频率是在同一个时钟周期下,因此他的性能是非常好的,在CPU内部总线上完成数据通信。指令寄存器芯片,指令计数器芯片,堆栈指针。这些设备通常都被叫做CPU的寄存器。

  寄存器其实就是用于保存现场的。尤其是在时间多路复用尤为明显。比如说CPU要被多个程序共享使用的时候,CPU经常会终止或挂起一个进程,操作系统必须要把它当时的运行状态给保存起来(方便CPU一会回来处理它的时候可以继续接着上次的状态干活。)然后继续运行其他进程(这叫计算机的上下文切换)。

三.计算机的存储体系。

1.对称多处理器SMP

  CPU里面除了有MMU和寄存器(接近cpu的工作周期)等等,还有cpu核心,正是专门处理数据的,一颗CPU有多个核心,可以用于并行跑你的代码。工业上很多公司采用多颗CPU,这种结构我们称之为对称多处理器。

2.程序局部性原理

  空间局部性:

    程序是由指令和数据组成的。空间局部性指的是一个数据被访问到之后,那么离这个数据很近的其他数据随后也可能会被访问到。

  时间局部性:

    一般而言当一个程序执行完毕后,可能很快会被访问到。数据也是同样的原理,一个数据的被访问到,很可能会再次访问到。

  正是因为程序局部性的存在,所以使得无论是在空间局部性或者时间的局部性的角度来考虑,一般而言我们都需要对数据做缓存。

扩充小知识:

  由于CPU内部的寄存器存储的空间有限,于是就用了内存来存储数据,但是由于CPU和速度和内存的速度完全不在一个档次上,因此在处理的数据的时候回到多数都在等(CPU要在内存中取一个数据,cpu转一圈的时间就可以处理完,内存可能是需要转20圈)。为了解决使得效率更加提高,就出现了缓存这个概念。

  既然我们知道了程序的局部性原理,有知道了CPU为了获得更多的空间其实就是用时间去换空间,但是缓存就是可以直接让cpu拿到数据,节省了时间,所以说缓存就是用空间去换时间

3.就算进存储体系

                                

  工作时间就的朋友可能见过磁带机,现在基本上都被OUT了,企业很多都用机硬盘来替代磁带机了,所以我们这里就从我们最熟悉的家用电脑的结构来说,存下到上一次存储数据是不一样。我们可以简单举个例子,他们的周存储周期是有很大差距的。尤为明显的是机械硬盘和内存,他们两个存取熟读差距是相当大的。

扩充小知识:

  相比自己家用的台式机或是笔记本可能自己拆开过,讲过机械式硬盘,固态硬盘或是内存等等。但是可能你没有见过缓存物理设备,其实他是在CPU上的。因此我们对它的了解可能会有些盲区。

先说说一级缓存和耳机缓存吧,他们的CPU在这里面取数据的时候时间周期基本上查不了多少,因一级缓存和二级缓存都在CPU核心内部资源。(在其他硬件条件相同的情况下。一级缓存128k可能市场价格会买到300元左右,、一级缓存256k可能会买到600元左右,一级缓存512k可能市场价格就得过四位数这个具体价格可以参考京东啊。这足以说明缓存的造价是非常高的!)这个时候你可能会问那三级缓存呢?其实三级缓存就是就是多颗CPU共享的空间。当然多颗cpu也是共享内存的。

                           

4.非一致性内存访问(NUMA)

  我们知道当多颗cpu共享三级缓存或是内存的时候,他们就会出现了一个问题,即资源征用。我们知道变量或是字符串在内存中被保存是有内存地址的。他们是如何去领用内存地址呢?我们可以参考下图:

                       

  没错,这些玩硬件的大牛们将三级缓存分割,分别让不同的CPU占用不同的内存地址,这样我们可以理解他们都有自己的三级缓存区域,不会存在资源抢夺的问题,但是要注意的是他们还是同一块三级缓存。就好像北京市有朝阳区,丰台区,大兴区,海淀区等等,但是他们都是北京的所属地。我们可以这里理解。这就是NUMA,他的特性就是:非一致性内存访问,都有自己的内存空间。

扩展小知识:

  那么问题来了,基于重新负载的结果,如果cpu1运行的进程被挂起,其地址在他自己的它的缓存地址是有记录的,但是当cpu2再次运行这个程序的时候被CPU2拿到的它是如何处理的呢?

  这就没法了,只能从CPU1的三级换粗区域中复制一份地址过来一份或是移动过来一份让CPU2来处理,这个时候是需要一定时间的。所以说重新负载均衡会导致CPU性能降低。这个时候我们就可以用进程绑定来实现,让再次处理该进程的时候还是用之前处理的CPU来处理。即进程的CPU的亲缘性。

5.缓存中的通写和回写机制。

                   

  CPU在处理数据的地方就是在寄存器中修改,当寄存器没有要找的数据是,就会去一级缓存找,如果一级缓存中没有数据就会去二级缓存中找,依次查找知道从磁盘中找到,然后在加载到寄存器中。当三级缓存从内存中取数据发现三级缓存不足时,就会自动清理三级缓存的空间。

  我们知道数据最终存放的位置是硬盘,这个存取过程是由操作系统来完成的。而我们CPU在处理数据是通过两种写入方式将数据写到不同的地方,那就是通写(写到内存中)和回写(写到一级缓存中)。很显然回写的性能好,但是如果断电的话就尴尬了,数据会丢失,因为他直接写到一级缓存中就完事了,但是一级缓存其他CPU是访问不到的,因此从可靠性的角度上来说通写方式会更靠谱。具体采用哪种方式得你自己按需而定啦。

四.IO设备

1.IO设备由设备控制器和设备本身组成。

  设备控制器:集成在主板的一块芯片活一组芯片。负责从操作系统接收命令,并完成命令的执行。比如负责从操作系统中读取数据。

  设备本身:其有自己的接口,但是设备本身的接口并不可用,它只是一个物理接口。如IDE接口。

扩展小知识:

  每个控制器都有少量的用于通信的寄存器(几个到几十个不等)。这个寄存器是直接集成到设备控制器内部的。比方说,一个最小化的磁盘控制器,它也会用于指定磁盘地址,扇区计数,读写方向等相关操作请求的寄存器。所以任何时候想要激活控制器,设备驱动程序从操作系统中接收操作指令,然后将它转换成对应设备的基本操作,并把操作请求放置在寄存器中才能完成操作的。每个寄存器表现为一个IO端口。所有的寄存器组合称为设备的I/O地址空间,也叫I/O端口空间,

2.驱动程序

  真正的硬件操作是由驱动程序操作完成的。驱动程序通常应该由设备生产上完成,通常驱动程序位于内核中,虽然驱动程序可以在内核外运行,但是很少有人这么玩,因为它太低效率啦!

3.实现输入和输出

  设备的I/O端口没法事前分配,因为各个主板的型号不一致,所以我们需要做到动态指定。电脑在开机的时候,每个IO设备都要想总线的I/o端口空间注册使用I/O端口。这个动态端口是由所有的寄存器组合成为设备的I/O地址空间,有2^16次方个端口,即65535个端口。

              

  如上图所示,我们的CPU有要想跟指定设备打交道,就需要把指令传给驱动,然后驱动讲CPU的指令转换成设备能理解的信号放在寄存器中(也可以叫套接字,socket).所以说寄存器(I/O端口)是CPU通过总线和设备打交道的地址(I/O端口)。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42533216/article/details/122580341

智能推荐

HTML 表单标签_html表单标签-程序员宅基地

文章浏览阅读7.8k次,点赞17次,收藏70次。一、什么是表单标签表单是用来采集用户的输入数据,然后将数据提交给服务器二、表单的组成一个表单有三个基本组成部分: ①表单标签:这里面包含了处理表单数据所用程序的URL以及数据提交到服务器的方法。 ②表单域:包含了文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择框和文件上传框等。 ③表单按钮:包括提交按钮、复位按钮和一般按钮;三、表单标签表单标签<form></form>功能:用于申明表单,定义采集数据的范围,也就是<form>和</form>里面包含的数据_html表单标签

python控制小爱同学_从企业微信机器人到小爱同学,用 Serverless 实现生活智能化!...-程序员宅基地

文章浏览阅读1.2k次。通过定时触发器,可以简单快速地定制一个企业微信机器人。我们可以用它来实现喝水、吃饭提醒等小功能,还能实现定时推送新闻、天气,甚至是监控告警的小功能。使用企业微信机器人在企业微信中,选择添加机器人:之后,我们可以根据文档进行企业微信机器人的基础功能定制:以下是用 curl 工具往群组推送文本消息的示例(注意要将 url 替换成机器人的 webhook 地址,content 必须是 utf8 编码):..._小爱同学api python

Linux下shell脚本:bash的介绍和使用(详细)-程序员宅基地

文章浏览阅读6w次,点赞126次,收藏713次。Shell:一般我们是用图形界面和命令去控制计算机,真正能够控制计算机硬件(CPU、内存、显示器等)的只有操作系统内核(Kernel),由于安全、复杂、繁琐等原因,用户不能直接接触内核,需要另外再开发一个程序,让用户直接使用这个程序;该程序的作用就是接收用户的操作(点击图标、输入命令),并进行简单的处理,然后再传递给内核,内核和用户之间就多了一层“中间代理”,Shell 其实就是一种脚本语言,也是..._bash

Linux字符设备驱动框架之IIC总线驱动框架_linux iic 设备是字符设备吗-程序员宅基地

文章浏览阅读621次。目录1、I2C简介2、I2C驱动框架2.1、I2C核心2.1.1、I2C bus初始化2.1.2 IIC核心提供的接口函数2.2 IIC总线驱动2.2.1 I.MX6U 的 I2C 适配器驱动分析2.3、IIC设备驱动2.3.1、I2C设备驱动解析2.3.2、I2C 设备驱动编写流程1、i2c设备信息描述2、i2c设备数据收发处理流程2.3.3、I2C设备驱动实例1、参考链接:https://www.cnblogs.com/linfeng-learning/p/9523046.html#_label22_linux iic 设备是字符设备吗

zynq使用lwip远程更新flash_zynq lwip-程序员宅基地

文章浏览阅读2.7k次,点赞2次,收藏13次。1.目的zynq通过使用以太网实现远程更新flash,同时实现不断电重启,方便用户升级2.硬件环境vivado2018.2使用zynq7开发板zedboard,只需要搭建最小系统包括以太网、uart、flash控制器、ddr3.软件环境搭建硬件环境后,生成bit,导出到sdk该测试环境基于echo模板改动4.软件说明新增qspi_remote_update.h新增qspips...._zynq lwip

Python:在CMD窗口中调用python函数_cmd调用python函数-程序员宅基地

文章浏览阅读3w次,点赞18次,收藏28次。有时我们会需要在其他语言的环境下调用python,对不同的语言都有各自的方法。本文主要以CMD为例说明如何使用命令行运行某一个py文件下面的一个函数,主要使用如下代码:python -c "function_name(args)"这其中主要有两种情况:A.Python文件中只包含一个函数,而且不需要输入任何参数例如a.py为如下:print('hello world')........._cmd调用python函数

随便推点

Android 进阶解密读书笔记(十四)——插件化原理_android so的插件化-程序员宅基地

文章浏览阅读360次。插件化的客户端由宿主和插件两部分组成,宿主就是指先被安装到手机中的apk,就是我们平常加载的普通apk。插件一般是指经过处理的apk、so和dex等文件,插件可以被宿主进行动态安装。常用的插件化框架 DynamicApk、DroidPlugin、RePlugin。_android so的插件化

jdk1.7和jdk1.8区别-程序员宅基地

文章浏览阅读66次。在jdk7的新特性方面主要有一下几方面的增强本文是我学习了解了jdk7和jdk8的一些新特性的一些资料,有兴趣的大家可以浏览下下面的内容。官方文档在jdk7的新特性方面主要有下面几方面的增强:jdk1.7语法上1.1 二进制变量的表示,支持将整数类型用二进制来表示,以0b开头。所有整数int、short、long、byte都可以用二进制表示// An 8-bit 'byte' v..._jdk 1.8和jdk7

苹果cms在线采集,100多个采集资源接口,可定时采集_cms官方地址影视采集接口-程序员宅基地

文章浏览阅读1.1w次。这是一款苹果v10的采集插件,还可以采集海报,批量搜索,在此分享这个插件下载地址:【蓝奏云】:https://wwa.lanzous.com/iEZBji5xc8b【百度网盘】:https://pan.baidu.com/s/1HGy0kF_A9QS1JLQ-EvH9tg密码:u16j..._cms官方地址影视采集接口

image_transport Documentation_image_transport::camerapublisher-程序员宅基地

文章浏览阅读256次。http://docs.ros.org/api/image_transport/html/Code APIWhen transporting images, you should use image_transport’s classes as drop-in replacements for ros::Publisher and ros::Subscriber.image_transpor..._image_transport::camerapublisher

Phoenix 对HBASE表操作_phoenix column_encoded_bytes=0 的作用-程序员宅基地

文章浏览阅读462次。https://www.yuque.com/docs/share/c0b81507-2318-48a7-a22c-2278b0e82ab9?# 《01.对HBase表操作》_phoenix column_encoded_bytes=0 的作用

基于javaweb+mysql的jsp+servlet校园疫情防控管理信息系统疫情播报系统(java+servlet+jsp+bootstrap+mysql+css)-程序员宅基地

文章浏览阅读306次,点赞8次,收藏10次。基于javaweb+mysql的jsp+servlet校园疫情防控管理信息系统疫情播报系统(java+servlet+jsp+bootstrap+mysql+css)基于javaweb的JSP+Servlet校园疫情防控管理信息系统疫情播报系统(java+servlet+jsp+bootstrap+mysql+css)有了此系统,大大方便了学校疫情的防控工作,加大了学校疫情防控的力度,提高学校疫情防控的效率,尽最大地可能避免学校出现新冠肺炎疫情。课程设计,大作业,毕业设计,项目练习,学习演示等。

推荐文章

热门文章

相关标签