Q1:多进程系统的特性
运行结果不可再现、运行结果不确定、运行环境开放性
Q2: 并发问题的根本缘由
中断、并行访问统一变量
Q3:并发带来的问题
死锁、互斥、同步(进程顺序相互配合)、饥饿
Q4:什么是临界资源/临界区以及基本特征
一个时刻只能被一个进程访问的资源
用于访问临界资源的代码(进程互斥访问)
原子性、可嵌套、可中断
Q5: 互斥的要求
空闲让进、有限停留、公平进入、互斥进入
Q6: 互斥的实现方法
硬件:禁用中断(只能设置一个临界区)、特殊指令test&set、exchange(可能死锁)
软件:peterson方法(Wanted_In[0/1] =1,表示0/1号进程处在临界区,或者处于等待进入(或即将)临界区的状态; Observer:标示最后一个试图(或成功)进入临界区的进程编号。while (observer == process && wanted_in[other] {}) )
程序语言:管程
操作系统:信号量、消息
Q7:信号灯具体实现
互斥
资源申请操作(semWait操作,P)(进入临界区前调用该操作): 信号灯的值减1; 如果其值为负值,把进程阻塞在该信号上。
资源释放操作(semSignal操作,V )(离开临界区前调用该操作): 信号灯的值增1; 如果其值为负值或0,表明有进程阻塞在该信号上。从阻塞的进程中,按调度原则挑选一个唤醒。

全同步

Q8: 生产者、消费者

Q9:读者、写者

Q10:进程间数据交换的方式
- 消息通信
- 共享存储区
- 管道通信
- Socket通信
Q11:死锁产生的原因
- 必要条件:
- 互斥使用:(资源)每次只能允许一个进程占有和使用,其它申请该资源的进程被阻塞。
- 保持并等待 :当进程等待分配给它新的资源时,保持占有已分配的资源。
- 不可剥夺 :不能强迫回收进程占有的未使用完的资源。
- 充分条件: 循环等待 存在一个闭合的进程─资源链
Q12:死锁预防(破坏四大条件)
静态分配策路:系统一次申请它所要用到的资源,如果能满足就分配,如果不能满足,一个也不分配。(保持等待)
主动释放:无法进一步获取新资源时,主动释放原先占有的资源。 被动释放:一个进程需要申请当前正被其它进程占用的资源,操作系统就要求后者释放它所占用的这类资源。(不可剥夺)
资源排序:如果一个进程已经分配了类型R的资源,那么以后它只能申请在资源顺序表中排在R后面的资源类型。(循环等待)
Q13: 死锁避免(允许更多的并发、允许三个必要条件)
银行家算法(资源分配)

能让一个进程运行下去
Q14:死锁的检测
进程等待资源矩阵Q:指明每个进程对每种资源的需求
资源占用矩阵Allocation:表明每个进程已经占用的每种资源的数量。
剩余资源向量Available:表明所剩余的每种资源的数量
- 临时空闲资源向量W:初始值等于Available
- 标记Allocation矩阵中行全为零的进程
- 初始化W,W=available
- 查找下标i,使进程i当前未标记且Q的第i行小于等于W。 如果找不到这样的行,终止算法
- 如果找到这样的行,标记进程i,并把Allocation中相应的行加到W,返回步骤3。

Q15: 哲学家进餐问题
如果5个哲学家同时开始进餐,则发生死锁!
解决方法(1): 如果无法拿到右叉,则释放左叉,随机等待一段时间后再进餐 在大多数情况下可行,不能保证万无一失 解决方法
(2): 设计一个信号量,使得某一个时刻只能有4个哲学家进餐。
1721

被折叠的 条评论
为什么被折叠?



