Process 进程如何在SystemV中休眠事件?

Process 进程如何在SystemV中休眠事件?,process,sleep,Process,Sleep,我发现,在Unix System V中,事件被映射到内核空间中的一个地址,进程在这样一个事件上休眠,而一个中断使用这个地址唤醒一个进程 但是这是如何工作的呢?它是如何实施的 我仍然不明白他们所说的“事件映射到地址”是什么意思。抱歉,如果这个问题太天真。这是因为: POSIX提供了使用共享内存(POSIX)的标准化API 共享内存)。这将使用来自sys/mman.h的功能shm_open。 POSIX进程间通信(POSIX:XSI扩展的一部分) 包括共享内存功能shmat,shmctl,shmdt

我发现,在Unix System V中,事件被映射到内核空间中的一个地址,进程在这样一个事件上休眠,而一个中断使用这个地址唤醒一个进程

但是这是如何工作的呢?它是如何实施的

我仍然不明白他们所说的“事件映射到地址”是什么意思。抱歉,如果这个问题太天真。

这是因为:

POSIX提供了使用共享内存(POSIX)的标准化API 共享内存)。这将使用来自
sys/mman.h
的功能
shm_open
。 POSIX进程间通信(POSIX:XSI扩展的一部分) 包括共享内存功能
shmat
shmctl
shmdt
shmget
UNIX System V还为共享内存提供了一个API。 这将使用来自
sys/shm.h
shmget
。BSD系统提供“匿名映射” 可由多个进程使用的“内存”

shm\u
open创建的共享内存是持久的。它会留在房间里 系统,直到被进程显式删除为止。这有一个缺点 如果进程崩溃并且无法清理共享内存,它将 直到系统关闭。为避免此问题,
mmap
可用于 创建共享内存。两个通信进程应打开一个 使用相同名称的临时文件,并在其上执行
mmap
以获取文件 内存中的映射。因此,映射内存中的更改 两个进程同时可见。这些方法的优点是什么 方法是,当两个进程都退出时,操作系统将自动 关闭文件并删除共享内存

有时,进程希望等待某个事件发生,例如要初始化的设备、要完成的I/O或要过期的计时器。在这种情况下,进程被称为在该事件上休眠。在共享内存多处理器上启用“休眠”进程是一个困难的问题,特别是当进程被中断时间事件唤醒时