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

虚拟内存

虚拟内存地址的作用:

  • 进程地址隔离

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

  • 保障内核安全

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

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

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

相关推荐
添砖java‘’3 天前
vim高效编辑:从入门到精通
linux·编辑器·操作系统·vim
崎岖Qiu3 天前
【OS笔记11】:进程和线程9-死锁及其概念
笔记·操作系统·os
fakerth3 天前
【OpenHarmony】sensors_miscdevice小器件模块架构
架构·操作系统·openharmony
叶凡要飞4 天前
RTX5060Ti安装双系统ubuntu22.04各种踩坑点(黑屏,引导区修复、装驱动、server版本安装)
人工智能·python·yolo·ubuntu·机器学习·操作系统
望获linux4 天前
【实时Linux实战系列】实时 Linux 在边缘计算网关中的应用
java·linux·服务器·前端·数据库·操作系统
水月wwww5 天前
操作系统——进程管理
linux·操作系统·vim·进程·进程调度
fakerth5 天前
【OpenHarmony】医疗传感器模块架构
架构·操作系统·openharmony
望获linux5 天前
【实时Linux实战系列】使用 u-trace 或 a-trace 进行用户态应用剖析
java·linux·前端·网络·数据库·elasticsearch·操作系统
望获linux5 天前
【实时Linux实战系列】FPGA 与实时 Linux 的协同设计
大数据·linux·服务器·网络·数据库·fpga开发·操作系统
fakerth6 天前
【OpenHarmony】文件访问接口模块架构
架构·操作系统·openharmony