我正在尝试实现一个 JIT 编译器(我有非常古怪的爱好)。
我希望有一个主进程保留一些持久变量,第二个进程(已实时编译)执行一些计算并可以访问和写入持久变量。
第二个进程可以更改和重新编译,但持久变量必须在第二个进程的两次执行之间保持相同。
我的第一个问题是:共享内存是适合它的工具吗? (同样在性能方面,因为我希望执行速度尽可能快。)
我的第二个问题是:如果我使用 shm_overview.7 中描述的共享内存,在我看来,具有相同 uid 的任何其他进程都可以访问它。我该如何预防?我希望只有上述两个进程能够访问此共享内存。
最佳答案
您可能会考虑的另一种架构是动态加载。您只有第一个,而不是两个过程;它使用 dlopen()
加载新编译的代码。它调用这个“库”的入口点,代码可以访问包括持久变量在内的所有空间。返回时,您卸载库,为下一次“运行”做好准备。
创建这样一个可加载的库并调用它相当简单,而且比执行一个全新的进程要快。权限没有问题,因为您的唯一进程决定加载和运行什么。
关于linux - 共享内存性能和对其他进程的保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30823583/