操作系统-内存管理(参考王道)

内存管理的功能

1.内存空间的分配与回收:由操作系统完成主存储器空间的分配和管理,使程序员摆脱存储分配麻烦,提高编程效率。

2.地址转换:在多道程序环境下,程序中的逻辑地址与内存中的物理地址不可能一致,因此存储管理器必须提供地址变换功能,把逻辑地址转换成相应的物理地址。

3.内存空间的扩充:利用虚拟存储技术或者自动覆盖技术,从逻辑上扩充内存。

4.存储保护:保证各道作业在各自的存储空间内运行,互不干扰。

 

链接的三种方式

1.静态链接:在程序运行之前,先将各目标模块及它们所需的库函数链接在一起,形成一个完整的装入模块。

2.装入时动态链接:将用户源程序编译后所得到的一组目标模块,在装入内存时,采用边装入边链接方式。

3.运行时动态链接:对某些目标模块的链接,是在程序执行中需要该目标模块时,才对它进行的链接,其优点是便于修改和更新,便于实现对目标模块的共享。

 

装入

绝对装入:在编译时,如果知道程序驻留在内存中的某个位置,编译程序将产生绝对的地址目标代码。绝对装入由于逻辑与实际内存地址相同,故不需要对程序和数据的地址进行修改。绝对装入只适用于单道程序环境,绝对地址可由程序员在编译或者汇编时赋予。

可重定位装入:在多道程序环境下,多个目标模块的起始地址通常都是从0开始,程序中的其他地址都是相对于起始地址的,此时采用可重定位装入方式,根据内存的目前情况,将装入模块装入到内存的适当位置。装入时对目标程序中指令和数据的修改称为重定位,地址变换通常是在装入时一次完成的。所以又称静态重定位。

,静态重定位的特点是在一个作业装入内存时,必须分配其要求的全部内存空间,如果没有足够的内存,就不能装入该作业,此外,作业一旦进入内存后,在整个运行期间不能在内存中移动。

动态运行时装入:也称为动态重定位,程序在内存中如果发生移动,就需要采用动态的装入方式。装入程序在把装入模块装入内存后,并不立即把装入模块中的相对地址转换成绝对地址,而是把这种地址转换推迟到程序真正要执行时才进行。因此,装入内存后的所有地址均为相对地址。这种方式需要一个重定位寄存器的支持。

动态重定位的特点是可以将程序分配到不连续的存储区中,在程序运行之前可以只装入它的部分代码即可投入运行,然后在程序运行期间,根据需要动态申请分配的内存,便于程序段的共享,可以向用户提供一个比存储空间大得多的地址空间。

 

内存保护

两种方式

1.CPU中设置一对上,下限寄存器,存放用户作业在主存中的下限和上限,每当CPU要访问一个地址时,分别和两个寄存器的值相比,判断有无越界。

2.通过采用重定位寄存器(或基址寄存器)和界地址寄存器(又称限长寄存器)来实现这种保护,重定位寄存器含最小的物理地址值,界地址寄存器含逻辑地址的最大值,每个逻辑地址值必须小于界地址寄存器,内存管理机构动态的将逻辑地址与界地址寄存器进行比较,如果未发生地址越界。则加上重定位寄存器的值后映射成物理地址,再送交内存单元。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值