@llplmlyd
2018-09-22T19:17:28.000000Z
字数 2760
阅读 813
操作系统原理
死锁是进程之间由于共享资源所导致的一种无限期等待的情况
由于竞争资源或者通信关系,两个或更多线程在执行中出现永远相互等待,只能由其他进程引发的事件
利用额外的先验信息,在分配资源时就判断是否会出现死锁,只在不死锁情况下分配资源
PS:当进程请求资源时,系统会判断分配后是否处于安全状态,安全状态针对所有已用进程,存在安全序列
安全状态与死锁
安全状态则一定无死锁
不安全状态可能有死锁
一次只终止一个进程直到死锁消除,直至终止所有的死锁进程。终止顺序为
进程的优先级(由低到高)→进程已运行时间以及还需运行时间
(保留运行时间较长者)→进程已占用资源→进程完成需要的资→
终止进程数目(越少越好)→进程是交互还是批处理(优先让用
户交互的进程执行下去)
选择被抢占资源(最小成本)、进程回退(会退到安全状态)、可能出现饥饿(同一进程可能总是选择被抢占者)
进程之间进行同步和通信的机制,提供两个基本操作
接收操作(receive)
进程间通信流程
建立通信链路
通信流程
创建一个新的消息队列
通过消息队列发送和接收消息
销毁消息队列
阻塞通信
阻塞发送:发送者在发送消息后进入等待,直到接收者成功收到
阻塞接收:接收者在请求接收消息后进入等待,直到成功收到一个消息
非阻塞通信
非阻塞发送 :发送者在消息发送后,可立即进行其他操作
非阻塞接收 :没有消息发送时,接收者在请求接收消息后,接收不到任何消息
信号:进程软件中断通知和处理机制
如,sigkill,sigstop,sigcont
消息队列是由操作系统维护的以字节序列为基本单位的间接通信机制
- 每个消息(message)是一个字节序列
- 相同标识的消息按先进先出顺序组成一个消息队列(Message Queues)
共享内存是把同一个物理内存区域同时映射到多个进程的内存地址空间的通信机制
运行 | 进程 | 线程 |
---|---|---|
内存 | 每个进程都有私有地址内存空间,每个进程的内存地址空间需要明确设置于共享内存段 | 同一进程中的线程总是共享相同的内存地址空间 |