操作系统内功篇:硬件结构之CPU是如何运行的?

本文分5个小结,分别是图灵机工作方式,冯诺依曼结构,总线线路位宽和CPU位宽,程序执行的基本过程, a=1+2的具体执行过程。

一 图灵机的工作方式

图灵机由纸带,读写头组成。读写头上有一些部件例:存储单元,控制单元,运算单元。

 存储单元用来存储存放数据,存储单元也叫图灵机的状态。控制单元用来判断字符是数据还是指令,运算单元用来数据的运算。

纸带就好比内存,由一个个连续的小格子组成了纸带,就好比多个存储单元构成了内存。每个小格子都可以写入字符。字符就是数据。

举个例子:计算1+2,图灵机怎么做处理?

1)读写头将[1,2,+]三个字符写入到三个纸带的小格子上。读写头处在1的位置。

2)读写头将1写入到存储单元(图灵机的状态),右移读写头,将2也写入到存储单元。再次右移,发现是+运算符,读写头将运算符加入到控制单元,控制单元发现是个运算符便会通知运算单元做运算。

3)将运算结果返回给控制单元,控制单元再把结果传给读写头,读写头右移将结果写入格子中。

二 冯诺依曼结构

采用冯诺依曼结构是因为:用较少的钱可以做出速度不错的计算机。

冯诺依曼和其他科学家规定了沿用图灵机的设计并将二进制进行计算和存储。并将计算机基本结构定义为5个部分,中央处理器(CPU),内存,输入输出设备,总线。

2.1 内存

内存: 启动的程序和数据都存在内存中,内存的存储单位是字节。每个存储单元里面存储的就是一串二进制数字。内存的地址是从全0开始编号,自增长排序,最后一个位置的地址自然就是内存大小转化为字节数-1。

2.2 CPU

CPU: 平常谈到的CPU大致就是32位宽和64位宽。区别在于32位宽的CPU一次可计算32位,也就是4字节大小的数字,64位一个意思,一次可计算8字节大小的数字。CPU内部还有一些比较重要的组件,寄存器,控制单元,逻辑运算单元。控制单元负责控制CPU工作,逻辑运算单元负责计算的。

额外补充:寄存器分类: 1)通用寄存器,存放运算数据。 2)程序计数器,pc指针,eip,存储下一条二进制指令在内存的地址。 3)指令寄存器,存储程序计数器指向的指令的具体内容。 为什么有了内存了,还要寄存器? 因为CPU和内存很远,为了提高效率所以就有了寄存器。

2.3 总线

 总线分类: 地址总线,数据总线,控制总线。用于CPU和内存之间或者是CPU和其他设备之间的通信。 1)地址总线:CPU将要操作的内存的地址是哪个 2)数据总线:同于读写发送和接收的数据 3)控制总线:接收发送信号。举个例子,输入设备将数据输入到计算机,计算机将数据输出到输出设备就需要用到控制总线。

2.4 输入输出设备

输入输出设备:不用说,就是外设。

输入输出设备是计算机系统中用于与外部世界交换信息的设备。它们可以帮助用户输入数据到计算机系统中,或者将计算机系统处理的数据输出给用户或其他设备。

三 总线线路位宽和CPU位宽

数据的传输就是通过操作电压,高电压是1低电压是0,高低电压构成的信号,就是类似 1010 这样的二进制数据。十进制就表示为10。

如果只有一条线路,一次就只能有一个高电压或者低电压,就说明一次只能表示一个1或者只能表示一个0。那么想传输1010就得进行四次的高低电平的转换。一次一位这样的传输称为串行(学过初中物理都知道电路有串联和并联两种,这里就和电路一个意思),这样传输时非常慢的,上一个1或者0传输完才轮到下一个1或者0传输。

为了提高效率就不能串行,就得并行。所以总线线路的位宽最好能一次就可以访问到所有的内存地址,CPU想要操作内存地址就需要用到地址总线。所以如果一个内存的大小时是4GB,那么就需要用到32条线路。因为2的32次方是4G。

CPU的位宽:指的是中央处理器(CPU)一次能够处理的数据位数。例如,一个32位CPU可以一次处理32位的数据。CPU的位宽不要小于线路位宽。比如32位宽的CPU控制40位宽的地址总线和数据总线的话,就要考虑到兼容什么的,所以一般CPU位宽和线路位宽一样就行。 注意:64位宽的CPU不一定比32位宽的就快,因为很少的程序能计算比4字节还大的数字。其次,如果是CPU是32位宽,装8GB的内存条也是浪费的,因为32为CPU只能计算4字节的数字,8GB的内存条地址范围太大。

四 程序执行的基本过程

指令是由CPU一条一条执行的。大致分四步。

1) CPU读取程序计数器中的下一条二进制指令在内存的地址。然后CPU的控制单元操作地址总线访问指定的内存地址,接着通过数据总线将地址存储的二进制指令存入指令寄存器中。

2) CPU利用解码单元对代码解码,由代码解析为汇编再解析成二进制机器码。

3) CPU分析指令寄存器中的值,确定指令的类型和参数,如果是计算类型的指令就交给CPU的逻辑运算单元,如果是存储类型指令,就交给控制单元。做完工作将结果存回寄存器或者将寄存器的值写回到内存。

4) CPU执行完后,程序计数器的值自增,自增的大小,由CPU的位宽决定,32位宽的CPU就自增4。64位宽的CPU就会自增8.。

这四步称为一个CPU指令执行周期。

补充:汇编语言中,常见的指令可以按照其功能进行分类,包括数据传输指令、运算指令、跳转指令和其他类型的指令。这些分类是为了更好地组织和理解不同类型的指令。

1) 数据传输指令:比如store/load是内存和寄存器间数据传输的指令。mov是将一个地址的数据动到另一个地址中。

2) 运算指令:这类指令用于进行各种算术和逻辑运算操作。它们可以包括加法、减法、乘法、除法、位操作等。

3) 跳转指令:这类指令用于控制程序的执行流程,编程中if-else/switch-case。

4) 信号类型指令:这类指令用于与硬件设备进行通信,控制输入输出等操作。例如,读取或写入设备寄存器、发送中断请求等。

5)其他类型指令

补充:指令的执行速度: GHZ是指时钟频率,1GHZ的CPU意思是1秒会产生1G(十亿)次数的脉冲信号,脉冲信号的本质是高低电平之间的转换。每一次的脉冲信号就是一个周期,称为是时钟周期。

对于CPU来说,一个周期CPU只能完成一个最基础的动作,时钟频率越高,时钟周期就越短,工作速度就快。 通常一条指令在一个周期是不能被执行完的。

那怎么程序跑的更快呢?

程序执行时消耗的CPU时间少就是快,对于程序占据CPU的时间可拆解为,时钟周期数量*时钟周期时间 = 指令数目*指令平均时钟周期(CPI)*时钟周期时间。 时钟周期时间就是前面提到的CPU主频,GHZ越高,主频越高,速度就快。 指令数:执行程序所需要多少指令,这基本就是靠编译器优化,同样代码在不同的编译器编译出来的二进制机器指令不同。 CPI:现代CPU一般都是用的流水线技术,让一条指令需要的时钟周期尽量少点。 时钟周期时间:表示计算机主频(GHZ),取决于计算机硬件,有的CPU支持超频技术,超频就是把CPU内部的时钟调快了(永杰无间超频的话,出刀快)。有好处也有坏处,超频的话,CPU的散热压力大了,容易崩溃。

一些题外话: 32位的软件,64位的软件是什么意思?

代表指令是64位还是32位的,比如软件要在内存存储数据,这个在内存的地址就是64位。

64位的操作系统可以运行在32位的电脑上吗,反过来呢?

操作系统也是一个软件,32和64就是代表指令的位数,64位的操作系统通常无法在32位的电脑上正常运行,因为64位操作系统需要兼容64位处理器架构才能正确工作。一些旧的32位操作系统可能可以在支持64位处理器的计算机上运行,但性能可能会受到限制.32位的指令在64位机器上运行需要一套兼容机制,64位指令在32位机器上指令可以是可以,不过很困难,因为计算要分很多步骤。

总之,硬件说的64位和32位指的是CPU的位宽,软件说的是指令的位宽和总线线路的位宽。指令的位宽:指的是处理器每次能够处理的指令的位数。例如,一个64位指令集的处理器每次可以处理64bit位的二进制指令。指令的位宽直接影响处理器对指令的解析和执行能力。 地址总线的位宽:指的是处理器能够寻址的内存地址空间的大小。

五 a=1+2的具体执行过程

CPU是不认识a=1+2形式的,这只是为了方便程序员看的。要想让这段代码跑起来,就得转换成CPU能看的语句。所以要把程序翻译成汇编语言,这个过程叫做编译成汇编代码。 这还不够,之前说过冯诺依曼结构是让二进制作为机器语言,所以还要将汇编代码转化为二进制机器代码。这一条条的二进制代码才是CPU要执行的代码。

在程序运行时,要执行的二进制代码在进程地址空间的代码段存储二进制指令。具体的数据存在进程地址空间的其他区。

顺便说一下,不同的CPU由不同的指令集,就是不同的汇编代码转化成什么二进制机器指令的说明书。比如最简单的MIPS指令集。

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

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

相关文章

【报错 - npm包问题】 token.type.endsWith is not a function

将 babel-eslint 10.1.0版本,降为 8.2.2 npm install babel-eslint8.2.2 --save

Python编程从入门到实践中的一些误区

1.num 使用num时python报错,后来查过后才知道是因为python不支持自增或自减,可以用1。 2.字符串和非字符串连接 要先将非字符串转换为字符串类型之后才能连接 print(2int(‘2’))#4 3.关键字参数必须在未…

【Paper Reading】7.DiT(VAE+ViT+DDPM) Sora的base论文

VAE DDPM 分类 内容 论文题目 Scalable Diffusion Models with Transformers 作者 William Peebles (UC Berkeley), Saining Xie (New York University) 发表年份 2023 摘要 介绍了一类新的扩散模型,这些模型利用Transformer架构,专注于图像生…

Maya自定义工具架

有时候我们需要自己定义工具架上的内容,比如将一个工具放到工具架上,或者删除一个工具 添加一个工具 例如我们想在多边形建模栏位上添加一个分离按钮,默认 1 先切换到想要添加的工具架栏位 2 打开菜单,找到我们想添加的工具 …

Jmeter - 从入门到精通 - 环境搭建(详解教程)

一、JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序)。它可以用来测试静态和动态资源的性能,例如:静态文件,Java Servlet,CGI Scripts,Java Object,数据库和FTP服…

SM4加密是什么?SM4算法在国密HTTPS协议中的作用

SM4算法,全称为“国密SM4分组密码算法”,是国家密码管理局颁布的一种对称加密算法它是我国商用密码体系中的重要组成部分。与国际上广泛使用的AES等算法类似,SM4同算法样用于保护数据的机密性,确保信息在传输过程中不被未授权的第…

中东斋月将近,外贸业务要抓紧了!

Question.1 斋月所涉及的国家有哪些? 据统计,共计有48个国家会恭迎斋月的到来,集中分布于亚洲西部和非洲北部。其中黎巴嫩、乍得、尼日利亚、波黑和马来西亚只有约一半的人信仰伊斯兰教。 阿拉伯国家(22个) 亚洲:科威特、伊拉克、叙利亚、…

250+可用的 AI 资源网站

💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 这里是关于AI网站的一份资源列表。欢迎访问该链…

知轮科技智慧轮胎系统升级:从 Elasticsearch 到 TDengine 3.0 的应用实践

小T导读:随着知轮智慧轮胎系统的不断升级迭代,数据规模也在不断增长,内外部人员对智慧系统整体业务响应速度和稳定性要求变得更高。为了满足这一需求,该项目团队决定应用 TDengine 替换原有的 Elasticsearch 检索分析引擎&#xf…

支付模块-基于消息队列发送支付通知消息

消息队列发送支付通知消息 需求分析 订单服务作为通用服务,在订单支付成功后需要将支付结果异步通知给其他对接的微服务,微服务收到支付结果根据订单的类型去更新自己的业务数据 技术方案 使用消息队列进行异步通知需要保证消息的可靠性即生产端将消息…

【一】【设计模式】类关系UML图

1. 继承(Generalization) 继承是对象间的一种层次关系,允许子类继承并扩展父类的功能。 UML线:带有空心箭头的直线,箭头指向基类(父类)。 class Parent {public void parentMethod() {System.…

STM32第十课:串口发送

一、usart串口 1.1 USART串口协议 串口通讯(Serial Communication) 是一种设备间非常常用的串行通讯方式,因为它简单便捷,因此大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。在计算机科学里&…