我正在开展一个项目。因为许多进程共享内存意味着它们在内核中使用相同的物理内存地址。
只是一个例子: - 运行bash命令shell的系统中可能有多个进程。而不是拥有多个bash副本,每个处理虚拟地址空间一个,最好只在物理内存中有一个副本,并且所有运行bash的进程都共享它。
现在,我正在维护引用计数,以了解在正常终止时引用计数变为零时,有多少进程正在使用该资源并释放资源。但是异常终止会发生什么?
到目前为止,我一直在阅读,如果进程异常终止,那么linux会释放其资源并清除其内存。那么,它是否也会清除其他进程共享的物理内存?如果不是,那么我应该如何知道哪个进程异常终止(数百个进程正在运行,每隔一个新进程正在创建和终止),因为我将不得不减少引用计数,否则引用计数将永远不会变为零与之相关的资源永远不会免费。
答案 0 :(得分:0)
内存用于数据或代码。就控制而言,这是两种不同类型或存储区域。 您似乎在问题中将这些类型混合在一起。
进程可以共享数据内存或可以使用共享库。这些是以不同的方式完成的。
启动外部进程时,您无法控制加载进程代码的内存。这意味着你使用bash的例子没有意义。
如果您使用系统API来分配和操作共享(数据)内存,那么操作系统负责资源的分配和释放,包括在异常终止的进程之后进行清理。你不需要为自己的引用计数而烦恼。
如果您的系统“每隔一个新进程被创建和终止”,那么您不应该担心异常终止的进程和资源分配/解除分配,因为整个情况已经异常
你可能想重新思考你的设计或提出另一个问题。