第8讲 死锁和进程通信.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
死锁检测算法的使用 资源图可能有多个循环 ■ 难于分辨“造成”死锁的关键进程 死锁检测的时间和周期选择依据 ■ 死锁多久可能会发生 多少进程需要被回滚 死锁恢复: 进程终止 终止所有的死锁进程 ■ 进程已运行时间以及还需运行时间 终止进程的顺序应该是 ■ 进程的优先级 一次只终止一个进程直到死锁消除 ■ 终止进程数目 进程已占用资源 进程完成需要的资源 进程是交互还是批处理 死锁恢复:资源抢占 选择被抢占进程 ■ 最小成本目标 进程回退 ■ 返回到一些安全状态, 重启进程到安全状态 可能出现饥饿 ■ 同一进程可能一直被选作被抢占者 提纲 死锁概念 ■ 死锁处理方法 ■ 银行家算法 ■ 死锁检测 ■ 进程通信概念 ■ 信号和管道 ■ 消息队列和共享内存 ■ 进程通信(IPC, Inter-Process Communication) 进程通信是进程进行通信和同步的机制 ■ 接收操作:receive(message) 发送操作:send(message) IPC提供2个基本操作 ■ 在通信进程间建立通信链路 进程通信流程 ■ 通过 send/receive交换消息 物理 (如,共享内存,硬件总线) 进程链路特征 ■ 逻辑 (如,逻辑属性) 进程A 进程B 内核 间接通信 通信方式 2 1 内核 进程B 进程A 直接通信 M M M 进程A 进程B 内核 间接通信 通信方式 2 1 内核 进程B 进程A 共享信道 直接通信 2 1 M M M 直接通信 进程必须正确的命名对方 ■ receive(Q, message) – 从进程 Q接受消息 send (P, message) – 发送信息到进程P 自动建立链路 通信链路的属性 ■ 一条链路恰好对应一对通信进程 每对进程之间只有一个链接存在 链接可以是单向的,但通常为双向的 间接通信 通过操作系统维护的消息队列实现进程间的消息接收和发送 ■ 只有共享了相同消息队列的进程,才能够通信 每个消息队列都有一个唯一的标识 只有共享了相同消息队列的进程,才建立连接 通信链路的属性 ■ 连接可以是单向或双向 消息队列可以与多个进程相关联 每对进程可以共享多个消息队列 间接通信 通信流程 ■ 通过消息队列发送和接收消息 创建一个新的消息队列 销毁消息队列 基本通信操作 ■ send(A, message) – 发送消息到队列A receive(A, message) – 从队列 A接受消息 阻塞与非阻塞通信 进程通信可划分为阻塞(同步)或非阻塞(异步) ■ 阻塞发送 发送者在发送消息后进入等待,直到接收者成功收到 阻塞通信 ■ 阻塞与非阻塞通信 进程通信可划分为阻塞(同步)或非阻塞(异步) ■ 阻塞发送 阻塞通信 ■ 阻塞接收 接收者在请求接收消息后进入等待,直到成功收到一个消息 阻塞与非阻塞通信 进程通信可划分为阻塞(同步)或非阻塞(异步) ■ 阻塞发送 阻塞通信 ■ 阻塞接收 非阻塞通信 ■ 非阻塞发送 发送者在消息发送后,可立即进行其他操作 阻塞与非阻塞通信 进程通信可划分为阻塞(同步)或非阻塞(异步) ■ 阻塞发送 阻塞通信 ■ 阻塞接收 非阻塞通信 ■ 非阻塞发送 非阻塞接收 没有消息发送时,接收者在请求接收消息后,接收不到任何消息 通信链路缓冲 进程发送的消息在链路上可能有3种缓冲方式 ■ 发送方必须等待接收方 0 容量 通信链路缓冲队列满时,发送方必须等待 有限容量 发送方不需要等待 无限容量 提纲 死锁概念 ■ 死锁处理方法 ■ 银行家算法 ■ 死锁检测 ■ 进程通信概念 ■ 信号和管道 ■ 消息队列和共享内存 ■ 信号(Signal) 信号 ■ 进程间的软件中断通知和处理机制 如:SIGKILL, SIGSTOP, SIGCONT等 信号的接收处理 ■ 捕获(catch):执行进程指定的信号处理函数被调用 忽略(Ignore):执行操作系统指定的缺省处理 例如:进程终止、进程挂起等 可能是暂时的(当处理同样类型的信号) 屏蔽(Mask):禁止进程接收和处理信号 不足 ■ 传送的信息量小,只有一个信号类型 内核 调度器 I/O 驱动 文件系统 进程X 系统调用接口 {read(), write(), sigaltstack() … } 1. 注册信号处理函数 (信号处理函数) 3. 执行信号处理函数 发送信号 2. 分发信号到进程的信号处理函数 信号的实现 信号使用示例 #include stdio.h #include signal.h main() { signal(SIGINT, sigproc); /* DEFAULT ACTION: term */ signal(SIGQUIT, quitproc); /* DEFAULT

文档评论(0)

2518887 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档