操作系统-第二单元进程的描述与控制考试

一、单选题 (题数:15,共 60.0 分)

1 设有三个进程共享一个资源,如果每次只允许一个进程使用该资源,则用PV操作管理时信号量S的可能取值是( )。(4.0分)4.0 分
A、3,2,1,0
B、1,0,-1,-2
C、1,0,-1
D、2,0,-1,-2

我的答案:B
2 并发进程相互之间( )。(4.0分)4.0 分
A、必须通信
B、相互间一定要同步
C、可以有交往也可无关
D、一定会竞争共享资源

我的答案:C
3 在下述关于父进程和子进程的叙述中,正确的是( )。(4.0分)4.0 分
A、父进程创建了子进程,因此父进程执行完了,子进程才能运行
B、子进程执行完了,父进程才能运行
C、撤消父进程时,应该同时撤消子进程
D、撤消子进程时,应该同时撤消父进程

我的答案:C
4 在引入线程的操作系统中,把( )作为调度和分派的基本单位,而把( )作为资源拥有的基本单位。(4.0分)4.0 分
A、进程 线程
B、程序 线程
C、程序 进程
D、线程 进程

我的答案:D
5 若信号量S的初值为2,当前值为-1,则表示有( )个等待进程。(4.0分)4.0 分
A、0
B、1
C、3
D、2

我的答案:B
6 信箱通信是一种( )通信方式。(4.0分)4.0 分
A、直接
B、信号量
C、间接
D、低级

我的答案:C
7 并发进程执行时可能会出现与时间有关的错误,这种错误是与( )无关的。(4.0分)4.0 分
A、进程被打断的时间
B、进程交替执行的次序
C、使用共享资源
D、进程占用处理器的总时间

我的答案:D
8 有关进程的下列叙述中,( )是正确的。(4.0分)4.0 分
A、
进程与作业是一一对应的
B、
多个进程可以在单个CPU上同时执行
C、
进程是静态的文本
D、
进程与程序是一一对应的
我的答案:B
9 有甲、乙两道算题,每道需执行1小时(其中处理器的工作时间为12分钟)。若它们在多道系统中执行,甲、乙两道题总共需执行80分钟,则处理器的利用率为( )。(4.0分)4.0 分
A、40%
B、30%
C、50%
D、20%

我的答案:B
10 进程从等待状态转到就绪状态的原因可能是( ).(4.0分)4.0 分
A、被进程调度程序选中
B、另一个进程运行结束
C、I/O完成
D、请求I/O

我的答案:C
11 为了使两个进程能同步运行,最少需要( )个信号量。(4.0分)4.0 分
A、4
B、1
C、3
D、2

我的答案:D
12 进程和程序的本质区别是( )。(4.0分)4.0 分
A、顺序和非顺序执行机器指令
B、分时使用和独占使用计算机资源
C、存储在内存和外存
D、动态和静态特征

我的答案:D
13 操作系统中,资源分配的基本单位是( )。(4.0分)4.0 分
A、作业
B、进程
C、线程
D、程序

我的答案:B
14 如果单CPU系统中有n个并发进程,则就绪队列中进程个数最多可达( )个。(4.0分)4.0 分
A、1
B、n-1
C、n-2
D、n

我的答案:B
15 有关PV操作的说法中( )是错误的。(4.0分)4.0 分
A、“进程调用P操作测试自己所需的消息是否到达”
B、“PV操作不能实现进程间通信”
C、“PV操作不仅是进程互斥的有效工具,而且是简单方便的同步工具”
D、“进程调用V操作向其它进程发送消息”

我的答案:B

二、判断题 (题数:10,共 30.0 分)

1信号量机制是一种有效的实现进程同步与互斥的工具。信号量只能由P、V操作来改变。(3.0分)0.0 分
我的答案: √
2程序的封闭性和可再现性使得系统管理很简单,程序编制调试很容易,从而大大提高了资源的利用率。(3.0分)3.0 分
我的答案: ×
3进程是程序的一次执行,进程由程序和数据二部分组成。(3.0分)3.0 分
我的答案: ×
4并行处理既与硬件性能有关又与软件有关。(3.0分)3.0 分
我的答案: √
5在单处理机系统中,处于执行状态的进程有一个。(3.0分)3.0 分
我的答案: ×
6消息缓冲是一种直接通信方式,也是一种高级通信。(3.0分)3.0 分
我的答案: √
7原语是一种不可分割的操作,在系统态下执行,常驻内存。(3.0分)3.0 分
我的答案: √
8临界区是指进程中用于实现进程互斥的那段代码,为了实现进程互斥地进入自己的临界区,更多的是在系统中设置专门的同步机构来协调进程间的运行。(3.0分)3.0 分
我的答案: √
9当一个进程从等待态变为就绪态,则可能有一个进程从就绪态变成执行态。(3.0分)3.0 分
我的答案: √
10进程的同步与互斥是其两种基本状态。(3.0分)3.0 分
我的答案: ×

三、填空题 (题数:1,共 10.0 分)

1 某庙寺有小和尚、老和尚若干。有一水井和一个水缸,由小和尚提水入缸供老和尚饮用。水缸可容纳15桶水,水取自同一井中。水井很窄,每次只能容一个水桶打水。水桶总数为5个。每次入水、取水仅为1桶水,且不可同时进行。试用一种信号量机制,写出小和尚和老和尚入水、取水的活动过程。
答案解析:设互斥信号量pail,表示水桶资源的数目,初值为5;设互斥信号量mutex,表示小和尚、老和尚对水井和水缸的互斥使用,初值为1;设同步信号量empty,表示水缸能容纳水的桶数,初值为15;设同步信号量full,表示水缸已经容纳水的桶数,初值为0。则采用信号量机制写出小和尚和老和尚入水、取水的活动过程如下:

semaphore  S,mutex, empty, full;
pail=5;
mutex=1;
empty=15;
full=0;
void main()
  {
    cobegin
     小和尚i()   // (i=1, 2, ... , m),m个小和尚进程。
     老和尚j()   // (j=1, 2, ... , n),n个老和尚进程。
    coend
  }
小和尚i() // (i=1, 2, ... , m),m个小和尚进程。
{
  while (1)
   {  P(pail);
     (【1】); 
     (【2】); 
      从水井取水,倒入水缸中;
      V(mutex);
      V(full);
     (【3】); 
    }
}
老和尚j()   // (j=1, 2, ... , n),n个老和尚进程。
{
  while (1)
   {  P(pail);
    (【4】); 
     P(mutex);
     //从水缸中取一桶水;
     V(mutex);
    (【5】); 
     V(pail);
     饮用水;
    }
}

请分别在五个空白处填写正确的P操作或V操作。
(注意:P和V字母需要用大写字母,圆括号使用英文半角输入方式书写,信号量与题目所定义的信号量保持一致。)

(10.0分)10.0 分
我的答案:

第一空:
P(empty)

第二空:
P(mutex)

第三空:
V(pail)

第四空:
P(full)

第五空:
V(empty)

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
(2)compute进程从buf取出数据进行计算,计算完毕后再把结果送回buf;(3)output进程从buf中取出结果并打印。为了保证正确性,buf中最多存储10个数据或结果,如果buf已满则input进程必须等待,如果buf为空则compute进程和output进程必须等待。 下面是使用信号量控制的程序实现: ```c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <pthread.h> #include <semaphore.h> #define BUF_SIZE 10 int buf[BUF_SIZE]; // 缓冲区 int in = 0; // 当前输入位置 int out = 0; // 当前输出位置 sem_t empty; // 空位置数的信号量 sem_t full; // 已占用位置数的信号量 sem_t mutex; // 互斥信号量 void *input(void *arg) { while (1) { // 等待空位置 sem_wait(&empty); // 互斥访问buf sem_wait(&mutex); // 输入数据 buf[in] = rand() % 100; printf("[input] Input data %d to buf[%d]\n", buf[in], in); in = (in + 1) % BUF_SIZE; // 释放互斥信号量和已占用位置数信号量 sem_post(&mutex); sem_post(&full); // 等待一段时间 sleep(1); } } void *compute(void *arg) { while (1) { // 等待已占用位置 sem_wait(&full); // 互斥访问buf sem_wait(&mutex); // 计算结果 int data = buf[out]; int result = data * data; printf("[compute] Compute result %d from data %d in buf[%d]\n", result, data, out); out = (out + 1) % BUF_SIZE; // 释放互斥信号量和空位置数信号量 sem_post(&mutex); sem_post(&empty); } } void *output(void *arg) { while (1) { // 等待已占用位置 sem_wait(&full); // 互斥访问buf sem_wait(&mutex); // 输出结果 int result = buf[out]; printf("[output] Output result %d from buf[%d]\n", result, out); out = (out + 1) % BUF_SIZE; // 释放互斥信号量和空位置数信号量 sem_post(&mutex); sem_post(&empty); // 等待一段时间 sleep(1); } } int main() { // 初始化信号量 sem_init(&empty, 0, BUF_SIZE); sem_init(&full, 0, 0); sem_init(&mutex, 0, 1); // 创建线程 pthread_t tid_input, tid_compute, tid_output; pthread_create(&tid_input, NULL, input, NULL); pthread_create(&tid_compute, NULL, compute, NULL); pthread_create(&tid_output, NULL, output, NULL); // 等待线程结束 pthread_join(tid_input, NULL); pthread_join(tid_compute, NULL); pthread_join(tid_output, NULL); // 销毁信号量 sem_destroy(&empty); sem_destroy(&full); sem_destroy(&mutex); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值