管道:水管,男纸条放入水管,女看了拿走不回复
消息队列:大盒子,男放入纸条,女看了不拿走,男女都可放
共享内存:直接桌子,男放桌上,女直接就能看见
管道在内核中
通常指无名管道
命名管道(FIFO)
是消息的链接表,存放在内核,一个消息队列由一个标识符ID表示
共用一个内存(物理内存),写读用指针指向这个内存,生命周期随内核
虚拟内存需要进行页表的映射将进程地址映射到物理内存
进程中的共享内存地址,是虚拟地址,他们指向同一个物理地址
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YDnhjRFH-1678614339852)(C:\Users\戴尔\AppData\Roaming\Typora\typora-user-images\1678607137692.png)]
为什么是48位6字节,不应该是8字节吗
因为是虚拟地址,加上前面的2字节就是物理地址,也可能是前面是0省略了
不能同时往里面写数据,需要信号量来互斥
使用ipcs -m命令查看共享内存
ipcrm -m 共享内存号,删除
软中断(软件中断),优先级
信号的名称和编号
信号在signal.h头文件中
kill -l查看有哪些信号
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP6) 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
信号的处理:忽略,捕捉,默认
发送信号,kill命令,kill -9 pid号杀死进程
通常使用,异步通信,也就是捕捉动作
编程有入门和高级api
入门:动作
高级:动作+消息
注意:进程之间无法传递指针
虚拟地址进程私有,被不同进程映射到物理地址不同
共享内存可以实现
想要进程之间传递指针,那么就需要用共享内存方式,这样多个进程都可以访问这一块空间,传递指针也是可以的
原文链接:https://blog.csdn.net/Dontla/article/details/122677896
上一篇:GDKOI2023游记