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

虚拟内存

虚拟内存地址的作用:

  • 进程地址隔离

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

  • 保障内核安全

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

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

物理内存页:内核会将整个物理内存空间划分为一页一页大小相同的的内存块,每个内存块大小为 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...

相关推荐
触底反弹10 小时前
拷个 .exe 到新电脑就跑不起来?你缺的不是文件,是对链接的理解
c++·windows·操作系统
杊页14 小时前
第一板块:Android 系统基石与运行原理 | 第二篇:Android 编译、打包与安装机制
android·操作系统
壮Sir不壮16 小时前
GO语言——GMP调度模型
linux·开发语言·golang·go·操作系统·线程·协程
Surest17 小时前
OpenHarmony 技术拆解(二):从 capability 看懂分布式软总线与任务迁移
操作系统
OpenAnolis小助手1 天前
如何利用 AI Agent 实现热补丁的自动化生成
人工智能·安全·ai·操作系统·agent·龙蜥
小宇子2B3 天前
缺页中断不是“出错”,是内核最忙的一条正常路径
操作系统
小宇子2B3 天前
内存不够时,内核怎么把"冷"页踢出去——swap 与页面回收
操作系统
磊 子3 天前
二.内核讲解
开发语言·操作系统·系统
下午写HelloWorld3 天前
Linux系统及Ubuntu常用指令
linux·ubuntu·操作系统
Surest3 天前
AI时代操作系统过时了么?
操作系统