当我说存储器映射寄存器的地址总是物理地址时,我是否正确?
如果是,那么MMU如何处理这些地址并决定不为它们进行虚拟到物理翻译?
答案 0 :(得分:1)
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驱动程序损坏多年来破坏Windows;我仍然认为,但他们的质量控制和信任检查"现在是邪恶的。)
唉,这不是商业上的成功。我被迫进入软件谋生: - {答案 1 :(得分:0)
你是对的。
处理器的存储器映射中的所有寄存器和/或存储器位置都是物理地址。
虚拟到物理转换由MMU完成,并且仅发生在可以执行代码的连续内存块中。即RAM或内部闪存。访问内存映射的其他部分时,不会发生虚拟到物理转换,因为它们不与MMU交互。