第4-6章习题详解
1.
A:进程的运行全过程不可重现,正确,进程在运行过程中由于可能需要与其他进程之间进行互动产生影响,无法准确模拟出该进程在执行过程中不断变化的计算机环境。
B:一个程序只能生成一个进程,错误,一个程序可以生成多个进程,且这些进程可能可以同时运行。
C:进程具有异步性,正确。进程的四大特征分别是动态性、并发性、异步性、独立性。
D:多个并发进程共享CPU,正确。一台计算机一个时刻可能会有很多进程同时进行,进程之间需要共享CPU以保证运行。
2.
A:单CPU的系统处于运行态的进程可能有多个,错误,单CPU系统中任何一个时刻只能有一个进程获得CPU资源,因此处于运行态的进程在一个时刻只能有1个,但操作系统可以通过CPU分时让用户误以为有多个进程在同时运行。
B:进程在整个生存期间会根据不同条件转换状态,正确,当进程继续执行需要的条件不满足时,会从运行状态转向阻塞状态,当条件满足时又会转到就绪状态,就绪状态的进程通过获取CPU资源成为运行状态。
C:阻塞态的进程即使给它CPU也无法运行,正确,进程处于阻塞态说明该进程的运行条件不满足,即使有CPU资源也无法运行。
D:处于就绪态的进程都在等待CPU,正确,处于就绪态的进程只需要CPU资源即可运行。
3.
A:PCB是进程存在的标志,正确,一个PCB标识一个进程,不可能存在没有PCB的进程。
B:Linux定义PCB的结构是task_struct,正确,task_struct是Linux系统的进程控制块。
C:进程生存期间PCB中变量的值一直不变,错误,PCB中可能发生改变的变量有且不仅限于:nice值、运行状态、counter值等。
D:创建进程的时候创建PCB数据结构,正确。
4.
A:进程生存期间都受操作系统控制,正确。进程的整个生存过程中所有状态改变等都受到操作系统的调度。
B:进程控制采用原语实现,正确。进程控制是一个不可中断的操作,无论是上锁加信号量还是状态转换都应该使用原语实现。
C:进程被唤醒的条件与进程被阻塞的条件一致,正确。进程因为什么条件不满足被阻塞,就会因为这个条件被满足而被唤醒。
D:进程被撤销时操作系统收回其占用资源,但不释放相应的PCB。错误,进程被撤销时即刻释放PCB,注意Linux中的exit函数并没有立即撤销该进程,而是让该进程变为僵尸状态,等待父进程的wait函数收集信息,因此exit函数执行后wait函数能够获得已经结束进程的退出码与该选项陈述并不冲突。
5.
D:应用程序的初始化,错误,应用程序的初始化过程中应该只有一个线程在工作,不需要多线程。需要多线程的场景有:需要多个功能并发的地方、需要改善窗口交互性的地方、需要改善程序结构的地方、涉及多核CPU应用的地方。
6.
A:临界资源是一个共享变量,正确,临界资源指的是多个进程共享使用的资源,这里的资源对于一个进程而言只能够使用变量进行访问。无论这个变量本身是共享的,还是这个变量对应的资源是共享的,这里统一理解为共享变量。
B:临界区是程序中的某个片段,正确,程序在临界区访问临界资源。
C:临界区中含有对临界资源的存取操作,正确。
D:线程内定义的变量可以是临界资源,错误,临界资源指的是被多个进程竞争访问的具有逻辑排他性的资源,在线程中定义的变量只对本进程可见,而其他进程不可见。
7.
A:临界区不允许两个或多个进程同时进入。正确,注意临界区是用来访问临界资源的,而临界资源是互斥的,因此临界区不能有多个进程同时进入是没有问题的。因此使用信号量控制的代码段严格意义上说不能算是临界区。
B:有限等待原则要求程序员将临界区设置的大一些,错误,应该是小一些,临界区小一些可以让进程处于临界区的时间减少,有利于进程运行。
C:让权等待可以让系统工作效率更高。正确,让权等待实际上是进程主动放弃CPU资源,这样可以让其他进程使用一段时间的CPU资源,实现虚假的多进程同时运行。
D:同一个线程可以设置不同的临界区。正确,同一个线程内设置不同的临界区可以用于处理不同的资源问题。
8.
A:锁机制设置一个标志表示临界区是否可用。正确,通过设置一个布尔类型的标志可以实现一个简易的锁。
B:锁机制只能解决进程互斥的问题。正确,锁机制只能与临界区搭配使用,解决资源互斥的问题。
C:锁机制满足忙则等待和空闲让进的原则。正确,当锁被激活时,满足忙则等待原则,锁空闲时满足空闲让进的原则。
D:锁机制满足有限等待和让权等待的原则。错误,锁机制不满足让权等待的原则,即进程不会主动让操作系统回收它使用资源的权利,只有进程自己解锁退出临界区才能让其他进程进入临界区。
9.
A:P-V操作是比锁机制更灵活的同步机制。正确,P-V操作不仅可以实现锁的功能(初始化时将信号量的值设置为1即可实现锁的功能),还能实现锁不能实现的功能,即控制最多有几个进程访问某个资源。
B:P-V操作可以用于控制进程之间的同步和互斥。正确。
C:P-V操作用来对信号灯和进程进行控制。正确,P-V可以用于控制信号灯,其作用类似于信号灯,如服务区场景,当服务区前面等待的车辆数量大于某个阈值时将信号灯设置为红灯,让车辆进入其他服务区,等待车辆数量较少时设置为绿灯。
D:P操作和V操作都可以使信号量加1。错误,P操作会使信号量-1,而V操作会使信号量+1。
10.
A:P操作可能会阻塞调用进程。正确,P操作的步骤是:信号量-1,如果信号量值小于0则将自身进程加入到信号量进程等待队列,如果大于等于0则继续执行。
B:V操作会把信号量+1。正确,V操作的步骤是:信号量+1,如果信号量值小于等于0则从队列中激活一个进程的运行,如果大于0则继续执行。
C:P操作可以唤醒一个进程。错误,P操作只能阻塞当前进程。
D:P操作和V操作在所有并发进程中成对出现。正确,对于一个信号量,在不同进程的代码中不可能只有P操作或只有V操作。
11.
A:一般在关键操作之前执行V操作。错误,一般在关键操作之后执行V操作释放资源。
B:一般在关键操作之后执行P操作。错误,一般在关键操作之前执行P操作锁定资源。
C:信号量S的定义可以随意定义。错误,信号量S在初始定义时不能定义为一个非正值,且具体值由资源本身决定。
D:信号量S的初值设置不正确可能导致进程并发过程出错。正确,如果将信号量设置为负数,则所有有关进程可能都将阻塞。
12.
A:fork函数具有两个返回值。正确,fork函数在父进程和子进程中具有不同的返回值。
B:wait函数会阻塞进程直到其一个子进程结束未知。正确,wait函数只有在一个子进程结束时才会返回。
C:exit函数可以在进程结束的时候传递参数给父进程。正确,exit函数在进程结束前的一瞬间将参数传递给父进程。
D:sleep函数会唤醒一个进程。错误,sleep函数用于将一个进程阻塞固定时间。
13.
A:资源数量不够不一定产生死锁。正确,死锁发生需要4个条件:互斥条件、不剥夺条件、部分分配条件、环路条件。
B:每个死锁的进程一定在等待某个资源。正确,死锁的进程处于阻塞状态,阻塞状态就是在等待某个资源而阻塞。
C:每个死锁的进程一定持有某个资源。正确,死锁的进程一定持有资源,而参与死锁的进程中至少有两个进程持有资源。注意以下场景:进程1需要资源A,占用资源B,进程2需要资源B,占用资源A,二者死锁,此时进程3需要资源A,也会被阻塞,此时进程3不占有任何资源,但认为其并未参与死锁,可以说进程3因为死锁而被阻塞,但不能说它参与了死锁,因为死锁不是因为进程3引起的。
D:五个哲学家并发就餐的场景一定会发生死锁。错误,只要五个哲学家都不是只拿一根筷子就不会发生死锁。