跳到主要内容

2016-2017学年上学期期中

2016-2017学年上学期期中试卷(含答案)

说明

  • 原卷标题:华东师范大学计算机科学与软件工程学院期中考试卷(2016—2017学年第一学期)

一、判断题(30分,每小题3分)

判断下列每句话是否正确,如错误请说明理由。

  1. 如果信号量S的当前值为 -5 时,则表示系统中共有 5 个等待的进程。

    答案:

    错。S=-5表示当前有5个进程等待进入该信号量所对应的临界区。


  2. 取值为0或者1的信号量只能实现互斥访问。

    答案:

    错。信号量可以实现互斥和同步。


  3. 发生死锁时系统一定处于不安全状态。

    答案:

    对。发生死锁时找不到一个安全序列。


  4. 资源分配图中存在环时,系统中某些进程处于死锁状态。

    答案:

    错。当每种资源实例个数为一时,在环中的每个进程处于死锁状态。但是当资源实例数量不唯一时,不一定处于死锁状态。


  5. 如果一个进程只需要一个资源即可完成,那么这个进程一定不会处于死锁状态。

    答案:

    对。因为不满足死锁必要条件中的持有并等待。


  6. 在多处理器系统中,通过关中断的方式可以解决进程间互斥访问的问题。

    答案:

    错。在多处理器系统中,关中断不能保重临界区的互斥访问。


  7. 进程所请求打开的文件打开后,将使进程状态从运行态变为就绪态。

    答案:

    错。等待态变为就绪态。


  8. 在生产者-消费者问题中,生产者进程和消费者进程只要解决互斥访问的问题即可。

    答案:

    错。当buffer为空时,只有等待生成者进程完成一个产品生成后,消费者才可以消费。因此,还要解决进程间同步的问题。


  9. 死锁是指因进程间相互竞争资源,使得系统中有多个进程因得不到所需资源而处于阻塞的状态。

    答案:

    错。根据银行家算法,在当前时刻,无论有多少进程处于阻塞状态,只要找到一个安全序列说明整个系统处于安全状态,系统就不会出现死锁。


  10. 管程中对条件变量的signal()和信号量中的signal()操作具有相同的效果。

    答案:

    错。管程中对条件变量的signal()可以什么都不做,而信号量中的signal()操作必然改变信号量的值。


二、多项选择题(15分,每小题3分)

每题有一个或多个答案,答错、少选、多选均不给分。

  1. 以下哪种情况仍然可能会发生死锁?( )

    A. 资源都是不共享的;

    B. 每个进程必须一次申请、获得所需的所有资源

    C. 空闲资源能够满足任意一个进程还需要的资源需求

    D. 每一种资源的数量都超过单个进程所需这类资源的最大值

    答案:

    AD


  2. 对于死锁,以下哪些(个)描述是正确的:( )

    A. 系统中每个进程都需要多个资源才能运行结束,则系统可能会处于死锁状态

    B. 资源分配图中有环(以资源类型和进程为节点),必然发生死锁

    C. 死锁避免(deadlock avoidance)中,发生死锁必然处于不安全状态

    D. 如果每个进程可以分批申请所需的资源,如果不能满足其要求,则让其忙等,那么死锁不可能发生

    答案:

    AC


  3. 以下描述正确的是:( )

    A. 中断处理程序(interrupt handler)是进程的一部分,在进程的地址空间中运行

    B. 中断处理程序(interrupt handler)必须运行在内核态

    C. 微内核体系结构下,进程间通讯(inter-processing communication)必须在微内核内

    D. 分时(time sharing)的目的是改善用户体验

    答案:

    BCD


  4. 一个正在运行的进程,当所分配的时间片用完后,不可能将其挂在( )。

    A.等待队列

    B.运行队列

    C.就绪队列

    D.无法确定

    答案:

    AB


  5. 以下那个操作会使得一个进程从运行(running)状态转换为就绪(ready)状态:( )

    A. 进程提交I/O请求

    B. 分时系统中,时间片到

    C. 当前运行进程发生缺页中断

    D. 当前运行进程调用yield(),主动放弃使用CPU

    答案:

    BD


三、辨析题(30分,每小题6分)

分别解释以下每组的两个名词,并列举他们的区别。

  1. 死锁(deadlock)与饥饿(starvation)

    答案:

    死锁:多个进程循环等待对方,都无法继续执行

    饥饿:某个或某些进程由于无法得到资源长时间无法执行

    死锁必然发生饥饿,但是饥饿不一定发生死锁


  2. P原语和V原语

    答案:

    P原语为阻塞原语,负责把当前进程由运行状态转换为阻塞状态或者忙等状态,直到另外一个进程唤醒它或者跳出忙等。操作为:申请一个空闲资源,把信号量减1,若成功,则退出;若失败,则该进程被阻塞或忙等;

    V原语为唤醒原语,负责把一个被阻塞的进程唤醒或者跳出忙等,在唤醒的机制中有一个参数表,存放着等待被唤醒的进程信息。操作为:释放一个被占用的资源,把信号量加1,如果发现有被阻塞的进程,则选择一个唤醒之;或者跳出忙等状态。

    P原语和V原语是操作信号量的两个重要方法,它们对信号量施行相反的操作,但是在解决互斥和同步时又需要他们配合完成。


  3. 不安全状态和死锁

    答案:

    不安全状态:指在当前的系统状态下,找不到一个安全序列使得当前所有的进程能够运行结束。

    死锁:多个进程循环等待对方,都无法继续执行

    区别:死锁一定处于不安全状态,但是不安全状态不一定死锁。


  4. 进程调度和进程通讯

    答案:

    进程调度:是指协调、分配进程占用系统CPU资源的算法。

    进程通讯:是操作系统负责不同进程间共享内存、磁盘文件、打印机等硬件的方法。

    区别:进程调度只负责进程间CPU资源的共享,而进程间通讯主要负责非CPU资源的共享。


  5. 线程与进程

    答案:

    线程:线程是轻量级的进程,是资源调度的最小单位。

    进程:是执行中的程序,是资源分配的最小单位。

    区别:从定义、调度、并发性、系统开销和拥有资源角度说明即可。


四、综合题(25分)

  1. (10分)假设生产者-消费者问题中,buffer大小为n。已知运用信号量解决该问题的代码如下。请将这段代码补充完整。

    答案:
    Semaphore full = 0;
    Semaphore empty = n;
    Semaphore mutex = 1;

    生产者:
    Producer () {
    while (true) {
    /* produce an item and put in nextProduced */
    wait (empty);
    wait (mutex);
    buffer [in] = nextProduced;
    in = (in + 1) % BUF_SIZE;
    count ++;
    signal (mutex);
    signal (full);
    }
    }

    消费者:
    Consumer () {
    while (true) {
    wait (full);
    wait (mutex);
    nextConsumed = buffer[out];
    out = (out + 1) % BUF_SIZE;
    count --;
    signal (mutex);
    signal (empty);
    /* consume the item in nextConsumed */
    }
    }

  2. (8分)四个进程需要运行的时间(单位:毫秒)和到达顺序如下:

    进程需要CPU时间优先级
    P193
    P221
    P332
    P424

    a) 请利用甘特图展示四个进程分别在FCFS、SJF、RR(时间片大小为1ms)和非抢占优先级(数值越小优先级越高)四种调度算法下的执行过程。

    b) 请计算每个进程在a) 中提到的四种调度算法下的等待时间。

    c) 请问a) 中哪种调度算法使得平均等待时间最少?

    答案:

    a) 甘特图略

    b)

    进程FCFSSJFRR优先级调度
    P10765
    P29040
    P311472
    P4142614
    平均8.53.255.65.2

    c) SJF 调度算法使得平均等待时间最少。


  3. (7分)现有四个进程P0, P1, P2, P3,三类资源A, B, C,各有7、5、5个。最大资源需求和资源分配矩阵如图所示。

    资源分配矩阵

    a) 请问当前系统可用资源数量和每个进程需要的资源数量分别是多少?(2分)

    b) 请问:目前是否存在死锁?如果不存在死锁,请给出一个能够让所有进程执行完的序列(3分)

    c) 假设此时又来一个进程P4,申请资源(2, 2, 0),请问如果把2个资源B的实例分配给P4,假设除已经获得和正在请求的资源外,所有进程不再请求其它资源,是否处于安全状态(为什么)?(2分)

    答案:

    a) 答:可用资源数量为(0 2 0),need矩阵为

    进程ABC
    P0000
    P1202
    P2000
    P3100

    b) 答:不存在死锁

    进程ABC
    P0030
    P2333
    P1533
    P3755

    c) 答:安全

    此时可用资源向量为:0 0 0

    进程ABC
    P2303
    P1503
    P4523
    P0533
    P3755

    仍然都能执行完.