【问题标题】:Mapping same physical address to different vitual address space将相同的物理地址映射到不同的虚拟地址空间
【发布时间】:2017-05-06 12:14:44
【问题描述】:

我正在使用 MmMapLockedPagesSpecifyCache 将物理内存映射到用户进程的虚拟地址空间,但是我想知道同一物理地址是否可以同时映射到不同的虚拟地址空间。

【问题讨论】:

    标签: memory memory-management operating-system


    【解决方案1】:

    是的,你可以。
    将同一个物理地址映射到两个或多个不同的虚拟地址本身并没有错。
    这种灵活性是虚拟内存成功的原因之一。

    如果你考虑一下共享内存和内存映射文件是如何实现的,你会发现它们很可能将同一个物理地址映射到不同的虚拟地址(这里要小心:物理地址属于不同的进程地址空间,但这并不不要改变结论)。

    CPU 没有任何限制,它是“索引”转换表的虚拟地址,两个“索引”返回相同的“值”并没有什么特别之处。
    反之,将两个不同的物理地址映射成一个虚拟地址是不可能的。

    【讨论】:

    • 如果 2 个进程试图写入同一个物理地址会怎样?
    • @quangh 这没什么错。第二个将覆盖第一个的值。如果程序可能存在数据竞争,程序员可能想要使用同步对象(例如互斥锁、信号量)或同步原语(例如 CAS、锁、原子 RMW)。即使无论物理到虚拟内存映射如何(例如同一进程中的两个线程),都会发生这种情况。
    猜你喜欢
    • 2011-03-27
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多