zoukankan      html  css  js  c++  java
  • 疑问:进程间通信

    我们知道进程有自己的虚拟地址空间,并且互不干扰,那么进程间通信又如何实现呢?A又看不到B的地址,B又看不到A的地址,那A怎么访问B的东西,B又怎么访问A的东西,我想这应该得借助第三方的东西,我们都知道进程地址空间有一段内核地址,里面是进程由用户态进入内核态时进程运行的内核态环境,比如通过系统调用进入内核态获取内核服务,进程的内核态也有自己内核栈,为什么需要内核栈呢?用户栈难道不就够了吗?因为内核服务很多都是受保护的,比如访问页表,进程控制块这些东西。但是内核栈又和进程间通信有什么相关呢?对于OS所有的进程间通信都是调用系统调用实现的,所有的系统调用都要陷入到内核态去执行。

    问题:管道是如何实现进程间通信?

    管道有两种形式,一种只能实现父子进程之间通信,还有一种可以实现无关进程之间的通信,对于第一种管道,我认为实现方式应该可以讲管道映射到内存中一块地址,两个进程读取这一块地址即可,但是进程间必须协同操作,一个读一个写,不能同时读,同时写,父子进程都能看到这一块内存,为什么都能看到呢?因为父进程fork出子进程时,同时继承了管道描述符,所以能看到。对于第二种管道,我认为可以映射到同一个文件上,但是具体不是很清楚?求大神解释。

  • 相关阅读:
    iOS项目的目录结构和开发流程
    XCode SVN设置
    iOS 登录 注册
    ios开发常用技巧
    iOS问题解答
    iOS设计模式
    iOS开发:打包应用程序
    iOS 封装
    iOS开发常用宏
    Objective-C 类,实例成员,静态变量,对象方法,类方法(静态方法),对象
  • 原文地址:https://www.cnblogs.com/GODYCA/p/2844178.html
Copyright © 2011-2022 走看看