存储器管理

存储器管理
重点是内存管理,对其有效的管理直接影响存储器的利用率、系统性能。
存储器资源的分配和回收
地址变换
存储共享和保护
虚拟存储的调度算法
外存的管理:磁盘存储器管理、文件系统等中涉及。

地址映射:
将用户程序中的逻辑地址转换为运行时由机器直接寻址的内存物理地址的过程。
即:用户的第10字节处的指令在内存的第多少地址上。

现在程序装入一般都要从逻辑地址映射到物理地址:
重定位:把目标程序中的指令和数据的逻辑地址变成内存中的物理地址的地址变换过程。

装入是使用内存的开始,但链接的不同会使内存的使用有差别:
根据链接时间的不同,分成三种:
静态链接:装入运行前将多个目标模块及所需库函数链接成一个整体,以后不再拆开。
装入时动态链接:装入内存时,边装入边链接的链接方式。
运行时动态链接:对某些目标模块的链接,在执行中需要该目标模块时,才对它进行链接。

静态链接:
装入运行前,生成可执行文件时进行的。
将多个目标模块及所需库函数链接成一个整体,以后不再拆开。

装入时动态链接
由一个目标模块开始装入,若又涉及外部模块调用事件,装入程序再找出相应的外部目标模块,并将它装入内存,还要修改目标模块中的相对地址。
比静态链接好在哪里?
(1) 静态链接好的程序,修改部分模块后,需重新链接成可装入程序。动态方式则便于修改和更新。
(2) 便于实现共享。静态的N个程序都需要一个模块时,需要进行N次拷贝。

运行时动态链接:
装入时动态链接的问题
许多情况下,事先不知道某应用程序本次运行需要哪些模块,只能全部装入,装入时全部链接在一起,效率低。
办法:有的模块不经常使用就暂时不装入,运行时用到了再装入。(如程序总不出错,就不会用到错误处理模块。)即运行时动态链接:运行时,将对某些模块的链接推迟到执行时才链接装入。
优点:程序运行装入的内容少了,加快了装入过程,而且节省大量的内存空间。

动态分区方式,分区多、大小差异各不相同,此时把一个新作业装入内存,更需选择一个合适的分配算法,从空闲分区表/链中选出一合适分区
首次适应算法FF
循环首次适应算法
最佳适应算法
最差适应算法
快速适应算法

分配内存
找到满足需要的合适分区,划出进程需要的空间
if s<=size,将整个分区分配给请求者
if s> size,按请求的大小划出一块内存空间分配出去,余下部分留在空闲链中,将分配区首址返回给调用者。

回收内存
进程运行完毕释放内存时,系统根据回收区首址a,在空闲分区链(表)中找到相应插入点,根据情况修改空闲分区信息,可能会进行空闲分区的合并。

物理划分块的大小 = 逻辑划分的页的大小
页面太大,(最后一页)内碎片增大,类似连续分配的问题。
太小的话,页面碎片总空间虽然小,提高了利用率,但每个进程的页面数量较多,页表过长,反而又增加了空间使用。

基本分段存储管理方式
从提高内存利用率角度;
固定分区  动态分区 分页
从满足并方便用户(程序员)和使用上的要求角度:
分段存储管理:作业分成若干段,各段可离散放入内存,段内仍连续存放。
方便编程:如汇编中通过段:偏移确定数据位置
信息共享:同地位的数据放在一块方便进行共享设置
信息保护
动态增长:动态增长的数据段事先固定内存不方便
动态链接:往往也是以逻辑的段为单位更方便

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值