操作系统常见问题分析【问题1】在CPU按抢占式优先级调度的系统中,回答下列问题:问题1:没有运行进程是否一定没有就绪进程?当前正在运行的进程如果由于某种原因放弃CPU,系统就会产生新的调度,若此时就绪队列中没有进程可调度,CPU中也就无进程运行。
所以,没有运行进程就一定没有就绪进程。
问题2:没有运行进程是否说明系统中无任何进程?不一定。
在某一时间段内,可能系统的所有进程都暂时处于阻塞状态,在等待I/O处理,造成CPU中暂时无运行进程。
一旦等待事件出现后,进程由阻塞状态变为就绪状态时,系统就会调度就绪进程进入CPU运行。
问题3:运行进程是否一定是进程中优先级高的?在抢占式优先级调度的系统中,运行状态的进程一定比就绪状态队列中的其它进程的优先级高。
但阻塞队列中的进程优先级可能高于运行进程的优先级。
【问题2】分析wondows 2000系统中进程的挂起状态。
wondows 2000操作系统引入了虚拟存储管理技术后,其优先级调度的机制将一些优先级低的进程对换到外存的虚拟空间中,这些进程处于挂起状态。
将进程挂起的原因可能是,内存资源紧张、终端用户请求、父进程的请求、负荷调节的需要等等。
在系统中引入挂起模型带来的好处是:⏹挂起进程释放出的内存空间可用于提交新进程,提高了处理器的效率;⏹当内存资源紧张时,将一部分进程对换至外存,可为运行进程提供足够的内存;⏹有利于调试,一个调试中的进程被挂起后可以方便的对其地址空间进行读写。
在wondows 2000中,就绪状态的进程被挂起后进入就绪挂起状态。
阻塞队列的进程挂起后进入阻塞挂起状态。
挂起进程有这样一些性质:⏹被挂起的进程,无论是就绪挂起还是阻塞挂起,挂起状态进程都不可能被调度执行。
⏹进程可以自己挂起,也可以由用户和操作系统挂起,被挂起的进程通过“激活”操作从挂起状态中解脱出来,从外存转到内存。
⏹就绪挂起状态的进程只要重新调入内存就可以运行,阻塞挂起的进程在外存中等待某事件的出现,当等待的事件出现后,进程虽然不再被阻塞,但仍然不能运行,只有在进程转入了就绪状态后才能运行。
需要指出的是进程的睡眠和挂起是不相同的概念。
虽然两个操作都导致进程放弃CPU,但睡眠是进程的主动行为,只有在CPU上运行的的进程才能睡眠。
挂起在大多数情况下是系统的强制行为,不管进程处于何种状态,系统都可以挂起该进程。
【问题3】进程的剖析进程的概念在60年代初期提出,首先在MIT的Multics系统和IBM的TSS/360系统中引用。
进程是操作系统中最基本、最重要的一个概念,人们曾对进程下过多种定义:⏹进程是程序的一次执行;⏹进程是可以和别的计算并发执行的计算;⏹进程是程序在一个数据集合上运行的过程,是系统进行资源分配和调度的一个独立单位;⏹进程是一个具有一定功能的程序关于某个数据集合的一次运行活动。
虽然对进程定义的文字描述各有不同,但是在本质上强调了以下几点:⑴进程强调的是程序的一次“执行”过程,因此,“进程”是一个动态的概念,进程在执行过程中是动态变化的。
例如,进程的状态在进程执行过程中就不断发生变化。
“动态”包含的另一层意思是每个进程都有生命周期。
当系统要完成某项工作时,就“创建”一个进程,以便能去执行事先编写好的、完成该工作的程序。
程序执行完毕,完成了预定的任务后,系统就“撤消”这个进程,收回它占用的资源。
一个进程创建后,系统能感知它的存在;一个进程撤消后,系统无法再感知到它。
从创建到撤消,这个时间段就是一个进程的“生命期周期”。
⑵从进程的定义可知,进程由所执行的程序和数据集合构成。
即使多个进程执行同一个程序,只要它们运行在不同的数据集合上,它们就是不同的进程。
例如,一个编译程序同时被多个用户调用,各用户程序的源程序是编译程序的处理对象(即数据集合)。
于是系统中形成了一个个不同的进程,它们都运行编译程序,只是每个加工的对象不同。
因此,进程与程序之间不一定存在一一对应的关系。
⑶进程是资源分配的单位。
一个系统中同时存在多个进程,与它们对应的多个程序同时在系统中运行,轮流占用CPU和各种资源。
在对资源共享和竞争中,必然会相互制约,影响各自向前推进的速度。
系统中同时存在的多个进程分为两大类。
系统进程是执行操作系统核心代码的进程,起着资源管理和控制的作用。
用户进程是执行用户程序的进程。
系统进程与用户进程在系统中是有区别的:系统进程被分配一个初始的资源集合,这些资源可以被它独占,也能以最高优先权使用。
用户进程则需要通过请求系统服务的手段竞争使用系统资源;系统进程可以做显式的、直接的I/O操作,而用户进程不能直接做I/O操作;系统进程运行时CPU处于系统态(核态或管态)而用户进程运行时CPU处于用户态(目态)。
【问题4】若系统中仅有一类独占资源,进程一次只能申请一个资源。
系统中有多个进程竞争该类资源。
试判断下述那些情况会发生死锁,为什么?⑴资源数为4,进程数为3,每个进程最多需要2个资源⑵资源数为6,进程数为2,每个进程最多需要4个资源⑶资源数为8,进程数为3,每个进程最多需要3个资源⑷资源数为20,进程数为8,每个进程最多需要2个资源分析与解答:⑴不会发死锁。
因为系统中只有3个进程,每个进程最大资源需求量为2,且资源总数为4,无论资源怎样分配,总有一个进程能满足需求顺利运行完毕并将资源归还系统。
不会发生死锁的分配情况如表2-5。
表2-5 不会发生死锁的分配情况之一⑵分配不当时有可能发生死锁。
表2-6是不会发生死锁的一种分配情况,表2-7是可能会发生死锁的一种分配情况。
表2-6 不会发生死锁的分配情况之一表2-7 可能会发生死锁的分配情况之一⑶不会发生死锁。
由于系统中只有3个进程,每个进程最大资源需求量为3,且资源总数为8,无论资源怎样分配,总有一个进程能满足需求顺利运行完毕并将资源归还系统。
表2-8是其中一种不会发生死锁的分配情况。
表2-8 不会发生死锁的分配情况之一⑷不会发生死锁。
由于系统中有8个进程,每个进程最大资源需求量为2,8个进程需求的最大资源数为16,而系统资源总数为20,足以满足每个进程的最大需求,故不会产生死锁。
【问题5】从实现方式和资源利用率上分析比较解决死锁的几种方法。
解决死锁的方法主要有:死锁的预防、死锁的避免、死锁的检测和解除。
死锁的预防:主要是破坏产生死锁的必要条件。
该方法容易实现,但因为设置了种种限制,保守的算法使得操作系统的功能减弱,资源的利用率较低。
死锁的避免:常用的是银行家算法。
该算法要设置一些数据结构及进行必要的计算,来考查每个进程对各类资源的申请,是否会导致系统进入不安全状态。
死锁的避免必须知道各进程对资源的需求量,要花费较多的时间去预测死锁是否会发生。
因此,实现起来不太容易,但资源的利用率最高。
死锁的检测和解除:是基于死锁定理而设计的一种宽松的策略。
并不区严格地限制死锁的发生,通过定期或不定期对系统的状态进行检测,发现死锁便予以解除。
解除死锁通常是采取剥夺某些进程已占有的资源。
剥夺时需要比较一下各种死锁解除方案的代价,找到代价最小的方案。
在选择剥夺进程时应考虑:(1)优先级低的进程(2) 剩余时间长的进程(3) 解除死锁涉及的进程越少越好(4) 解除死锁所需要的资源类别和个数越少越好 该算法资源利用率较高,但最难实现。
因此。
在以上几种方法中,死锁的预防最易实现;死锁的避免资源利用率最高。
【问题6】 一个银行家算法的例子:银行家算法中所用的主要的数据结构如下:Available 可用(剩量)资源向量:记录系统中当前各类资源的可用数目。
Max 最大需求矩阵: 记录每个进程对各类资源的最大需求量。
Allocation 已分配矩阵:记录当前每个进程对各类资源的占有量。
Need 需求矩阵:记录每个进程对各类资源尚需要的数目。
Need=Max -AllocationWork 工作向量:表示系统可提供给进程继续运行所需要的各类资源的数目。
在进行安全检查开始时,Work=Available 。
Finish 完成向量:表示进行已获得足够的资源可执行完毕。
当有足够的资源分配给进程时,将Finish 的值由false 修改为true.Request 请求向量:记录某个进程当前对各类资源的申请量。
假设系统资源用Ri 表示,进程用Pj 表示。
假定系统中有5个进程P1、P2、P3、P4,P5,4种类型的资源R1、R2、R3、R4,资源的数量分别是6、3、4、2。
在T 0时刻,系统资源分配情况如表2-9所示。
表2-9 T 0时刻资源分配表分析与解答:⑴T 0时刻系统的安全性利用安全性算法对T 0时刻的资源分配情况进行分析,可得到T 0时刻的安全性分析,见表2-10。
从表中得知,T 0时刻存在着一个安全序列<P4、P1、P2、P3、P5>,因而系统是安全的。
表2-10 T时刻的安全性检查⑵P2请求资源P2发出请求向量Request 2 (0、0、1、0 ),系统按银行家算法进行检查: ①equest 2 (0、0、1、0 )≤Need 2(0、1、1、2、) ②equest 2 (0、0、1、0 )≤Available(1、0、2、0)③系统假定可以为P2分配资源,并修改Need 2 、Allocation 2 、Available 向量,由此形成的资源变化情况如表2-11所示。
④再利用安全性算法检查此时系统是否安全,可得表2-12所示的安全性分析。
表2-11 P2申请资源后的资源分配表表2-12 P2申请资源后的安全性检查由表2-12进行的安全性检查得知,可找到一个安全序列<P4、P1、P5、P2、P3>。
因此,系统是安全的。
⑶P5请求资源P5发出请求向量Request 5 (0、0、1、0 ),系统按银行家算法进行检查:①equest 5 (0、0、1、0 )≤Need 5(2、1、1、0、)②equest 5(0、0、1、0 )≤Available(1、0、1、0)③系统假定可以为P5分配资源,并修改Need5 、Allocation5、Available 向量,由此形成的资源变化情况如表2-13所示。
再用安全性算法检查时,从表2-13可以看出,系统剩余资源Available (1、0、0、0)已不能满足任何进程的需要,故系统进入不安全状态,此时系统不分配资源。
表2-13 P5申请资源后的资源分配表可见,按银行家算法分配资源不会产生死锁。
因为该算法分配资源时,每次分配后总存在着一个进程,如果让其单独进行下去,必然可以获得所需的全部资源。
该进程结束后归还资源,以满足其它申请者的需要。
因此,银行家算法可以避免死锁。
【问题7】某个单CPU系统有一批处于就绪状态的进程(见表2-14),计算出在FCFS、RR (时间片=1)、SPN、Priority(非抢占式优先)四种情况下的平均周转时间表2-14 某系统的进程分析与解答:各进程在不同算法下的周转时间及平均周转时间见表2-15。