虚拟内存和虚拟页面
虚拟内存
虚拟内存是现代操作系统提供的一种内存管理机制,它允许程序访问比实际物理内存更大的地址空间。虚拟内存通过将程序的地址空间划分为多个固定大小的块(称为页面),并将这些页面映射到物理内存或磁盘上的页面文件中,从而实现高效的内存管理和资源利用。
正常情况下,一块内存不能同时运行多个程序,如果第一个程序在 2000 的位置写入一个新的值,将会擦掉第二个程序存放在相同位置上的所有内容,因为他们都引用了绝对物理地址,而虚拟内存让操作系统为每个进程分配独立的一套「虚拟地址」,这样进程所使用的地址「隔离」开来,各玩各的。
虚拟页
虚拟页是虚拟内存的基本单位,每个虚拟页是一个固定大小的内存块。操作系统将程序的地址空间划分为多个虚拟页面,并通过页表(Page Table)将虚拟页面映射到物理内存中的物理页面或磁盘上的页面文件中。
文件映射mmap(Memory-Mapped File)
文件映射是一种将文件内容直接映射到进程的地址空间的技术。通过文件映射,程序可以直接通过内存地址访问文件内容,无需通过传统的 read
和 write
系统调用。文件映射的主要优点包括:
减少内核态和用户态之间的数据拷贝:传统的文件读写操作需要在内核态和用户态之间进行数据拷贝,而文件映射可以直接在用户态访问文件内容,减少了数据拷贝的开销。
提高性能:通过直接访问内存地址,文件映射可以显著提高文件读写操作的性能。
文件映射的工作原理
打开文件:程序通过
open
系统调用打开文件。映射文件:程序通过
mmap
系统调用将文件内容映射到进程的地址空间。mmap
系统调用会返回一个指针,指向映射的内存区域。访问文件内容:程序可以通过指针直接访问文件内容,而无需调用
read
或write
系统调用。
页缓存
操作系统会将文件的内容缓存在页缓存中。页缓存是内核管理的一块内存区域,用于缓存文件的页面。当程序通过文件映射访问文件内容时,操作系统会将文件的页面从磁盘加载到页缓存中,并将虚拟页面映射到页缓存中的物理页面。