第四章 互斥同步与通信
1
程序顺序执行有哪些特性?
连续性、封闭性、可再现性
2
程序并发执行有哪些特性?
间断性、非封闭性、不可再现性
3
什么叫做与时间有关的错误?有时间有关的错误产生的原因是什么?
与时间有关的错误:由于具体交叉的形成与进程的推进速度有关,而速度是时间的函数,因而将这种错误称为与时间有关的错误。
产生原因:两个进程同时对一个变量进行操作,一个进程对变量的操作仅做了一部分,另一个进程的中途插入使得变量处于一种不稳定的状态。
4
什么叫做临界区?什么叫做临界资源?
临界区:访问共享变量的程序段
临界资源:一次只允许一个进程使用的资源
5
什么叫做进程互斥?请写出进程互斥的基本框架。
进程互斥:多个进程不能同时进入关于同一组共享变量的临界区域,否则可能发生与时间有关的错误
基本框架:
do { entry section //进入控制部分 临界区 exit section //退出控制部分 其余代码 } while (1);
6
实现进程互斥,临界区管理应该满足哪三个正确性原则?
互斥性、进展性、有限等待性
7
什么叫做忙式等待?其与阻塞式等待有哪些区别?
忙式等待:不进入等待状态的等待
区别: 阻塞式等待---主动放弃CPU;忙式等待---不主动放弃CPU,尽管CPU可能被剥夺;
8
什么叫做合作进程
有相互逻辑关系的进程
9
什么叫做进程同步
一组进程,为了协调其推进速度,在某些点处需要相互等待或者唤醒,进程之间这种相互制约的关系称为进程同步 (进程间的相互作用形式)
10
请给出信号量类型的定义。
“信号量”是一个具有非负初值的整型变量,并且有一个队列与它关联
11` 信号量变量的初值有什么要求。
初值必须是非负整数
同步的信号量初值一般为0
互斥的信号量初值一般为1
12
什么叫做原语?
一段不可间断执行的程序称为原语
13
说出初值分别是0、1、n(>1的值)时信号量的作用。
0为同步
1为互斥
N为子资源个数
14
在Linux操作系统中,sem_wait(sem_t *s) 和sem_post(sem_t *s)分别表示对信号量的什么操作?
sem_wait(sem_t *s):P操作
sem_post(sem_t *s):V操作
15
Linux系统中采用共享内存进行进程间通信的一般步骤。
共享存储区的建立
共享存储区的附接
共享存储区的分离
16
什么叫管程(Monitor ,Hansen管程)? 一个管程由哪几部分组成?
管程是一种高级同步机制,一个管程定义一个数据结构且能为并发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程和改善管程中的数据。
一个管程由四个部分组成,它们是管程名称、局部与管程的共享数据的说明、对数据进行操作的一组过程和对该共享数据赋初值的语句
第五章 死锁和饥饿
1
什么叫死锁?在操作系统中,发生死锁有哪些特征?
在多道程序系统中,一组进程中的每一个进程均无限期的等待另一组进程所占有且不会释放的资源,这种现象称为死锁。
特征:
参加死锁的进程的数目至少为2
参与死锁的所有进程均等待资源
参与死锁的进程至少有2个占有资源
参与死锁的进程是系统中当前正在运行的进程集合的一个子集。
2
有哪些类型的死锁?
竞争资源引起的死锁
进程通信引起的死锁
其他原因引起的死锁
3
从资源分配过程的角度,说明死锁与饥饿的区别?
死锁进程处于等待状态,饥饿处于忙式等待;
死锁等待不会释放的资源,饥饿分配不到资源;
死锁循环等待,饥饿没有循环等待;
4
参与死锁进程的个数至少几个?如果产生饥饿,发生饥饿的进程至少几个?
至少2个;至少1个
5
请给出发生死锁的必要条件(Coffman条件)并加以解析。
资源独占(mutual exclusion):一个资源在同一时刻只能分配给一个进程。
不可抢占(non preemption):资源申请者不能强行从资源占有者手中夺取资源。
保持申请(hold-while-applying):进程在占有部分资源后还可以申请新的资源,而且在申请新资源时并不释放已占有资源。
循环等待(circular wait):存在一个进程等待序列进程申请的资源被下一个进程占有,头尾相连不断循环。
6
有三种死锁的处理方式?
死锁预防---静态的
死锁避免---动态的
死锁检测与恢复
7
死锁预防有哪两种基本策略?
预先分配策略:进程运行前一次性地向系统申请他所需要的全部资源。(系统要不全给,要不就不给)
有序分配策略:事先将所有资源类完全排序,当进程不占有任何资源时,他可以申请某一资源类中的任意多个资源实例。
8
请阐述预先分配法,它破坏发生死锁什么条件?
事先将所有资源类完全排序;
破坏了循环等待。
9
死锁避免中,什么叫做安全序列?
指系统中的所有进程能够按照某一种次序分配资源,并且依次地运行完毕,这种进程序列{P1,P2,…,Pn}就是安全序列。
10
死锁与饥饿有何相同点和不同点?
相同点:二者都是由于竞争资源而引起的。
不同点:
1)从进程状态考虑,死锁进程都处于等待状态,忙等待(处于运行或就绪状态)的进程并非处于等待状态,但却可能被饿死;
2)死锁进程等待永远不会被释放的资源,饿死进程等待会被释放但却不会分配给自己的资源,表现为等待时限没有上界(排队等待或忙式等待);
3)死锁一定发生了循环等待,而饿死则不然。这也表明通过资源分配图可以检测死锁存在与否,但却不能检测是否有进程饿死;
4)死锁一定涉及多个进程,而饥饿或被饿死的进程可能只有一个。
5)在饥饿的情形下,系统中有至少一个进程能正常运行,只是饥饿进程得不到执行机会。而死锁则可能会最终使整个系统陷入死锁并崩溃。