虚拟与实际内存之间的关系

一 为什么要引入虚拟内存

像我们正常的内存条大小也就16G,但是我们程序运行后的大小是远远比这个大的,所以我们就引入了虚拟内存,我们可以让一个实际内存去管理很多虚拟内存,说白了我们可以让实际内存当一个大哥,让这个大哥去管理小弟,如下图所示,这个就叫做分页

二 虚拟内存的实际分布

虚拟内存他不一定是连续的,只不过一页必须在一起,页与页之间的,没必要在一起,就如下图所示:

这个记录虚拟地址3456的叫做页表项。

当我们从虚拟内存中读取过这段页面之后,他就会被拷贝都物理地址中,然后这个时候有一个有效位,会置为1,如果下次还要这段页面中的数值可以直接从内存中取到,

页表项里面还有的就是页框,1800就是这个页框号,还有就是如图所示,明显这个数据拷贝到内存之后被改动了,这个时候页表里面还要一个叫做脏位,说白了你给别人污染了,所以将脏位设置为1。

 

 但是这个是内核操作系统进行的操作,我们程序员甚至都不知道页有多大,其实我们程序员用的是段,就像这样,比如说我们需要四段,会在页表项里写入四,然后你需要将数据存入到那个段当中,存入第三段,然后虚拟内存3456上面的值为3,虽然我们是看不到的,但是当把这些写入内存的时候,就是这样的实现,像段和页这种联合的话就叫做段页式存储。

 

就像下面这种操作,我需要12段,加入一页是三段,这样子系统就会给操作系统分配三页。

但是页有一些缺点,就比如说分页式存储,都是一整页一整页的分配,

就比如说这个三行一页,还没用用完就跑到下一页这样子就产生了页内碎片

如果想避免这个问题的话,那么就用分段式存储,要多少用多少如下:

但是这种美好只能出现在第一次分配,当删除一些的时候就变成了这样

而我们使用的段页式同时继承了这两个缺点

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值