操作系统——虚拟内存和物理内存

虚拟内存

虚拟内存地址的作用:

  • 进程地址隔离

    操作系统为每个进程营造出一片独立的虚拟地址空间,使得进程与进程之间相互隔离,互不干扰的,解决了多进程同时运行时产生的内存地址冲突问题。

  • 保障内核安全

    虚拟内存还提供了系统安全方面的保障,会对进程访问内存的行为进行相关的安全权限检查,保障了系统的稳定性和安全性。

虚拟内存地址与物理内存地址是怎么映射的?

物理内存页:内核会将整个物理内存空间划分为一页一页大小相同的的内存块,每个内存块大小为 4K,称为一个物理内存页。

通过页表来管理虚拟内存和物理内存之间的映射关系,以及对物理内存的访问权限。操作系统专门划分了一页物理内存来作为页表。

单级页表

单级页表结构中,虚拟内存翻译成物理内存的过程是:

(1)页表(4KB)划分出大小相等的内存块,叫页表项PTE(Page Table Entry),PTE中保存了进程的虚拟页与物理页的映射关系,以及控制物理内存访问的相关权限位。在32位系统中PTE占用4B,在64为系统中占8B。

(2)进程的虚拟内存地址的格式为:页表内的偏移+物理内存页内的偏移。 页表相当于是PTE数组,页表内的偏移相当于PTE的索引。

(3)页表起始地址在创建进程时,写在了内核中,可以从CR3寄存器中获取。

地址翻译过程是:

想查看进程中某个字节的地址,先找到对应的PTE,公式为:页表起始地址+虚拟地址中页表内的偏移 * sizeof(PTE)。然后从PTE中拿到物理页的起始地址,然后用物理页起始地址+虚拟地址中物理内存页中的偏移,即可找到对应的物理内存地址。

多级页表

32位系统,单级页表中,一个PTE(4B)可以索引一个物理内存页(4K),一个页表(4K)中包含1024个PTE,也就是一个页表可以索引4M的物理内存。32位系统中,4G物理内存则需要1024张页表,也就是页表占用4M,而且是连续的4M内存空间(因为查找PTE是按照数据下标方式索引的),而每个进程都需要页表,也就是每个进程都需要4M的页表空间,对内存的占用比较多。

因此,可以建立多级页表。

以二级页表结构为例:

一级页表就是单级页表,用来直接索引物理内存页,一张页表可以索引4M的物理内存。

二级页表也叫页目录,用来索引一级页表,一张页目录(4K)可以索引4M的一级页表,即1024个一级页表,可以索引1024*4M=4G的物理内存。

在32位系统中,二级页表结构就能索引4G的内存空间。

地址查找的过程,变动点在:

(1)进程的虚拟地址格式为:页目录表中PDE的偏移+一级页表内中PTE的偏移+物理内存页内的偏移。

能使用多级页表进行内存空间优化,基于一个重要的思想:局部性原理。

程序局部性原理表现为:时间局部性和空间局部性。时间局部性是指如果程序中的某条指令一旦执行,则不久之后该指令可能再次被执行;如果某块数据被访问,则不久之后该数据可能再次被访问。空间局部性是指一旦程序访问了某个存储单元,则不久之后,其附近的存储单元也将被访问。

参考:mp.weixin.qq.com/s/FzTBx32AB...

相关推荐
fakerth2 天前
【OpenHarmony文件管理子系统】文件访问接口mod_fileio解析
操作系统·openharmony
fakerth2 天前
【OpenHarmony文件管理子系统】文件访问接口mod_file解析
操作系统·openharmony
IT成长日记3 天前
【Linux基础】Linux系统管理:深入理解Linux运行级别及其应用
linux·运维·服务器·操作系统·运行级别
Ziyoung3 天前
国产操作系统调研报告:产业现状与未来方向
操作系统
OpenAnolis小助手3 天前
睿思芯科正式加入龙蜥社区,携手共建 RISC-V 服务器生态新标杆
操作系统·龙蜥社区·risc-v·龙蜥生态
CYRUS_STUDIO3 天前
深入内核交互:用 strace 看清 Android 每一个系统调用
android·操作系统·逆向
码达拉3 天前
Linux开发必备:yum/vim/gcc/make全攻略
linux·面试·编辑器·操作系统·vim
CYRUS_STUDIO4 天前
FART 自动化脱壳框架优化实战:Bug 修复与代码改进记录
android·操作系统·逆向
CYRUS_STUDIO5 天前
Frida + FART 联手:解锁更强大的 Android 脱壳新姿势
android·操作系统·逆向