多道程序系统
多道就是将多个程序同时装入内存,使之并发运行。操作系统也是基于多道产生的,提高了资源利用率和系统吞吐量。
进程
定义
进程是程序的一次执行
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
在引入线程后,线程成为调度的基本单位,进程仍是资源分配的基本单位
进程实体的组成
程序:是一组指令的组合
进程:是程序的一次执行过程,是系统进行资源分配和调度的一个独立单位
进程实体:在程序的一次执行过程,会在内存中产生 程序块、数据块、程序控制块 这三部分,这三部分构成了进程实体,又叫进程影像。

程序块
一般也被称为代码段。
代码段是进程的程序指令在内存中的位置,包含需要执行的指令集合;
数据块
是进程的操作数据在内存中的位置,包含需要操作的数据集合
程序控制块 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

对于实时调度:
- 最早截止时间优先:任务截止时间越早,优先程度越高
- 最低松弛度优先:任务越紧急,优先程度越高
死锁


产生死锁的条件


处理策略
预防死锁

- 破坏互斥条件

- 破坏不剥夺条件

- 破坏请求和保持条件

- 破坏循环等待条件

避免死锁
安全序列


银行家算法

死锁的检测与解除

死锁检测算法

解除死锁






![[比赛简介]ICR - Identifying Age-Related Conditions](https://img-blog.csdnimg.cn/5b2e3e4152e646979669babb6095055e.png)














