程序的执行
- 顺序执行
- 顺序性
- 封闭性
- 可再生性
- 并发执行
- 间断性
- 失去封闭性
- 不可再生性
进程
- 五个特征
- 动态
- 并发
- 独立
- 异步
- 结构性
- 静态描述
- 进程 = PCB+程序段+数据集合
- 基本状态
- 新建-满足除了CPU以外所有条件->就绪-由CPU->运行-->结束
- 运行-等待某个事件发生而睡眠->等待-因等待事件发生而唤醒->就绪
- 运行-中断->就绪
- 进程和程序的区别:
进程是动态的而程序是静态的。
- 并行和并发的区别
- 并行
- 同一时刻,两个事务均处于活动状态
- 比如CPU中的超流水线设计、超标量设计
- 并发
- 宏观并行执行,微观顺序执行
- 同一时刻只有一个事物处于活动状态
- 比如分时操作系统中多个程序同时运行
- 并行
1 进程的组成
- 文本段(代码段):包括程序代码
- 堆栈段:包括临时数据,比如函数参数,返回地址,局部变量
- 堆:包括进程运行中被动态分配的内存段,比如用户malloc的指针
- 数据段:包括全局变量
2 进程的状态转移图
1)进程的状态特点:
- 运行:指令正在被执行
- 等待/阻塞:正在运行的进程由于发生某事件而暂时无法进执行下去(如等待IO的完成)
- 就绪:进程分到了除了CPU以外所有资源的状态
- 终止:进程完成执行
- 新的:进程正在被创建
- 挂起:人为地将正在运行的进程或者还没有运行的进程暂停运行,以便对其研究/修改
2)进程状态转换
- 就绪 -> 运行
- 调度程序选择一个新的进程运行
- 运行 -> 就绪
- 运行的进程用完了时间片
- 运行的进程被中断,因为高一优先级的进程处于就绪状态
- 运行->等待
- OS尚未完成任务
- 对一个资源的访问尚且不能进行
- 初始化IO且必须等待结果
- 等待某一进程提供输入(IPC)
- 等待->就绪
- 当进程被分到了除了CPU资源以外的所有资源
3 进程间通信
- 低级通信——进程的同步机制
- 资源竞争
- 临界区
- 进程互斥---------|
- 临界区
- 互相合作 |
- 同步--------------------->信号量机制
- 资源竞争
- 高级通信
- 共享存储器系统
- 基于共享存储区方式
- 信息传递系统
- 直接通信
- 主从式
- 会话式
- 消息缓冲
- 间接通信
- 邮箱
- 直接通信
- 共享存储器系统
定义:并发进程之间的信息交换称为进程通信。交换的信息少则是一个状态或者数值,多则成千上万个字节
- 共享内存
- 进程之间通过共享变量实现信息传递。
- 消息传递
- 进程间的信息交换以消息为单位,程序员直接利用系统提供的一组通信命令(发送信息Send原语和接受信息Receive原语)来实现通信消息传递系统可以分为消息缓冲通信和信箱通信。
共享内存比消息传递要快!
4 CPU调度(进程调度)大题/简答
调度算法 |
计算规则 |
备注 |
先来先服务FCFS |
只考虑每个作业的等待时间 |
缺点:
|
短作业优先SJF |
只考虑每个作业的执行时间 |
|
最高相应比HRF |
相应比R = 1+W/T = 1 + 作业等待时间/作业估算要运行时间(即要求服务时间) |
|
轮转法RR |
等待时间与执行时间成比例,时间片长度q值的选择 |
|
多级反馈轮转法 |
划分不同队列,给予不同优先级和时间片 |
|
优先级法 |
分为静态优先级,动态优先级 |
存在低优先级饿死现像——解决方法:老化,即随着时间增加优先级w |
性能衡量指标:周转时间,带权周转时间,响应时间
5 进程同步30分大题+简答
- 临界资源:
- 多个进程共用一个资源
- 任何时刻只能有一个进程使用该资源
- 临界区:
- 一段可能对某个共享数据进行修改的一段代码
- 特征
- 当一个进程在临界区执行的时候,其他任何进程都不可以再进入临界区执行
- 多个进程同时竞争进入同一个临界区,他们属于“互斥”关系。
- 三大要求
- 最基本:互斥
- 前进:空闲让进
- 有限等待:要控制进程从做出进入临界区请求到请求被允许的过程中,其他进程被允许进入临界区的次数(避免进程等待时间过长)
- 互斥
- 一组并发进程的一个或者多个程序段,因为共享某一共有资源导致她们必须以一个不允许交叉的执行单位执行。
- 信号量机制解决同步、互斥问题
- 信号量
- 物理意义:S>0表示有S个资源可用,S=0表示没有资源可用,s<0的时候,s的绝对值表示等待队列中进程的个数
- PV操作
- p:wait(S)原语,当发现S<=0 的时候必须阻塞自己
- V: signal(S)原语,当一个进程阻塞并且等待信号量S的时候可以在其他进程signal操作之后被重新执行
- 一般地,要求进程B在A之后执行,只需要在B开始前进行P操作,A结束后对同一个信号量进行V操作
- 信号量
- 生产者-消费者模型
问题描述:一组生产者进程和一组消费者进程共享一个初始大小为空,大小为n的缓冲区;缓冲区美满的时候,生产者才能把消息访日缓冲区;否则必须等待。只有缓冲区不为空的时候,消费者才能从中取出信息,否则必须等待。由于缓冲区是临界资源,所以它只允许一个生产者放入信息,或者一个消费者从中取出信息。
- 单消费者生产者
- 1生产者1消费者,缓冲区大小为n case
Semaphore mutex = 1//临界区互斥信号量,用于加在对临界区操作的两边PV
Semaphore empty = n;//空闲缓冲区
Semaphore full = 0//缓冲区初始化为空
Producer()
{
While(1)
{
Produce an item in nextp;
P(empty);
P(mutex);//互斥夹紧
Add item to buffer
V(mutex);
V(full);
}
}
Customer()
{
While(1)
{
P(full)
P(mutex)
remove an item from buffer
V(mutex)
V(empty)
Consume the item
}
}
- 1生产者1消费者1缓冲区不用mutex
Producer()
{
While(1)
{
Produce an item
P(empty)
Add item to buffer
V(full)
}
}
Customer()
{
While(1)
{
P(full)
Remove an item from buffer
V(empty)
Comsume the item
}
}
- 1生产者多消费者
- 比如1生产者3消费者1缓冲区(多缓冲区要加mutex)
S1 = S2 = S3 = 0,S = 3
P1:
Begin
P(S)
P(S)
P(S)
发消息到缓冲区buffer
V(S1)
V(S2)
V(S3)
End
P2:
Begin
P(S1)
读取消息
V(S)
End
P3:
Begin
P(S2)
读取消息
V(S)
End
P4:
Begin
P(S3)
读取消息
V(S)
End
- 哲学家就餐问题
哲学家ABCD在一起讨论问题,讨论间隙她们进餐。没人进餐使用刀叉各一把,但参坐上只在两个人之间放一套餐具。请用信号量PV说明思维哲学家的同步,互斥关系。
解:
设信号量S1,S2,S3,S4初始值都是1
Procedurei(I = 1,2,3):
P(Si);
P(Si+1);
Eating;
V(Si);
V(Si+1)
Procedure4:
P(S4);
P(S1);
Eating;
V(S4);
V(S1);
6 死锁
- 死锁的原因
- 资源竞争
- 进程推进顺序不当
- 死锁的四个必要条件(打破一个就破坏了死锁)
- 互斥:一次只有一个进程可以使用一个资源
- 不可抢占:进程所获得的资源只能在使用完成后之后才能自行释放
- 占有并等待:一次至少持有一个资源的进程等待获得额外的由其他进程所持有的资源
- 循环等待:等待资源的进程之间存在环
- 死锁处理
- 死锁预防
因为破坏互斥和不可抢占比较困难,所以一般是通过资源的静态分配/资源的顺序分配,即打破占有并等待or循环等待来预防死锁
- 破坏环路条件(即循环等待条件):资源有序分配法
- 破坏请求和保持条件:资源一次性分配
- 可剥夺资源:破坏不可抢占资源条件
- 死锁的避免
根据防止系统进入不安全状态来采取措施实现的。
- 银行家算法:操作系统在银行家制定的规则内为进程成分配资源,可以使系统保持在安全的状态。但是他每次分配前都要计算,耗时长,给系统带来了很大的开销
- 预分配算法
- 安全检测算法
- 死锁的检测
- 1 在进程-资源图中找到一个进程节点P1,P1的请求边都能立即满足。找到了的话就把P1连的边都删去,再回到上述操作,直到化简结束。
- 若图S为死锁,当且仅当S的进程资源图是不可完全化简的
- 死锁解除
- 撤销进程
- 强制撤销部分甚至全部死锁进程并且剥夺他们的资源
- 剥夺资源
- 挂起某些思索进程,并抢占他的资源,将这些资源分配给其他死锁进程
- 撤销进程