一个进程使用IPC(进程间通信)的各种方式与另一个进程进行通信 ,例如共享内存,消息传递,信令?
我知道一个操作系统的内核可以和一个使用信号的进程进行通信 ,如果我是对的,那么同样的信号也是IPC的一种方式。
操作系统内核是否与一个进程或进程使用IPC的其他方式进行通信,例如共享内存,消息传递?
如果需要具体,我想知道最多的Linux内核,也很高兴知道Windows内核。
这个问题暗示了对大多数操作系统结构的根本性误解。
没有单独的“内核”进程来沟通。 内核是在任何进程的上下文中运行的代码。 内核内核代码由中断,陷阱或异常调用。 在内核模式下,进程可以访问所有进程共享的内核内存。
因此,进程和内核之间不能进行进程间通信。
当内核发送一个信号(在Unix中)或APC(在Windoze中)时,它在接收信号的过程的上下文中进行。
有些信号可以在接收过程之外创建。 一般序列是:
进程P进入内核模式并在内核内存中排队信号以处理Q.当进程Q成为当前进程时,内核安排Q执行一个信号处理程序。
对于这样的信号,通信在P和Q之间; 不是Q和内核。
请记住,这个信号机制起源于Unix只有单一执行流的时代。 这是一个穷人的不同步程序(如Windoze或VMS)。 有一段时间,任何形式的太监平行处理需要创建一个单独的过程。 [糟糕的设计]信号模型不区分外部生成/异步/同步事件。
Windoze(NT)遵循使用软件中断的VMS模型来通知事件的过程。 这个中断模型大部分隐藏在将中断模型转换为事件模型的Windows API之后。
在中断模型中,进程可以将多个I / O请求排队(例如)100个单独的网络连接,终端或磁盘驱动器。 作为操作系统服务的一部分,调用者可以指定在请求完成时调用的过程。 我们假设它是100个终端。
单个进程(应用程序)可以管理此类系统中的任意数量的设备。
如果任何一个终端通过软件中断断开连接,进程可能会收到通知。 中断处理程序的参数可以识别特定的设备,这样处理程序可以重新建立连接或清理。
在传统的Unix(线程之前),你将不得不为每个终端创建一个单独的进程。 该过程将等待终端响应,等待“读取”或“写入”操作,如果终端断开连接,该过程将获得SIGHUP信号。
在Windoze中,信号是C库的一部分,将软件中断翻译成看起来像unix信号的东西。