面试中常被问到的(14)虚存管理和虚拟地址空间

虚拟内存技术使得每一个进程在运行过程中,始终都是显式独自占用当前系统内存资源,事实上,所有进程共享同一个物理内存,每一个进程只把自己目前需要的虚拟内存空间映射在物理内存上,此过程内核并不会立即把虚拟内存对应位置的程序数据和代码拷贝到物理内存中,只是建立一种虚拟映射关系,程序运行时通过此映射关系动态拷贝数据。

malloc也是内核为其分配虚拟内存,为这块虚拟内存对应的页表项做相应设置,当进程真正访问到此数据时,才可触发缺页异常

  • 虚存优点:

(1)虚拟内存技术扩大了各自进程的地址空间

(2)每个进程运行在各自的虚拟地址空间,互相不干扰对方。虚拟内存为特定的内存地址提供写保护。可以防止代码或数据被恶意篡改

(3)公平分配内存,采用虚拟内存之后,每个进程相对于具有相同大小的虚存空间

(4)进程通信,可以采用虚存共享的方式

(5)不同进程使用相同代码时,只需要在物理内存上存一份,各自进程将其虚拟内存映射过去即可,比如库函数,头文件的调用等,可以节省物理内存空间

(6)内存中可以保留多个进程,当一个进程等待在等待数据读入内存的过程中,可以将cpu资源交给另外一个进程使用,提高并发性(时间片轮转)

(7)需要分配连续存储空间时,只需要在虚拟内存空间上分配连续空间,而不需要在实际物理内存上开辟同样连续的空间,可以组织物理内存上内存碎片使用,实现离散式存储

  • 虚存缺点:

(1)虚拟内存的管理需要建立数据结构,数据结构需要额外内存空间

(2)虚拟地址到物理地址的转换,增加了指令的执行时间

(3)页面的换入换出需要通过磁盘IO来完成,增加耗时

(4)如果页表中只有一部分数据,会浪费内存

  • 虚拟内存管理方式:

分段式存储(段号+段内偏移)分段(栈区,堆区,数据段,代码段等待)

根据段号在段表找到物理空间起始地址,然后根据偏移量找到真正物理内存地址

分页式存储(页号+页内偏移)分页,分成多块

根据页号在页表找到物理空间起始地址,然后根据偏移量找到真正物理内存地址

段页式存储(先分段再分页)先分段再分页

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HT . WANG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值