内存管理的基本原理和要求的解释

一:内存管理的概念

  内存管理(Memory Management)是操作系统中最重要和最复杂的内容之一。随着计算机硬件的飞速发展,内存容量也在不断增长,但是现在的软件大小也在不断增长并且增长的很快,不可能将所有用户进程和系统所需要的全部程序和数据放入主存中,因此操作系统必须对内存空间进行合理的划分和有效的动态分配,这就是内存管理的概念。

  有效的内存管理在多道程序设计中非常有用,它不仅可以方便用户对内存的管理,还可以有效提高计算机内存的利用率,还可以通过虚拟技术在逻辑上扩充内存。

内存管理的功能有:

  • 内存空间的分配和回收 由操作系统直接负责内存的分配和回收,减轻程序员的负担,使编程效率变得更高。
  • 地址转换 由于在多道程序环境下,程序的物理地址和逻辑地址有可能不一致,这时就需要地址转换来把逻辑地址转换成真实的物理地址
  • 内存空间的扩充 利用虚拟存储技术或自动覆盖技术来实现内存的逻辑上的扩充。
  • 存储保护 保证各道程序在自己的内存空间中运行,互不干扰。

二:进程运行的基本原理和要求

  创建进程首先要将程序和数据装入内存,将用户程序变为可在内存中运行的程序,通常需要以下几个步骤:

(1)编译 由编译程序将用户源代码编译成若干目标模块

(2)链接 由链接程序将编译后形成的一组目标模块和库函数链接在一起,形成有一个完整的装入模块

(3) 装入 由装入程序将装入模块装入内存运行

内存管理的基本原理和要求的解释_第1张图片

 

 

  • 程序的链接有三种方式

(1)静态链接 先将各目标模块以及它们的库函数链接成一个完整的可执行程序,以后不再拆开

(2)装入时动态链接  将用户源程序编译后所得到的一组模块,在装入内存时,采用边装入边链接的方法

(3)运行时动态链接 对某些目标模块的链接,是在程序执行该模块时才需要进行的,方便进行修改和更新,便于实现对目标模块的共享

 

  • 内存的装入模块在装入内存时的三种方式

(1)绝对装入

在编译时,若知道程序在内存的位置,则编译程序将直接产生绝对地址的目标代码。 绝对装入程序按照装入模块中的地址,把程序和数据装入内存,由于程序中的逻辑地址与实际内存中的地址完全相同,所以不需要对程序和数据的地址进行修改。

 绝对装入只适用于单道程序环境。在程序中所使用的绝对地址,是在编译或汇编时进行转换的,也可由程序员直接赋予。通常情况下,程序中采用的是符号地址,而在编译或者汇编时转化为绝对地址。

 (2)可重定位装入  

在多道程序环境下,多个目标模块的起始地址都是从0开始的,程序中的其它地址都是相对于始址的,此时应采用可重定位装入的方式。在装入内存时,将装入模块装入内存中合适的位置。在装入过程中,对程序和数据的地址的修改的过程称为重定位,又因为是一次性装入,又称为静态重定位。

静态重定位的特点是:一个作业在装入内存时,必须给它分配足够的空间,若没有,则不能装入该作业。此外,一旦作业呗被入内存,整个运行期间就不能在内存中移动,也不能申请新的内存空间。

(3)动态运行时装入

动态运行时装入,又称动态重定位。程序若是在内存中发生移动,可以采用动态的装入方式来解决,程序装入程序将程序 的装入模块装入内存时,并不直接转换为绝对地址,而是采用相对地址,直到程序真正开始执行时才转换为绝对地址。但是这种方式需要一个重定位寄存器。

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

三 逻辑地址空间与物理地址空间

编译后,每个目标模块的地址都是从0号单元开始编址,这称为该目标模块的相对地址或者逻辑地址。当链接程序将各个目标模块链接成一个可执行的完整的目标程序时,链接程序顺序将每个目标模块的相对地址构成统一的从0号单元开始编址的逻辑空间。用户和程序员只需知道逻辑地址,而内存的管理机制则是完全透明的,而逻辑地址的转换则由系统编程人员才会涉及。不同进程可以有相同的逻辑地址,因为这些相同的逻辑地址可以映射成不同的实际地址。

物理地址空间是指内存中的物理单元集合,它是地址转换的最终地址。程序执行指令和访问数据时,最后都要从物理地址中存取。当装入程序将可执行代码装入内存后,必须通过地址转换将逻辑地址转换成物理地址,这个过程称为地址重定位。

四 内存保护

内存分配前,需要保护操作系统不受用户进程的影响,也要博湖用户基金从不受其它用户进程的影响。

(1)在CPU中设置一对上下限寄存器,分别存方用户作业在内存中的上限地址和下限地址,每当CPU要访问一个地址时,分别与两个寄存器的值想比较,判断是否越界。

(2)采用重定位寄存器(或界址寄存器)和界地址寄存器(限长寄存器)来实现这种保护

 

 

 

 

你可能感兴趣的:(操作系统)