一、计算机理论模型与工作原理
- 1、理论模型 --> 现代计算机都是基于:冯诺依曼计算机模型
运行过程:内存中获取指令 -> 控制器译码 -> 获取存储器数据进行运算 -> 将结果返回内存,如此往复,直到遇到终止指令结束运行。(大致过程如下图:)
QQ截图20190810101110.png - 2、计算机五大核心组成部分:
控制器(Control)、运算器(Datapath)、存储器(Memory)、输入设备(Input system)、输出设备(Output system)。(如下图:)
计算机五大部件.png - 3、CPU内部结构划分:控制单元、运算单元、存储单元。
1)、控制单元
控制单元是整个CPU的控制中心。 由指令寄存器IR(Instruction Register)、指令译码器ID(Instruction Decode)、操作控制器OC(Operation Controller)组成。
2)、运算单元
运算单元主要是运算器的核心,负责执行算数运算(加减乘除等基本运算)和逻辑运算(条件判断、位移等运算)。算数单元受控制单元控制,根据控制单元的命令执行相应的运算操作。
3)、存储单元
存储单元包含CPU片内缓存Cache、寄存器数组,是CPU暂时存放数据的地方。包含即将被处理的数据和已经处理完成的结果数据。其中寄存器是CPU的内部元件,具有超高的读写速度,采用寄存器可以减少CPU的访问内存的次数,从而提高CPU的工作效率。(寄存器又分为专用寄存器和通用寄存器,专用寄存器是固定的存储相应的数据,通用寄存器可以有程序员自己规定其用途)。 - 4、CPU
1.CPU多核:一个现代计算机的CPU除了处理器核心之外包含寄存器和三级缓存(L1、L2、L3)这些存储设备、浮点运算、整数运算单元等一些辅助运算设备、和内部总线等。如果是单核单线程CPU的情况下,某程序运行过程中不同线程需要经常在CPU之间的外部总线上进行通信,同时还需要处理不同CPU之间数据不一致的问题,会使得效率低下而且不能保证准确无误。此时多核CPU就可以发挥自己的优势,通信都在内部总线,共用同一个缓存。
2.CPU缓存:高速缓冲存储器,是位于CPU与主存之间的一种容量较小但速度极高的存储器。缓存中保存着CPU循环使用的数据和刚用过的数据。当CPU再次使用的时候就会直接从缓存中获取,提高系统效率。
3.CPU读取各级缓存中数据的过程:
> 从寄存器中读取:直接读取。
> 从L1中读取数据:将缓存行加锁,读取数据,解锁(如果加锁失败就慢了)。
> 从L2中读取数据:先去L1中查找,如果没有,则去L2中查找,对L2加锁,将L2中的数据复制到L1中,在执行 从L1中读取数据 的操作,再解锁L2缓存行。
> 从L3中读取数据:先去L1中查找,再去L2中查找,然后再去L3中查找,对L3进行加锁,将数据复制到L2中,再执行 从L2中读取数据的操作,再解锁L3的缓存行。
> 从内存中去数据:通知内存控制器占用总线带宽,通知内存加锁,发起内存读取请求,等待回应,回应数据保存到L3,再从L3到L2到L1再到CPU,之后解除总线锁。
4. 多线程环境下存在的问题:缓存一致性问题。针对缓存一致性问题大多数情况下会遵循缓存一致性协议(MESI)来确保多线程的数据同步问题,或者采用总线锁的方式,该方式效率极低,一般不会采用。
(缓存行是CPU中最小的存储单元,有可能是32字节、64字节、128字节(一般根据CPU厂商不同,缓存行大小不同))
面试题:
- Q:缓存一致性协议什么时候会失效?
- A:1、当某变量x的值存储长度大于缓存行的时候,此时存储需要跨缓存行,而缓存一致性协议是基于缓存行加锁的,所以缓存一致性协议会因此失效。为保障数据一致,会采用总线锁的方式;2、CPU本身不支持缓存一致性协议(例如早期奔腾计算机的CPU)。
二、什么是线程
现代计算机上的运行的每一个程序都是一个进程,一个进程中包含了多个线程(因此线程也叫做轻量级进程),线程是操作系统调度CPU的最小单元,每个线程都有独自的程序计数器、操作栈和局部变量等属性,每个线程都能访问共享的内存变量。由于处理器速度极高,所以看似是这些线程在同时执行。
1.线程的实现可以分为两类,分别是:用户及线程、内核级线程
- 用户线程:指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应 用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。另外,用户线程 是由应用进程利用线程库创建和管理,不依赖于操作系统核心。不需要用户态/核心态切换, 速度快。操作系统内核不知道多线程的存在,因此一个线程阻塞将使得整个进程(包括它的所 有线程)阻塞。由于这里的处理器时间片分配是以进程为基本单位,所以每个线程执行的时间 相对减少。
- 内核线程: 线程的所有管理操作都是由操作系统内核完成的。内核保存线程的状态和上下 文信息,当一个线程执行了引起阻塞的系统调用时,内核可以调度该进程的其他线程执行。在 多处理器系统上,内核可以分派属于同一进程的多个线程在多个处理器上运行,提高进程执行 的并行度。由于需要内核完成线程的创建、调度和管理,所以和用户级线程相比这些操作要慢 得多,但是仍然比进程的创建和管理操作要快。大多数市场上的操作系统,如Windows, Linux等都支持内核级线程。
- Java的中的线程在1.2版本之前采用的用户级线程,1.2版本之后采用的内核级线程
三、JMM模型(CPU多核缓存架构的抽象)
- JMM只是一个规范,实际并不存在,是为了屏蔽底层应届的操作。是CPU+缓存+主存的一种抽象概念。
- JMM不同于JVM。JMM是为了兼容各种硬件操作系统底层的不同实现,即Java的跨平台性。JVM是方便对内存的管理提供的一种模型。两这没有必然关系。
网友评论