概要
- 冯诺依曼计算机模型
- cpu缓存结构剖析。
- 操作系统内存管理与线程模型。
- 虚拟机指令集架构详解。
冯诺依曼计算机体系
CPU缓存架构
多级缓存:
- L1 cache 数据缓存和指令缓存,逻辑独占。一般 256K
- L2 cache 物理核独占,逻辑核共享。 一般1M左右
- L3 cache, 所有物理核共享 一般8M
缓存由缓存行构成(cacheline)64byte大小
CPU读取内存数据的过程:
- L1->l2->L3 一次判断,如果有,直接读取到寄存器。
- 如果L1,2,3都没有,从内存,读到L3,从L3复制到L2,从L2复制到L1。L1读到寄存器。
- CPU读取数据的特性
- 空间局部性
CPU从内存拿数据,不仅是拿目标数据,紧邻的一片一次性加载到L3缓存里。 - 时间局部性
如果一个信息正在被访问那么近期它还可能被访问,比如循环,递归方法的反复调用。
操作系统内存管理
操作系统内存空间分为
- 用户空间
- 内核空间
为什么进行内存空间的划分?
目的是为了做到程序运行的安全隔离与稳定。32G 4G大小内存为例。内核空间 1G用户空间3G
CPU运行的安全等级
ring0:
内核态,权限最高。各种操作都可以做。
ring1
ring2
ring3
权限一次降低。
运用运行的级别一般在用户态。JVM,app等等。
内核线程模型
内核线程(KLT) ,系统内核管理线程内核保存线程额上下文信息,线程阻塞不会引起进程阻塞。在多处理器系统上,多线程在多处理器上并行执行。线程的创建调度和管理由内核完成。效率比ULT要慢,比进程操作快。
用户线程模型
进程与线程
现代操作系统在运行一个程序时,会为其创建一个进程,例如:启动一个java
程序,操作系统就会创建一个java进程。进程是OS操作系统资源分配的最小单位
线程是OS操作系统调度CPU的最小单元。也叫轻量级进程(Light Weight Process),
在一个进程里可以创建多个线程。这些线程拥有各自的计数器,堆栈,局部变量
等属性。并且能够访问共享的内存变量,CPU在这些线程上高速切换。让使用者感觉到这些
线程在同时执行,既并发的感觉。相似的还有并行
线程上下文切换过程:
虚拟机指令集架构
CPU执行架构分两种,指令集架构和,寄存器指令集架构。
指令集架构
- 设计和实现更简单,适用于资源受限的系统。
- 避开了寄存器分配难题,使用零地址指令方式分配。
- 指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈,指令集更小,编译器容易实现。
- 不需要硬件支持,可移植性更好,更容易实现跨平台。
寄存器指令集架构
- 典型的应用如二进制指令集。传统的PC一级Android的Davilk虚拟机。
- 指令集架构则完全依赖硬件,可移植性差。
- 性能优秀和执行更高效。
- 花费更少的指令去完成一项操作。
- 在大部分情况下,基于寄存器架构的指令集往往都以一地址,二地址指令和三地址指令为主。而基于栈架构的指令集涉及出栈入栈等操作。
Java,Python,GO