教材为西安电子科技大学 汤小丹老师 第四版
程序并发执行时的特征
进程的定义
传统OS中的进程定义为:“进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位”。
进程控制块(Process Control Block,PCB) 操作系统用于管理进程的专门的数据结构。
进程实体(进程映像)就是由代码、数据、进程控制块PCB这三部分构成。
进程的特征:
三种基本状态的转换
(图图图图)
创建状和终止状态
进程的五种基本状态及其转换
(图图图图)
挂起操作的引入
引入挂起原语操作后,基本进程状态的改变:
操作系统中用于管理控制的数据结构
进程控制块PCB的作用:
进程控制块的作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能与其它进程并发执行的进程。或者说,OS是根据PCB来对并发执行的进程进行控制和管理的。
进程标识符:进程标识符用于唯一地标识一个进程。一个进程通常有两种标识符
内部标识符。在所有的操作系统中,都为每一个进程赋予一个唯一的数字标识符,它通常是一个进程的序号。 设置内部标识符主要是为了方便系统使用。
外部标识符。它由创建者提供,通常是由字母、数字组成,往往是由用户(进程)在访问该进程时使用。为了描述进程的家族关系。还应设置父进程标识及子进程标识。此外,还可设置用户标识,以指示拥有该进程的用户。
处理机状态:处理机状态信息主要是由处理机的各种寄存器中的内容组成的
进程调度信息:在PCB中还存放一些与进程调度和进程对换有关的信息,包括:
进程控制信息,包括:
进程控制是用来管理从进程诞生、运行、到结束过程中的一切事情,故而要由操作系统内核中的原语来实现。
原语是由若干条指令组成的,用于完成一定功能的一个过程。它与一般过程的区别在于:它们是“原子操作”。所谓原子操作,是指一个操作中的所有动作要么全做,要么全不做。换言之, 它是一个不可分割的基本单位,因此,在执行过程中不允许被中断。原子操作在管态(核态,相对用户态)下执行,常驻内存。
内核的实现是通过原语实现的,而原语又是由原子操作构成的。
操作系统内核:操作系统中与硬件紧密相关的模块(如中断处理程序、设备驱动程序等)以及运行频率较高(如时钟管理、进程调度等)的模块,它们常驻内存。
设置操作系统内核的作用:
处理机执行状态:
操作系统内核两大功能:
支撑功能
资源管理功能
进程的层次结构体现为进程创建过程中生成的进程家族树,如unix下的进程树。
windows中不存在进程层次结构的概念,进程之间(通过句柄)只有控制与被控制的关系。
引起创建进程的事件
进程的创建(Creation of Progress)
OS 调用进程创建原语 Creat
引起进程终止的事件:
正常结束
异常结束:在进程运行期间,由于出现某些错误和故障而迫使进程终止。
外界干预:外界干预并非指在本进程运行中出现了异常事件,而是指进程应外界的请求而终止运行。这些干预有:
进程的终止过程
引起进程阻塞和唤醒的事件
进程阻塞过程:
正在执行的进程,当发现阻塞事件时,由于无法继续执行,于是进程便通过调用阻塞原语block把自己阻塞。可见,进程的阻塞是进程自身的一种主动行为。
进入block过程后,由于此时该进程还处于执行状态,所以应先立即停止执行,把进程控制块中的现行状态由“执行”改为阻塞,并将PCB插入阻塞队列。 最后,转调度程序进行重新调度,将处理机分配给另一就绪进程,并进行切换。
进程唤醒过程:
当被阻塞进程所期待的事件出现时,如I/O完成或其所期待的数据已经到达,则由有关进程(比如,用完并释放了该I/O设备的进程)调用唤醒原语wakeup(),将等待该事件的进程唤醒。
唤醒原语执行的过程是:首先把被阻塞的进程从等待该事件的阻塞队列中移出,将其PCB中的现行状态由阻塞改为就绪,然后再将该PCB插入到就绪队列中。
进程的挂起:
当出现了引起进程挂起的事件时,系统将利用挂起原语suspend()将指定进程或处于阻塞状态的进程挂起。
进程的激活:当发生激活进程的事件时,系统将利用激活原语active()将指定进程激活。
两种形式的制约关系:
(1) 间接相互制约关系。 —- 进程共享某种系统资源
(2) 直接相互制约关系。 —- 进程合作加工资源
临界资源 — 采取互斥方式实现共享
临界区:每个进程中访问临界资源的那段代码
同步机制应遵循的规则:
为防止多个进程同时测试到锁为打开的状态,测试与关锁操作必须是连续的,不允许分开进行。
关中断的缺点:
利用test-and-set指令实现互斥(测试并建立)
利用swap指令实现互斥
整型信号量
把整型信号量定义为一个整型量,除初始化外,仅能通过两个标准的原子操作 wait(S) 和 signal(S) 来访问。这两个操作一直被分别称为P、V操作。
wait(S)和signal(S)是两个原子操作,因此,它们在执行时是不可中断的。
记录型信号量
信号量只能通过初始化和两个标准的原语来访问——作为 OS 核心代码执行,不受进程调度的打断。
信号量在始化时被指定一个非负整数值,表示空闲资源总数(又称为“资源信号量”),在进程执行过程中, 信号量的值(即其计数值)可能发生变化:
AND型信号量
AND同步机制的基本思想是:
信号量集
基于上述两点,可以对AND信号量机制加以扩充,形成一般化的“信号量集”机制。
利用信号量实现进程互斥
利用信号量实现前趋关系
(2.5重新开一个新的章节进行记录)
信号量通信不够理想:
进程间传送大量数据,就要用到高级通信工具,其特点:
为了协调双方的通信,管道机制必须提供以下三方面的协调能力:
程序员直接利用系统提供的一组通信命令(原语)进行通信。操作系统隐藏了通信的实现细节,大大减化了通信程序编制的复杂性,而获得广泛的应用。
因其实现方式的不同而进一步分成直接通信方式和间接通信方式两种:
(1)套接字
套接字就是一个通信标识类型的数据结构,包含了通信目的的地址、通信使用的端口号、通信网络的传输协议、进程所在的网络地址,以及针对客户或服务器程序提供的不同系统调用(或API函数等),是进程通信和网络通信的基本构件。
套接字是为客户/服务器模型而设计的,通常套接字包括两类:
套接字的优势: 本地及网络均可; 套接字号具有唯一性,易于区分; 隐藏了通信设施及实现细节。
(2)远程过程调用和远程方法调用
远程过程(函数)调用RPC,是一个通信协议,用于通过网络连接的系统。
负责处理远程过程调用的进程有两个:本地客户进程以及远程服务器进程。也被称为网络守护进程,通常二者处于阻塞状态、等待消息。
RPC通过引入存根而实现透明性,即在本地客户端每个能够独立运行的远程过程都拥有一个客户存根,本地进程调用远程过程实际是调用该过程关联的存根;同样,即在服务器端每个能够独立运行的远程过程都拥有一个服务器存根,远程过程主要 步骤参见P76。
直接消息传递系统
(1) 直接通信原语
①对称寻址方式 —— 一对一
要求发送进程和接收进程都以显示方式提供对方的标识符, 系统提供下述两条通信命令(原语) :
send(receiver, message) 发送一个消息给接收进程;
receive(sender, message); 接收Sender发来的消息;
例如,原语Send(P2, m1)表示将消息m1发送给接收进程P2; 而原语Receive(P1,m1)则表示接收由P1发来的消息m1。
该方法的不足:一旦进程更名,通信调用都要更改。
②非对称寻址方式 ——多对一
接收进程可能需要与多个发送进程通信,不需要命名发送进程;
例如,用于提供打印服务的进程,它可以接收来自任何一个进程的“打印请求”消息。
发送原语:send(P, message); //发送需要命名接收进程P
接收原语:receive (id, message); //可以接收来自任何进程的消息,id变量为发送方进程的 id 或名字。
(2) 消息的格式
定长消息格式,可以减少对消息的处理和存储开销。这种方式可用于办公自动化系统中,为用户提供快速的便笺式通信;
变长的消息格式,系统在处理和存储时,须付出更多的开销,但方便了用户
这两种消息格式各有其优缺点,故在很多系统(包括计算机 网络)中,是同时都用的。
(3) 进程的同步方式
进程之间通信,同样需要有进程同步机制,有3种方式:
• 阻塞发送、阻塞接收。用于进程间双向通信,发送进程和接收进程之间无缓冲。即通信双方联系非常紧密,得到对方的应答才能推进。
• 不阻塞发送、阻塞接收。普遍,适合于那些不等待消息的到来就无法继续工作的进程。如服务器上的服务进程,平时总是处于阻塞状态,只有在请求服务的消息到达时,它们才会被唤醒以便提供服务。
• 既不阻塞发送也不阻塞接收。常用于分布式系统中,因为采用阻塞方式进行通信时,一旦传递的数据丢失,将会使阻塞进程无限期地等待下去。而采用非阻塞、接收的方式就可以避免这种情况。接收进程有消息时就处理消息,无消息时继续执行。
(4) 通信链路
为使在发送进程和接收进程之间能进行通信,必须在两者之间建立一条通信链路。 有两种方式建立通信链路:
第一种方式是:由发送进程在通信之前,用显式的“建立连接”命令(原语)请求系统为之建立一条通信链路;在链路使用完后,也用显式方式拆除链路。这种方式主要用于计算机网络中。
第二种方式是:发送进程无须明确提出建立链路的请求,只须利用系统提供的发送命令(原语),系统会自动地为之建立一条链路。这种方式主要用于单机系统中。
根据通信链路的连接方法,又可把通信链路分为两类:
① 点—点连接通信链路,这时的一条链路只连接两个结点(进程);
② 多点连接链路,指用一条链路连接多个( n >2)结点(进程)。
而根据通信方式的不同,则又可把链路分成两种:
① 单向通信链路,只允许发送进程向接收进程发送消息;
② 双向链路,既允许由进程A向进程B发送消息,也允许进程B同时向进程A发送消息。
信箱通信----间接通信方式
(1) 信箱的结构信箱定义为一种数据结构,在逻辑上,可将其分为2个部分:
①信箱头:信箱的描述信息;
②信箱体:由存放消息的消息格组成。
双向信箱示意图
(2) 信箱通信原语
系统为信箱通信提供了若干条原语, 有:
①信箱的创建和撤消。进程可利用信箱创建原语来建立一个新信箱。创建者进程应给出信箱名字、信箱属性(公用、私用或共享);对于共享信箱, 还应给出共享者的名字。当进程不再需要该信箱时,可用信箱撤消原语将之撤消。
②消息的发送和接收。当进程之间要利用信箱进行通信时,必须使用共享信箱,并利用系统提供的下述通信原语进行通信。
Send(mailbox, message); 将一个消息发送到指定信箱;
Receive(mailbox, message); 从指定信箱中接收一个消息;
(3) 信箱的类型
信箱可由操作系统创建,也可由用户进程创建,创建者是信箱的拥有者。 据此,可把信箱分为以下三类:
① 私用信箱
用户进程可为自己建立一个新信箱,并作为该进程的一部分。信箱的拥有者有权从信箱中读取消息,其他用户则只能将自己构成的消息发送到该信箱中。这种私用信箱可采用单向通信链路的信箱来实现。 当拥有该信箱的进程结束时,信箱也随之消失。
②公用信箱
它由操作系统创建,并提供给系统中的所有核准进程使用。核准进程既可把消息发送到该信箱中,也可从信箱中读取发送给自己的消息。
显然,公用信箱应采用双向通信链路的信箱来实现。通常,公用信箱在系统运行期间始终存在。
③共享信箱
它由某进程创建,在创建时或创建后,指明它是可共享的,同时须指出共享进程(用户)的名字。信箱的拥有者和共享者,都有权从信箱中取走发送给自己的消息。
在利用信箱通信时,在发送进程和接收进程之间,存在以下四种关系:
①一对一关系。这时可为发送进程和接收进程建立一条两者专用的通信链路, 使两者之间的交互不受其他进程的干扰。
②多对一关系。允许提供服务的进程与多个用户进程之间进行交互,也称为客 户/服务器交互。
③一对多关系。允许一个发送进程与多个接收进程进行交互, 使发送进程可用广播方式,向接收者(多个)发送消息。
④多对多关系。允许建立一个公用信箱,让多个进程都能向信箱中投递消息;也可从信箱中取走属于自己的消息。
(2) PCB中有关通信的数据项
在利用消息缓冲队列通信机制时,还应增加用于对消息队列进行操作和实现同步的信号量,并将它们置入进程的PCB中。 在PCB中应增加的数据项可描述如下:
进程的2个基本属性
程序并发执行所需付出的时空开销
1)创建进程
2)撤消进程
3)进程切换
传统的进程“太重”,在多处理机环境(如对称多处理机SMP)下进程调度、分派和切换时都需花费较大的时间和空间开销。
线程作为调度和分派的基本单位
线程设计的指导思想:
若进程的两个属性分开,即对于作为调度和分派的基本单位,不同时作为拥有资源的单位,以做到“轻装上阵”;而对于拥有资源的基本单位,又不对之进行频繁的切换。
(1)轻型实体。
(2)可并发执行。
(3)共享进程资源。
适宜多处理机系统
线程运行的三个状态
如同传统的进程一样,在各线程之间也存在着共享资源和相互合作的制约关系,致使线程在运行时也具有间断性。 相应地,线程在运行时,也具有下述三种基本状态:
① 执行状态,表示线程正获得处理机而运行;
② 就绪状态, 指线程已具备了各种执行条件,一旦获得CPU便可执行的状态;
③ 阻塞状态,指线程在执行中因某事件而受阻,处于暂停执行时的状态。
线程控制块TCB
在OS中的每一个线程都可以利用线程标识符和一组状态参数进行描述,即线程控制块。通常有这样几项:
多线程OS中的进程属性
在多线程OS中,进程是作为拥有系统资源的基本单位,通常的进程都包含多个线程并为它们提供资源,但此时的进程就不再作为一个执行的实体。 多线程OS中的进程有以下属性:
(1) 作为系统资源分配的单位。
(2) 可包括多个线程。
(3) 进程已不是一个可执行的实体。
多线程进程模块
内核支持线程:这里所谓的内核支持线程,即无论是用户进程中的线程,还是系统进程中的线程,他们的创建、撤消和切换等,也是依靠内核实现的。此外,在内核空间还为每一个内核支持线程设置了一个线程控制块,内核是根据该控制块而感知某线程的存在的,并对其加以控制。
内核支持线程的优缺点
(1)多处理器系统中,同一进程中的线程可以并行;
(2)内核知道进程中的线程运行情况;
(3)线程切换开销小;
(4)内核本身也可以采用多线程技术,以提高系统的执行速度和效率。
用户级线程
用户级线程是与内核无关。用户级线程仅存在于用户空间中。对于这种线程的创建、撤消、线程之间的同步与通信等功能,都无须利用系统调用来实现。对于用户级线程的切换,通常是发生在一个应用进程的诸多线程之间,无须内核的支持。 由于切换的规则远比进程调度和切换的规则简单,因而使线程的切换速度特别快。
系统仍然是以进程为单位进行调度的。容易发生线程当前状态与实际状态不相吻合的情况。如某线程运行过程中请求I/O,于是系统将该线程所在的进程置入阻塞状态。同一进程下的线程即使具备运行条件,也不会被调度;而当前线程理应是阻塞状态,但实际上仍是运行状态,因为系统不对线程进行操作。再比如系统采用时间片轮转法,A、B两个进程轮流执行,但是A进程只有两个线程,而B进程则有20个线程,显然这种调度对B进程而言就是不公平的。若想以线程为单位进行调度,系统就应该识别线程,这就得采用内核支持级线程。
用户级线程的优缺点
组合方式:将用户级线程和内核支持级线程进行组合。 组合方式中,内核支持内核支持级线程的建立、调度和管理, 同时也允许用户应用程序建立、调度和管理用户级线程。
用户级线程与内核控制线程的连接(3种连接模型)
1)一对一模型 为每一个用户线程都设置一个内核控制线程与之连接。
优势:开销小,效率高
劣势:一个线程阻塞,整个进程阻塞;映射到一个内核的多线程不能使用多处理机
2)多对一模型 将多个用户线程映射到一个内核控制线程。
优势:更好的并发性,一个线程阻塞,允许调度另一个线程执行;
劣势:开销大;整个系统线程数有限;
3)多对多模型 将多个用户线程映射到多个内核控制线程。
结合上述两种方式的优势
多线程模型
内核支持线程的实现
系统在创建一个新进程时,便为它分配一个任务数据区PTDA(Per Task Data Area),其中包括若干个线程控制块TCB空间。
内核支持线程的创建、撤销、调度与切换,与进程管理相类似。
任务数据区空间
用户级线程的实现 (两种方式实现)
1)运行时系统(Runtime System)
所谓“运行时系统”,实质上是用于管理和控制线程的函数(过程)的集合, 其中包括用于创建和撤消线程的函数、 线程同步和通信的函数以及实现线程调 度的函数等。正因为有这些函数,才能使用户级线程与内核无关。运行时系统中的所有函数都驻留在用户空间,并作为用户级线程与内核之间的接口。
线程是通过运行时系统来请求系统的资源的。
2)内核控制线程
这种线程又称为轻型进程LWP(Light Weight Process)。 每一个进程都可拥有多个LWP,同用户级线程一样,每个LWP都有自己的数据结构(如TCB),其中包括线程标识符、优先级、状态,另外还有栈和局部存储区等。它们也可 以共享进程所拥有的资源。LWP可通过系统调用来获得内核提供的服务,这样,当一个用户级线程运行时,只要 将它连接到一个LWP上,此时它便具有了内核支持线程的所有属性。
用户级线程共享LWP,把LWP做成线程池
利用轻型进程作为中间系统
线程的创建
在多线程OS环境下,应用程序在启动时,通常仅有一个线程在执行,该线程被人们称为“初始化线程”。它可根据 需要再去创建若干个线程。在创建新线程时,需要利用一个线程创建函数(或系统调用),并提供相应的参数,如指向线程主程序的入口指针、堆栈的大小,以及用于调度的优先级等。在线程创建函数执行完后,将返回一个线程标识符供以后使用。
线程的终止
终止线程的方式有两种:一种是在线程完成了自己的工作后自愿退出;另一种是线程在运行中出现错误或由于某种原因而被其它线程强行终止。
练习题目:
1进程管理中,当(D),进程从阻塞态变成就绪态。
2一个进程是( C )。
3进程的组成是( D )。
4操作系统是通过( C )对进程进行管理。
5在单处理器系统中,如果同时存在10个进程,则处于就绪队列中的进程最多有( C )个。
6进程创建原语的任务是( B ) 。
7进程处于( C )时, 它是处于非阻塞状态。
8进程与程序的根本区别是( B )。
A、是不是占有处理器
B、静态和动态的区别
C、是不是具有就绪、运行和等待三种状态
D、是不是被调入到内存
答案解析:进程是一个程序在某个数据集合上的执行,操作系统引入进程的概念是为了从变化的角度动态地分析和研究程序的执行。
9进程创建后的状态是( A )。
10当一个进程处于( B )状态时, 称为就绪状态。
11PCB是进程存在的唯一标志,下列( D )不属于PCB。
12进程操作的原语有( ABCD )
13进程被挂起的原因,可能是( ABD )。
14父进程可以撤销子进程。答案:√
15用于科学计算的进程一般都是偏CPU的进程。答案:√
16一个进程由程序代码、数据集和进程控制块TCB组成。这三部分内容构成了进程的映像。答案:×
17子进程继承父进程的资源;父、子进程相互独立,各自独立占有资源、各自独立参与处理机调度。答案:×
18进程由进程控制块和数据集以及对该数据集进行操作的程序组成,进程上下文是进程执行活动全过程的静态描述。答案:×
19一个阻塞进程被唤醒意味着该进程重新占有了CPU。我的答案:×
20一个正在占用CPU的进程不能被挂起。答案:×
21在操作系统中,要对并发进程进行同步的原因是( D )。
22当信号量用于进程同步时,它的初值为( )。
23进程间的同步与互斥,分别表示出各个并发进程之间的( B )关系。
24关于进程状态说法错误的是( )。
25如果一个进程在互斥信号量MUTEX上执行V操作后,能够唤醒另外一个因为等待这个资源而进入阻塞状态的进程,那么,执行V操作之前,信号量的值为( B )。
26若信号量S的初值为2,当前值为-1,则表示等待的进程个数是( B )。
27进程P1对信号量S执wait(S)操作,则信号量S的值应( A )。
28设与装资源关联的信号量(K)初值为3,当前值为1。若M表示该资源的可用个数,N表示等待该资源的进程数,则M、N分别是( B )。
29系统某资源总量为3,相应的信号量S的当前值为-2,则当前可用资源的数量和等待进程的数量分别为( A )
30当一进程因在记录型信号量S上执行signal(S)操作而导致唤醒另一进程前,S的值等于0。答案:×
31利用P-V机制控制并发过程时,如果信号量S小于0,其绝对值表示相应阻塞队列中进程的个数。答案:√
1( C )是操作系统必须提供的功能。
答案解析:中断是操作系统必须提供的功能,因为计算机的各种错误都需要中断处理,核心态与用户态切换也需要中断处理
2一个进程映像是( C )。
答案解析:进程映像是PCB、程序段和数据的组合,其中PCB是进程存在的唯一标志。
3操作系统是根据 ( B )来对并发执行的进程进行控制和管理的。
答案解析:在进程的整个生命周期中,系统总是通过其PCB对进程进行控制的。亦即,系统是根据进程的PCB而不是任何别的来感知到进程存在的,PCB 是进程存在的唯一标志。 同时PCB常驻内存。A和D选项的内容都包含在进程PCB中。
4在单处理器系统中,如果同时存在10个进程,则处于就绪队列中的进程最多有( C )个。
答案解析:不可能出现这样一种情况, 单处理器系统10个进程都处于就绪状态,但是9个处于就绪状态,一个正在运行是可能存在的。 也要想到,可能10个进程都处于阻塞状态。
5一个进程的基本状态可以从其他两种基本状态转变过去,这个基本的状态一定是( C )。
答案解析:只有就绪状态可以既由运行状态转变过去也能由阻塞状态转变过去。时间片到运行状态变为就绪状态,当所需要资源到达进程由阻塞状态转变为就绪状态。
6通常用户进程被建立后( B )。
答案解析:进程有它的生命周期,不会一直存在于系统中,也不一定需要用户显式地撤销。进程在时间片结束时只是就绪,而不是撤销。阻塞和唤醒是进程生存期的中间状态。进程可在完成时撤销,或者内存错误等引起撤销。
7支持多道程序设计的操作系统在运行过程中,不断地选择新进程运行来实现CPU的共享,但其中( D )不是引起操作系统选择新进程的直接原因。
答案解析:这道题实际上问的是,哪种情况不是进程从运行态转换成其他状态的。
8PCB是进程存在的唯一标志,下列( D )不属于PCB.
答案解析:进程实体主要是代码、数据和PCB。因此,对于PCB内所含有的数据结构内容需要了解清楚,主要有四大类:进程标志信息、进程控制信息、进程资源信息、CPU现场信息。由上述可得,全局变量与PCB无关,它只与用户代码有关。
9下列选项中,导致创建新进程的操作是( B )。
I.用户登录成功 II.设备分配 III.启动程序执行
答案解析:用户登录成功后,系统要为此创建一个用户管理的进程,包括用户桌面、环境等。所有的用户进程会在该进程下创建和管理。II.设备分配是通过在系统中设置相应的数据结构实现的,不需要创建进程,这是操作系统中I/O核心子系统的内容。III.启动程序执行是典型的引起创建进程的事件。
10进程处于( C )时, 它是处于非阻塞状态。
答案解析:进程有三种基本状态,处于阻塞状态的进程是由于某个事件不满足而等待。这样的事件一般是I/0操作,如键盘等,或者是因互斥或同步数据引起的等待,如等待信号或等待进入互斥临界区代码段等,等符网络数据进入内存是为了进程问步。而等待CPU调度的进程处于就绪状态,只有它是非阻塞状态。
11下列选项中, 降低进程优先级的合理时机是( A )。
答案解析:A中进程时间片用完,可降低其优先级以让别的选程被调度进入执行状态。B中进陛刚完成I/O,进入就绪队列等待被处理机调度,为了让其尽快处理I/O结果,故应提高优先权,C中进程长期处于就绪队列,为不至于产生饥饿现象,也应适当提高优先级。D中进程的优先级不应该在此时降低,而应在时间片用完后再降低。
12下列选项中,会导致进程从执行态变为就绪态的事件是( D )
答案解析:P(wait)操作表示进程请求某一资源,A、B和C都因为请求某一资源会进入阻塞态,而D只是被剥夺了处理机资源,进入就绪态,一旦得到处理机即可运行。
13
设与装资源关联的信号量(K)初值为3,当前值为1。若M表示该资源的可用个数,N表示等待该资源的进程数,则M、N分别是( B )。
答案解析:信号量表示相关资源的当前可用数量。当信号量K>0时,表示还有K个相关资源可用,所以该资源的可用个数是1。而当信号量K<0时,表示有[K]个进程在等待该资源。由于资源有剩余,可见没有其他进程等待使用该资源,故进程数为0。
14下列对临界区的论述中,正确的是( D )。
答案解析:多个进程可以共享系统中的资源,一次仅允许一个进程使用的资源叫临界资源。访问临界资源的那段代码称为临界区。
15两个旅行社甲和乙为旅客到某航空公司订飞机票,形成互斥资源的是( C )。
答案解析:一张飞机票不能售给不同的旅客,因此飞机票是互斥资源,其他因素只是为完成飞机票订票的中间过程,与互斥资源无关。
16进程A和进程B通过共享缓冲区协作完成数据处理,进程A负责产生数据并放入缓冲区,进程B从缓冲区读数据并输出。进程A和进程B之间的制约关系是( C ).
答案解析:并发进程因为共享资源而产生相互之间的制约关系,可以分为两类:①互斥关系,指进程之间因相互竞争使用独占型资源(互斥资源)所产生的制约关系;②同步关系,指进程之间为协同工作需要交换信息、相互等待而产生的制约关系。本题中两个进程之间的制约关系是同步关系,进程B必须在进程A将数据放入缓冲区之后才能从缓冲区中读出数据。此外,共享的缓冲区一定是互斥访问的,所以它们也具有互斥关系。
17在操作系统中,P、V操作是一种( D )
答案解析:P、V操作时一种低级的进程通信原语,它是不能被中断的。 P操作即wait操作,表示等待某种资源直到可用。若这种资源暂时不可用,则进程进入阻塞状态。注意,执行P操作时的进程处于运行状态。
18原语是( D )。
答案解析:原语(Primitive/Atomic Action),顾名思义,就是原子性的、不可分割的操作。严格定义为:由若干个机器指令构成的完成某种特定功能的一段程序,其执行必须是连续的,在执行过程中不允许被中断。
19在用信号量机制实现互斥时,互斥信号量的初值为( B )。
答案解析:互斥信号量初值为1,P操作成功则将其减1,禁止其他进程进入; V操作成功则将其加1,允许等待队列中的一个进程进入。
20有三个进程共享同一程序段,而每次只允许两个进程进入该程序段,若用PV操作同步机制,则信号量S的取值范围是( A )。
答案解析:因为每次允许两个进程进入该程序段,信号量最大值取2。至多有三个进程申请,则信号量最小为1,则信号量最小为-1,所以信号量可以取2、1、0、-1。
21当一个进程因在互斥信号量mutex上执行V(mutex)操作而导致唤醒另一个进程时,则执行V操作后mutex的值为( D )。
答案解析:由题意可知,系统原来存在等待进入临界区的进程,故 mutex小于等于-1,故在执行V( mutex)操作后, mutex的值小于等于0。
22有一个计数信号量S:
假如若干个进程对S进行了28次P操作和18次V操作之后,信号量S的值为0。
假如若干个进程对信号量S进行了15次P操作和2次V操作。请问此时有多少个进程等待在信号量S的队列中 (B)。
答案解析:对S进行了28次P操作和18次V操作,即S-28+18=0, 得信号量的初值为10;然后,对信号量S进行了15次P操作和2次V操作,即S-15+2= 10-15+2=- 3, s信号量的负值的绝对值表示等待队列中的进程数。所以有3个进程等待在信号最s的队列中。
23有两个并发进程P1、P2, 其程序代码如下:
PI() {
x=1; // A1
y=2;
z=x+y;
print z;
}
P2(){
x=-3; // B1
c=x*x;
print. c; // B2
// A2
}
可能打印出z的值有( B ) 可能打印出的C值有( B )(其中x为P1. P2的共享变量).
A、z=1,-3; c=-l,9
B、z=-1,3;c=1,9
C、z=-1,-3, c=-1,9
D、z=1,3;c=1,9
答案解析:本题关键是输出语句A2、B2中读取的x的值不同,由于Al、BI 执行有先后问题,使得在执行A2、B2前,x的可能取值有两个就是1、-3;这样输出z的值可能是1+2-3或者是(3)+2=1;输出c的值可能是1x1=1或者是(-3)*(-3)=9.
24下列关于管程的叙述中,错误的是( A )。
A、管程只能用于实现进程的互斥
B、管程是由编程语言支持的进程同步机制
C、任何时候只能有一个进程在管程中执行
D、管程中定义的变量只能被管程内的过程访问
答案解析:管程是由一组数据以及定义在这组数据之上的对这组数据的操作组成的软件模块,这组操作能初始化并改变管程中的数据和同步进程。管程不仅能实现进程间的互斥,而且能实现进程间的同步,故A错误、B正确;管程具有特性:1)局部于管程的数据只能被局部于管程内的过程所访问;2)一个进程只有通过调用管程内的过程才能进入管程访问共享数据;3)每次仅允许一个进程在管程内执行某个内部过程,故C和D正确。
25P操作可能导致( C )。
A、进程就绪
B、进程结束
C、进程阻塞
D、新进程创建
答案解析:P操作是申请资源,不成功就导致阻塞。
26n个并发进程通过初值为1的信号量s共享资源R,当n个进程都通过wait(s)申请访问资源R时,信号量s的值为( D)。
27有界缓冲问题中,“counter++”的伪机器语言为:
(S0)register1 = counter
(S1)register1 = register1 + 1
(S2)counter = register1
“counter–”的伪机器语言为:
(S3)register2 = counter
(S4)register2 = register2 – 1
(S5)counter = register2
当这两段代码并行执行时,有种不同的执行结果(A)。
28若有10个进程共享同一程序段,而且每次最多允许5个进程进入该程序段,则互斥信号量的变化范围是( D )。
答案解析:本题目考查信号量的取值范围。程序段最多允许三个进程进入,则表示资源的数目为3,因此,信号量初值为3,每进入一个进程,信号量的值减1,当信号量的值减为0时,表示三个进程均进入程序段,此时若再有一个进程请求进入执行P操作,则信号量的值减为-1,进程阻塞。一共有四个进程,所以信号量的值最小为-1。因此信号量的值取值范围为3,2,1,0,-1。因此应该选B。
29设某类资源有5个,由3个进程共享,要使系统不会死锁则每个进程最多可申请的资源数是( D )
答案解析:某系统有同类资源m个,供n个进程共享。如果每个进程最多申请x个资源(其中1<=x<=m),可以证明,当n(x-1)+1<=m时,系统不会发生死锁。
该题中,n=3,m=5,则5>=3*(x-1)+1,x=2