gpt4 book ai didi

c++ - 在多作者情况下如何对文件支持的共享内存中的大页进行故障处理

转载 作者:行者123 更新时间:2023-12-02 10:21:53 25 4
gpt4 key购买 nike

我有多个编写者,他们将对文件支持的多个共享大页面进行mmap()(即指定了MAP_SHARED)。

将这些大页面清零(例如memset(ptr, 0, size))可能会提前使页面出错。

但是,如果我有多个作者(多个进程),那么第一次映射这些页面时,可能只有一位作者将页面清零,因为这样,我不必担心读者仍在阅读或仍在担心作家在作家归零的同时写作。

问题:

  • 除了对页面进行归零/写入之外,是否还有其他方法可以提前对页面进行故障处理?
  • 如果否,在不影响正在阅读的读者和正在撰写的作者的情况下,对页面进行错误处理的常见方法是什么?

  • mmap(2) 表示 mlock()可能会对页面进行预故障处理:
    MAP_LOCKED (since Linux 2.5.37)
    Mark the mapped region to be locked in the same way as
    mlock(2). This implementation will try to populate (prefault)
    the whole range but the mmap() call doesn't fail with ENOMEM
    if this fails. Therefore major faults might happen later on.
    So the semantic is not as strong as mlock(2). One should use
    mmap() plus mlock(2) when major faults are not acceptable
    after the initialization of the mapping. The MAP_LOCKED flag
    is ignored in older kernels.

    但是, mlock(2) 并未明确指出调用 mlock()时页面将出错。思想?

    最佳答案

    至于mlock(2):

    请参阅these文档。

    References to locked pages in this process or in other processes do not result in page faults that require an I/O operation



    至于你的问题

    1. Is there a way to fault pages in advance besides zeroing/writing to pages?


    是的,有一种“也许”的方式。请参见 posix_madivse(3) POSIX_MADV_WILLNEED标志。

    另请参阅 madvise(2) ,它在功能方面比上述方法凉爽得多,但没有任何标准指定。

    关于c++ - 在多作者情况下如何对文件支持的共享内存中的大页进行故障处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59816171/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com