分区存储管理之段式、页式、段页式存储管理技术

为实现进程在内存中得到cpu的响应,并且为提高内存的使用效率,必须解决的问题是:一、如何把程序员端的程序代码映射到内存中。二、如何提高内存空间的使用效率。三、如何有效利用内存空间来提高cpu与内存协作的效率。大家可以详细观看哈工大网易云课堂《操作系统之内存管理》

前言:
解决问题之前,先说一下程序运行的基本流程:计算机将程序放入虚拟内存空间(物理内存+磁盘空间)中,所以当程序所需内存空间较大时,一部分在物理内存中,一部分在磁盘空间中。且指令和数据都是以二进制存放在内存中。然后cpu通过ip地址找到待处理的程序。

一、如何把程序员端的程序代码映射到内存中
那就是把程序编程汇编语言,计算机通过硬件把程序转换成二进制存放在内存中。然后cpu通过ip地址对内存进行访问,对程序进行执行
在这里插入图片描述 在这里插入图片描述
现在有一个问题?难道程序会从内存的0x00出开始存放吗?当然不会这么傻了。。因为起始端可能被占用,所以肯定是基址加偏移地址的方式来将程序进行存放到内存中,这也就是重定位概念。
然而,什么时候重定位更好呢?
1、编译时重定位的程序只能把程序放在固定位置
2、载入时重定位的程序一旦被放到内存就不能再动了。
3、运行时重定位,解决程序再次装入内存中不能改变位置的问题。(由此引出交换的概念)

在这里插入图片描述
即程序运行过程中,改变基址。。如何改变?因为每个程序都对应一个PCB,将变化的基址存放在PCB中即可。
*另一个问题:*难道程序同时全部放在内存中吗?肯定不是啊,前面也说过。。所以这就引出了程序的分段处理
在这里插入图片描述
二、如何提高内存空间的使用效率
因为程序是分段存储在内存中的,为了更好管理,内存需要进行分块。。然而是固定分区还是可变分区呢?
固定分区时:因为程序分段时大时小,这就必然在内存的各个块中存在剩余空间,这就造成了空间的浪费。
可变分区时:如下图所示。当来一个请求时,变化如下:
在这里插入图片描述
然而存在一个问题呀(完全手残打出来的这个“呀”):当需要撤销掉Seg2时,岂不是也留下了一大块空余空间?且与空闲空间不连续(当另一个分区请求到来时,如何适配)。这个时候可能会想,那就编写程序把所有空闲块都合并到顶层的空闲块呗,然而,这样涉及到无数的变址啊。。想想都可怕呀!!所以这时候就引出了页式存储管理
所谓页式存储管理技术,就是把内存分成空间很小的等大的页。把程序分成的小段再进行细分,存储到内存划分的页中。如下图,所以每个程序段最大浪费内存就是一个页的大小。

三、如何有效利用内存空间来提高cpu与内存协作的效率
现在,程序已经装到内存里了,而且内存空间也没有造成大的浪费。那接下来,cpu怎么更好的找到程序来执行呢?那就是利用页表、多级页表和快表
*存在一个矛盾:*为了提高内存利用率,页要尽量小,页小的话,数量就多,页表空间就大。。
至于这个矛盾,我理解的还不太好。。等到理解了再写吧。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值