Unix系统在处理fork()时如何跟踪共享内存



进程A创建一个共享内存区域,并与过程B共享。然后进程A分叉,从而创建过程C。根据定义,C现在可以访问相同的共享内存区域。如果A死亡,CB仍然可以访问内存区域。只有当CB也死亡时,物理内存才会再次释放。

Unix系统是如何做到这一点的?它们是否存储每个进程与谁共享哪个内存的信息,或者这些信息是全局的?

共享内存区域有一个引用计数器。每当进程打开共享内存或通过从已打开共享内存的进程分叉获得共享内存时,它都会递增。当进程关闭共享内存或退出时,它会递减。当计数器变为0时,共享内存区域将被丢弃。

最新更新