CPU架构

一、CPU组成

CPU内部由ALU(算术逻辑单元)、CU(控制器)、寄存器(PC、IR、PSW、DR、通用寄存器等)、中断系统组成,外部通过总线与控制总线、数据总线、地址总线进行相连,对数据和程序进行相关的操作

CPU的功能:
(1)指令控制:按照顺序进行取指操作,由控制器CU完成取指和分析指令的操作。
(2)操作控制:能对指令进行译码、寄存、执行的有关操作。
(3)时间控制:对各种操作进行的时间实施定时。
(4)数据加工:能够进行算术运算和逻辑运算,该功能的实现由ALU寄存器(算术逻辑单元)完成。
(5)处理中断:能够响应输入输出设备发出的中断请求。

一、控制器,又叫控制单元(CU,Control Unit)
控制器的功能:
(1)从指令cache中取出一条指令,并指出下一条指令在指令cache中的位置。
(2)对指令进行译码或测试,并产生相应的操作控制信号,以便于启动规定的动作。例如:一次数据cache的读写操作,一个算术逻辑运算操作,一个输入输出操作。
(3)指挥并控制CPU,数据cache和输入输出设备之间数据流向的方向。

控制器内部的组成部分:

程序计数器(PC):用来存放下一条要执行的指令的地址。
指令寄存器(IR):用来存放当前正在执行的指令。
指令译码器(ID):对指令进行“翻译”,确定指令执行什么操作,以决定操作的性质和方法。
控制电路:根据指令译码器的分析,发出控制信号,完成该指令的所有操作。
详细分析CPU取指的流程:
指令的地址保存在程序计数器(PC)中,取指过程中,不需要使用ALU,要想把指令从内存单元中取出来,先要知道指令的地址,即需要从PC中取出指令地址。PC先把指令地址传输到MAR(存储器地址寄存器),通过MAR把信号送到地址总线,最后送到存储器。这时存储器已经得到系统将要执行的指令地址。
然后由控制单元CU向存储器发出读命令,读出的数据由存储器通过数据总线送到MDR,再由MDR送到==IR(指令寄存器)==中。这是程序计数器PC自动加一,从而确定了下一条指令的地址。

二、运算器,又叫算术逻辑单元(ALU,Arithmetic Logic Unit)


针对每一种算术运算,都必须有一个相对应的基本硬件配置,其核心部件是加法器和寄存器。
算术逻辑单元的功能:
(1)执行所有的算术运算。
(2)执行所有的逻辑运算,并进行逻辑测试。如零值测试或两个数的比较。

三、寄存器


寄存器是用来暂时保存运算和控制过程中的原始数据,中间结果,最终结果以及控制、状态信息的。CPU的寄存器被分为:用户可见寄存器、控制和状态寄存器

用户可见寄存器:
(1)通用寄存器:存放原始数据和运算结果,可以作为某种寻址方式所需的专用寄存器。当算术逻辑单元ALU执行算数或逻辑运算时,通用寄存器为ALU提供一个工作区。现代计算机中,为了减少CPU访问存储器的次数,提高运算速度,往往设置大量的寄存器。通用寄存器一般由CPU直接访问,CPU对寄存器的访问速度远大于访问主存的速度。
(2)数据寄存器:存放操作数、运算结果和运算的中间结果,以减少访问存储器的次数,或者存放从存储器读取的数据以及写入存储器的数据的寄存器。寄存了将要写入到计算机主存储器(例如:RAM)的数据,或由计算机主存储器读取后的数据。它就像缓冲器,持有从内存复制的数据,以准备给处理器使用。
(3)地址寄存器:用来保存当前CPU所访问的内存单元的地址。由于在内存和CPU之间存在着操作速度上的差别,所以必须使用地址寄存器来保持地址信息,直到内存的读/写操作完成为止 。
(4)条件码寄存器:存放条件码(条件码:体现当前指令执行结果的各种状态信息,如有无进位(CF位)、有无溢出(OV位)、结果正负(SF位)、结果是否为零(ZF位)、奇偶标志位(P位)等),可作程序分支的依据。

控制和状态寄存器
(1)控制寄存器:控制寄存器(CR0~CR3)用于控制和确定处理器的操作模式以及当前执行任务的特性。
(2)状态寄存器:
状态寄存器:存放条件码
PSW寄存器:保存由算数指令和逻辑指令运算或测试结果建立的各种条形码;保存中断和系统工作状态等信息。

四、多核与单核,多线程与单线程。

多线程在单cpu中其实也是顺序执行的,不过系统可以帮你切换那个执行而已,其实并没有快(反而慢),同一时间只能一个线程在跑,而系统给每个线程切换的的时间片段大概10ms左右,看起来像是同时跑, 但实际上是每个线程跑一点点就换到其它线程继续跑.
单核开多线程的缺点:效率不会有提高的,切换线程反倒会增加开销。一般没有必要的话,尤其在单核CPU的时候,不推荐使用多线程单核CPU的时候,不推荐使用多线程。

单核使用CPU的情况:因为IO操作不占用CPU,I/O操作又有磁盘IO,网络IO,占用CPU真正的是计算。

eg:CPU 对磁盘的文件进行操作。

从上图我们就可以发现CPU在将指令告诉DMA的时候就处于空闲状态了。

如果磁盘IO读取的数据较大,则会长时间停留在第三步中。

那么CPU空闲下来的时间,为啥我们不好好利用起来呢?

因此就出现了多线程,当一个任务被执行到第三步 磁盘将内容加载到内存中的时候且执行时间巨长,CPU则空闲的,那么我们就切换线程,让它执行其他的任务,整体就提高的任务完成的效率。

1.并发性:多线程允许应用程序同时执行多个任务。即使在单核 CPU 上,操作系统可以使用时间分片来切换不同线程的执行,从而实现并发性。这对于某些任务并行性不高,但需要同时处理多个任务的情况仍然有用。
2.10密集型任务:在进行大量10操作(如文件读写、网络请求、数据库查询)时,多线程可以提高应用程序的效率。当一个线程在等待10操作完成时,CPU可以切换到另一个线程,以充分利用CPU时间。
3.异步编程:多线程可以用于异步编程,以提高应用程序的响应性。例如,在图形用户界面(GUI)应用程序中,一个线程可以负责用户界面的渲染,而另一个线程可以处理用户输入或后台任务。
4.任务分解:多线程可以用于将大型任务分解成更小的子任务,以便并行执行这些子任务。这可以提高某些计算密集型任务的性能。
5.多核 CPU 迁移:如果应用程序已经使用多线程,将来可以更容易地迁移到多核 CPU 环境中。这样,即使只有一个核心可用,应用程序也能够更好地利用多核CPU的性能。
虽然在单核 CPU 上无法实现真正的并行计算,但多线程仍然可以提供一定程度的并发性和任务切换,从而改善应用程序的性能和响应性。
多个cpu的话就可以在多个cpu中同时执行。

线程必然不是越多越好,线程切换也是要开销的,当你增加一个线程的时候,增加的额外开销要小于该线程能够消除的阻塞时间,这才叫物有所值。

什么时候该使用多线程呢?这要分四种情况讨论:

a.多核CPU——计算密集型任务。此时要尽量使用多线程,可以提高任务执行效率,例如加密解密,数据压缩解压缩(视频、音频、普通数据),否则只能使一个核心满载,而其他核心闲置。

b.单核CPU——计算密集型任务。此时的任务已经把CPU资源100%消耗了,就没必要也不可能使用多线程来提高计算效率了;相反,如果要做人机交互,最好还是要用多线程,避免用户没法对计算机进行操作。

c.单核CPU——IO密集型任务,使用多线程还是为了人机交互方便,

d.多核CPU——IO密集型任务,这就更不用说了,跟单核时候原因一样

五、CPU的多核和应用程序的多线程的关系是怎么样的?

a1: 多核就是系统同时可以运行多个线程,比如双核可以同时执行两个线程。单核儿只能一次执行一个线程。

a2: 试了一个ping 从192.168.0.1 到192.169.0.255的程序
用多线程做的,发现在单核的机器上和多核的机器运行性能有两倍左右的差异。

a3: 多核对于用户,应该说对于程序员来说,是透明的,根本不用管它,当你是单核的编程就可以了,除非使用OpenMP进行编程,就用很多条条框框了,另外你上面的测试是不准确的,网络(主要是远程主机)会因为不同时候而有不同的响应速度,你应该在干净的本机同环境下进行测试.但是,对于多线程多核优于单核还是可以确定的. 总之,我们不用担心程序在单核或多核上会出现并发问题.

a4: 多核指的是CPU有多个核心,多线程是程序有多个线程在同时执行。
多核也要用多线程才能发挥优势。
同样,多线程要在多核上才能真正有优势。
这点来说,对程序员不是透明的。程序员可以控制程序/线程在哪个CPU(核)上运行。用户也可以控制程序在哪几个核上运行。所以多核,多线程对用户和程序员都不是透明的。程序员必须了解这方面的知识。才能让程序最大限度的发挥机器的性能。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【保姆级讲解如何安装与配置Xcode】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

第十二章 案例二:配置Trunk,实现相同VLAN的跨交换机通信

1、实验环境 公司的员工人数已达到 100 人,其网络设备如图12.13所示,现在的网络环境导致广播较多网速慢,并且也不安全,公司希望按照部门划分网络,并且能够保证一定的网络安全性 图12.13 实验案例二拓扑图 其网络规划…

环境安装:python环境迁移(无网和有网)

前言 环境部署或迁移是一项简单而又考验应对能力的一项工作,需要考虑到网络环境的情况,无网环境下需要采取离线方式进行操作,有网环境则可以直接通过在线安装完成。 在进行Python环境迁移时,需要注意保持环境的一致性,…

Notion是什么,Notion软件下载,Notion官方网站在哪里?国内用户Notion怎么订阅升级会员?

Notion是什么 Notion,一款强大的多功能工具,可用于组织笔记、任务、项目、数据库和文档等。 Notion软件下载 这个到Notion官方网站下载就可以了。 怎么订阅Notion会员 注册好了Notion的账号,来到首页,点击设置,左边…

LED显示屏黑屏的常见原因及解决办法

LED显示屏在使用过程中偶尔会出现黑屏现象,可能由多种原因引起。以下是LED显示屏出现黑屏的主要情况及相应的解决办法: 1. 上电的瞬间就是黑的 原因:可能是因为上电过程中出现了一些异常情况,导致屏幕无法正常显示。 解决办法&…

如何保证Redis双写一致性?

目录 数据不一致问题 数据库和缓存不一致解决方案 1. 先更新缓存,再更新数据 该方案数据不一致的原因 2. 先更新数据库,再更新缓存 3. 先删除缓存,再更新数据库 延时双删 4. 先更新数据库,再删除缓存 该方案数据不一致的…

新手如何用Postman做接口自动化测试?

1、什么是自动化测试 把人对软件的测试行为转化为由机器执行测试行为的一种实践。 例如GUI自动化测试,模拟人去操作软件界面,把人从简单重复的劳动中解放出来,本质是用代码去测试另一段代码,属于一种软件开发工作,已…

洗地机哪个牌子质量最好?四款年度口碑品牌盘点

在当今家庭生活中,洗地机技术的飞速发展给我们的日常带来了极大的便利。洗地机作为智能家居领域的佼佼者,其实用性和智能化程度受到越来越多消费者的欢迎。许多人在选洗地机时会纠结一个问题:洗地机哪个牌子质量最好? 洗地机怎么…

# 谷歌 Chrome 浏览器无法安装插件的解决方法

谷歌 Chrome 浏览器无法安装插件的解决方法 运用开发模式安装 安装步骤: 1、 将 XX.crx 插件的扩展名改成 .zip 或者 .rar 并解压到文件夹 XX 目录。 1)如:下载的 前端框架 vue.js 插件 nhdogjmejiglipccpnnnanhbledajbpd-6.6.1-Crx4Chro…

【AGX】Ubuntu20.04 + ROS_ noetic+ 大疆Mid360激光 雷达评测

大家好,我是虎哥,最近组装机器人,使用到了大疆孵化的圳市览沃科技有限公司(简称Livox览沃科技)推出的觅道系列全新混合固态激光雷达Mid-360,顺便试试效果,也记录一下使用入门过程。 "觅道M…

自然语言处理 (NLP) 和文本分析

自然语言处理 (NLP) 和文本分析:NLP 在很多领域都有着广泛的应用,如智能助手、语言翻译、舆情分析等。热门问题包括情感分析、命名实体识别、文本生成等。 让我们一起来详细举例子的分析讲解一下自然语言处理(NLP)和文本分析的应用…

基于java+springboot+vue实现的新闻资讯系统(文末源码+Lw)216

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,文章信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广…

String2⃣️-string类对象的修改操作

目录 string类对象的修改操作 1.push back ;append;operator 2.assign;insert 3.erase;replace 4.rfind 5.substr 6.c_str 补充 1.reverse(逆置 反转) 2.Sort string类对象的修改操作 1.push back …

【算法刷题 | 贪心算法07】4.29(用最少数量的箭引爆气球、无重叠区间)

文章目录 12.用最少数量的箭引爆气球12.1题目12.2解法:贪心12.2.1贪心思路12.2.2代码实现 13.无重叠区间13.1题目13.2解法:贪心13.2.1贪心思路13.2.2代码实现 12.用最少数量的箭引爆气球 12.1题目 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面…

Kafka 3.x.x 入门到精通(08)——对标尚硅谷Kafka教程

Kafka 3.x.x 入门到精通(08)——对标尚硅谷Kafka教程 5. Kafka优化5.1 资源配置5.1.1 操作系统5.1.2 磁盘选择5.1.3 网络带宽5.1.4 内存配置5.1.5 CPU选择 5.2 集群容错5.2.1 副本分配策略5.2.2 故障转移方案5.2.3 数据备份与恢复 5.3 参数配置优化5.4 数…

如何在WordPress中设置网站的SEO标题和描述

在WordPress中,想要让你的网站在搜索引擎结果中脱颖而出,设置优秀的SEO标题和描述至关重要。这不仅可以帮助搜索引擎更好地理解你的网站内容,还可以吸引更多的点击率和流量。而选择一款合适的SEO插件是实现这一目标的关键之一。让我们来看看两…

电路邱关源学习笔记——3.6结点电压法

1.结点电压法 以结点电压为未知量列写电路方程分析电路的方法。适用于结点较少的电路。 基本思想 选取结点电压为未知量,则KVL自动满足,无需列写KVL方程。各支路电流、电压可视为结点电压的线性组合。求出结点电压之后,便可方便地得到各支路…

怎样批量将jpg图片转换成HEIC格式?jpg快速转换成HEIC图片

heic格式和jpg格式图片大家都很熟悉了。那么这两种图片格式的区别是什么?哪种格式图片更好一些? 一,区别:jpg和HEIC的区别 1,jpg格式有良好的压缩性能和良好的重建质量而被广泛应用于图像和视频处理中。 2&#xff…

代码随想录刷题随记29-贪心3

代码随想录刷题随记29-贪心3 1005.K次取反后最大化的数组和 leetcode链接 比较简单,首先对数组进行绝对值排序,然后如果是负数从小到大进行反转 如果是正数,就对一个绝对值最小的一直翻转 按照绝对值排序的实现可以通过重写比较器实现 cla…

ComfyUI-AniPortrait——数字人插件

仓库地址:GitHub - chaojie/ComfyUI-AniPortrait 往期学习资料 整理AI学习资料库 需要的模型如下 工作流如下: 首先把上面的sd-vae-ft-mse、wav2vec2-base-960h模型放到下面的目录,如下 其他模型放到哪里都行,反正是自定义模型…