存储管理(6)

存储管理

1 程序的装入与链接

编译:源代码——目标代码
链接:目标代码+所需库函数=装入模块
装入:将装入模块装入内存,该过程也叫做地址重定位,也称地址映射

地址空间: 源程序经编译后得到的目标程序,存在于它所限定的地址范围内,此范围称地址空间。地址空间是逻辑地址的集合。
存储空间: 指主存中一系列存储信息的物理单元的集合,这些单元的编号称为物理地址。存储空间是物理地址的集合。
程序的装入方式:
重定位(地址映射):把用户程序中的相对地址(逻辑地址)转换为主存中的绝对地址(物理地址)过程。

  • 静态重定位:编译时产生相对地址,装入程序确定要装入模块的地址,并在装入时进行重定位,程序运行中不允许在内存移动。
  • 动态重定位:编译时产生相对地址,装入程序在把装入模块装入内存时,不立即把装入模块中的相对地址转换为绝对地址,而是推迟到程序要真正执行时才进行。

在这里插入图片描述
在这里插入图片描述
程序的链接方式:

  • 静态链接:对相对地址进行修改;变换外部调用符号。

  • 装入时动态链接:在装入内存时,边装入边链接
    便于软件版本的修改和更新
    便于实现目标模块共享

  • 运行时动态链接:运行时,用到哪个模块,再链接哪个模块,用不到的模块可不装入内存。

2 连续分配存储管理方式

连续分配:指为一个用户程序分配一个连续的内存空间。

2.1 单一连续分配

将整个内存区域分为系统区域和用户区域两部分:
(1)系统区域:提供给操作系统使用。
(2)用户区域:供应用程序使用的内存区域。
在这里插入图片描述

应用范围:单用户、单任务操作系统。如:CP/M、DOS2.0以下。
操作系统的任务就是将系统程序和用户程序分开。
方法:用基址-限长寄存器。

2.2 固定分区分配

固定分区:在进程装入内存之前,由操作员或操作系统把内存划分成若干个大小不等的分区。一旦划分就保持不变。
在这里插入图片描述

方法:分区在系统启动后划分好,以后不能改变。
应用范围:多道程序设计系统最简单的一种方式。如:60年代的IBM360上的MFT。
划分分区方法:分区大小相等或分区大小不等
缺点:内存利用率低

2.3 可变分区分配

可变分区:在进程装入内存时,把可用的内存空间“切出”一个连续的区域分配给进程,整个内存的分区大小和分区的个数是根据进程的大小动态划分的。
动态分区分配数据结构:空闲分区表和空闲分区链。
在这里插入图片描述

动态分区分配算法
(1)首次适应法
该算法要求空闲分区以地址递增的次序排序,采用链表结果,分配内存时从链表的开始顺序查找,直到找到一个满足进程大小要求的空闲分区为止。
适用: 优先使用内存中低地址部分的空闲空间,高地址部分很少被利用,从而保证高地址部分留有较大的空闲分区。
缺点: 低地址部分不断被“分割”,留下许多难以利用的小空闲分区。每次查找从低地址到高地址,影响查找速度。
(2)下次适应法
为了避免查找时总是从低地址开始,因此下次适应法要求从上次找到的空闲分区的下一个空闲分区查找。为了实现该算法,需要设置起始查询指针,用于指示下一次查询的起始位置。
特点: 可以使内存得到比较均衡的使用,减少查找空闲分区的开销,但会使系统缺乏大的空闲分区,导致比较大的进程无法运行。
(3)最佳适应法
为进程分配内存时,总是把与进程大小最匹配的空闲分区分配出去。首先将空闲分区按照分区大小递增的顺序形成一个空闲分区链。当进程要求分配内存时,第一次找到的满足要求的空闲区必然是最优的。
优点: 可以匹配到与进程大小相等的空闲分区,并可以保留有较大的空闲分区。
缺点: 链表的头部会留下许多难以利用的小空闲区,称为碎片,影响分配速度。
(4)最坏适应法
该算法与最佳适应算法相反,要求空闲区按分区大小递减的顺序排序,每次分配时,从链首找到最大的空闲分区“切出”一块分配。
优点: 基本不会留下小空间分区,不易形成碎片。
缺点: 大的空闲分区被“切割”,当有较大的进程需要运行时,系统往往不能满足要求。
在这里插入图片描述

3 离散分配方式

连续分配方式带来的问题是会在存储空间中产生许多“碎片”。能否将进程分配到许多不相邻的分区中呢?由此产生离散分配方式。

3.1 页式存储管理

基本原理:

  • 将进程的逻辑地址空间分成若干个大小相等的片,称为页面或页;
  • 内存空间分成与页大小相等的若干个存储块,称为物理块或页框。、
  • 在为进程分配内存时,以块为单位,将进程中的若干页分别装入多个可以不相邻的块中。
    在这里插入图片描述

页面大小的选择:
页面的大小由机器的地址结构决定的。
页面的大小的权衡:

  • 页面较小----内存碎片小;页表过长,占用较大内存空间。
  • 页面较大----页表短,占用较少内存;内存碎片大。

通常页面的大小要适中,在512B~4MB之间。

页式存储管理逻辑地址结构:
在这里插入图片描述
在这里插入图片描述
快表:
在这里插入图片描述
两级页表:
现代的计算机系统都支持大的逻辑地址空间,当地址空间较大(32位或64位)如32位时,若页面大小为4KB=212B,有页表项目220=1M,又因为每个页表项占4B,故每张页表要占用4MB内存。
对页表所需地址空间采用离散分配方式来解决——两级和多级页表。
将当前需要的部分页表项调入内存,其余的页表项仍驻留在磁盘上,需要时再调入内存。
SUN公司的SPARC支持三级页表,Motorola公司的68032支持四级页表。

在这里插入图片描述

3.2 段式存储管理

在这里插入图片描述
在这里插入图片描述
分页和分段的区别:
分页和分段的目的:

  • 页是信息的物理单位,分页是系统管理的需要,而不是用户的需要。
  • 段是信息的逻辑单位,它含一组意义完整的信息。分段是为了更好地满足用户的要求。

页和段长度:

  • 页的大小固定,由系统确定。
  • 段的长度不固定,决定于用户所编写的程序。

地址空间:

  • 分页的作业地址空间是一维的,即单一的线性地址空间。
  • 分段的作业地址空间是二维的,程序员在标识一个地址时,需给出段名和段内地址。

段的共享与保护:
由于段是信息的逻辑单位,用户易于实现对段的共享,也容易对段进行保护。而页虽也可共享,但不方便。

例如:有一个多用户系统,可同时容纳40个用户,它们都执行一个文本编辑程序,该文本编辑程序含有160KB的代码和40KB的数据。
答:如不共享,共需16040+4040=8MB的内存空间来支持40个用户。
若代码是可重入的,则无论是分页系统还是分段系统都可以共享该代码段,因此内存只需留一个文本编辑程序,所需空间为160+40*40=1760KB。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3 段页式存储管理

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_57038791/article/details/128678406
今日推荐