假设进程A分配了一些存储某些数据的内存。让我们说它是一组密钥 - >价值对。创建这些密钥是昂贵的 - >价值对。所以,我想分配内存,即使进程A在重新启动时因某种原因而死,它也应该能够在RAM中访问这些数据。我知道我可以将数据存储到文件中,并在A重新启动时将其读回。如果可用的内存量不是问题,我想探索是否有其他方法可用。
是否存在一种机制(api)来分配内存,以便在释放之前将其固定在内存中。如果没有,是否有可能通过采用共享内存技术来实现这一点。例如,2进程分配和共享相同的内存,因此即使一个进程死掉,内存也不会被释放,因为另一个进程仍处于活动状态。重新启动死进程后,它是否可以重新获得对该共享内存的访问权限?如果是的话怎么样?
最后,如果这是不可能的,我很好奇内核为什么不提供这样的机制?
答案 0 :(得分:6)
是。您正在寻找的内容称为Shared Memory segments
。运行man 7 shm_overview
以获取概述,但基本上是:
shm_open - allocate or re-open a shared memory segment (POSIX)
shmget - allocate a shared memory segment (System V)
shmat - attaches to a shared memory segment (System V)
shmdt - detaches from a shared memory segment (System V)
shm_unlink - remove the shared memory segment (POSIX)
如果你有一份"高级UNIX编程"第2版本章"高级进程间通信"更详细地介绍了这些内容" System V共享内存"和#34; POSIX共享内存"。
此外,这个功能早于Linux,它自1983年以来一直存在,假设https://en.wikipedia.org/wiki/UNIX_System_V上的日期是正确的。