现代计算机理论模型,工做原理,以及硬件是如何实现并发安全

2021年11月25日 阅读数:0
这篇文章主要向大家介绍现代计算机理论模型,工做原理,以及硬件是如何实现并发安全,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

 1.冯·诺依曼体系缓存

  现代计算机的模型都是基于冯·诺依曼体系的,冯·诺依曼体系的基本组成有存储器,计数器,控制器,输入和输出设备,总共有这五大本分组成。下图是我基于这五大组成部分画了一个组成图来表示他们之间的关系,如图1-1。安全

                            

                                                                               图1-1架构

 

  基于冯·诺依曼体系,首先控制器从内存中取出指令,有控制器来执行,控制器经过计数器来完成各类逻辑运算,算术运算等,而后将数据写会内存,输入设备输出设备更是常见,在这里就不一一赘述,重点是下面的内容。并发

2.计算机的硬件结构学习

  计算机的硬件结构更是基于冯·诺依曼体系的,主板上主要由cpu,内存,总线等重要部件组成,其大体的示意图以下图2-1所示:线程

                                                           

                                                                                                      图2-1blog

  cpu是主板上的核心部件,主要负责指令的执行,内存经过内存总线和I/O桥相连,在这里I/O桥可最大程度的解决cpu与内存速度不匹配的问题,通常cpu的速度是gHZ为单位的,而内存条则是几百兆HZ为单位,二者存在速度不匹配的问题,在这里I/O桥能够缓解二者速度不匹配,还有一个也能缓解cpu与内存的速度不匹配的问题,那就是cpu缓存,她的速度很快,可是成本相对较高,不适合内存条大量使用,所以apu缓存很小,但它可有效的缓解此问题。内存

  总线是cpu与其余部件交互的通道,可经过USB控制器连接鼠标,键盘等,图形适配器可连接显示器等。class

3.多cpu缓存架构效率

  多cpu在与内存交互的时候,是存在并发安全的问题的,当一个主板上有多个cpu时,和cpu多核又是不同的,在这里就来说讲多cpu时,cpu是怎么从内存读取数据,并保证他们的并发安全,这里彻底是从硬件层次来说,这对后面去学习并发,线程和JMM,以及JVM有很大的帮助,有些软件层次的技术实现,彻底是基于现有的硬件基础。

  多cpu的状况下,当其中一个cpu从内存读取数据,放入cpu缓存,若是该cpu对这个数据要进行修改,这个时候,另外一个cpu恰好也从内存读取了该数据,也要对他进行修改,那么当两个cpu同事从该内存中读取该数据,并对他进行逻辑,算术等运算是,这个时候内存中在接受cpu返回的该数据是不许确的,就存在了并发的安全问题(技术在不断发展,cpu从之前的单核,一些cpu厂家有段时间一致于追求提升cpu的运算频率,到后来发现cpu的频率提升达到了瓶颈,要想在提升cpu的运算速度,光靠提升频率是远远不够的,这个时候,一些技术大牛们就想到了单个cpu多核,这样就立竿见影的提升了cpu的速度)。这个时候就有了总线锁和后来的缓存一致性协议来实现并发安全。下图是我多cpu与内存交互的一个简图,见下图3-1。

                      

                                  图3-1

  先讲讲总线锁,总线锁很简单,早期奔腾cpu只能依靠总线锁来解决并发的问题,当一个cpu读取了内存中的某个数据的时候,该cpu对总线加了把锁:lock。当其余cpu经过总线去访问内存的该数据时是访问不了的,这就是总线锁。总线全部不少缺点,好比cpu的利用率低,当多个cpu同时对一个数据访问时,只能有一个cpu能拿到这把总线锁,其余cpu只能处于低效率状态。总线锁在早期的奔腾系列的cpu用的不少,到了后来的酷睿以及新的一些cpu绝大部分使用缓存一致性协议,下面我就来详细说明一下MESI缓存一致性协议,当cpu从主存中读取了该数据进入cpu的缓存行(catch line)中的时候,而且其余cpu没有读取该数据,该缓存行的状态为E状态(Exclusive),也就是独享状态,这个时候若是该对该缓存行进行了修改,那么该缓存行的状态就会变成M状态(Modified),也就是修改状态,表示该缓存行的数据修改了,与内存中的数据不一致,当该cpu监听到其余cpu也要读取该数据的时候,那么,该缓存行的状态会变成S状态(Shared),也就是共享状态,cpu会在一个特定的时间节点将数据协会内存(下篇博文中讲到两个线程读取内存一个变量的时候,会用到这个知识点),保证缓存行的数据与内存一致,从而其余cpu也能够读取该数据。其中该缓存行在S状态的时候,也会去监听其余缓存行的消息,当其余缓存行变成M状态的时候,此时该缓存行就会变成I状态(Invalid),也就是无效状态,当有条件触发须要该数据的时候,会从新从内存中读取该数据。MESI缓存一致性协议依赖于总线的嗅探机制,该机制时刻监听cpu中缓存行的状态,并经过总线发消息来将缓存航状态发送给其余缓存行。

  在这里须要注意的是,现代的酷睿系列处理器虽然用的不少MESI缓存一致性协议,保证了cpu的利用率,可是他也有使用的限制,也就是缓存行,当该数据的长度超过了该缓存航的最大容量,那么他只能使用总线锁来保证并发的安全。