冯诺依曼计算机模型
- 计算机在运行时,先从内存中取出第一条指令,按指令的要求,从存储器中取出数据进行指定的运算和逻辑操作等加工,然后按地址把结果送到内存中去,接下来,在取出第二条指令,在控制器的指挥下完成规定操作。依次执行下去,直到遇到停止指令。
- 程序和数据一样存储,按程序的编排的顺序,一步一步地取出指令,自动地完成指令规定的操作是计算机最基本的工作模型。
计算机五大核心组成部分
- 控制器,对程序规定的信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。
- 运算器:对数据进行算术运算和逻辑运算
- 存储器:存储程序、数据和各种信号、命令等信息
- 输入设备
- 输出设备
CPU指令结构
CPU内部结构:控制单元,运算单元,数据单元
CPU缓存结构
常见的为三级缓存结构
L1:逻辑核独占
L2:物理核独占,逻辑核共享
L3:所有物理核共享
存储器存储空间大小:内存>L3>L2>L1>寄存器;
存储器速度快慢排序:寄存器>L1>L2>L3>内存;
- 缓存是由最小的存储区块-缓存行(cacheline)组成,缓存行大小通常为64byte。
- 时间局部性:如果一个信息正在被访问,那么近期它很可能还会被访问
- 空间局部性:如果一个存储器的位置被引用,那么将来他附近的位置也会被引用。
- 带有高速缓存的CPU执行计算的流程:
1、程序以及数据被加载到主内存
2、指令和数据被加载到CPU的高速缓存
3、CPU执行指令,把结果写到高速缓存
4、高速缓存中的数据写会主内存
CPU运行安全等级
4个运行级别:ring0,ring1,ring2,ring3
Linux和windows只用到了两个安全级别ring0和ring3。操作系统内部内部程序指令通常运行在ring0级别,操作系统以外的第三方程序运行在ring3级别,第三方程序如果要调用操作系统内部函数功能,由于运行安全级别不够,必须切换CPU运行状态,从ring3切换到ring0,然后执行系统函数,所以说JVM创建线程,线程阻塞唤醒是重型操作了,因为CPU要切换运行状态。
操作系统内存管理
操作系统有用户空间与内核空间两个概念,目的也是为了做到程序运行安全隔离与稳定
内核线程模型
- KLT:系统内核管理线程,内核保存线程状态和上下文信息,线程阻塞不会引起进程阻塞。在多处理器系统上,多线程在多处理器上并行运行。线程的创建、调度和管理由内核完成,效率比ULT要慢,比进程操作快。JVM属于KLT线程模型
- ULT:用户程序实现,不依赖操作系统核心,应用提供创建、同步、调度和管理线程的函数来控制用户线程。不需要用户态/内核态切换,速度快。内核对ULT无感知,线程阻塞则进程(包括它的所有线程)阻塞。
虚拟机指令集架构
- 栈指令集架构(JVM属于栈指令集架构):
设计和实现更简单,适用于资源受限的系统;
避开了寄存器的分配难题:使用零地址指令方式分配;
指令流中的指令大部分是零地址指令,其执行过程依赖与操作栈,指令集更小,编译器容易实现;
不需要硬件支持,可移植性更好,更好实现跨平台。 - 寄存器指令集架构:
典型的应用是x86的二进制指令集:比如传统的PC以及Android的Davlik虚拟机。
指令集架构则完全依赖硬件,可移植性差。
性能优秀和执行更高效。
花费更少的指令去完成一项操作。
在大部分情况下,基于寄存器架构的指令集往往都以一地址指令、 二地址指令和三地址指令为主,而基于栈式架构的指令集却是以零地址指令为主。