【操作系统】虚拟页和物理页

一、前置概念

实模式:直接操作物理内存。每次只能运行一个程序,不安全;最大使用内存1M,限制太大。
保护模式:虚拟地址被转换为物理地址,要有页表。

装载器:把指令和数据加载到内存运行。要满足两个条件:

  • 1)可执行程序加载后占用内存空间应该是连续的。
  • 2)我们需要同时加载很多个程序,并且不能让程序自己规定在内存中加载的位置。

那就是我们可以在内存里面,找到一段连续的内存空间,然后分配给装载的程序,然后把这段连续的内存空间地址,和整个程序指令里指定的内存地址做一个映射。

二、分段分页

分段分页都是操作系统发展过程中为了更好地使用内存资源

2.1 直接映射(为物理地址)

问题:

  • 1)进程地址空间不隔离。不小心程序数据被修改,导致运行异常。
  • 2)内存使用效率低。内存碎片需将运行数据暂时拷贝到硬盘,再重装入内存,效率十分低下。

解决方法: 增加中间层,将虚拟地址映射为物理内存地址。

2.2 分段含义、优劣

段: 系统分配出来的连续内存空间。
分段: 找出连续物理内存和虚拟内存地址映射的方法。
优劣: 解决了程序本身不需要关系具体物理内存的问题,同时带来内存碎片的问题。

补充:
优:没内部碎片、重定位段比整个地址空间更容易;
劣:有外部碎片、很难将连续内存分配给可变大小分区、昂贵的内存管理算法。
内存交换:可解决内存不连续的问题,将内存写到硬盘,重新加载,让剩下的内存空间连续。
		 Linux的swap分区就是作用。但硬盘访问速度太慢,会有性能瓶颈,机器可能出现卡顿。

段表存储在线性地址空间,而页表则保存在物理地址空间。

2.3 分页

页: 切成的连续且尺寸固定的内存空间。
分页: 分段导致内存碎片和交换空间太大,为了让交换写入的数据更少,出现了内存分页。

  • 和分段相比,分页把(虚拟/物理)整块内存切成一段段固定尺寸的大小内存存储单元。

缺页错误: 操作系统读取特定页,发泄数据没加载到物理内存(缓存未命中),就会触发CPU Page Fault。

三、虚拟地址和物理地址

3.1 含义

虚拟内存地址Virtual Memory Address):指令里用到的内存地址。
定义的虚拟地址空间是连续,使程序编写难度降低。因为每个进程都提供了一个一致的、私有的、连续完整的地址空间,让每个进程都产生了一种自己在独享主存的错觉。
物理内存地址Physical Memory Address):实际内存硬件里面的空间地址,它是真实的物理地址

3.2 地址转换

内存管理单元 - MMUMemory Management Unit):将虚拟地址转换为物理地址,借助存放在内存中的页表动态翻译虚拟地址。
页表:将虚拟内存地址映射到物理内存地址的映射表,能将虚拟内存里的页一一映射到物理内存里面。
地址变换高速缓冲/快表 - TLBTranslation lookaside buffer):存储当前最可能被访问到的页表项,是部分页表项的一个副本,减少了因MMU导致的处理器性能下降。

页号Directory)和偏移量Offset) 可用来计算内存地址转换,步骤:

  • S1:把虚拟内存地址切分成页号和偏移量的组合;
  • S2:从页表里,查询出虚拟页号对应物理页号
  • S3:拿物理页号+偏移量,就得到了物理内存地址。

1

多级页表:

  • 问题:数字范围:

  • 11
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值