进程通信相关概念
创始人
2024-06-02 00:28:41

一、概念

1.1 通信方式有哪些

管道:水管,男纸条放入水管,女看了拿走不回复

消息队列:大盒子,男放入纸条,女看了不拿走,男女都可放

共享内存:直接桌子,男放桌上,女直接就能看见

  1. 管道
    1. 无名管道
    2. 命名管道
  2. 消息队列
  3. 信号量
  4. 共享内存
  5. socket套接字,Streams
    支持不同主机通信

1.2、管道

管道在内核中

通常指无名管道

  1. 半双工,有固定读写端
  2. 只能亲缘关系(父子进程之间)通信
  3. 可以看成一种特殊文件,读写使用read write,不属于任何文件系统,只存在内存中
  4. 管道中数据,读走就没了(水管流走就没了)

命名管道(FIFO)

  1. 半双工
  2. 无关进程间通信
  3. 有路径名相关联,特殊文件形式,存在文件系统中,ls -l(p类型)

1.3、消息队列

是消息的链接表,存放在内核,一个消息队列由一个标识符ID表示

  1. 全双工
  2. 消息有一定的格式和特定的优先级
  3. 进程终止,内容(消息队列)不会删除
  4. 消息随机查询,按消息类型读取(队列里面的哪一个结构体)

1.4、共享内存

  1. 共用一个内存(物理内存),写读用指针指向这个内存,生命周期随内核

  2. 虚拟内存需要进行页表的映射将进程地址映射到物理内存

    1. 进程中的共享内存地址,是虚拟地址,他们指向同一个物理地址

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YDnhjRFH-1678614339852)(C:\Users\戴尔\AppData\Roaming\Typora\typora-user-images\1678607137692.png)]

    2. 为什么是48位6字节,不应该是8字节吗
      因为是虚拟地址,加上前面的2字节就是物理地址,也可能是前面是0省略了

  3. 不能同时往里面写数据,需要信号量来互斥

  4. 使用ipcs -m命令查看共享内存
    ipcrm -m 共享内存号,删除

1.5、信号

  1. 软中断(软件中断),优先级

  2. 信号的名称和编号

    1. 信号在signal.h头文件中

    2. 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
      
  3. 信号的处理:忽略,捕捉,默认

    1. 忽略,有2信号不能忽略(SIGKILL,SIGSTOP)
    2. 捕捉,用户自定义函数处理信号
    3. 默认,系统默认处理方式,man 7 signal查看系统的具体定义
  4. 发送信号,kill命令,kill -9 pid号杀死进程

  5. 通常使用,异步通信,也就是捕捉动作

  6. 编程有入门和高级api
    入门:动作
    高级:动作+消息

  7. 注意:进程之间无法传递指针

    1. 虚拟地址进程私有,被不同进程映射到物理地址不同

    2. 共享内存可以实现

      想要进程之间传递指针,那么就需要用共享内存方式,这样多个进程都可以访问这一块空间,传递指针也是可以的

    3. 原文链接:https://blog.csdn.net/Dontla/article/details/122677896

1.6、信号量

  1. 不传递数据,管理临界资源
  2. 是一个计数器,用于进程间互斥与同步
  3. 信号量集:信号量集合
    P操作:拿锁
    V操作:放回锁
  4. 临界资源:共享资源,一次同时间只能一个进程使用他
    物理设备,输入机,打印机等

相关内容

热门资讯

重大通报作弊器!乐乐上海麻将a... 重大通报作弊器!乐乐上海麻将ai智能透视辅助插件,乐乐上海麻将本来存在有外挂(有辅助挂方略)1、很好...
分享给玩家透视挂!家乡大贰ai... 分享给玩家透视挂!家乡大贰ai智能透视辅助工具,家乡大贰其实真的有外挂(有辅助挂细节)家乡大贰破解侠...
科普攻略开挂!英豪娱乐城ai智... 科普攻略开挂!英豪娱乐城ai智能透视辅助教程,英豪娱乐城好像真的是有外挂(有辅助挂头条)1、英豪娱乐...
总算了解辅助器!和悦游戏ai智... 总算了解辅助器!和悦游戏ai智能透视辅助教程,和悦游戏确实是真的有外挂(竟然有辅助挂)暗藏猫腻,小编...
揭秘关于辅助器!九九麻将ai智... 揭秘关于辅助器!九九麻将ai智能透视辅助技巧,九九麻将一贯是有外挂(有辅助挂方略)1、用户打开应用后...