CPU基础知识详解

CPU基础知识详解

1.CPU的组成:

1.CPU的组成部分:

cpu的三大组成部分分别是:1、运算器;2、控制器;3、寄存器

按照功能划分(主要组成):控制器、寄存器、运算器

还有说法(都是主要大概):CPU 的内部由寄存器、控制器、运算器和时钟等四部分组 成

时钟: 负责发出 CPU 开始计时的时钟信号

基本组成:

控制单元(控制器从内存(RAM又叫主存)中提取指令、数据读入寄存器),包含控制器与寄存器。

逻辑单元(ALU,计算逻辑单元):处理算数和逻辑运算. 包含运算器(运算从内存中读入寄存器的数据)

2.CPU的功能:

从内存中读取指令数据,解码,执行指令

3.控制器:

包含指令寄存器程序计数器(都是寄存器的一种)

4.运算器:由ALU(算术逻辑单元)和 寄存器()组成。

官方解释:由算术逻辑单元(ALU)、累加器、状态寄存器、通用寄存器组等组成

5.寄存器:

​ 总共有8种寄存器,其中程序计数器、累加寄存器、标志寄存器、指令寄存器和栈寄存器都只有一个,其他寄存器一般有多个。

2.CPU相关的知识

# x86架构64位(重要)
x86是针对cpu的型号或者说架构的一种统称。64位指的是cpu一次性能从内存中取出多少位二进制指令,64bit指的是一次性能从内存中取出64位二进制指令。
也可以说寻址能力的不同,232只能寻址4GB左右的地址,264就更多。32位处理器可以一次性处理4个字节的数据量。依次类推,64位处理器可以一次性处理8个字节的数据量,比32位处理器的处理速率加快一倍。
cpu具有向下兼容性:64的cpu既能运行32位的程序也能运行64位的程序;换句话说,32位的程序可以在32位的cpu上运行也可以在64位的cpu上运行。;64位的程序只能在64位的cpu上运行。


# cpu指令集(了解)
# 1.1、精简指令集(了解)
  精简指令集(Reduced Instruction Set Computing,RISC):这种CPU的设计中,微指令集较为精简,每个指令的运行时间都很短,完成的动作也很单纯,指令的执行效能较佳;但是若要做复杂的事情,就要由多个指令来完成。
  SPARC架构的计算机常用于学术领域的大型工作站中,包括银行金融体系的主服务器也都有这类的计算机架构;
  PowerPC架构的应用,如Sony出产的Play Station 3(PS3)使用的就是该架构的Cell处理器。
  ARM是世界上使用范围最广的CPU了,常用的各厂商的手机、PDA、导航系统、网络设备等,几乎都用该架构的CPU。

# 1.2、复杂指令集
  复杂指令集(Complex Instruction Set Computer,CISC)与RISC不同,在CISC的微指令集中,每个小指令可以执行一些较低阶的硬件操作,指令数目多而且复杂,每条指令的长度并不相同。因此指令执行较为复杂所以每条指令花费的时间较长,但每条个别指令可以处理的工作较为丰富。常见的CISC微指令集CPU主要有AMD、Intel、VIA等的x86架构的CPU。
    
# 总结:
    CPU按照指令集可以分为精简指令集CPU和复杂指令集CPU两种,区别在于前者的指令集精简,每个指令的运行时间都很短,完成的动作也很单纯,指令的执行效能较佳;但是若要做复杂的事情,就要由多个指令来完成。后者的指令集每个小指令可以执行一些较低阶的硬件操作,指令数目多而且复杂,每条指令的长度并不相同。因为指令执行较为复杂所以每条指令花费的时间较长,但每条个别指令可以处理的工作较为丰富
代表cpu的两种工作状态
	1、内核态:运行的程序是操作系统,可以操作计算机硬件
	2、用户态:运行的程序是应用程序,不能操作计算机硬件

内核态与用户态的转换
    应用程序的运行必然涉及到计算机硬件的操作,那就必须有用户态切换到
    内核态下才能实现,所以计算机工作时在频繁发生内核态与用户态的转换
扇区(硬盘):
    一个扇区通过为512Bytes
    站在硬盘的解读,一次性读写数据的最小单为为扇区

    操作系统一次性读写的单位是一个block块=8扇区的大小=4096Bytes = 4KB

3.CPU缓存

自己的理解:

CPU缓存分为3个部分:

L1、L2、L3

L1(一般32KB,一个缓存行,cacheLine 一般是64Byte)、L2(一般256KB) 是CPU独享的,不和其他CPU的缓存数据共享

L3 (一般2MB)缓存是所有CPU共享的

1.基本概念:

对于CPU来说,它是不会一个字节一个字节的加载的,因为这非常没有效率,一般来说都是要一块一块的加载的,对于这样的一块一块的数据单位,术语叫“Cache Line”,一般来说,一个主流的CPU的Cache Line 是 64 Bytes(也有的CPU用32Bytes和128Bytes),64Bytes也就是16个32位的整型,这就是CPU从内存中捞数据上来的最小数据单位。

缓存的命中: 这部分没看,没什么用

缓存同步时用到的协议:

Directory 协议

Snoopy 协议

CPU的多核心缓存间的同步的核心就是要管理好数据的状态:

简单的状态协议: MESI协议


4.超线程与多核心

超线程: 一个linux系统,一般只有一个CPU,市面上普通的电脑都只配一个CPU,多个CPU没必要。一个物理CPU,可能是多核心的CPU,一个核心CPU一般只能同时执行一个一个线程,但是CPU的利用率不是100%,因为线程执行过程,CPU不一定一直繁忙,可能会空闲; 为了解决这个 问题,就出现了超线程技术,一个核心可以跑2个线程(不是真正意义上的并发,只能比单线程提升40%的性能),是一种硬件架构设计,逻辑上的多线程;

加深理解:

单线程芯片每秒钟能够处理成千上万条指令,但是在任一时刻只能够对一条指令进行操作。而超线程技术可以使芯片同时进行多线程处理,使芯片性能得到提升。 虽然采用超线程技术能同时执行两个线程,但它并不象两个真正的CPU那样,每个CPU都具有独立的资源。当两个线程都同时需要某一个资源时,其中一个要暂时停止,并让出资源,直到这些资源闲置后才能继续。因此超线程的性能并不等于两颗CPU的性能

常用查看命令:

1.查看CPU个数

cat /proc/cpuinfo |grep “physical id”|sort|uniq|wc -l

2.查看每个物理CPU含有的核心个数

cat /proc/cpuinfo |grep “cpu cores”|uniq|wc -l

3.查看每个CPU核心含有的线程数

cat /proc/cpuinfo |grep “processor”|wc -l

4.那么cpu支持的线程数为 cpu数目 * 每个cpu含有的核心数目* 每个核心含有的线程数


参考的相关文章:

公众号:https://mp.weixin.qq.com/s/CTHLph-zrbdHjSyz8gkFXA

百度百科:https://www.cnblogs.com/the3times/p/12398989.html

cpu缓存参考的公众号:https://mp.weixin.qq.com/s/BoiCd5x8tiXxi7hxjmzhqQ

你可能感兴趣的:(cpu,操作系统)