代码之家  ›  专栏  ›  技术社区  ›  Jose Fernando Lopez Fernandez

当在共享内存空间的多个处理器上并行运行程序时,每个处理器是否都有自己的文本段?

  •  0
  • Jose Fernando Lopez Fernandez  · 技术社区  · 7 年前

    This user 当被问及为什么同一文件的两个Linux进程不能共享同一个文本段时,响应者回答说,默认情况下,现代操作系统沙盒程序和共享库是唯一没有被操作系统复制的实体(不包括存储内存)。

    然而,当我早些时候在研究时,我 found other (2) questions (3) 这谈到了操作系统如何通过虚拟内存寻址和 page table 查找以及优化,如 copy-on-write ,两个程序 能够 共享相同的文本段,尽管他们不知道。我这样说对吗?

    所以,真正的问题是,可以通过将不同的虚拟页面映射到相同的物理页面(称为框架)来共享文本部分。

    我问这个问题的原因是因为我们正在开发一个在共享内存模型中运行的分子动力学模拟器,我们试图确定是否只有一个处理器承担着保存程序代码的任务,或者每个处理器是否都需要自己的本地副本。(有6000个处理器。)

    同样让我困惑的是 OpenMP Memory Model 是“共享的”,但每个线程都有“对每个变量的私有访问”(幻灯片5/19),这听起来很像共享库[so/dll]模型,我想知道共享资源通常是这样运作的。

    Additional Source -这个问题是关于共享内存的,但它是否是所有进程都可以访问的特定位置。在他的图中,我想知道这三个文本段是否可以简化为一个文本段,以及 -基本上是指针。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Alexandr Konovalov    6 年前

    这看起来像是误解,部分原因是“共享”一词的用法不同。一、 例如,文本段的共享与OpenMP内存模型没有太多共同之处。

    man 5 proc 了解更多详细信息)。

    less /proc/self/smaps 对于第一个映射,我看到了

    Shared_Clean: 0 kB Private_Clean: 108 kB

    在同一台机器的另一个终端

    Shared_Clean: 108 kB Private_Clean: 0 kB

    因此,我们看到/usr/bin/less的代码实际上是在不同进程之间共享的。

    对我来说,第一个参考文献中关于“沙盒”的答案是无效的。我们可以看到分享就在这里。你可以试试你的特定工作负载,看看真正的代码会发生什么。