五分钟带你了解“简化版”的CPU(核心参数,寄存器,执行,进程调度)

目录

一、计算机的发明

二、CPU是什么

三、CPU的核心参数

1)核心

2)频率

​编辑

四、CPU的寄存器

五、CPU的执行(简化版)

六、CPU分配------进程调度

进程的属性

PCB有啥?

进程调度


一、计算机的发明

众所周知,计算机就是我们现在用的那些电脑什么的,但是你知道第一台计算机是干嘛的吗?

++计算机是冯诺依曼 发明的,这个大佬是我们计算机行业的祖师爷 ,在1946年2月14日 ,对,就是情人节。这台计算机的名字叫埃尼阿克。++ ++它最早是用来计算弹道导弹的轨迹。++后来大家觉得这个东西非常香,如果只用于军事,那就太可惜了。所以后来就出来了民用计算机,也就是我们现在用的。

计算机内部的结构大同小异,其实也是冯诺依曼提出的冯诺依曼体系结构

  • CPU(非常精彩,重点谈论)
  • 存储器
  • 输入设备(键盘,鼠标,麦克风等等)
  • 输出设备(显示器,扬声器等等)
    存储器无非就外存和内存。

外存:硬盘,软盘,U盘,光盘等等

++硬盘和内存的区别:++

硬盘:存储空间大,访问速度慢,成本低,掉电后数据仍在

内存:存储空间小,访问速度快,成本高,掉电后数据丢失

接下来就是大名鼎鼎的CPU了

二、CPU是什么

下面如图就是CPU

CPU又名中央处理系统,它是一台计算机最核心的东西,用于算术运算和逻辑判断

++制作CPU比较精密的公司有:++

1)Intel(英特尔)

2)amd

3)高通(手机cpu,晓龙)

.....

虽然说intel是老牌了,但是现在却被amd打的节节败退,现在的amd比intel的市值高了一倍,而且现在的amd的CPU便宜&大碗。
++桌面(消费市场)++

英特尔:酷睿/酷睿ultra

amd:锐龙

++服务器(商业市场)++

英特尔:志强

amd:霄龙

CPU的主流架构

1)x86,x64 给桌面端或者服务器用

Intel的上个世纪80年代,研发了一代神U叫8086(CPU型号),为了纪念,就叫x86了。

后来计算机进入的64位时代,amd研发出了amd64架构,但是奈何amd当时太弱了,就被Intel抢过去了改名x64,当自己研发的了~~

2)arm架构

给移动端/嵌入式使用,性能更弱,功耗低,更省电

3)RISC-V(V是罗马数字5)

这是一套开源的CPU架构指令,由于我们国内CPU发展比较落后,所以我们用这套开源来进行研究,现在与国际一线差距就那么几年~~

三、CPU的核心参数

CPU的核心参数主要有2个:核心和频率

1)核心

我们打开任务管理系统的性能(进程的下面一个),如下图,如果你打开的不是这个,就右键-》该图形改为-》逻辑处理器

右上角的是型号,是intel12代的i5-124500。

中间的小框框,你可以认为有多少个小框框就是多少个核心。一般来说一个核心2个线程,上图我有8个核心,12个线程是比较特殊的情况。一般都是什么什么6核心12线程,8核心16线程....(内核就是核心,逻辑处理器就是一个核心能处理的线程(类似一个人干2个人的活))

++最初的核心是单核 (CPU里面只有一个人在干活),所以CPU当时就往速度去卷,怎么让速度快呢?++

就是让CPU的集成程度高(包含更多的运算单元,才能算的快,所以每个运算单元就要很小),但是后来CPU运算单元已经很小了,已经达到4nm,7nm什么什么的,太小就要量子力学来解决了,这条路也就走不通了。
++既然这条路走不通,我就换条路:++

后来08年的时候,intel就发布了"双核心"(本来一个人干活,现在2个人干活),再后来是四核心;

还不满足就有了"**超线程"**的概念,4核心8线程(一个人干2个人的活),到现在核心越来越多,在服务器上都有128核心256线程了。

2)频率

CPU的运算速度,我们用"频率"来描述 。

我们可以简单理解为:一秒执行多少个指令。

++指令是啥?++

答:像C/Java写好的代码,它不会直接给CPU计算,而是先通过计算机把它分解成最小的单位(转化成exe程序,也就是二进制语言),这个最小单位就是指令。

上图有个基准速度和速度,有啥区别?

比如我上面的图中,基准速度是2.00GHz意思是最低速度(下限),相当于1秒执行20亿次指令(第一台计算机一秒执行5000次),那速度就是你现在当前的速度,它会根据你当前的任务量来调整。随着频率的提升,功率也就上来了,就会发热,为了保护CPU,当温度到达一定值(比如intel是105摄氏度),就会主动降温,也就是"降频"。(所以散热功能做好,就能达到更高的频率,我们也叫"超频")。

++所以衡量一个计算机牛不牛?++

答:看核心和频率

四、CPU的寄存器

CPU里面有个东西,叫寄存器。

寄存器的存储空间比内存小,速度比内存还快,成本也比内存高。

虽然说我们存储数据时,已经有内存和硬盘了,但是我们在执行计算机程序的时候,是需要把内存的数据读取到CPU的寄存器上面,供CPU去运算的。

但是寄存器的内存太小了,只有几kb,如果要读取内存的数据,要反复的读取,那就比较麻烦且耗时间。 那么就可以把经常用到的,且放不下在寄存器,那可以放到缓存中。

如上图,L1缓存,速度最快,内存最小;而L3缓存刚好相反,L2在中间。

++缓存大,对于某些场景来说性能提升很高:++

比如intel旗舰CPU14900k它L3缓存32MB;但是amd有一个次旗舰7800x3d有一个超大L3缓存96MB,他们两的性能是差不多的。而intel那个CPU要4500左右,而后者2500块钱就能买到了。
++但是对于 Java程序员来讲,缓存和寄存器其实算一个整体,不会特别区别。++

五、CPU的执行(简化版)

CPU要干嘛,实际上CPU在最初设计的时候就已经写好了。存在着一个表格。这个是简化版的指令码,现实中要复杂得多。

当我们C语言写完的时候,就被编译为exe程序,当我们一点击的时候,它就会在内存在被读取到CPU上面执行。

++RAM是内存(随机访问存储器) ,++

++寄存器A和B都是虚构的,寄存器不多,每个寄存器都有它特有的名字,比如eax,ebx,esp等等。。。++

++ADD中2位寄存器ID,00为寄存器A,01为寄存器B++

此处假设每个指令只有8个bit位,每个指令可以分为两个部分,前四个位为opcode(操作码)表示这个指令是干嘛的,后四个为内存地址。

假设上面是 代码执行的指令。

++执行指令有三个步骤:++

  1. 取数据
  2. 解析数据
  3. 执行数据
    CPU会有一个特殊的寄存器,叫"程序计数器"。保持了接下来要从哪个地址拉读取内存,从上图中,默认是0。每执行一条就++,下一个就是1,再++,是2.....
    ++第一次++

1)取数据:

从0开始,指令是00101110,

2)解析数据:

再看指令图,0010是LOAD_A是把内存地址为1110(也就是14,第14条是00000011)放入寄存器A之中

3)执行程序:

把00000011放入寄存器A中,然后计数器++。变成1
++第二次++

1)取数据:

从1开始,指令是00011111

2)解析数据:

再看指令图,0001是LOAD_B是把内存地址为1111(也就是15,第15条是00001110)放入寄存器B之中

3)执行程序:

把00001110放入寄存器B中,然后计数器++。变成2
++第三次++

1)取数据:

从2开始,指令是10000100

2)解析数据:

再看指令图,1000是ADD,第一个操作数ID是01为B,第二个是00为A,(寄存器B中数据为00001110为14,寄存器A数据为00000011为3),两个相加为17(转为二进制为00010001)放入寄存器A中。

3)执行程序:

把00010001放入寄存器A中,然后计数器++。变成3
++第四次++

1)取数据:

从3开始,指令是01001101

2)解析数据:

再看指令图,0100是把寄存器A中的数据写入内存为1101(13)中

3)执行程序:

把寄存器A中的数据写入内存为1101(13)中,然后计数器++。变成4
++第五次++

1)取数据:

从4开始,指令是00000000

2)解析数据:

全0则为结束

3)执行程序:

结束

六、CPU分配------进程调度

操作系统=内核+配套的应用程序

一个操作系统要做很多事情,最重要的事情就是"管理"。而内核就是下面:

  • 管理不同的硬件设备(计算机能接入更多的硬件设备,比如:B超超声波,扫描枪等等....)
  • 给软件提供稳定的运行环境(现代的计算机中,都是要运行很多程序的,操作系统就要让他们互不干扰,不会因为哪个程序出bug,就影响到其他程序)

**电脑上的硬件设备是很多的,操作系统不会直接操作这些硬件设备,而是采用"驱动程序"来进行操作。**类似于:一个学校的校长(操作系统)不会直接下达命令,而是通过导员(驱动系统)去下达传给学生(硬件设备)不然传达不过来。

进程管理

++什么是进程?++

答:就是正常执行的程序。一个程序有两种状态,一是没有被执行,在硬盘里躺着;二是按了exe执行,这时会进入内存,被CPU读取。

上述的进程,操作系统都是要进行的~~都需要硬件资源。

进程是操作系统进行资源分配的基本单位。

进程的属性

1)描述

通过结构体/类把进程的属性描述出来**(在linux中,使用称为"PCB"(进程控制块)来描述这些属性)**

2)组织

通过数据结构把这些线程都给连接起来(串起来),常见的就是链表

++创建进程:++

就是点击exe程序,这时候会使用PCB把这个程序的属性都表示出来,然后用链表把他们都给串起来。

++销毁进程:++

把这个exe程序从链表里面删掉,就是释放这个PCB里面的属性。

++查看进程:++

遍历链表,依次打印进程。

PCB有啥?

1)PID进程标识

相当于进程的ID,每个进程都有一个PID,不会重复。如果没有显示出来,打开左边的小箭头,其实是一个程序里面分为多个板块,不止有一个PID。

2)内存指针(一组)

描述这个exe程序的进程被加载到内存的哪一部分地方(地址)。

这也侧面展示出了,执行进程需要内存

3)文件描述符表 (数组/顺序表)

描述进程打开了哪些文件(对于硬盘的数据)

这也侧面展示出了,执行进程需要硬盘

进程调度

++啥是进程调度啊?++

答:一台电脑中,我们CPU只有几个核心,能执行的进程也就那么多而已。那我们怎么同时运行那么多个程序呢?当然是"进程调度",也就是分时复用,(并发执行)由于CPU的执行速度很快,有几十亿次,所以即使他们分时进行,我们也看不出来,感受不到。
++举个很形象的例子(纯属虚构,开玩笑的,为了大家能理解知识点):++

假设我是个妹子(好看&&有才华),那么就有很多男的追我

1)A:有钱

2)B:帅

3)C:会舔我

如果我要一个三个优点都有的,那我可以一下子谈三个,爱一个人是藏不住的,爱两个人一定要藏好。那么我就要进行"时间管理":

周一周二周三:和A出去约会

周四周五:和B出去约会

周六周日:和C出去约会

++上述可以理解为"调度"。++

进行调度,会有下面几个特点:

4)进程状态

++比如上面的例子:++

ABC都是随叫随到,随时待命,那么这种状态我们叫做**"就绪状态"**;

若A要出差,就不能约他了,不能随叫随到,我们叫做**"堵塞状态"**。

"就绪状态"下的进程可以随时被调到CPU上去执行,而"堵塞状态"不行,他可能会因为读取IO而无法进行调度(调了也无法执行啊)

5)进程优先级

优先级也就是谁先来,谁后来,谁多,谁少....

++比如上面的例子:++

A有钱能给我的价值更多,所以我优先陪A约会,分更多的时间陪(优先级最高);而B帅看着赏心悦目,非常开心,所以中间;但是我不会经常不开心(不缺人陪),所以C哄不哄我都无所谓,所以他优先级最低。

进程也是一样,重要的优先执行,谁来的快优先执行。

6)进程上下文

++还是上面的例子:++

A跟我说,下个月约会我们去三亚玩,你准备准备;

B跟我说,下个月他妈妈生日,你准备准备看他妈妈;

下次和A出去约会,问你准备怎么样了,你说我准备了一个精美的老花镜....

下次和B出去约会,问你准备的怎么样了,你说我准备了一件性感的泳衣....

这时候就非常不适合了,会闹出乌龙。所以我们需要有个像"日记本"那样的东西来记录。

在进程中,分时复用,一个进程在CPU执行一段时间后会被调走,当他再次被调回来的时候,CPU需要知道它上次执行到哪里了,可以进行接下来的指令。
++如何保存上次的值?++

答:PCB是内存的数据,把寄存器中的值都保存到PCB特定属性中,下次调度PCB就可以从这里的属性中把数据恢复到都对应的寄存器中了

7) 进程记账信息

++还是上面的例子:++

假设C感觉到自己被冷漠了,就不开心了,也不怎么哄我了,这时候我们需要给C一点甜头,让它继续舔我(比如给它我不要的发圈,或者主动约他,主动找他聊两句话等等....),等他舔我了之后,然后继续冷落他。

所以在进程中,优先级的加持下,我们也需要对在CPU执行的时间少的,增加它的时间,继续优先级。

相关推荐
孤蓬&听雨9 天前
CPU调度算法之FIFS(先来先服务)
算法·计算机·cpu
得寸进尺的鸡丝面17 天前
arm架构和x86架构区别
arm·cpu·x86
苍茫_ccc2 个月前
中央处理器CPU
cpu·计算机组成
x-cmd2 个月前
[240727] Qt Creator 14 发布 | AMD 推迟 Ryzen 9000芯片发布
开发语言·qt·项目管理·lua·cpu·芯片·amd
格桑阿sir2 个月前
Docker核心技术:Docker原理之Cgroups
linux·docker·容器·linux内核·cpu·资源限制·cgroups
ac-er88882 个月前
Mysql:解决CPU飙升至100%问题的系统诊断与优化策略
数据库·sql·mysql·cpu
roxxo2 个月前
生产英特尔CPU处理器繁忙的一天
经验分享·笔记·制造·cpu·intel·生产制造·intel 芯片
MatthewMao2 个月前
Qt/C++项目积累: 2.主机监控器 - 2.2 历史功能实现
qt·内存·cpu·监控·性能
群联云防护小杜2 个月前
CPU占用率飙升至100%:是攻击还是正常现象?
服务器·安全·ddos·cpu·waf·被攻击·占用