多道程序系统
多道就是将多个程序同时装入内存,使之并发运行。操作系统也是基于多道产生的,提高了资源利用率和系统吞吐量。
进程
定义
进程是程序的一次执行
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
在引入线程后,线程成为调度的基本单位,进程仍是资源分配的基本单位
进程实体的组成
程序:是一组指令的组合
进程:是程序的一次执行过程,是系统进行资源分配和调度的一个独立单位
进程实体:在程序的一次执行过程,会在内存中产生 程序块、数据块、程序控制块 这三部分,这三部分构成了进程实体,又叫进程影像。
程序块
一般也被称为代码段。
代码段是进程的程序指令在内存中的位置,包含需要执行的指令集合;
数据块
是进程的操作数据在内存中的位置,包含需要操作的数据集合
程序控制块 PCB
(Program Control Block,PCB)
包含进程的描述信息和控制信息,是进程存在的唯一标志。
PCB的组织方式
- 链接方式
- 索引方式
进程的特征
进程的状态
状态
除此之外,还有挂起态:就绪挂起和阻塞挂起
进程状态的转换
进程的控制
进程控制主要就是要实现进程状态之间的转换
原语
进程控制一般是由OS的内核中的原语来实现的
为了保证PCB的状态和所处队列等信息一致,需要将这些修改操作一气呵成
进程的创建与终止
进程的切换
进程的阻塞与唤醒
进程的挂起与激活
进程的通信
进程通信是指进程之间的信息交换
共享存储
管道通信
消息传递
CS系统
主要用户不同计算机之间进程的通信
-
套接字
-
远程过程调用和远程方法调用
进程同步
进程同步与互斥
进程互斥的实现,是在同一个进程中先P后V
进程同步的实现,是在两个进程中先V后P
临界资源的访问
硬件实现方法
中断屏蔽方法
TestAndSet指令
Swap指令
信号量机制
分类
-
整型信号量
-
记录型信号量
信号量的应用
- 实现进程互斥
- 实现进程同步
- 实现进程的前驱关系
管程机制
eg. synchronized
常见问题
生产者与消费者问题
多生产者与多消费者问题
当盘子的容量为1的时候,可以不用写mutex;当盘子的容量大于1的时候,需要mutex
吸烟者问题
读者与写者问题
哲学家进餐问题
线程
- 进程是资源分配的基本单位,线程是调度的基本单位
- 一个进程可以有多个线程
线程的属性
线程的实现方式
Java语言采用的就是多对多模型
处理机调度
当有一堆任务要处理,但由于资源有限,这些事情没法同时处理。这就需要确定某种规则来决定处理 这些任务的顺序,这就是“调度”研究的问题。
处理机调度的层次
高级(作业)调度
高级调度主要用于多批到批处理系统中,而在分时和实时系统中不设置高级调度。
中级(内存)调度
低级(进程)调度
调度的准则
- 周转时间短
- 响应时间短
- 系统吞吐量大
- 资源利用率高
- 公平
进程调度
进程调度的时机
内核程序临界区
普通代码(普通临界区)访问普通临界资源(例如IO设备),可以进行处理机调度
内核程序(内核程序临界区)访问内核数据结构(例如就绪队列),不可以进行处理机调度
进程调度的方式
进程的切换与过程
广义进程调度:
- 选择一个进程(狭义进程调度)
- 进程切换:
- 保存原来进程的数据
- 恢复新进程的数据
调度算法
评价指标
-
CPU利用率
-
系统吞吐量
-
周转时间
-
带权周转时间
-
等待时间
- 响应时间
早期批处理算法
下面三种算法适用于早期批处理算法
先来先服务
FCFS是最简单的调度算法,该算法既可用于作业调度,也可以用于进程调度
eg
短作业优先
-
非抢占
-
抢占
注意事项
高响应比优先
eg
现代交互算法
时间片轮转
一般来说,设计时间片时要让切换进程的开销占比不超过1%
eg
优先级调度
-
非抢占式
-
抢占式
注意事项
多级反馈队列
eg
对于实时调度:
- 最早截止时间优先:任务截止时间越早,优先程度越高
- 最低松弛度优先:任务越紧急,优先程度越高
死锁
产生死锁的条件
处理策略
预防死锁
- 破坏互斥条件
- 破坏不剥夺条件
- 破坏请求和保持条件
- 破坏循环等待条件
避免死锁
安全序列