一、概念
1.1 通信方式有哪些
管道:水管,男纸条放入水管,女看了拿走不回复
消息队列:大盒子,男放入纸条,女看了不拿走,男女都可放
共享内存:直接桌子,男放桌上,女直接就能看见
- 管道
- 无名管道
- 命名管道
- 消息队列
- 信号量
- 共享内存
- socket套接字,Streams
支持不同主机通信
1.2、管道
管道在内核中
通常指无名管道
- 半双工,有固定读写端
- 只能亲缘关系(父子进程之间)通信
- 可以看成一种特殊文件,读写使用read write,不属于任何文件系统,只存在内存中
- 管道中数据,读走就没了(水管流走就没了)
命名管道(FIFO)
- 半双工
- 无关进程间通信
- 有路径名相关联,特殊文件形式,存在文件系统中,ls -l(p类型)
1.3、消息队列
是消息的链接表,存放在内核,一个消息队列由一个标识符ID表示
- 全双工
- 消息有一定的格式和特定的优先级
- 进程终止,内容(消息队列)不会删除
- 消息随机查询,按消息类型读取(队列里面的哪一个结构体)
1.4、共享内存
-
共用一个内存(物理内存),写读用指针指向这个内存,生命周期随内核
-
虚拟内存需要进行页表的映射将进程地址映射到物理内存
-
进程中的共享内存地址,是虚拟地址,他们指向同一个物理地址
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YDnhjRFH-1678614339852)(C:\Users\戴尔\AppData\Roaming\Typora\typora-user-images\1678607137692.png)]
-
为什么是48位6字节,不应该是8字节吗
因为是虚拟地址,加上前面的2字节就是物理地址,也可能是前面是0省略了
-
-
不能同时往里面写数据,需要信号量来互斥
-
使用ipcs -m命令查看共享内存
ipcrm -m 共享内存号,删除
1.5、信号
-
软中断(软件中断),优先级
-
信号的名称和编号
-
信号在signal.h头文件中
-
kill -l查看有哪些信号
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX
-
-
信号的处理:忽略,捕捉,默认
- 忽略,有2信号不能忽略(SIGKILL,SIGSTOP)
- 捕捉,用户自定义函数处理信号
- 默认,系统默认处理方式,man 7 signal查看系统的具体定义
-
发送信号,kill命令,kill -9 pid号杀死进程
-
通常使用,异步通信,也就是捕捉动作
-
编程有入门和高级api
入门:动作
高级:动作+消息 -
注意:进程之间无法传递指针
-
虚拟地址进程私有,被不同进程映射到物理地址不同
-
共享内存可以实现
想要进程之间传递指针,那么就需要用共享内存方式,这样多个进程都可以访问这一块空间,传递指针也是可以的
-
原文链接:https://blog.csdn.net/Dontla/article/details/122677896
-
1.6、信号量
- 不传递数据,管理临界资源
- 是一个计数器,用于进程间互斥与同步
- 信号量集:信号量集合
P操作:拿锁
V操作:放回锁 - 临界资源:共享资源,一次同时间只能一个进程使用他
物理设备,输入机,打印机等