操作系统知识盘点(四)(内存技术)

  22、内存管理概述

(1)内存管理的功能

内存管理的主要任务是为多道程序的运行提供良好的环境,方便用户使用存储器,提高存储器的利用率以及从逻辑上扩充存储器。为此存储管理应具有以下功能:

  • 内存的分配与回收 由操作系统完成内存空间的分配和管理,是程序设计人员摆脱存储空间分配的麻烦,提高编程效率。为此,系统应记住内存空间的使用情况;实施内存的分配:回收系统或用户释放的内存空间
  • 地址变换 再多道程序环境下,程序中的逻辑地址与内存中的物理地址可能不一致,因此存储管理必须提供地址变换功能,将逻辑地址转换为物理地址
  • 扩充内存 借助于虚拟存储技术或其他自动覆盖技术,为用户提供比内存空间大的地址空间,从而实现从逻辑上扩充内存容量的目的。
  • 存储保护 保证进入内存的各道作业都在自己的存储空间内运行,互不干扰。既要防止一道作业由于发生错误而破坏其他作业,也要防止破坏系统程序。这种保护一般由硬件和软件配合完成

(2)应用程序的编译、链接与装入

应用程序从用户编写的源文件到内存中执行的进程,大致分为三个阶段:经过编译程序compiler将源代码编译为若干个目标模块,再通过连接程序将编译好的目标模块以及所需的库函数连接到一起,形成完整的装入模块,最后通过装入程序将这些装入模块装入内存并执行。简单来说,从源程序到执行的进程,经历了编译、链接、装入三个步骤

对程序设计者来说,数据的存放地址由数据名称决定,称为名地址或符号名地址,源程序的地址空间因此称为名空间或符号名空间,源程序经过编译之后得到目标代码,由于编译程序无法得知代码驻留在内存中的实际位置,故一般总是从0号单元开始编址,并顺序分配所有地址单元,这些都不是真实的内存地址,因此称为相对地址或者虚拟地址

一个完整的程序可以由多个模块构成,这些模块都是由0号单元开始编址。当链接程序将多个模块链接为装入模块时,连接程序会按照各个模块的相对地址将其地址构成统一的从0号单元开始编址的相对地址

当转入程序将可执行代码装入内存中时,程序的逻辑地址与程序在内存中的实际地址(物理地址)通常不同,这就需要通过地址转换将逻辑地址转换为物理地址,这个过程叫做定位。

程序的链接由三种方式:

  • 静态链接 在程序运行之前,先把各个目标模块及所需库链接为一个完整的可执行程序,以后不在拆开
  • 装入时动态链接 将应用程序编译后所得到的一组目标模块在装入内存时采用边装入边链接的链接方式
  • 运行时动态链接 直到程序运行过程中需要一些模块时,才对这些模块进行链接。这种链接方式将对某些模块的链接推迟到执行时才执行,也就是说,在执行过程中,当发现一个被调用模块尚未装入内存时,立即去找到该模块并将之装入内存,把它链接到调用者模块上。凡在执行过程中未被用到的目标模块,都不会被调入内存和被连接到装入模块上,这样不仅可加快程序的装入过程,而且可以提节省大量的内存空间,便于修改和更新,便于实现对目标模块的共享。

程序的装入同样也有三种方式。

  • 绝对装入 在编译时就知道程序将要驻留在内存的物理地址,编译程序产生含有物理地址的目标代码,不适合多道程序设计
  • 可重定位装入 根据内存当前情况,将装入模块装入到内存的适当位置,地址变换通常再装入时一次完成,之后不再改变,这种方式也成为静态重定位,静态重定位的实现很简单,当操作系统为程序分配了一个以某地址为起始地址的连续主存区域后,重定位时将程序中指令或操作数的逻辑地址加上这个起始地址就得到了物理地址
  • 动态运行装入 允许程序运行时在内存中移动位置,把装入模块装入到内存后的所有地址都是相对地址
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值