页,页表,页缓存
页
页是操作系统进行内存管理的基本单位,在虚拟内存系统中,计算机将虚拟地址空间和物理内存都分割成固定大小的块,这些块就称为页,通常大小为4KB(也有更大页的支持,如2MB或1GB,称为大页或巨页)。
页是操作系统进行虚拟内存管理的基石。无论是分配内存、读写磁盘上的文件,还是进行进程间的内存共享,都是以页为单位来操作的。
当程序请求内存时,操作系统不会分配零散的字节,而是以页为单位来分配。例如,一个程序需要 5KB 内存,操作系统会分配两个 4KB 的页来满足这个请求。
页表
页表是一种数据结构,用于存储从虚拟地址到物理地址的映射关系。每个进程都有自己的页表。
当程序运行在自己的虚拟地址空间中时,它使用的所有内存地址都是虚拟地址。这些地址需要通过页表,由内存管理单元(MMU)转换成实际的物理地址,才能在 RAM 中找到对应的数据。
页表的基本原理是通过将虚拟地址分解为多个级别的索引来实现映射。每个级别对应一个页表项(Page Table Entry,PTE),其中包含了指向下一级页面的指针和其他相关信息。最终,所有级别的页表项都指向一个物理页面,并且该物理页面的内容即为应用程序所需的数据。
页缓存
页缓存是操作系统在内核空间维护的一块特殊内存区域,用于缓存从磁盘文件读取的数据和待写入磁盘的数据。页缓存的主要目的是减少磁盘 I/O 次数,因为磁盘访问速度比内存慢成千上万倍。它也以页为单位进行管理。
- 作用:
    - 加速文件读取:当程序需要从文件中读取数据时,操作系统会首先检查页缓存中是否已有数据。如果命中,直接从内存返回,避免了耗时的磁盘读取。
- 加速文件写入:程序写入文件时,数据通常会先被写入页缓存。这些页被标记为“脏”,并由内核在后台异步地写入磁盘。这种延迟写入可以合并多个小的写入请求,减少磁盘寻道时间。
 
- 工作:
    - 无论是传统的 read()/write()系统调用,还是更现代的mmap()内存映射,它们都依赖于页缓存。
- 对于 mmap()来说,它更是直接将文件的页缓存区域映射到进程的虚拟地址空间,实现了零拷贝,程序对内存的读写操作直接作用于页缓存。
 
- 无论是传统的