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