9/17操作系统原理与Linux内核分析
进程通信
进程通信… 1
1. 进程间交换数据(或信息)的方式进行… 2
2. 进程通信的类型… 2
3. 进程通信的方式… 2
4. 消息缓冲队列通信机制… 3
5. 信箱通信… 4
1.
进程间交换数据(或信息)的方式进行
定义
2. 进程通信的类型
2.1.
低级通信
由于数据量小,通常交换的是控制信息,一般传递一个或几个字节的信息
2.2.
高级通信
由于交换的数据量大,进程间可采用缓冲、信箱、管道和共享区等。
3. 进程通信的方式
进程的地址空间:保证了进程的稳定进行
3.1.
共享存储器
通信基础是共享数据结构或共享存储区,进程之间能够通过这些空间进行通信
3.2.
消息缓冲
数据交换是以格式化的信息(message)为单位,又称报文。
高级通信方式
可分为直接通信和间接通信。
3.3.
管道通信
3.4.
客户-服务器
4. 消息缓冲队列通信机制
4.1.
概述
4.1.1.
消息
一组数据
4.1.2.
消息缓冲池
4.1.3.
系统调用
Send过程
Receive过程
4.2.
消息缓冲队列通信机制中的数据结构
4.2.1.
消息缓冲区
sender 发送者进程标识符
size 消息长度
text 消息正文
next 指向下一个消息缓冲区的指针
4.2.2.
PCB中有关通信的数据项
mq 消息队列的首指针
mutex 消息队列互斥信号量,初值为1
sm 消息队列资源信号量,用哦关于进程的消息技术,初值为0
4.3.
发送过程
send(receiver, a){
getbuf(a.size,
i); //根据a.size申请缓冲区
i.sender
= a.sender; //将发送区a中的信息赋值到消息缓冲区中
i.size
= a.size;
i.text
= a.text;
i.next
= 0;
getid(PCB
set, receiver, j); //获取进程内部标识符j
P(j.mutex);
insert(j.mp,
i); //将消息缓冲区插入消息队列
V(j.mutex);
V(j.sm); //通知接受进程
}
4.4.
接受过程
从自己的消息缓冲队列mq里摘下第一个消息缓冲区i,并将其中的值复制到以b为首址的指定消息接受区。
receive(receiver, a){
j
= getid(); //获取进程内部标识符j
P(j.sm);
P(j.mutex);
remove(j.mq,
i); //将消息队列汇总的第一个消息移出
V(j.mutex);
b.sender
= i.sender; //将消息缓冲区i汇总的信息赋值到接收区b
b.size
= i.size;
b.text
= i.text;
releasebuf(i); //将消息缓冲区i释放
}
5. 信箱通信
mailbox
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)