文档详情

死锁和进程通信分析.ppt

发布:2016-03-23约1.23万字共79页下载文档
文本预览下载声明
死锁检测算法的使用 资源图可能有多个循环 ■ 难于分辨“造成”死锁的关键进程 死锁检测的时间和周期选择依据 ■ 死锁多久可能会发生 多少进程需要被回滚 死锁恢复: 进程终止 终止所有的死锁进程 ■ 进程已运行时间以及还需运行时间 终止进程的顺序应该是 ■ 进程的优先级 一次只终止一个进程直到死锁消除 ■ 终止进程数目 进程已占用资源 进程完成需要的资源 进程是交互还是批处理 死锁恢复:资源抢占 选择被抢占进程 ■ 最小成本目标 进程回退 ■ 返回到一些安全状态, 重启进程到安全状态 可能出现饥饿 ■ 同一进程可能一直被选作被抢占者 提纲 死锁概念 ■ 死锁处理方法 ■ 银行家算法 ■ 死锁检测 ■ 进程通信概念 ■ 信号和管道 ■ 消息队列和共享内存 ■ 进程通信(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
显示全部
相似文档