7.存储模型

7.1基本概念——地址重定位(relocation)(地址转换、地址映射、地址翻译)

已了解知识复习:

  • 程序装载到内存才可以运行:通常,程序以可执行文件格式保存在磁盘上;
  • 多道程序设计模型:允许多个程序同时进入内存;
  • 每个进程有自己的地址空间:一个进程执行时不能访问另一个进程的地址空间,进程不能执行不适合的操作。

需要解决的问题为:将进程A,B,C,D等的地址空间装载到物理内存,并合理分配内存。

进程地址空间分为内核地址空间用户地址空间:进程中的地址不是最终的物理地址,即每个进程都有自己独立的地址空间,它的编址(指令、数据所在的地址)不是内存的物理地址。因此在进程运行前无法计算出物理地址(因为不能确定进程被加载到内存什么地方)。由此引出地址重定位机制解决从进程空间的地址到物理地址的转换问题。

地址重定位:为了保证CPU执行指令时可正确访问内存单元,需要将用户程序中的逻辑地址转换为运行时可由机器直接寻址的物理地址,这一过程称为地址重定位

  • 进程空间的地址称为逻辑地址(又称为相对地址、虚拟地址):用户程序经过编译、汇编后形成目标代码,目标代码通常采用相对地址的形式,其首地址为0,其余地址都相对于首地址而编址。不能用逻辑地址在内存中读取信息;
  • 物理地址(绝对地址、实地址):内存中存储单元的地址,可直接寻址。

地址重定位分为静态重定位动态重定位

  • 静态重定位:当用户程序加载到内存时,一次性实现逻辑地址到物理地址的转换。——一般可以由软件完成。
  • 动态重定位:在进程执行过程中进行地址变换,即逐条指令执行时完成地址转换。——需要硬件部件支持。

7.2物理内存管理

对于物理内存可等长或不等长划分。即每一段内存长度不一样:

  • 对于等长划分来说,其数据结构可以为:位图(每个分配单元对应于位图中的一位,0表示空闲,1表示占用或者相反);
  • 对于不等长划分来说,其数据结构可以为:空闲区表/已分配区表(表中每一项记录了空闲区(或已分配区)的起始地址、长度、标志)或空闲块链表。

以空闲区表/已分配区表为例的内存分配算法:

  • 首次适配first fit:在空闲区表找到第一个满足进程要求的空闲区;
  • 下次适配 next fit:从上次找到的空闲区处接着查找;
  • 最佳适配best fit:查找整个空闲区表,找到能满足进程要求的最小空闲区;
  • 最差适配worst fit:总是分配满足进程要求的最大空闲区。

找到满足要求的空闲区 后,将其分割为两部分,一部分供进程使用,另一部分形成新的空闲区

进程结束后要进行内存回收:

  • 内存回收算法:当某一块归还后,前后空闲空间合并,修改内存空闲区表。分为四种状况:上相邻、下相邻、上下都相邻、上下都不相邻。

7.3伙伴系统——linux底层内存管理采用的一种方案,是一种经典的内存分配算法(特殊的分离适配算法)

伙伴系统主要思想:将内存按2的幂进行划分,组成若干空闲块链表,查找该链表找到能满足进程需求的最佳匹配块。其算法步骤为:

  • 首先将整个可用空间看作一块:2^U
  • 假设进程申请的空间大小为s,如果满足2^(U-1)<s<=2^U,则分配整个块,否则,将块划分为两个大小相等的伙伴,大小为2^(U-1)。
  • 一直划分下去直到产生大于或等于s的最小块。

7.4基本内存管理方案——特点是整个进程进入内存中一片连续区域。

基本内存管理方案中装载单位为进程,有以下几种方案:

  • 单一连续区;
  • 固定分区;
  • 可变分区;
  • 页式存储管理方案;
  • 段式存储管理方案;
  • 段页式存储管理方案。

单一连续区:特点是一段时间内只有一个进程在内存,优点是简单,缺点是内存利用率低。

固定分区:把内存空间分割成若干 区域,称为分区。每个分区的大小可以相同也可以不同,但一旦决定,分区大小固定不变,此外,每个分区装一个且只能装一个进程。

可变分区:根据进程的需要,把内存空闲空间分割出一个分区,分配给该进程。剩余部分成为新的空闲区。但可变分区会导致碎片问题的产生。

碎片问题:指内存中有很多很小的不易利用的空闲区,碎片如果太多,进程进入内存的需求不能满足,但是系统中又有很多小的空闲区,因此内存利用率将会下降。

针对碎片问题,采用紧缩技术(又称为压缩技术、紧致技术、搬家技术)来解决,即在内存移动程序,将所有小的空闲区合并为较大的空闲区。在紧缩时需要考虑到系统开销移动时机两个问题。

 

7.5交换技术——解决在较小的内存空间运行较大的进程

内存“扩充”技术——采用软件技术或软硬件结合使得一个大的进程在一个较小的物理内存空间运行:

(1)内存紧缩技术(例如:可变分区);

(2)覆盖技术 overlaying;

(3)交换技术swapping;

(4)虚拟存储技术virtual memory。

 

覆盖技术(overlaying)(主要用于早期的操作系统)——解决程序大小超过物理内存总和的问题。缺点是对用户不透明,增加用户负担。具体做法如下:

  • 程序执行过程中,程序的不同部分在内存中相互替代:
  1. 按照其自身的逻辑结构,将那些不会同时执行的程序段共享同一块内存区域;
  2. 要求程序各模块之间有明确的调用结构。
  • 程序员声明覆盖结构,操作系统完成自动覆盖。

 

交换技术(swapping)——设计思想:内存空间紧张时,系统将内存中某些进程暂时移到外存,把外存中某些进程换进内存,占据前者所占用的区域(进程在内存与磁盘之间的动态调度)。在实现交换技术时将会遇到以下多种问题:

  • 进程的哪些内容要交换到磁盘?会遇到什么困难?
  1. 运行时动态创建或修改过的内容:栈和堆。
  • 在磁盘的什么位置保存被换出的进程?
  1. 交换区(Windows中叫做页文件):一般系统会指定一块特殊的磁盘区域作为交换空间(swap space),包含连续的磁道,操作系统可以使用底层的磁盘读写操作对其高效访问。
  • 交换时机?
  1. 只要不用就换出(很少再用);内存空间不够或有不够的危险时换出,与调度器结合使用。
  • 如何选择被换出的进程?
  1. 考虑进程的各种属性;不应换出处于等待I/O状态的进程。
  • 如何处理进程空间增长?
  1. 预留空间或同向增长。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值