• IPC——概述


    现代操作系统下的内存  

      现在的OS都引入了虚拟内存机制。我们说的内存空间,实际上虚拟内存空间,CPU执行PC指向的命令,PC指向的就是虚拟内存空间地址。虚拟内存机制只不过是OS为我们做了一层虚拟内存地址到物理内存地址的映射,我们不需要管具体是怎么映射的,直接用就完了。每个进程的虚拟地址空间都是一样的,所以A进程的0x300不会和B进程的0x300冲突,就好比1楼A002号房,和2楼A002号房,虽然都是A002号房,但是他们是不一样的,不会地址冲突。

      引入虚拟内存最大的好处就是使应用进程变得安全了,对于OS上的应用进程,他的空间都是OS划分的,只能在自己的小天地里面折腾。他不能去别人的空间搞破坏,别人也不可能过来骚扰自己。如果木马以应用进程身份运行的话,他就不能做破坏,除非是OS级木马,直接黑掉OS,否则根本不可能进入到别人的虚拟内存空间搞破坏。

    虚拟内存在安全上带来了好处,但是也带来了数据共享的问题,即进程间通信

    IPC的本质——数据共享

      在OS虚拟内存机制作用下,每个进程拥有独立的进程空间。尽管进程空间是各自独立的,相互之间没有任何可以共享的空间,但是至少还有一样东西是所有进程所共享的,那就是OS,因为甭管运行有多少个进程,但是它们共用OS只有一个。既然大家共用的是同一个OS,那么显然,所有的进程可以通过大家都共享第三方OS来实现数据共享。因此进程间通信的原理就是,OS作为所有进程共享的第三方,会提供相关的机制,以实现进程间数据的转发,达到数据共享的目的。

    Linux OS所提供的c接口的进程间通信机制:

    1)信号
    2)管道(有名、无名)
    3)消息队列
    4)共享内存
    5)信号量

    信号和管道都是UNIX系统早期提供的比较原始的一种进程间通信(IPC)方式,早到Unix系统设计之初就有了。

    后来Unix系统升级到第5版本时,又提供了三种新的IPC通信方式,分别是:

    • 消息队列
    • 信号量
    • 共享内存

    System V就是系统第5版本的意思,后来的Linux也继承了unix的这三个通信方式

    System V IPC缺点

    进程结束时,system v ipc不会自动删除,进程结束后,使用ipcs依然能够查看到。

    如何删除?

    方法1:重启OS,很麻烦

    方法2:进程结束时,调用相应的API来删除,后面再讲

    方法3:使用ipcrm命令删除

    备注:

    Linux服务器开发,C/C++语言是大头,但是C/C++标准库并没有提供“进程控制”和“进程间通信”的库接口,因此你的程序在windows和Linux下想要实现“进程控制”和“进程间通信”的话,必须调用系统API或者说该系统自己特有的库(不是标准库)。



  • 相关阅读:
    C字符串和C++中string的区别 &&&&C++中int型与string型互相转换
    UML的类图关系分为: 关联、聚合/组合、依赖、泛化(继承)
    STL map详细用法和make_pair函数
    字符串旋转(str.find()---KMP)
    层次遍历二叉树
    图像特征提取三大法宝:HOG特征,LBP特征,Haar特征
    位运算---整数间的转化
    最大公倍数
    单链表的实现
    jsp下Kindeditor环境搭建
  • 原文地址:https://www.cnblogs.com/kelamoyujuzhen/p/9386478.html
Copyright © 2020-2023  润新知