美文网首页
(一)Java并发编程之计算机理论模型与工作原理

(一)Java并发编程之计算机理论模型与工作原理

作者: 陪安东尼的漫长岁月 | 来源:发表于2019-10-29 21:03 被阅读0次

现代计算机理论模型与工作原理

五大核心组成部分
  1. 控制器(Control):对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。
  2. 运算器(Datapath):对数据进行各种算术运算和逻辑运算。
  3. 存储器(Memory):存储程序、数据和各种信号、命令等信息,并在需要时提供这些信息。
  4. 输入(Input system)
  5. 输出(Output system)

现代计算机硬件结构原理图

现代计算机硬件结构原理图.png
理论模型

现代计算机模型是基于-冯诺依曼计算机模型

冯诺依曼计算机模型.png
工作方式
计算机在运行时,先从内存中取出第一条指令,发送到控制器,通过控制器的译码,按照指令要求,从存储器中取出数据进行指令的运算和逻辑操作等加工,然后再按地址把结果送到内存中去。按此方式循环操作,直到遇到停止指令。
CPU内部结构划分
CPU结构划分.png
  1. 控制单元
    由指令寄存器IR(Instruction Register)、指令译码器ID(Instruction Decoder)和 操作控制器OC(Operation Controller) 等组成。根据用户预先编好的程序,依次从存储器中取出各条指令,放在指令寄存器IR中,通过指令译码(分析)确定应该进行什么操作,然后通过操作控制器OC,按确定的时序,向相应的部件发出微操作控制信号。

  2. 运算单元
    运算单元是运算器的核心。可以执行算术运算(包括加减乘数等基本运算及其附加运算)和逻辑运算(包括移位、逻辑测试或两个值比较)。相对控制单元而言,运算器接受控制单元的命令而进行动作,即运算单元所进行的全部操作都是由控制单元发出的控制信号来指挥的,所以它是执行部件

  3. 存储单元
    存储单元包括 CPU 片内缓存Cache和寄存器组,是 CPU 中暂时存放数据的地方,里面保存着那些等待处理的数据,或已经处理过的数据,CPU访问寄存器所用的时间要比访问内存的时间短。 寄存器是CPU内部的元件,寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。采用寄存器,可以减少 CPU 访问内存的次数,从而提高了 CPU 的工作速度。寄存器组可分为专用寄存器和通用寄存器。专用寄存器的作用是固定的,分别寄存相应的数据;而通用寄存器用途广泛并可由程序员规定其用途。

计算机硬件多CPU架构
计算机硬件多CPU架构.png
  • 多CPU
    一个现代计算机通常由两个或者多个CPU,如果要运行多个程序(进程)的话,假如只有一个CPU的话,就意味着要经常进行进程上下文切换,因为单CPU即便是多核的,也只是多个处理器核心,其他设备都是共用的,所以 多个进程就必然要经常进行进程上下文切换,这个代价是很高的

  • CPU多核
    一个现代CPU除了处理器核心之外还包括寄存器,L1L2L3缓存这些存储设备、浮点运算单元、整数运算单元等一些辅助运算设备以及内部总线等。一个多核的CPU也就是一个CPU上有多个处理器核心,这样有什么好处呢?比如说现在我们要在一台计算机上跑一个多线程的程序,因为是一个进程里的线程,所以需要一些共享一些存储变量,如果这台计算机都是单核单线程CPU的话,就意味着这个程序的不同线程需要经常在CPU之间的外部总线上通信,同时还要处理不同CPU之间不同缓存导致数据不一致的问题,所以在这种场景下多核单CPU的架构就能发挥很大的优势,通信都在内部总线,共用同一个缓存。

  • CPU寄存器
    每个CPU都包含一系列的寄存器,它们是CPU内内存的基础。CPU在寄存器上执行操作的速度远大于在主存上执行的速度。这是因为CPU访问寄存器的速度远大于主存。

  • CPU缓存
    即高速缓冲存储器,是位于CPU与主内存间的一种容量较小但速度很高的存储器。由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周期,Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,减少CPU的等待时间,提高了系统的效率。

多线程环境下存在的问题
  • 缓存一致性问题
    在多处理器系统中,每个处理器都有自己的高速缓存,而它们又共享同一主内存(MainMemory)。基于高速缓存的存储交互很好地解决了处理器与内存的速度矛盾,但是也引入了新的问题:缓存一致性(CacheCoherence)。当多个处理器的运算任务都涉及同一块主内存区域时,将可能导致各自的缓存数据不一致的情况,如果真的发生这种情况,那同步回到主内存时以谁的缓存数据为准呢?为了解决一致性的问题,需要各个处理器访问缓存时都遵循一些协议,在读写时要根据协议来进行操作,这类协议有MSI、MESI(IllinoisProtocol)、MOSI、Synapse、Firefly及DragonProtocol,等等。

    缓存一致性协议在多CPU访问同一主内存地址时通过嗅探机制来监听并修改缓存行的状态,从而维护数据的一致性。在缓存失效的情况时只能通过io总线来维护。

  • 指令重排序问题
    为了使得处理器内部的运算单元能尽量被充分利用,处理器可能会对输入代码进行乱序执行(Out-Of-Order Execution)优化,处理器会在计算之后将乱序执行的结果重组,保证该结果与顺序执行的结果是一致的,但并不保证程序中各个语句计算的先后顺序与输入代码中的顺序一致。因此,如果存在一个计算任务依赖另一个计算任务的中间结果,那么其顺序性并不能靠代码的先后顺序来保证。与处理器的乱序执行优化类似,Java虚拟机的即时编译器中也有类似的指令重排序(Instruction Reorder)优化

相关文章

网友评论

      本文标题:(一)Java并发编程之计算机理论模型与工作原理

      本文链接:https://www.haomeiwen.com/subject/kcagvctx.html