OS操作系统 六

1.关于并发的关键术语
原子操作 atomic operation
临界区 (核心)一段代码 在这段代码中 进程将访问共享资源 且当一个进程在访问时 其他进程不能在这段代码运行 critical section
死锁 deadlock
活锁 livelock
互斥 一个进程在临界区访问共享资源 其他进程不能进入临界区访问任何共享资源
mutual exclusion
竞争条件 race condition
饥饿 starvation

2.并发 控制对共享资源的访问
进程的交互
(1)进程之间不知道对方的存在 可能出现 互斥,死锁,饥饿 此时操作系统需要控制对它们的访问
(2)进程之间间接知道对方的存在 可能出现 互斥 死锁 饥饿 数据一致性(进程之间共享数据 但是在写数据使要合作确保数据的完整性)
(3)进程直接指定对方的存在 可能出现 死锁 饥饿

3.互斥: 临界资源同时间只允许一个程序在临界区(使用临界资源的那部分程序称为程序的临界区)
死锁 两个进程互相等待 都不执行
饥饿 有进程在队列中 需要调用资源 但被无限期搁置
要设置entercritical 和 exitcritical

4.互斥的硬件实现:
(1) 中断禁用 临界区不能被中断 代价高 执行效率降低 且不能用于多处理器体系
(2) 专用机器指令
例: 把整个比较和交换功能按原子操作执行
设置bolt值 所有进程都检查bolt是否为0 为0就进入临界区并把bolt设为1 在结束时再改回来
缺点: (1)使用了忙等待 消耗处理器时间
(2)可能饥饿
(3)可能死锁: P1进入了临界区但是被中断 让给P2 P2因为互斥被拒绝访问 然后进入忙等待 形成死锁

并发机制:
(1) 信号量: 表示进程传递信号的一个整数值
(2) 二元信号量: 信号量 只能取0,1
(3) 互斥量 同一个进程为其设置为0 加锁 设置为1 解锁
(4) 条件变量: 用于阻塞进程或线程 直到特定条件为真
(5) 管程: 一种编程语言结构 包含变量,访问过程,初始化代码
自身的变量只能由自己的访问过程访问 且每次只能由一个进程在其中执行
访问过程就是临界区
(6) 事件标志: 用做同步机制的内存字
(7) 信箱/消息: 两个进程交换信息的一种方法 也可用于同步
(8) 自旋锁: 一种互斥机制

6.并发的软件实现
多个进程之间靠信号量合作,可以强迫一个进程在某个地方停止 直到收到一个特定的信号
semWait(s) 使信号量减一 若值为负数 则阻塞该进程
semSignal(s) 使信号量加一 若值小于等于0 则解除阻塞
效果: 信号量的负值表示正在等待解除阻塞进程的个数
此时每个semSignal会将一个进程的阻塞解除
结论:
(1)对信号量减一之前
无法知道是否会被阻塞
(2)进程控制信号量加一后 会唤醒另一个进程 两个进程并发运行 单处理器系统 无法知道哪个进程会继续运行
(3)向信号量发出信号后 被解除阻塞的进程要么为1要么为0

7.二元信号量
semWaitB 值为1 则减一 值为0则阻塞
semSignalB 检查受阻 有受阻的解除 没受阻的设值为1

8.互斥锁 设置0,1来确定是是否阻塞其他程序 与二元信号量区别在于 前者只能由同一个进程设置0,1 后者可以不同进程加解锁

9.队列的释放顺序
强信号量: 遵循先进先出的规则的策略 可以保证不会饥饿
弱信号量:没有规定顺序的信号量

10.生产者/消费者
两者在任何时候都只能有一个主体可访问缓冲区
缓存已满时 生产者不会继续添加数据
缓存为空时 消费者不会移走数据

11.在生产/消费问题上
加入semWait() 表示查看信息量比如n,s都检查 n表示缓冲区可用数据的个数
s表示是二元信息量 为了实现检查信号判断是否等待 可以在生产过程前后
加入semWait(s) semSignal(s) 来实现互斥
delay 来实现等待生产

12.管程 提供的功能和信号量相同 但是更易于控制
局部数据变量只能被管程的过程访问
一个进程通过调用管程进入管程
只能由一个进程在管程中执行 其他进程调用会被阻塞

13.管程通过使用条件变量来支持同步
管程把互斥机制放在自己构造内

14.消息传递
同步
send
receive
寻址

15.读者/写者问题

16.并发
进程间的交互
共享资源的竞争
多个进程的同步问题
进程的处理器时间分配

17.进程间相互知道的程度
(1)互相不知道
(2)间接知道
(3)直接知道

18.竞争进程需要访问相同的资源
合作进程要么共享访问一个共享资源 要么与其他进程相互通信

19.竞争进程控制问题
(1)互斥
(2)死锁
(3)饥饿

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值