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 , 保存当前正在执行的指令
5、CPU中还有一个控制器(CU, Control Unit) , 负责将存储器中的数据送到ALU中去做运算 , 并将运算后的结果存回到存储器中 。
- 控制器还包含了一些控制信号 。
6、例如 , 将两个MDR寄存器(保存了来自内存的两个数据)中的值拷贝到ALU中 , 然后根据指定的操作指令执行加法运算 , 将运算结果拷贝会一个MDR寄存器中 , 最后写入到内存 。
7、这就是冯诺依曼结构图 , 也就是现在计算机的结构图 。

文章插图
【CPU的一些基本知识总结】关于CPU的多核和多线程
1、CPU的物理个数由主板上的插槽数量决定 , 每个CPU可以有多核心 , 每核心可能会有多线程 。
2、多核CPU的每核(每核都是一个小芯片) , 在OS看来都是一个独立的CPU 。
3、对于超线程CPU来说 , 每核CPU可以有多个线程(数量是两个 , 比如1核双线程 , 2核4线程 , 4核8线程) , 每个线程都是一个虚拟的逻辑CPU(比如windows下是以逻辑处理器的名称称呼的) , 而每个线程在OS看来也是独立的CPU 。
这是欺骗操作系统的行为 , 在物理上仍然只有1核 , 只不过在超线程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可以互相帮助 , 加速进程的执行 。
推荐阅读
- 何谓泡好茶
- Redis的三个框架:Jedis,Redisson,Lettuce
- 泡过花胶的水还要拿来煲汤吗 花胶不泡水可以直接煲吗
- mac os上的包管理工具
- JavaScript 中对于Promise的理解
- 青蟹和大闸蟹哪个好 大闸蟹壳黄的好还是青的好
- 食物应该放在锡纸的哪一面 食物放在锡箔纸的哪一面
- 芦荟有祛斑的功效吗
- 芦荟的美容功效是什么
- 芦荟有美白的功效吗
