第二章重要知识点总结:
一、单选题
1、并发进程失去了封闭性是指( )。
A、多个相对独立的进程以各自的速度向前推进
B、并发进程的执行结果与速度无关
C、并发进程执行时,在不同时刻发生的错误
D、并发进程共享变量,其执行结果与速度有关
2、一个进程被唤醒意味着( )。
A、该进程重新占有了CPU
B、它的优先权变为最大
C、其PCB移至阻塞队列队首
D、进程变为就绪状态
3、下列进程状态的转换中,不正确的事( )。
A、就绪到运行
B、运行到就绪
C、就绪到阻塞
D、阻塞到就绪
4、 在进程管理中,当( ) 时,进程从阻塞状态变为就绪状态。
A、进程被进程调度程序选中
B、等待某一事件
C、等待的事件发生
D、时间片用完
5、对于两个并发进程,设互斥信号量为mutex,若mutex=0,则( )。
A、表示没有进程进入临界区
B、表示有一个进程进入临界区
C、表示有一个进程进入临界区,另一个进程等待进入
D、表示有两个进程进入临界区
6、下列各项步骤中,哪一个不是创建进程所必须的步骤?( )
A、建立一个进程控制块PCB
B、由CPU调度程序为进程调度CPU
C、为进程分配内存等必要的资源
D、将PCB链入进程就绪队列
7、在操作系统中,对信号量S的P原语操作定义中,使进程进入相应等待队列等待的条件是( )
A、S>0
B、S=0
C、S<0
D、S<>0
8、假设某时刻,若干进程调用了P(S)后,有n个进程处于等待信号量S的状态。此后,又有m个进程(m<n)调用V(S),现在信号量的值应该是( )。
A、m+n
B、n
C、m
D、m-n
9、对于两个并发进程,设互斥信号量为mutex,若mutex=-1,则( )。
A、表示没有进程进入临界区
B、表示有一个进程进入临界区
C、表示有一个进程进入临界区,另一个进程等待进入
D、表示有两个进程进入临界区
10、在一个计算机系统中,某一进程在某一时刻具有( )。
A、一种状态
B、二种状态
C、三种状态
D、四种状态
11、下面关于线程的叙述中,正确的是 ( )
A、不论是系统支持线程还是用户级线程,其切换都需要内核的支持
B、线程是资源的分配单位,进程是调度和分配的单位
C、不管系统中是否有线程,进程都是拥有资源的独立单位
D、在引入线程的系统中,进程仍是资源分配和调度分派的基本单位
在早期操作系统中采用进程技术,把进程作为操作系统的基本组成单位,因此进程既是资源分配单位,又是调度和执行单位;采用多线程技术之后,操作系统仅为被创建的进程分配所需的资源,整个进程内的各线程共享进程所拥有的资源,因而进程是资源分配的单位,而线程是调度和执行单位。(我在第二章博客里已经写的很详细了)
12、 在下列叙述中,错误的一条是( )。
A、操作系统是用户与计算机之间的接口。
B、程序的并发执行,使程序失去了顺序执行时具有的封闭性和可再现性。
C、只有处于就绪状态的进程经调度程序选中后才可进入执行状态。
D、在单CPU的系统中,任何时刻处于就绪状态的进程有多个
13、P、V操作是( )。
A、两条低级进程通信原语
B、两组不同的机器指令
C、两条系统调用命令
D、两条高级进程通信原语
14、临界区是指( )。
A、并发进程中用于实现进程互斥的程序段
B、并发进程中用于实现进程同步的程序段
C、并发程序中用于实现进程通信的程序段
D、并发程序中与共享变量有关的程序段
15、一个进程被创建后,就会被插入( )排队。
A、阻塞队列
B、就绪队列
C、缓冲队列
D、运行队列
17、
① 没有运行进程,有2个就绪进程,n-2个进程处于等待状态。
② 没有运行进程, n个进程处于等待状态。
③有1个运行进程,没有就绪进程,n-1进程处于等待状态。
④有1个运行进程,有1个就绪进程,n-2进程处于等待状态。
⑤有1个运行进程,n-1个就绪进程,没有进程处于等待状态。
上述情况中,不可能发生的情况是( )
A、①
B、②
C、③
D、⑤
处理机空闲,进程调度程序必然会从就绪队列中选取一个进程并将它投入运行
18、 信箱通信是一种( )方式
A、直接通信
B、间接通信
C、低级通信
D、信号量
信箱通信也是一种高级通信方式
19、某系统的进程状态转换图如图所示,请说明
当我们观察系统中某些进程时,能够看到某一进程产生的一次状态转换能引起另一进程作一次状态转换。当一个进程发生 转换3 时能立即引起另一个进程发生 转换1 ?
A、可能
B、一定会发生
C、一定不发生
处理机空闲,进程调度程序必然会从就绪队列中选取一个进程并将它投入运行,因此有些同学就要选择C了。但是可能此时就绪队列中没有进程呢,因此选择A。
20、 某系统的进程状态转换图如图所示,请说明
当我们观察系统中某些进程时,能够看到某一进程产生的一次状态转换能引起另一进程作一次状态转换。当一个进程发生转换3时能立即引起另一个进程发生转换2?
A、可能
B、一定会发生
C、一定不发生
当前执行进程从执行状态变为阻塞状态,不可能又从执行状态变为就绪状态
21、 某系统的进程状态转换图如图所示,请说明
当我们观察系统中某些进程时,能够看到某一进程产生的一次状态转换能引起另一进程作一次状态转换。当一个进程发生转换4时能立即引起另一个进程发生转换1?
A、可能
B、一定发生
C、一定不发生
仅当处理机空闲(此时就绪队列为空),一旦某个进程发生转换4,才会立即引起进程发生状态1。
22、某系统的进程状态转换图如图所示,请说明
当我们观察系统中某些进程时,能够看到某一进程产生的一次状态转换能引起另一进程作一次状态转换。当一个进程发生转换2时能立即引起进程发生转换1?
A、可能
B、不可能
C、一定会
正在执行的进程从执行状态变为就绪状态,进程调度程序必然会从就绪队列中选取一个进程投入运行,即发生转换1。
23、在操作系统中,进程是一个具有一定独立功能的程序在某个数据集上的一次( )。
A、等待活动
B、运行活动
C、单独操作
D、关联操作
24、在支持多线程的系统中,进程P创建的若干个线程不能共享的是( )
A、进程P的代码段
B、进程P中打开的文件
C、进程P的全局变量
D、进程P中某线程的栈指针
进程是资源分配的基本单位,线程是处理机调度的基本单位。因此,进程的代码段、进程打开的文件、进程的全局变量等都是进程的资源,唯有进程中某线程的栈指针是属于线程的,属于进程的资源可以共享,属于线程的栈是独享的,对其他线程透明。
二、填空题
- 进程的三个基本状态是___就绪_______、__ 阻塞_____和___运行____。
- 程序的______并发________执行时现代操作系统的基本特征之一,为了更好的描述这一特征而引入了_____进程_________这一概念。
- 进程存在的标志是______PCB________。
- 一个程序运行在不同的数据集上就构成了不同的_____进程_________,分别得到不同的结果。
- 进程是一个______独立存在________的实体,它有自己的生命周期。它因__创建____而产生,因______调度________而运行,因____等待某事件________而被阻塞(进入等待态),因______得不到资源________而被撤销。
- 进程实体由_____PCB_________、_____程序段_________和____数据段__________三部分组成。
- 用于进程控制的原语主要有_______进程创建原语_______、__进程终止原语____、_____ 阻塞原语_________、_______唤醒原语_______。
- 进程被创建后,最初处于就绪状态,然后经___进程调度程序_____选中后进入__运行__状态。
- 进程在运行时申请资源得不到满足,则它从____运行______态变成_____阻塞______态。
- 进程的特征主要有____动态性_____、___并发性____、___独立性___、_异步性__、_____结构性___。
- 在单CPU系统中,如果系统中有N个进程,则在就绪队列中进程的个数最多为__N - 1___。
- 利用信号量实现进程的____互斥______,应为临界区设置一个信号量mutex,其初值为1,标识该资源尚未使用,临界区应置于___P(mutex) ___和__V(mutex)___原语之间。
-
计算机系统中,各进程之间逻辑上的相互制约关系称为 同步关系 。
-
在操作系统中,通信分为 低级通信 和高级通信。
三、综合题
1、某博物馆最多可容纳500人同时参观,有一个出入口,该出入口一次仅允许一个人通过。参观者的活动描述如下: Cobegin 参观者进程i: { …… 进门; …… 参观; …… 出门; …… } Coend请添加必要的信号量和P、V操作,以实现上述过程中的互斥与同步。要求写出完整的过程,说明信号量的含义并赋初值。
semaphore mutex=1; //用于出入口资源的控制
semaphore empty=500; //博物馆可以容纳的最多人数
cobegin
参观者进程i:
{
……
P(empty); //可容纳人数减1
P(mutex); //互斥使用门
进门;
V(mutex);
参观;
P(mutex); //互斥使用门
出门;
V(mutex);
V(empty); //可容纳人数增1
……
}
coend
2、在4×100米接力赛中,4个运动员之间存在如下关系,运动员1跑到终点把接力棒交给运动员2;运动员2一开始处于等待状态,在接到运动员1传来的接力棒后才能往前跑,他跑完100米后交给运动员3,运动员3也只有在接到运动员2传来的棒后才能跑,他跑完100米后交给运动员4,运动员4接到棒后跑完全程。请试用信号量机制对其上过程进行分析。
semaphpre s1 = 0, s2 = 0, s3 = 0;
begin
parbegin
Athlete1: begin
Run100m;
signal(s1);
end;
Athlete2: begin
wait(s1);
Run100m;
signal(s2);
end;
Athlete3: begin
wait(s2);
Run100m;
signal(s3);
end;
Athlete4: begin
wait(s3);
Run100m;
end;
parend;
end
3、在公共汽车上,司机和售票员各行其职,司机负责开车和到站停车;售票员负责售票和开、关车门;当售票员关好车门后驾驶员才能开车行驶。试用wait和signal操作实现司机和售票员的同步。
解析:在这个问题中没有资源的抢夺,所以无互斥信号量。
司机和售票员是同步关系,司机需要接收门是否关好的信号量,而售票员需要接收车是否到站的信号量。
活动顺序:关车门->启动车辆->售票->到站停车->开车门设关门信号量为door=0,停车信号量为stop=0。
semaphore door = 0,stop = 0;
void Driver(){
while(1){
wait(door);//司机等待关门信号,一旦获取信号,则启动车辆
启动车辆;
正常行车;
到站停车;
signal(stop); //司机给售票员停车的信号
}
}
void Seller(){
while(1){
关车门;
signal(door); //售票员给司机已经关门的信号
售票;
wait(stop); //等待停车信号,一旦停车,则开门
开车门;
}
void main()
{
cobegin
Driver() , Seller();
coend
}
4、在一个仓库中可以存放A和B两个产品,要求:
(1)每次只能存入一个产品;
(2)A产品数量 - B产品数量 < M
(3) B产品数量 - A产品数量 < N
其中,M、N是正整数,试用P操作、V操作描述产品A与产品B的入库过程。
解析:
- 仓库是一种临界资源,需要互斥访问;
- 产品A和产品B之间有同步关系:若A放到了最大数量,只有等到放入了B产品,才能继续放入A产品。因此设置同步信号量Sa,初始值为M - 1。同理Sb =N-1。
Semaphore mutex = 1;//实现互斥地访问仓库
Semaphore Sa = M - 1;//还能放入几个A产品
Semaphore Sb = N - 1;//还能放入几个B产品
//进程A,不断循环放入A产品
process_A() {
while(1) {
生产A产品;
P(Sa);
P(mutex);
A产品入库;
V(mutex);
V(Sb); //放完A后,B又可以多放一个
}
}
//进程B,不断循环放入B产品
process_B() {
while(1) {
生产B产品;
P(Sb);
P(mutex);
B产品入库;
V(mutex);
V(Sa);
}
}
5、某银行提供1个服务窗口和10个供顾客等待的座位。顾客到达银行时,若有空座位,则到取号机上领取一个号,等待叫号。取号机每次仅允许一位顾客使用,当营业员空闲时,通过叫号选取1位顾客,并为其服务。顾客和营业员的活动过程描述如下:
cobegin{
process 顾客i
{
从取号机获得一个号码;
等待叫号;
获得服务;
}
process 营业员
{
while (TRUE)
{
叫号;
为顾客服务;
}
}
} coend
请添加必要的信号量和P、V(或wait()、signal())操作,实现上述过程中的护持与同步。要求写出完整的过程,说明信号量的含义并赋初值。
此题为生产者-消费者问题的翻版,就不解析了。signal(emptySeats)放到顾客进程或营业员进程都可以。
semaphore emptySeats=10 //空闲座位数
semaphore fullSeats=0 //已占座位数
semaphore mutex=1 //顾客使用取号机互斥信号量
cobegin
{
process 顾客i
{
wait(emptySeats); //获取一个座位
wait(mutex); //占用取号机取号
从取号机获得一个号码;
signal(mutex) //释放取号机
signal(fullSeats) //座位上增加一个顾客
等待叫号;
signal(emptySeats); //释放一个座位
获得服务;
}
process 营业员
{
while (TRUE)
{
wait(fullSeats); //座位上减少一个顾客
叫号;
为顾客服务;
}
}
} coend
6、桥如下图所示,车流如箭头所示,桥上不允许两车交汇,但允许同方向多辆车依次通过(即桥上可以有多个同方向的车)。用P、V操作实现交通管理以防止桥上堵塞。
此题为读者-写者问题的翻版,就不解析了。
mutex:南北向车互斥使用桥
smutex: 南向车流互斥使用south
nmutex: 北向车流互斥使用north
south: 桥上南向车数
north: 桥上北向车数
semaphore mutex=1, smutex=1, nmutex =1;
int south=0, north=0;
Tosouth () {
While(1) {
P(smutex);
if (south==0) P(mutex); //当第1辆向南的车辆过桥时,阻止向北车辆过桥
south++
V(smutex);
过桥;
P(smutex);
south--;
if (south==0) V(mutex);//当最后1辆向南的车辆过桥后,允许向北车辆过桥
V(smutex);
}
}
Tonorth () {
While(1) {
P(nmutex);
if (north==0) P(mutex);//当第1辆向北的车辆过桥时,阻止向南车辆过桥
north++
V(nmutex);
过桥;
P(nmutex);
north--;
if (north==0) V(mutex);//当最后1辆向北的车辆过桥后,允许向南车辆过桥
V(nmutex);
}
}
main() {
cobegin
Tosouth();
Tonorth();
coend
}
7、写出一个不会死锁的哲学家进餐问题的算法。
semaphore chopstick[5] = {1, 1, 1, 1, 1};
semaphore count = 4; // 最多允许四位哲学家同时进餐
void philosophers(int i){
do{
//thinging
P(count); // 判断是否超过四个
P(chopstick[i]); // 判断缓冲池是否仍有空闲的缓冲区(左边筷子)
P(chopstick[(i+1)%5]); // 判断缓冲池是否仍有空闲的缓冲区(右边筷子)
// ...
// eat
// ...
V(chopstick[i]); // 释放空闲的缓冲区
V(chopstick[(i+1)%5]); // 释放空闲的缓冲区
V(count);
//thinking
}while(true);
}
结尾
都是非常经典的题,难度适中,刷到就是赚到!
如果有错误的地方还请在评论区指出,大家共同商讨。如果你也遇到一些易错的题,也可以在评论区分享出来哦。