CPU的一些基本知识总结( 二 )


13、除了系统调用会陷入内核 , 更多的是硬件会引起trap行为陷入内核 , 使得CPU控制权可以回到操作系统 , 以便操作系统去决定如何处理硬件异常 。
关于CPU的基本组成
1、CPU是用来运算的(加法运算+、乘法运算*、逻辑运算and not or等) , 例如c=a+b 。
2、运算操作涉及到数据输入(input)、处理、数据输出(output) , a和b是输入数据 , 加法运算是处理 , c是输出数据 。
3、CPU需要使用一个叫做存储器(也就是各种寄存器)的东西保存输入和输出数据 。以下是几种常见的寄存器(前文也介绍了一些)

  • MAR: memory address register , 保存将要被访问数据在内存中哪个地址处 , 保存的是地址值
  • MDR: memory data register , 保存从内存读取进来的数据或将要写入内存的数据 , 保存的是数据值
  • AC: Accumulator , 保存算术运算和逻辑运算的中间结果 , 保存的是数据值
  • PC: Program Counter , 保存下一个将要被执行指令的地址 , 保存的是地址值
  • CIR: current instruction register , 保存当前正在执行的指令
4、CPU还要将一些常用的基本运算工具(如加法器)放进CPU , 这部分负责运算 , 称为算术逻辑单元(ALU, Arithmetic Logic Unit) 。
5、CPU中还有一个控制器(CU, Control Unit) , 负责将存储器中的数据送到ALU中去做运算 , 并将运算后的结果存回到存储器中 。
  • 控制器还包含了一些控制信号 。
5、控制器之所以知道数据放哪里、做什么运算(比如是做加法还是逻辑运算?)都是由指令告诉控制器的 , 每个指令对应一个基本操作 , 比如加法运算对应一个指令 。
6、例如 , 将两个MDR寄存器(保存了来自内存的两个数据)中的值拷贝到ALU中 , 然后根据指定的操作指令执行加法运算 , 将运算结果拷贝会一个MDR寄存器中 , 最后写入到内存 。
7、这就是冯诺依曼结构图 , 也就是现在计算机的结构图 。
CPU的一些基本知识总结

文章插图
 
【CPU的一些基本知识总结】关于CPU的多核和多线程
1、CPU的物理个数由主板上的插槽数量决定 , 每个CPU可以有多核心 , 每核心可能会有多线程 。
2、多核CPU的每核(每核都是一个小芯片) , 在OS看来都是一个独立的CPU 。
3、对于超线程CPU来说 , 每核CPU可以有多个线程(数量是两个 , 比如1核双线程 , 2核4线程 , 4核8线程) , 每个线程都是一个虚拟的逻辑CPU(比如windows下是以逻辑处理器的名称称呼的) , 而每个线程在OS看来也是独立的CPU 。
这是欺骗操作系统的行为 , 在物理上仍然只有1核 , 只不过在超线程CPU的角度上看 , 它认为它的超线程会加速程序的运行 。
CPU的一些基本知识总结

文章插图
 
4、要发挥超线程优势 , 需要操作系统对超线程有专门的优化 。
5、多线程的CPU在能力上 , 比非多线程的CPU核心要更强 , 但每个线程不足以与独立的CPU核心能力相比较 。
6、每核上的多线程CPU都共享该核的CPU资源 。
例如 , 假设每核CPU都只有一个"发动机"资源 , 那么线程1这个虚拟CPU使用了这个"发动机"后 , 线程2就没法使用 , 只能等待 。
所以 , 超线程技术的主要目的是为了增加流水线(参见前文对流水线的解释)上更多个独立的指令 , 这样线程1和线程2在流水线上就尽量不会争抢该核CPU资源 。所以 , 超线程技术利用了superscalar(超标量)架构的优点 。
7、多线程意味着每核可以有多个线程的状态 。比如某核的线程1空闲 , 线程2运行 。
8、多线程没有提供真正意义上的并行处理 , 每核CPU在某一时刻仍然只能运行一个进程 , 因为线程1和线程2是共享某核CPU资源的 。可以简单的认为每核CPU在独立执行进程的能力上 , 有一个资源是唯一的 , 线程1获取了该资源 , 线程2就没法获取 。
但是 , 线程1和线程2在很多方面上是可以并行执行的 。比如可以并行取指、并行解码、并行执行指令等 。所以虽然单核在同一时间只能执行一个进程 , 但线程1和线程2可以互相帮助 , 加速进程的执行 。


推荐阅读