操作系统——内存管理、虚拟内存、分段、分页、页面置换、抖动

1.内存管理

  • 虚拟内存:我们程序所使用的内存地址叫做虚拟内存地址(Virtual Memory Address)

  • 物理内存:实际存在硬件里面的空间地址叫物理内存地址(Physical Memory Address)。
    在这里插入图片描述

在这里插入图片描述

2.虚拟内存

操作系统会提供一种机制,将不同进程的虚拟地址和不同内存的物理地址映射起来。

如果程序要访问虚拟地址的时候,由操作系统转换成不同的物理地址,这样不同的进程运行的时候,写入的是不同的物理地址,这样就不会冲突了。
在这里插入图片描述

  • 内存管理单元:进程持有的虚拟地址会通过 CPU 芯片中的内存管理单元(MMU)的映射关系,来转换变成物理地址,然后再通过物理地址访问内存,如下图所示:
  • 在这里插入图片描述

在这里插入图片描述

1.什么是虚拟内存?

在这里插入图片描述

2.如何实现虚拟内存技术——虚拟内存的管理

在这里插入图片描述

1.内存分段

分段机制下,虚拟地址由两部分组成:

  • 1.段选择因子:保存在段寄存器里,里边最重要的是段号,用作段表的索引。段表里保存的是某个段基地址段的界限特权等级等。
  • 2.段内偏移量:它位于0~段界限之间,如果段内偏移量是合法的,就将段基地址+段内偏移量=物理内存地址
    在这里插入图片描述
    由上可知,虚拟地址通过段表物理地址进行映射,分段机制会把程序的虚拟地址分为4个段,每个段在段表里都有1个项,在这一项里找到段的基地址、再加上偏移量,即可找到物理内存地址

在这里插入图片描述

分段管理的缺点:
  • 1.会产生内存碎片
  • 2.内存交换效率低
1.缺点1:内存碎片问题举例:

在这里插入图片描述
在这里插入图片描述

解决1:外部内存碎片——内存交换

在这里插入图片描述

2.缺点2:内存交换效率低

1.内存分段导致内存碎片;
2.解决内存碎片就要进行频繁内存交换
3.内存交换导致磁盘访问,而磁盘访问速度比内存访问慢的多;
4.尤其是在交换占空间很大的程序时,更是可能会导致卡顿。

在这里插入图片描述

2.内存分页

分页:就是把整个虚拟内存和物理内存切成一段段固定大小的空间,Linux下,每页4kb。
页表:

  • 它存储在内存管理单元(MMU)中;
  • 页表会在缺页中断时,在内核态进行更新
  • 页表虚拟内存物理内存之间通过页表映射
    在这里插入图片描述
1.内存分页怎么解决内存碎片、内存交换效率低?
  • 解决内存碎片问题:因为内存空间都是按固定大小划分好的,所以不会像内存分段那样产生间隙很小的内存(这也正是内存分段产生内存碎片的原因);分页管理,释放内存都是以页为单位释放的,也就不会产生太小的内存。
  • 解决内存交换效率.内存不够时,由MMU更新页表,进行页面置换,所以每次只会写入1个页少数几个页,不会花太多时间。

在这里插入图片描述
分页机制下,加载程序的时候不必一次性把所有程序内容加载到物理内存,用到什么加载什么(也可以解决内部内存碎片的问题)。

2.分页机制下,虚拟地址、物理地址如何映射?

虚拟地址分为2部分:

  • 页号:他作为页表的索引,页表包含:物理页每页所在的基地址(物理页号)
  • 页内偏移。

物理内存地址 = 基地址(物理页号) + 页内偏移

在这里插入图片描述

3.内存分页,内存地址转换的3个步骤:
  • 1.虚拟内存地址,切分成页号、偏移量;
  • 2.根据页号,从页表中找到对应的,物理页号;
  • 3.物理页号 + 偏移量 = 物理地址。
    在这里插入图片描述
2.x.简单的内存分页,有什么问题?
1.有空间上的缺陷。
  • 因为操作系统同时运行着很多进程,这就导致页表非常大。
2.解决方法:多级页表(类似B+树)(一级页表一定有,二级、三级可以只在需要时创建)

有点像B树的结构。
在这里插入图片描述

3.分了2级页表,岂不是占用空间更大了?——不,局部性原理!

在这里插入图片描述

4.为什么不分级页表不能节约内存?

首先,页表必须覆盖所有虚拟内存,否则计算机就不工作了
再者,多级页表的第一级页表,可以覆盖所有的虚拟内存(联想一下mysql的B+树)

在这里插入图片描述

3.段页式管理
1.段页式内存管理实现的方式:
  • 1.先将程序划分为多个有逻辑意义的段,也就是前面提到的分段机制

  • 2.接着再把每个段划分为多个页,也就是对分段划分出来的连续空间,再划分固定大小的页;

这样,地址结构就由段号段内页号页内位移三部分组成。
在这里插入图片描述
在这里插入图片描述

2.段页式须经过3次内存访问:
  • 第1次访问段表,得到页表起始地址

  • 第2次访问页表,得到物理页号

  • 第3次将物理页号页内位移组合,得到物理地址

可用软、硬件相结合的方法实现段页式地址变换,这样虽然增加了硬件成本系统开销,但提高了内存的利用率

4.Linux 主要采用的是【页式内存】管理,但同时也不可避免地涉及了【段机制】

3.缺页中断

缺页中断时,进入系统内核空间分配物理内存,更新进程页表,再返回用户空间恢复进程的运行。
在这里插入图片描述

4.页面置换算法与抖动

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 抖动

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值