内存映射文件,是由一个文件到一块内存的映射。
Win32提供了允许应用程序把文件映射到一个进程的函数 (
CreateFileMapping)。内存映射文件与
虚拟内存有些类似,通过内存映射文件可以保留一个
地址空间的区域,同时将
物理存储器提交给此区域,内存文件映射的物理存储器来自一个已经存在于磁盘上的文件,而且在对该文件进行操作之前必须首先对文件进行映射。使用内存映射文件处理存储于磁盘上的文件时,将不必再对文件执行
I/O操作,使得内存映射文件在处理大数据量的文件时能起到相当重要的作用。
我们经常在程序的
反汇编代码中看到一些类似0x32118965这样的地址,操作系统中称为
线性地址,或
虚拟地址。虚拟地址有什么用?虚拟地址又是如何转换为
物理内存地址的呢?本章将对此作一个简要阐述。
现代意义上的操作系统都处于32位保护模式下。每个进程一般都能寻址4G的物理空间。但是我们的
物理内存一般都是几百M,进程怎么能获得4G的物理空间呢?这就是使用了
虚拟地址的好处,通常我们使用一种叫做
虚拟内存的技术来实现,因为可以使用硬盘中的一部分来当作内存使用。
另外一点现在操作系统都划分为系统空间和用户空间,使用虚拟地址可以很好的保护
内核空间不被用户空间破坏。
对于虚拟地址如何转为物理地址,这个转换过程由操作系统和CPU共同完成.操作系统为CPU设置好
页表。CPU通过MMU单元进行地址转换。