【深入理解并发编程系列1】操作系统与虚拟机

概要

  1. 冯诺依曼计算机模型
  2. cpu缓存结构剖析。
  3. 操作系统内存管理与线程模型。
  4. 虚拟机指令集架构详解。

冯诺依曼计算机体系

图片

CPU缓存架构

图片

多级缓存:

  1. L1 cache 数据缓存和指令缓存,逻辑独占。一般 256K
  2. L2 cache 物理核独占,逻辑核共享。 一般1M左右
  3. L3 cache, 所有物理核共享 一般8M

缓存由缓存行构成(cacheline)64byte大小

CPU读取内存数据的过程:

  1. L1->l2->L3 一次判断,如果有,直接读取到寄存器。
  2. 如果L1,2,3都没有,从内存,读到L3,从L3复制到L2,从L2复制到L1。L1读到寄存器。
  • CPU读取数据的特性
  1. 空间局部性
    CPU从内存拿数据,不仅是拿目标数据,紧邻的一片一次性加载到L3缓存里。
  2. 时间局部性
    如果一个信息正在被访问那么近期它还可能被访问,比如循环,递归方法的反复调用。

操作系统内存管理

操作系统内存空间分为

  1. 用户空间
  2. 内核空间

为什么进行内存空间的划分?

目的是为了做到程序运行的安全隔离与稳定。32G 4G大小内存为例。内核空间 1G用户空间3G

图片

CPU运行的安全等级

ring0:
内核态,权限最高。各种操作都可以做。

ring1
ring2
ring3
权限一次降低。

运用运行的级别一般在用户态。JVM,app等等。

图片

内核线程模型

内核线程(KLT) ,系统内核管理线程内核保存线程额上下文信息,线程阻塞不会引起进程阻塞。在多处理器系统上,多线程在多处理器上并行执行。线程的创建调度和管理由内核完成。效率比ULT要慢,比进程操作快。

用户线程模型

图片

进程与线程

现代操作系统在运行一个程序时,会为其创建一个进程,例如:启动一个java
程序,操作系统就会创建一个java进程。进程是OS操作系统资源分配的最小单位

线程是OS操作系统调度CPU的最小单元。也叫轻量级进程(Light Weight Process),
在一个进程里可以创建多个线程。这些线程拥有各自的计数器,堆栈,局部变量
等属性。并且能够访问共享的内存变量,CPU在这些线程上高速切换。让使用者感觉到这些
线程在同时执行,既并发的感觉。相似的还有并行

线程上下文切换过程:
图片

虚拟机指令集架构

CPU执行架构分两种,指令集架构和,寄存器指令集架构。

指令集架构

  1. 设计和实现更简单,适用于资源受限的系统。
  2. 避开了寄存器分配难题,使用零地址指令方式分配。
  3. 指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈,指令集更小,编译器容易实现。
  4. 不需要硬件支持,可移植性更好,更容易实现跨平台。

寄存器指令集架构

  1. 典型的应用如二进制指令集。传统的PC一级Android的Davilk虚拟机。
  2. 指令集架构则完全依赖硬件,可移植性差。
  3. 性能优秀和执行更高效。
  4. 花费更少的指令去完成一项操作。
  5. 在大部分情况下,基于寄存器架构的指令集往往都以一地址,二地址指令和三地址指令为主。而基于栈架构的指令集涉及出栈入栈等操作。
    Java,Python,GO