【发布时间】:2018-01-09 17:40:59
【问题描述】:
这个问题是概念性/理论性的,与我实际从事的任何工作无关。
我了解在虚拟内存布局中,您有堆、堆栈、数据、内存映射等部分
我想知道如果例如在 macosx 上,驱动程序想要访问内存映射 IO(MMIO) 区域中的寄存器之一,它将如何工作?
我假设它需要知道 MMIO 区域所在位置的物理页码,但它如何得到这个?任何函数调用?
另外,如果一段时间后页面被换出并换入不同的页码怎么办?每次都需要检查/获取 MMIO 寄存器的页码吗?
【问题讨论】:
-
I/O 设备通常不交换 - 它们必须可以从中断处理程序访问。
-
@MartinJames 所以我在这里有点困惑,如果我有 10 个进程在运行,每个进程都有自己的堆、数据等和 MMIO 段,对吗?现在如果启动进程 1,所有的内存段都买进了物理内存?
标签: operating-system driver virtual-memory memory-mapping