进程通信相关概念
创始人
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. 临界资源:共享资源,一次同时间只能一个进程使用他
    物理设备,输入机,打印机等

相关内容

热门资讯

十字对开门冰箱热卖排行榜 小户... 清晨阳光斜照进整洁的厨房,一碗隔夜炖好的银耳羹仍清润如初,青菜叶片挺括水灵,鸡蛋壳上还凝着细微水珠—...
最新冰箱性价比推荐 学生宿舍低... 清晨赶早课前顺手取一杯冰镇酸奶,深夜复习时打开冰箱拿一盒水果补充能量——对学生党而言,一台安静、省电...
再走长征路|心栖娄山:一个“候... 中经记者 王登海 黄永旭 遵义报道仲夏时节,黔北大地暑气渐盛,来自四川的退休教师赵俊毅提前20多天来...
铸魂聚力 实干兴业 (来源:沈阳日报)转自:沈阳日报  7月10日,全国五一劳动奖章获得者苏广林在中国工商银行沈阳南站支...
摩根大通AI投资组合回测跑赢传...   摩根大通最新发布的研究报告显示,其开发的八个人工智能投资代理在长达二十年的历史回测中,表现超越了...