1. 什么是进程?
- 进程(Process)是一个具有独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度的一个独立单位或者说是基本单位.
1.1 进程的结构
- 控制块(PCB: Process Control Block, 进程唯一标识)
- 数据段
- 程序段: 存放在文本区域,可以被多个进程共享。例如微信多开,程序段一致,数据段不一致。
1.2 进程的特征
- 动态性:由创建而生,由撤销而亡。
- 并发性:多个进程同时运行。
- 独立性:独立资源分配。
- 异步性:相互独立,互不干扰。
1.3 进程与线程
1.3.1 什么是线程?
- Thread,进程的轻量型实体,是一系列活动按照设定好的顺序依次执行的过程,是一系列指令的集合。
- 是一条执行路径,不能单独存在,必须包含在进程中。
- 线程是OS中运算调度的最小单位。
1.3.2 线程的属性
- 轻型实体
- 独立调度和分配的基本单位
- 可并发执行
- 共享进程资源
1.3.3 进程线程的区别
- 调度
- 拥有资源
- 系统开销
- 地址空间与其他资源
- 通信
线程相对于进程,大大降低了创建,撤销和切换可执行实体的成本和难度
2. 进程是怎么运行的?
2.1 进程的状态
- 就绪状态
- 执行状态
- 阻塞状态
- 创建状态
- 终止状态
2.2 进程的控制
2.3 进程的调度
- 剥夺式/抢占式调度: 立即暂停当前进程, 分配处理机给另一个进程。 原则:优先权/短进程优先/时间片原则。
- 非剥夺/非抢占式调度:若有进程请求进行,等待当前进程完成或者阻塞。适用于批处理系统。
2.4 调度的时机
- 进程处理完成
- 时间片耗尽
- 进程进行I/O
- 执行原语操作
- 高优先级进程申请运行
2.5 调度过程
- 保存镜像:记录进程现场信息
- 调度算法:确定分配处理机的原则
- 进程切换:分配处理机给其他进程
- 处理机回收:从进程收回处理机
2.6 调度算法指标
- CPU利用率
- 系统吞吐量
- 周转时间: 作业完成时间-提交时间
带权周转时间: 周转时间/实际运行时间
- 等待时间
- 响应时间
2.7 常见调度算法
- 先来先服务FCFS, First Come First Served
- 短作业优先SJF, Shortest Job First
所需服务时间最短(估算)的作业/进程优先服务,追求最少的的平均(带权)周转时间
- 高响应比优先调度HRRN, Highest Response Ration Next
响应比:(等待时间 + 服务时间) / 服务时间
只有当前进程放弃执行权,重新计算所有进程响应比
- 优先级调度 PSA, Priority-Scheduling Algorithm
镜头/动态优先级
系统 > 用户
交互型 > 非交互型
I/O型 > 计算型
- 时间片轮转调度RR, Round-Robin
- 多级反馈队列调度MFQ, Multileveled Feedback Queue
3. 进程怎么协作
3.1 进程通信
- 共享存储(Shared-Memory)
共享数据结构
共享存储区
- 消息传递(Message-Passing)
直接通信:点到点通信,发送和接受时指明双方进程ID,每个进程维护一个消息缓冲队列
间接通信:以信箱为媒介,作为中间实体,发送进程将消息发送到信箱,收进程从信箱读取,可以广播,容易建立双向通信链。
- 管道通信(Pip)
用于连接读写进程的共享文件,本质是内存中固定大小的缓冲区
半双工通信:单向通信,双工通信需要两个管道。
3.2 消息同步
3.2.1进程同步的基本概念
协调进程间的相互制约关系,使他们按照预期的方式执行的过程
前提:
- 进程是并发进行的,进程间存在相互制约关系
- 并发的进程对系统共享资源进行竞争
- 进程通信过程中相互发送的信号称为为消息或事件
两种相互制约形式:
- 互斥
- 同步
进程同步访问原则
- 空闲进入
- 忙则等待
- 有限等待
- 让权等待:等待时应让出CPU执行权,防止忙等待
4. 如何处理死锁?
4.1 什么是死锁?
多个进程由于竞争资源而造成的阻塞现象,若无外力作用,这些进程将无法继续推进
4.2 死锁产生的原因
- 系统资源竞争
- 进程推进顺序非法
4.3 死锁产生的必要条件
- 互斥条件,共享资源的排他访问性
- 不剥夺条件,访问时该共享资源不会被剥夺
- 请求并保持条件,保持当前资源时请求另一个资源
- 循环等待条件,存在共享资源的循环等待链。