第4章 存储器管理
第4章 存储器管理
4.1 存储器的层次结构
4.2 程序的装入和链接
4.2.1 程序的装入
静态重定位
动态重定位
4.3 连续分配存储器管理方式(重点 2大题)
4.3.1 单一连续分配
- 原理:内存分为两个区域:系统区,用户区。用户区作为一个连续的分区分配给一个作业使用。
- 优点:方法简单,易于实现
- 缺点:单道、浪费内存
4.3.2 固定分区分配
- 原理:把内存分为一些大小相等或不等的分区,每个应用
程序占用一个或几个分区。操作系统占用其中一个分区。 - 优点:易于实现,开销小。
- 缺点:分区总数固定,限制了并发执行的程序数目;内碎片造成浪费;作业大小受分区大小的限制。(内碎片,又称内零头,是指占用分区之内未被利用的空间)
4.3.3 动态分区分配
- 动态创建分区,内存预先不分区,在装入程序时按其初始要求分配,或在其执行过程中通过系统调用进行分配或改变分区大小。
- 优点:没有内碎片。
- 缺点:有外碎片。(外碎片,外零头,是指占用分区之间难以利用的空闲分区(通常是小空闲分区))
1、内存分配
2、内存回收
示例:
- 加入一个结点
- 修改结点大小
- 修改结点首地址和结点大小
- 修改结点首地址和结点大小
第一种 基于顺序搜索的4种分配算法
1.首次适应算法(first fit,FF) 首–>尾
- 定义:
查找未分配区表或链表,直至找到第一个能满足长度要求的空闲区为止,分割此区,一部分分配给作业,另一部分仍为空闲区(若有)。
2.循环首次适应算法(next fit,NF)
- 定义:
总是从未分配区的上次扫描结束处顺序查找未分配区表或链表,直至找到第一个能满足长度要求的空闲区为止,分割此区,一部分分配给作业,另一部分仍为空闲区(若有)。- 优缺点:
是首次适应算法的变种。
缩短平均查找时间,且存储空间利用率更加均衡。
缺乏大的空闲区。
3.最佳适应算法(best fit,BF) 小–>大
- 定义:
扫描整个未分配区表或链表,从空闲区中挑选一个能满足用户进程要求的最小分区进行分配。- 优缺点:
空闲区按长度递增顺序排列。(时间开销大)
存储器留下许多难以利用的碎片。
4.最坏适应算法(worst fit,BF) 大–>小
- 定义:
扫描整个未分配区表或链表,总是挑选一个最大的空闲区
分割给作业使用。- 优缺点:
空闲区按长度递减顺序排列。
剩下的空闲区不至于过小,对中小型作业有利。
算法示例
作业
课内作业:
- 某系统采用动态分区分配方式管理内存,内存空间为700K,低端100水用来存放操作系统。在内存分配时,系统优先使用空闲区低端的空间。对下列请求序列:
作业1申请130K
作业2申请60K
作业3申请100K
作业2释放60K
作业4申请200K
作业3释放100K
作业1释放130K
作业5申请140K
作业6申请60K
作业7申请50K
作业6释放60K
问: 请分别画图表示出首次适应算法、最佳适应算法和最坏适应算法进行内存分配和回收后,内存的实际使用情况。
答:
4.3.5 第二种 基于索引搜索的分配算法
1.伙伴系统
- 无论已分配分区或空闲分区,其大小均为2的K次幂(K为整数,1<K<=m),通常 2 m 2^m 2m 是整个可分配内存的大小(也就是最大分区的大小)。
- 当需要为进程分配一个长度为的存储空间时,首先计算一
个 i 值,使 2 i − 1 < n < = 2 i 2^{i-1}<n<=2^i 2i−1<n<=2i。- 时间性能优于顺序搜索算法,空间性能比顺序搜索法略差。
- 并行系统中广泛使用。
作业
课内作业:
某系统驻留空间为1024KB,采用伙伴系统分配其内存,对于下列的请求序列:
作业A请求240KB
作业B请求120KB
作业C请求60KB
作业B释放
作业D请求130KB
作业C释放
请画出进行上述分配和回收后,内存实际使用的情况。
4.3.6 动态可重定位分区分配
4.4 对换(不讲 课后阅读)
4.5 分页存储管理方式(大题)
离散分配的存储管理方式
定义
- 分页存储管理方式 (计算机)
将用户程序的地址空间分为若干个固定大小的区域,称为“页”或“页面”。- 分段存储管理方式 (人)
将用户程序的地址空间分为若干个大小不同的段,每段可定义一组相对完整的信息。称为“段”。- 段页式存储管理方式
4.5.1 分页存储管理的基本方法
定义
- 页面:将进程的逻辑地址空间分成若干个页,并为各页加以编号。相应的,也把内存的物理地址空间分成若干块。在为进程分配内存时,以块为单位,将进程的若干页分别装入到多个物理块中。
- 页面大小:页面大小适中,且页面大小应该是2的幂。
- 地址结构(必考)
- 页表:
为每一个进程建立的页面映像表,在内存中存储页号和块号。
实现从页号到物理块号的地址映射。
示例
示例1:
16位操作系统
- 页面大小:
L = 2 10 = 1024 B = 1 K B L=2^{10}=1024B=1KB L=210=1024B=1KB- 页面最多:
2 6 = 64 2^6=64 26=64个。- 页表最多占用(每个页表项占用1个字节):
页表项数 ∗ 页表项大小 = 64 ∗ 1 B = 64 B 页表项数*页表项大小=64*1B=64B 页表项数∗页表项大小=64∗1B=64B- 储存页表的物理块数:
页表最多占用/物理块大小=64/1024
小于0时:1个物理块足以。
示例2:
32位操作系统
- 页面大小:
L = 2 12 = 4 ∗ 1024 B = 4 K B L=2^{12}=4*1024B=4KB L=212=4∗1024B=4KB- 页面最多:
2 20 = 1024 ∗ 1024 2^{20}=1024*1024 220=1024∗1024个。- 页表最多占用(每个页表项占用1个字节):
页表项数 ∗ 页表项大小 = 1024 ∗ 1024 ∗ 1 B = 1024 K B = 1 M B 页表项数*页表项大小=1024*1024*1B=1024KB=1MB 页表项数∗页表项大小=1024∗1024∗1B=1024KB=1MB- 储存页表的物理块数:
页表最多占用 / 物理块大小 = 1024 K B / 4 K B = 256 页表最多占用/物理块大小=1024KB/4KB=256 页表最多占用/物理块大小=1024KB/4KB=256个
示例3:
如何实现地址映射,页面大小: 2 10 = 1024 B 2^{10}=1024B 210=1024B
逻辑地址5000可转换为:
4 ∗ 1024 + 904 4*1024+904 4∗1024+904
- 页表放在哪里?内存
- 如何访问?访问内存
- 是否还存在碎片?可能存在
- 页面大小如何确定?根据地址空间
- pcb:在内存中存储页表地址
- 存储单位换算关系:
小到大:b、B、KB、MB、GB、TB
1 B y t e = 8 b i t 1 Byte=8 bit 1Byte=8bit
1 K B = 1024 B 1KB=1024B 1KB=1024B
1 M B = 1024 K B 1MB=1024KB 1MB=1024KB
1 G B = 1024 M B 1GB=1024MB 1GB=1024MB
1 T B = 1024 G B 1TB=1024GB 1TB=1024GB
4.5.2 地址变换机构 (必考)
1.基本地址变换
访问数据时访问内存次数
- 通过pcb访问数据:访问内存3次
访问 p c b ( 内存中 ) → 访问页表 ( 内存中 ) → 访问数据 ( 内存中 ) 访问pcb(内存中)\to 访问页表(内存中)\to 访问数据(内存中) 访问pcb(内存中)→访问页表(内存中)→访问数据(内存中)- 通过寄存器访问数据:访问内存2次
页表寄存器 → 页表 ( 内存中 ) → 数据地址 ( 内存中 ) 页表寄存器\to 页表(内存中)\to 数据地址(内存中) 页表寄存器→页表(内存中)→数据地址(内存中)- 通过快表访问数据:访问内存1次
快表 → 数据地址 ( 内存中 ) 快表\to 数据地址(内存中) 快表→数据地址(内存中)
示例1:
如何实现地址映射,逻辑地址为2500,内存地址为
答:
- 逻辑地址 → \rarr →页面地址: 2500 / 1024 = [ 2 , 452 ] 2500/1024=[2,452] 2500/1024=[2,452]
- 页面地址 → \rarr →物理块地址: [ 2 , 452 ] → [ 6 , 452 ] [2,452]\to[6,452] [2,452]→[6,452]
- 物理块地址 → \rarr →内存地址: [ 6 , 452 ] → 6596 [6,452]\to6596 [6,452]→6596
2.快表
快表:增设一个具有并行查寻能力的特殊高速缓冲寄存器。