《操作系统概念精要》之内存篇(六)-内存映射

内存映射文件

假设采用标准系统调用open(), read(), write()来顺序读取磁盘文件。每个文件的访问都需要系统调用和磁盘访问。或者采用虚拟内存技术,将文件I/O作为常规的内存访问。这种方法称为内存映射文件,它允许虚拟内存和文件进行逻辑关联。

基本机制

实现文件的内存映射,是将每个磁盘块映射到一个或者多个内存页面。(注意这里是内存页面,内存页面,内存!!!重要的事情说三遍

最初,文件访问按普通请求调页来进行,从而产生缺页错误。这样,文件的一个页面或者多个页面大小的内容从文件系统读取到了物理内存。以后,文件的读写就按常规的内存访问来处理。从而减少了磁盘的访问。

请注意:内存映射文件的的写入和对磁盘的写入不是同步的。有的系统定期检查文件的内存映射页是否被修改,以便选择是否更新物理磁盘文件。当关闭文件时,内存映射页的数据会写入到磁盘,并从进程虚拟内存中删除。

有些操作系统只有特定的系统调用才能提供内存映射,这个在共享内存的使用的时候是必须的。

内存映射文件.png

多个进程允许并发的内存映射同一个文件,以便允许数据共享,任何一个进程的写入都会修改映射文件的数据,并且其他映射同一文件的进程都可以看到。
可以看到上图中,每个共享进程的虚拟内存映射指向物理内存的同一页面,而该页面有磁盘块的复制。内存映射的数据还可以支持写时复制功能。

内存映射I/O

内存映射I/O(Memory-mapped I/O MMIO): 在MMIO中,内存和I/O设备共享同一个地址空间。MMIO是应用得最为广泛的一种IO方法,它使用相同的地址总线来处理内存和I/O设备,I/O设备的内存和寄存器被映射到与之相关联的地址。当CPU访问某个内存地址时,它可能是物理内存,也可以是某个I/O设备的内存。
因此,用于访问内存的CPU指令也可来访问I/O设备。每个I/O设备监视CPU的地址总线,一旦CPU访问分配给它的地址,它就做出响应,将数据总线连接到需要访问的设备硬件寄存器。为了容纳I/O设备,CPU必须预留给I/O一个地址区域,该地址区域不能给物理内存使用。

内存映射I:O.png

你可能感兴趣的:(《操作系统概念精要》之内存篇(六)-内存映射)