说点什么吧~
20.1 死锁概念
资源分类
可重复使用资源
消耗资源
资源分配图
出现死锁的必要条件
1 互斥
2 持有并等待
3 非抢占
4 循环等待
20.2 死锁的处理方法
死锁预防:限制并发进程对资源的请求
死锁避免:利用额外的先验信息, 在分配资源时判断是否会出现死锁,只有在不死锁时分配资源
死锁检测和恢复
由应用进程处理死锁
20.3 银行家算法
20.4 死锁检测
20.5 进程通讯(IPC, inter-Process Communication)
通讯方式:
直接通讯
进程必须正确的命名对方
通信链路的属性
间接通讯
通过操作系统维护的消息队列实现进程间的消息接收和发送
每个消息队列都有一个唯一的表示
只有共享了相同消息队列的进程, 才能够通信
通信链路的属性
通信流程
基本通信操作
阻塞(同步)与非阻塞(异步)通信
阻塞通信
阻塞发送:发送者在发送消息后进入等待, 直到接受者成功收到
阻塞接收:接受者在请求接收消息后进入等待,直到成功收到一个消息
非阻塞通信
非阻塞发送
阻塞发送
通信链路缓冲
进程发送的消息在链路上可能有3种缓冲方式
a: 0容量; b:有限容量; c:无限容量
20.6 信号和管道
信号:进程间的软件中断通知和处理机制如:sigkill,sigstop,sigcont等
信号的接收处理:捕获,忽略,屏蔽
管道
进程间基于内存文件的通信机制
子进程从父进程继承父进程描述符
缺省文件描述符: 0 stdin, 1 stdout, 2 stderr
与管道相关的系统调用
读管道:read(fd, buffer, nbytes) 例如:scanf()
写管道:write(fd, buffer, nbytes) 例如:printf()
创建管道:pipe(rgfd)
rgfd是2个文件描述符组成的数组
rgfd[0]是读文件描述符
rgfd[1]是写文件描述符
20.7 消息队列和共享内存
消息队列是由操作系统维护的以字节序列为基本单位间接通信机制
消息队列的系统调用
msgget(key, flags) 获取消息队列标识
msgsnd(QID, buf, size, flags) 发送消息
msgrcv(QID, buf, size, type, flags) 接收消息
msgctl(...) 消息队列控制
共享内存是把同一个物理内存区域同时映射到多个进程的内存地址空间的通信机制
优点:快速, 方便地共享数据
不足:必须用额外的同步机制来协调数据访问
共享内存的实现:最快的方法,一个进程写另外一个进程立即可见,没有系统调用干预,没有数据复制, 不提供同步(由程序员提供同步)
共享内存系统调用:
shmget(key, size, flags) :创建共享段
shmat(shmid, *shmaddr, flags): 把共享段映射到进程地址空间
shmdt(*shmaddr): 取消共享段到内存地址空间的映射
shmctr(...): 共享段控制
需要信号量等机制协调共享内存的访问冲突
说点什么吧~
欢迎来到学堂在线广场~
在这里你可以玩活动,看资讯,晒笔记。
还可以交学友、发心情、聊人生。
在学堂的每一天,就从这里开始吧!
点击 广场指南 了解更多