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

news2024/11/19 4:38:13

本文分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.coloradmin.cn/o/1514685.html

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

相关文章

java集合框架——List集合概述及ArrayList,LinkedList的区别

前言: List系列集合是Collection集合中两个系列的其中一个,整理下笔记。打好基础,daydayup! 需要了解Collection的,可以看这篇java集合框架——Collection集合概述 List系列集合 List系列集合的特点为添加的元素有序&…

python-0007-django模版

介绍 模版是对js,html等资源的封装 新建 在项目路径下新建模版文件夹templates(可以为其他名称),要是想细分业务的话,还可以在templates路径下继续建文件夹。如下图: 注册模版 在项目的settings找到T…

分布式链路追踪(一)SkyWalking(1)介绍与安装

一、介绍 1、简介: 2、组成 以6.5.0为例,该版本下Skywalking主要分为oap、webapp和agent三部分,oap和webapp分别用于汇总数据和展示,这两块共同组成了Skywalking的平台;agent是探针,部署在需要收集数据的…

深入解析C++树形关联式容器:map、set及其衍生容器的使用与原理

文章目录 一、引言二、关联式容器的中的 paira.pair 的创建及使用b.pair 间的比较 三、 map 与 set 详解1. map 的基本操作2. set 的基本操作3.关联式容器的迭代器 四、 multimap 与 multiset 的特性五、关联式容器的使用技巧与注意事项1. 键值类型的选择与设计2. 自定义比较函…

STM32第八节:位带操作——GPIO输出和输入

前言 我们讲了GPIO的输出,虽然我们使用的是固件库编程,但是最底层的操作是什么呢?对,我们学习过51单片机的同学肯定学习过 sbit 修改某一位的高低电平,从而实现对于硬件的控制。那么我们现在在STM32中有没有相似的操作…

【AI+编程】利用chatGPT编写python程序处理日常excel工作提升效率小技巧

之前写过一篇AI编程相关的文章 【人工智能】为啥我最近很少写python编程文章了,浅谈AI编程RPA提升工作效率 。 最近有同学私信我,怎么利用AI编程来提升工作效率,除了文章里讲的 使用AI帮忙写算法、代码提示、代码优化、不同语言转换(如J…

如何简化漏洞管理生命周期

如今,由于系统中的漏洞数量不断增加,各种规模的组织都面临着巨大的挑战。截至 2024 年 2 月,国家漏洞数据库是漏洞数据的综合来源,报告了超过 238,000 个案例。网络安全漏洞可能会导致严重后果,包括关键流程中断、敏感…

SSA-LSTM多输入回时序预测 | 樽海鞘优化算法-长短期神经网络 | Matlab

目录 一、程序及算法内容介绍: 基本内容: 亮点与优势: 二、实际运行效果: 三、算法介绍: 四、完整程序下载: 一、程序及算法内容介绍: 基本内容: 本代码基于Matlab平台编译&a…

最新CLion + STM32 + CubeMX 开发环境搭建

网上有不少相关教程,但都是基于老版本Clion,新版有一些改变,但整体是简单了。 PS:本教程基于CLion 2023.3.4 安装所需工具参考:Clion搭建stm32开发环境(STM32F103C8T6),有这一篇就够…

C# 第三方 UI 库

C# 的第三方 UI 库提供了丰富的界面控件和组件,可以帮助开发者快速构建现代化、功能丰富的桌面应用程序。以下是一些常见的 C# 第三方 UI 库,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。…

深入了解 大语言模型(LLM)微调方法

引言 众所周知,大语言模型(LLM)正在飞速发展,各行业都有了自己的大模型。其中,大模型微调技术在此过程中起到了非常关键的作用,它提升了模型的生成效率和适应性,使其能够在多样化的应用场景中发挥更大的价值。 那么&…

vscode通过多个跳板机连接目标机(两种方案亲测成功)

1、ProxyJump(推荐使用) 需要OpenSSH 7.3以上版本才可使用,可用下列命令查看: ssh -V ProxyJump命令行使用方法 ssh -J [email protected]:port1,[email protected]:port2 一层跳板机: ssh dst_usernamedst_ip -…

聚观早报 | 小米汽车SU7将发布;一加Ace 3V渲染图曝光

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 3月13日消息 小米汽车SU7将发布 一加Ace 3V渲染图曝光 禾赛科技2023营收财报 荣耀Magic6至臻版开启预售 老板电…

【05】消失的数字

hellohello~这里是土土数据结构学习笔记🥳🥳 💥个人主页:大耳朵土土垚的博客 💥所属专栏:C语言函数实现 感谢大家的观看与支持🌹🌹🌹 有问题可以写在评论区或者私信我哦…

Android Bundle putBinder传输超过1MB数据,Kotlin

Android Bundle putBinder传输超过1MB数据,Kotlin 由于Android系统架构的设计,Activity/Fragment之间通过Intent在Bundle塞进数据进行传输时候,如果数据超过1MB,会抛JE: java.lang.RuntimeException: android.os.Tran…

【Node.js从基础到高级运用】十、Node.js中的数据库操作

简介 MongoDB 是一种非关系型数据库(NoSQL),它以其灵活的文档结构、高性能、高可用性、易扩展性而闻名。对于许多Node.js开发人员来说,MongoDB 是后端存储的首选解决方案,因为它可以存储的 JSON-like 文档与 JavaScri…

关于Oracle Primavera P6的各数据库帐号用途

在使用/维护P6时,经常会用到各种不同的P6数据库用户,如在连接配置P6 Professional时用到的公共帐号pubuser,进入后台维护p6配置信息(adminpv)或开发常连接的privuser,亦或是配置BI Report/BUSINESS Intelligence报表套件用到的pxr…

如何“使用Docker快速安装Jenkins,在CentOS7”?

1、运行 docker run -d --namejenkins -p 8080:8080 jenkins/jenkins 2、查看日志 ,使用 "docker logs -f jenkins",可以持续刷新日志 docker logs jenkins 3、通过命令查看密码 docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminP…

【热门话题】前端框架发展史

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 前端开发的历史演变引言第一章:起源与基础建设 - HTML与CSS时代1.1 …

学习网络安全:记一次某网站渗透测试过程

本文作者: 汇智知了堂信安教学老师——辉哥 一、信息收集 网站界面 网站信息收集 (1)中间件信息 (2)目录扫描 思路:由于是cms的站,针对这种情况,我们可以收集cms的默认目录结构来…