1、习 题6、试从动态性、并发性和独立性上比较进程和程序。答:(1)从动态性角度:进程的实质是进程实体的一次执行过程,因此,动态性是进程的最基本的特征。动态性还表现在:“它由创建而产生,由调度而执行,由撤消而消亡”。可见,进程实体有一定的生命期,而程序则只是一组有序指令的集合,并存放于某种介质上,其本身并不具有运动的含义,因而是静态的。 (2)从并发性角度:这是指多个进程实体同存于内存中,且能在一段时间内同时运行。并发性是进程的重要特征,同时也成为OS的重要特征。引入进程的目的也正是为了使其进程实体能和其它进程实体并发执行;而程序(没有建立PCB)是不能并发执行的。(3)从独立性角度:在传统的OS
2、中,独立性是指进程实体是一个能独立运行、独立分配资源和独立接受调度的基本单位。凡未建立PCB的程序都不能作为一个独立的单位参与运行。7、试说明PCB的作用,为什么说PCB是进程存在的惟一标志?答:(1)进程控制块PCB的作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能与其它进程并发执行的进程。(2)在进程的整个生命期中,系统总是通过PCB对进程进行控制的,亦即,系统是根据进程的PCB而不是任何别的什么而感知到该进程的存在的。所以说,PCB是进程存在的惟一标志。9、为什么要引入挂起状态?该状态有哪些性质?答:引入挂起状态的原因:(1)终端用户的请求。
3、(2)父进程请求。(3)负荷调节的需要。(4)操作系统的需要。处于挂起状态的进程最大的特点是主动放弃CPU调度。引入挂起状态后,进程状态转换图中增加了活动阻塞、静止阻塞、活动就绪、静止就绪四个状态,并增加了活动就绪与静止就绪之间的相互转换,活动阻塞与静止阻塞之间的相互转换。16、进程在运行时存在哪两种形式的制约?并举例说明之。答:(1)间接相互制约关系。同处于一个系统中的进程,通常都共享着某种系统资源,如共享CPU、共享I/O设备等。所谓间接相互制约即源于这种资源共享,例如,有两个进程A和B,如果在A进程提出打印请求时,系统已将惟一的一台打印机分配给了进程B,则此时进程A只能阻塞;一旦进程B将
4、打印机释放,则A进程才能由阻塞改为就绪状态。(2) 直接相互制约关系。这种制约主要源于进程间的合作。例如,有一输入进程A通过单缓冲向进程B提供数据。当该缓冲空时,计算进程B因不能获得所需数据而阻塞,而当进程A把数据输入缓冲区后,便将进程B唤醒;反之,当缓冲区已满时,进程A因不能再向缓冲区投放数据而阻塞,当进程B将缓冲区数据取走后便可唤醒A。18、同步机构应遵循哪些基本准则?为什么?答:(1) 空闲让进。当无进程处于临界区时,表明临界资源处于空闲状态,应允许一个请求进入临界区的进程立即进入自己的临界区,以有效地利用临界资源。(2) 忙则等待。当已有进程进入临界区时,表明临界资源正在被访问,因而其
5、它试图进入临界区的进程必须等待,以保证对临界资源的互斥访问。 (3) 有限等待。对要求访问临界资源的进程,应保证在有限时间内能进入自己的临界区,以免陷入“死等”状态。(4) 让权等待。当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入“忙等”状态。 24、在生产者-消费者的问题中,如果将两个wait操作即wait(full)和wait(mutex)互换位置,或者将signal(mutex)与signal(full)互换位置,结果会如何?答:在生产者-消费者的问题中,如果将两个wait操作即wait(full)和wait(mutex)互换位置就违反了必须先执行对资源信号量的wait操作
6、,然后再执行对互斥量的wait操作。有可能出现这样的结果:消费者通过wait(mutex)进入了仓库,而仓库里面没有产品,因而消费者将被卡在wait(full)操作上,而生产者因为仓库里有人而无法进仓库放产品,也就是生产者卡在了wait(mutex)操作上,其结果为死锁。如果signal(mutex)与signal(full)互换位置,不会有任何影响。29、画图说明管程由哪几部分组成,为什么要引入条件变量?答:管程由四部分组成: 管程的名称; 局部于管程内部的共享数据结构说明; 对该数据结构进行操作的一组过程; 对局部于管程内部的共享数据设置初始值的语句。 当一个进程调用了管程,在管程中时被阻
7、塞或挂起,直到阻塞或挂起的原因解除,而在此期间,如果该进程不释放管程,则其它进程无法进入管程,被迫长时间地等待。为了解决这个问题,引入了条件变量condition。41、何谓用户级线程和内核支持线程?答:用户级线程:用户级线程ULT(User Level Threads)仅存在于用户空间中。对于这种线程的创建、撤消、线程之间的同步与通信等功能,都无须利用系统调用来实现。对于用户级线程的切换,通常发生在一个应用进程的诸多线程之间,这时,也同样无须内核的支持。 内核支持线程:内核支持线程KST(Kernel Supported Threads),也都同样是在内核的支持下运行的,即无论是用户进程中的线程,还是系统进程中的线程,他们的创建、撤消和切换等也是依靠内核,在内核空间实现的。此外,在内核空间还为每一个内核支持线程设置了一个线程控制块,内核是根据该控制块而感知某线程的存在,并对其加以控制。4