作业:程序+数据+作业说明书
作业步:作业加工的每一步被称为作业步,例如:编译作业步,链接作业步,运行作业步..
作业流:多个作业加载进外存后形成一个队列,这样就是形成一个流的状态.
2.作业控制块(JCB):
作业控制快因为系统的不同有些许差异,主要由以下几部分构成:
每个作业进入系统的时候,系统就为每一个作业建立一个JCB,然后根据作业类型将他插入相应的后备队列中,系统根据jcb中的信息付作业进行调度.
3.作业调度
作业调度的主要功能是根据作业控制块中的信息,按照一定的算法将作业从后备队列中调入内存中,准备执行.
在调度作业之前,系统需要做一下两个决定:
决定接受多少个作业
作业太多,系统的服务质量减低,吞吐量少,资源利用吕低.
通常把低级调度称为进程调度(内核线程)或这是短程调度;
1.低级调度的功能
2.进程调度的三个基本机制
3.进程调度方式
非抢占式 一个死了在加载另一个,没有时间到了然后去切换的概念.
这种方式 实现简单,系统少去好多的上下文切换的代价,开销小,适合大多书批处理环境.
缺点:难以满足紧急任务的执行要求
抢占式
中级调度提出的目的就是将提高内存的利用率,将暂时不用的作业调度到外存去等待,等到具备运行的资格了,在调度到内存中,一般当一个进程被挂起了就是被调度到外存上了.
有利于长作业,不利于短作业,利于cpu繁忙型作业,不利于I/O繁忙型作业
2.短作业优先算法(SJF)
优点:降低了作业平均等待时间,提高了系统吞吐量.
缺点:对长作业不利.没有考虑作业的紧急程度.不确定性
4.高响应优先算法
5.时间片轮转算法
6.多级反馈调度算法
产生死锁的愿意:
产生死锁的必要条件
处理死锁的基本方法
在系统开始之前就一次性的将他所需要的全部资源分配给他,在整个系统运行期间就不在提出申请资源的需求,那样就步会出现死锁.
优点:简单.实现简单.安全
缺点:资源浪费.恶化系统资源利用率,延迟进行(分配所有资源是需要时间)资源被长期占用而其他进程不能进行.
当持有资源再去获取其他资源的时候就必须要释放所持有的资源.
系统所有的资源按类型进行线性排队,所有进程必须按照资源序列好递增的次序条件提出申请.
Available[ ]矩阵数组表示某类资源的可用量
Claim[ i ][ j ]表示进程Pi最大需要Rj类资源的数量
Allocation[ i ][ j ]表示Pi已占有的Rj类资源数量
Need[ i ][ j ]表示Pi尚需Rj类资源的数量
Need[ i ][ j ]=Claim[ i ][ j ]—Allocation[ i ][ j ]
Request[ i ]表示进程Pi进程的申请向量,如 Request[ i ][ j ]=m 表示Pi申请m个Rj类资源
对于当前进程Pi X
(1) 检查if( Request[ i ][ j ]<=Need[ i ][ j ] ) goto (2)
else error(“进程 i 对资源的申请量大于其说明的最大值 ”);
(2) 检查 if ( Request[ i ][ j ]<=Available[ j ] ) goto (3)
else wait() ; /注意是等待!即在对后续进程的需求资源判断中,若出现不符合的则安全检查结束,当前进程进入等待/
(3) 系统试探地把资源分给Pi 并修改各项属性值 (具体是否成立,则根据安全检查的结果)
Available[ j ] =Available[ j ] — Request[ i ][ j ]
Allocation[ i ][ j ]=Allocation[ i ][ j ] +Request[ i ][ j ]
Need[ i ][ j ]=Need[ i ][ j ]— Request[ i ][ j ]
(4) 安全检查,若检查结果为安全,则(3)中执行有效,否则分配作废,使该Pi进程进入等待
检查算法描述:
向量Free[ j ]表示系统可分配给各进程的Rj类资源数目,初始与当前Available等值
向量Finish[ i ]表示进程Pi在此次检查中是否被满足,初始均为false 当有足有资源可分配给进程时,
Finish[ i ]=true, Pi完成并释放资源(Free[ j ]+=Allocation[ i ][ j ])
1) 从进程队列中找一个能满足下述条件的进程Pi
①、Finish[ i ]==false,表示资源未分配给Pi进程
②、Need[ i ][ j ]