现代操作系统下的内存  

  现在的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或者说该系统自己特有的库(不是标准库)。

最新文章

  1. Sql Server系列:嵌套查询
  2. UITextField的代理方法:textField:shouldChangeCharactersInRange:replacementString
  3. NOSQL(一)--Redis
  4. RobotFrameWork WebService Soap接口测试 (一)
  5. 使用CSS3实现百叶窗
  6. HDU 5531 Rebuild (2015长春现场赛,计算几何+三分法)
  7. android JNI (二) 第一个 android工程
  8. An error has occurred,See error log for more details
  9. redis入门指南-附录B
  10. python实现列表倒叙打印
  11. 【BZOJ2527】MET-Meteors(整体二分)
  12. 北大poj- 1034
  13. AOP统一处理Web请求日志
  14. Linux下基础查看命令
  15. oracle数据库启动和关闭方式
  16. Java 中声明和语句
  17. 在 Confluence 6 中的 Jira 权限
  18. saltstack快速入门
  19. bzoj千题计划160:bzoj2599: [IOI2011]Race
  20. 72.xilinx vivado zynq vdma仿真及应用详解(一)

热门文章

  1. pix2pix&Cycle GAN&pix2pix HD
  2. Python - Django - FBV 和 CBV
  3. Nginx 504响应超时
  4. Vue学习笔记十:过滤器
  5. Andrew Ng机器学习课程7
  6. linux本地内核提权之CVE-2019-13272(鸡肋)
  7. [转帖]新iPhone的黑科技:UWB技术揭秘
  8. C之volatile
  9. 剑指offer54:字符流中第一个不重复的字符
  10. IDE集成开发环境(pycharm)、基本数据类型、用户的交互、运算符