用户态、内核态
- 用户态:CPU 只能执行非特权指令
- 核心态:特权、非特权都可以执行
特权指令不允许用户程序使用
线程管理
进程是资源分配的最小单位,线程是 CPU 调度的最小单位。一个进程中可以有多个线程,与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多
进程调度算法
先来先服务、短作业优先(饥饿)、最短剩余时间优先
时间片轮转、优先级调度、多级反馈队列
进程同步
一次仅允许一个进程使用的资源称为临界资源
同步:多个进程因为合作产生的直接制约关系,使得进程有一定的先后执行关系
互斥:多个进程在同一时刻只有一个进程能进入临界区
进程通信
进程同步与进程通信很容易混淆,它们的区别在于:
- 进程同步:控制多个进程按一定顺序执行
- 进程通信:进程间传输信息
管道
消息队列
共享存储:允许多个进程共享一个给定的存储区。因为数据不需要在进程之间复制,所以这是最快的一种 IPC
套接字:不同机器间的通信
线程通信
- 共享内存:共享内存指的是多条线程共享同一片内存,发送者将消息写入内存,接收者从内存中读取消息,从而实现了消息的传递。需要程序员来控制线程的同步,即线程的执行次序
- 消息传递:消息传递指的是发送线程直接将消息传递给接收线程。由于执行次序由并发机制完成,因此不需要程序员添加额外的同步机制,但需要声明消息发送和接收的代码
死锁(对不可剥夺资源的不合理分配,会导致死锁)
互相等待对方手里的资源,导致各自进程阻塞,都无法向前推进
必要条件
- 互斥条件:只有对必须互斥使用的资源的争抢才会导致死锁
- 不剥夺条件
- 请求和保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放
- 循环等待条件(按序申请资源来预防):若干进程之间形成一种头尾相接的循环等待资源关系
处理策略
- 预防死锁
- 避免死锁:用某种方法防止系统进入不安全状态,从而避免死锁 (银行家算法)
- 死锁的检测与解除
内存管理
虚拟内存(目的是为了让物理内存扩充成更大的逻辑内存)使用了空分复用技术。即,程序不需全部装入即可运行,运行时根据需要动态调入数据,若内存不够,换出一些数据。(基于局部性原理,在程序装入时,可以将程序的一部分装入内存,而将其余部分留在外存,就能启动程序执行。在程序执行过程中,当访问的信息不在内存时,将所需要的部分调入内存,然后继续执行程序。另一方面,将内存中暂时不使用的内容换出到外存上。这样,系统好像为用户提供了一个比实际内存大得多的存储器,称为虚拟存储器。)

逻辑地址(相对地址)
进程在内存中的起始地址是不确定的,因此进程中的变量在内存中的存放位置要用相对地址表示
逻辑地址存放在指令中
- 逻辑地址空间分为若干页;物理内存空间分为若干页框
物理地址
变量在内存中实际存放的地址
页面置换算法(请求分页存储管理中的知识)

- 最佳置换算法(OPT):选择以后永不使用,或者最长时间内不被访问的页面。(计算机中无法实现)
- 先进先出置换算法(FIFO):字面意思,算法性能差,会有 Belady 异常
- 最近最久未使用置换算法(LRU):每次淘汰的页面是最近最久未使用的页面。局部性原理。
LinkedHashMap
- 时钟置换算法(没看)
设备管理
磁盘调度算法
- 先来先服务
- 最短寻道时间优先(饥饿)
- 电梯算法