gpt4 book ai didi

virtual-memory - MMU如何处理内存映射寄存器?

转载 作者:行者123 更新时间:2023-12-02 01:43:06 26 4
gpt4 key购买 nike

当我说内存映射寄存器的地址总是物理地址时,我是否正确?

如果是,那么 MMU 如何处理这些地址并决定不为它们进行虚拟到物理的转换?

最佳答案

MMU 不决定任何事情。它只是根据操作系统告诉它的内容映射地址:虚拟地址到物理地址,和/或如果特定物理地址的映射被标记为“无效”或以某种方式与操作系统的操作不一致,则中断应用程序当前机器指令(例如,对于指令获取,“不可执行”,对于存储,“只读”等)。

操作系统建立了一套规则和约定,确保应用程序不能为彼此创建 greif。如果写入内存映射的 I/O 设备对于这个操作系统是可行的,那么操作系统将设置 MMU 映射(例如页面映射寄存器)以允许它;否则它不会设置 MMU 页面映射到 I/O 设备。

对于大多数通用操作系统来说,允许任意程序写入 I/O 寄存器是“导致麻烦”的定义,它们根本不会设置这样的映射。从用户进程的角度来看,这就是 Windows 的行为方式。

对于特殊用途的操作系统,让单独的进程共享 I/O 页面可能没问题,特别是如果运行的进程是可信的(例如,操作系统的一部分或通过某些声称质量良好的认证机构)。然后多个受信任的进程可以安全方便地共享内存映射的 I/O 设备。即使不受信任的进程也可以在这样的操作系统上运行;它根本不允许他们访问 I/O。

早在 1972 年,我就构建了一台独特的虚拟内存 16 位小型机。 MMU 有两种页面映射:将虚拟页面映射到物理页面(如您所料),以及将页面映射到单个 32 字节 I/O 设备。这意味着操作系统可以安全地处理任何设备(对操作系统功能不重要)的任何进程。

特别是,这意味着每个 I/O 驱动程序都有自己的地址空间;如果它搞砸了,没问题。您可以在运行操作系统时毫​​无顾虑地调试设备驱动程序。 (Windows 多年来一直遭受 I/O 驱动程序损坏的困扰;我仍然这么认为,但他们的质量控制“可信度检查”现在非常强大)。

唉,这不是商业上的成功。我被迫进入软件行业谋生:-{

关于virtual-memory - MMU如何处理内存映射寄存器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27337860/

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