操作系统的特征:并发,共享,虚拟,异步
互斥共享,同时共享
虚拟内存(MMU) —> 空分复用
虚拟处理器 -----> 时分复用
系统拥有并发,才有异步
程序状态字寄存器,如1表示内核态(管态),0表示用户态(目态)
内核态 —> 用户态 PSW指令修改
用户态 —> 内核态 中断引起
中断分类:
内中断(异常): 陷入(系统调用),故障,终止
外中断
中断向量表 —> 中断程序(内核态)
PCB(process control block)进程控制块 —> 1.进程描述信息2.进程控制和管理信息3.资源分配清单4.处理机相关信息
进程开始,创建PCB, 进程结束,销毁PCB。
进程组成: PCB(给操作系统),程序段,数据段(这两个自用)
(三个点,概念,组成,特征)
进程组成: PCB(给操作系统使用,记录进程的相关信息),程序段,数据段(这两个自用
)
进程是系统进行资源分配和调度(程序在cpu中运行)的独立单位,PCB是进程存在的唯一标
志
进程的特征:动态性,并发性,独立性,异步性,结构性。
PCB,中state设置进程所处的状态
进程的组织—链表,索引的方式
执行指针 ------>PCB1
就绪队列指针 -------> PCB2,PCB3,
阻塞队列指针 -------> PCB8,PCB9
进程控制:实现进程的状态的转换 “原语”(开中断之指令,关中断指令控制)
无论那个进程控制原语,做三件事:
1。更新PCB内容
2。将PCB插入合适的队列
3。分配/回收资源
处理机调度:进程数比处理机数量多。
调度:按照某种规则处理任务。
调度的三个层次:
高级调度(作业调度):内存和外存的一个调度,作业调入会建立相应的PCB
中级调度(内存状态):虚拟存储技术,将进程暂时存储在一个中间部分。,提高内存利用率和系统吞吐量。暂时被调到外存的进程的状态称之为挂起状态,但其PCB不一定调出。挂起状态 —> 就绪挂起和阻塞挂起
低级调度(进程调度):从就绪队列选择一个进程交给处理机,是操作系统最基本的调度(内存—> cpu)
进程调度的时机,切换与过程,方式
进程调度切换:被动和主动
处理中段,原子操作,进程在操作系统内核程序临界区时不能切换进程
临界资源:每个进程只能互斥的访问,互斥的访问临界区
进程调度方式:抢占式和非抢占式
抢占式:优先级或紧急任务会由cpu优先处理(分时,实时操作系统)
非抢占式:只有前一个进程放弃cpu,下一个才能进入
进程切换:是有代价的
1.对原来运行的进程各种数据的保存
2.对新的进程数据的恢复
调度算法评价:
cpu利用率
系统吞吐量:单位时间内完成的作业
周转时间:作业被提交至作业完成的时间
平均周转时间:各作业周转时间/作业数
带权周转时间:作业周转时间/作业实际运行时间,越小越好
平均带权周转时间
等待时间:调度算法影响的指标
响应时间:用户提交到首次响应的时间
调度算法:
学习框架:1.算法思想2.算法规则3.用于作业调度还是进程调度4.抢占式?非抢占式?5.优缺点6.是否饥饿
非交互方式------
先来先服务:
短作业优先:(要求服务时间最短),短进程优先
在所有进程都几乎同时到达时,采用短作业优先算法平均等待时间,平均周转时间最少
可能出现长作业饥饿
高响应比优先调度:(等待时间+要求服务时间 )/ 要求服务时间
交互方式-------
操作系统更偏好I/O进程
多级反馈队列调度算法:
被抢占处理机的进程被重新放回原队列队尾
对各类进进程相对公平,每个新到达的进程可以很快得到响应
进程同步:
进程间有相互协调制约的关系,让进程并发的执行
进程互斥:对临界资源的访问
进程互斥的软件实现:
- 单标志法
设置一个标志:int turn = 0;
同一时刻只允许一个进程进入临界区
只能按照顺序进行。
2.双标志先检查
违反忙则等待
进入去上锁,等待是不一样的
3.双标志后检查
会出现进程饥饿
4.Peterson算法
在进入区,遵循空闲让进,忙则等待,有限等待,但未遵循让权等待
进程互斥硬件实现:
中断屏蔽:利用开关中断原子指令
TestAndSET(TS指令)
Swp指令
信号量机制 --记录型信号量 --整数型信号量
整型信号量 —会导致进程忙等
//记录型信号量定义
typedef struct{
int value; // 剩余资源
struct procedd *L; //等待队列
}semaphore;
// 不会出现忙等的操作
// 某进程需要使用资源时,通过wait原语申请
void wait(semphore S)
{
S.value–;
if (S.value < 0) //说明该类资源已经分配完毕
block(S.L); // 调用函数自我阻塞
}
// 进程使用完资源,通过signal原语释放
void signal(semaphore S)
{
S.value ++;
if (S.value <= 0) // 说明队列中还有进程
wakeup(S.L); // 唤醒队列第一的进程
}
信号量的值 = 这种资源的剩余数量
P(S)------申请一个资源,资源不够就阻塞
V(S)------释放一个资源,若有进程等待使用这个资源,则唤醒这个进程
信号量机制实现进程互斥
1.分析并发进程的关键活动,划定临界区
2.设置互斥信号量mutex,表示进入临界区的名额
3.进入区----P(mutex) -申请资源
4.退出去—V(mutex) - 释放资源
P,V操作成对出现
信号量机制实现进程同步
1.分析什么地方需要实现同步关系,即保证一前一后的运行
2.设置同步信号量S,初值=0
3.在前操作之后执行V操作 (先释放资源)
4,在后之前执行P操作 (然后申请资源)
实现互斥是在同一进程中进行的一对PV操作
实现两进程同步,是在一个进程执行P,另一个进程执行V。
PV操作解题思路:
1:关系分析。找出题目中描述的各个流程,分析同步,互斥关系
2:整理思路 根据各进程的操作流程,确定P,V操作的大致顺序
3:设置信号量,根据题目设置信号量初值
若一个生产者要生产多种产品(或者引发多种前驱事件),那么各个V操作应该放在各自对应的时间发生之后的位置
死锁:至少有两个进程,处于阻塞态
在并发环境下,各进程相互竞争资源导致各个进程都阻塞,都无法推进的现象
饥饿:可能只有一个,处于就绪态或阻塞态
长期得不到资源,无法向前推进
死循环:处于运行态,
进程过程中出现不能跳出循环
死锁产生必要条件:
1.互斥条件
2.不剥夺条件
3.请求和保持条件 保持一个资源并请求另一个资源
4.循环等待条件
死锁一定有循环等待,反之不成立
对不可剥夺资源分配不合理会发生死锁
预防死锁:
破坏互斥条件: 如SPOOLing技术
安全序列:系统按照某种序列分配资源,使所有资源都能完成
发生死锁必然处于不安全序列,反之不定。
银行家算法思想:在资源分配前预先判断这次分配是否导致系统进入不安全状态,已决定是否分配资源
资源分配图:
两种节点:进程和资源节点
两种边:进程节点–> 资源节点(请求边) 资源节点 --> 进程节点(分配边)
死锁检测算法:依次消除与不阻塞进程相连的边,直到无边可消
死锁定理:若资源分配图不可简化,说明发生了死锁