第4章 存储器管理

第4章 存储器管理

4.1 存储器的层次结构

在这里插入图片描述


4.2 程序的装入和链接

4.2.1 程序的装入

静态重定位
动态重定位


4.3 连续分配存储器管理方式(重点 2大题)

4.3.1 单一连续分配
  • 原理:内存分为两个区域:系统区,用户区。用户区作为一个连续的分区分配给一个作业使用。
  • 优点:方法简单,易于实现
  • 缺点:单道、浪费内存
    在这里插入图片描述
4.3.2 固定分区分配
  • 原理:把内存分为一些大小相等或不等的分区,每个应用
    程序占用一个或几个分区。操作系统占用其中一个分区。
  • 优点:易于实现,开销小。
  • 缺点:分区总数固定,限制了并发执行的程序数目;内碎片造成浪费;作业大小受分区大小的限制。(内碎片,又称内零头,是指占用分区之内未被利用的空间)
    在这里插入图片描述
4.3.3 动态分区分配
  • 动态创建分区,内存预先不分区,在装入程序时按其初始要求分配,或在其执行过程中通过系统调用进行分配或改变分区大小。
  • 优点:没有内碎片。
  • 缺点:有外碎片。(外碎片,外零头,是指占用分区之间难以利用的空闲分区(通常是小空闲分区))

1、内存分配
在这里插入图片描述
2、内存回收
在这里插入图片描述

示例:
在这里插入图片描述

  1. 加入一个结点
    在这里插入图片描述
  2. 修改结点大小
    在这里插入图片描述
  3. 修改结点首地址和结点大小
    在这里插入图片描述
  4. 修改结点首地址和结点大小
    在这里插入图片描述

第一种 基于顺序搜索的4种分配算法
1.首次适应算法(first fit,FF) 首–>尾
  1. 定义:
    查找未分配区表或链表,直至找到第一个能满足长度要求的空闲区为止,分割此区,一部分分配给作业,另一部分仍为空闲区(若有)。

2.循环首次适应算法(next fit,NF)
  1. 定义:
    总是从未分配区的上次扫描结束处顺序查找未分配区表或链表,直至找到第一个能满足长度要求的空闲区为止,分割此区,一部分分配给作业,另一部分仍为空闲区(若有)。
  2. 优缺点:
    是首次适应算法的变种。
    缩短平均查找时间,且存储空间利用率更加均衡。
    缺乏大的空闲区。

3.最佳适应算法(best fit,BF) 小–>大
  1. 定义:
    扫描整个未分配区表或链表,从空闲区中挑选一个能满足用户进程要求的最小分区进行分配。
  2. 优缺点:
    空闲区按长度递增顺序排列。(时间开销大)
    存储器留下许多难以利用的碎片。

4.最坏适应算法(worst fit,BF) 大–>小
  1. 定义:
    扫描整个未分配区表或链表,总是挑选一个最大的空闲区
    分割给作业使用。
  2. 优缺点:
    空闲区按长度递减顺序排列。
    剩下的空闲区不至于过小,对中小型作业有利。

算法示例

在这里插入图片描述


作业

课内作业:

  1. 某系统采用动态分区分配方式管理内存,内存空间为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 2i1<n<=2i
  • 时间性能优于顺序搜索算法,空间性能比顺序搜索法略差。
  • 并行系统中广泛使用。
    在这里插入图片描述
作业

课内作业:
某系统驻留空间为1024KB,采用伙伴系统分配其内存,对于下列的请求序列:
作业A请求240KB
作业B请求120KB
作业C请求60KB
作业B释放
作业D请求130KB
作业C释放
请画出进行上述分配和回收后,内存实际使用的情况。
在这里插入图片描述


4.3.6 动态可重定位分区分配

4.4 对换(不讲 课后阅读)


4.5 分页存储管理方式(大题)

离散分配的存储管理方式

定义

  1. 分页存储管理方式 (计算机)
    将用户程序的地址空间分为若干个固定大小的区域,称为“页”或“页面”。
  2. 分段存储管理方式 (人)
    将用户程序的地址空间分为若干个大小不同的段,每段可定义一组相对完整的信息。称为“段”。
  3. 段页式存储管理方式
4.5.1 分页存储管理的基本方法

定义

  1. 页面:将进程的逻辑地址空间分成若干个页,并为各页加以编号。相应的,也把内存的物理地址空间分成若干块。在为进程分配内存时,以块为单位,将进程的若干页分别装入到多个物理块中。
  2. 页面大小:页面大小适中,且页面大小应该是2的幂。
  3. 地址结构(必考)
    在这里插入图片描述
  4. 页表:
    为每一个进程建立的页面映像表,在内存中存储页号和块号。
    实现从页号到物理块号的地址映射。

示例

示例1:
16位操作系统
在这里插入图片描述

  1. 页面大小:
    L = 2 10 = 1024 B = 1 K B L=2^{10}=1024B=1KB L=210=1024B=1KB
  2. 页面最多:
    2 6 = 64 2^6=64 26=64个。
  3. 页表最多占用(每个页表项占用1个字节):
    页表项数 ∗ 页表项大小 = 64 ∗ 1 B = 64 B 页表项数*页表项大小=64*1B=64B 页表项数页表项大小=641B=64B
  4. 储存页表的物理块数:
    页表最多占用/物理块大小=64/1024
    小于0时:1个物理块足以。

示例2:
32位操作系统
在这里插入图片描述

  1. 页面大小:
    L = 2 12 = 4 ∗ 1024 B = 4 K B L=2^{12}=4*1024B=4KB L=212=41024B=4KB
  2. 页面最多:
    2 20 = 1024 ∗ 1024 2^{20}=1024*1024 220=10241024个。
  3. 页表最多占用(每个页表项占用1个字节):
    页表项数 ∗ 页表项大小 = 1024 ∗ 1024 ∗ 1 B = 1024 K B = 1 M B 页表项数*页表项大小=1024*1024*1B=1024KB=1MB 页表项数页表项大小=102410241B=1024KB=1MB
  4. 储存页表的物理块数:
    页表最多占用 / 物理块大小 = 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 41024+904

  1. 页表放在哪里?内存
  2. 如何访问?访问内存
  3. 是否还存在碎片?可能存在
  4. 页面大小如何确定?根据地址空间
  5. pcb:在内存中存储页表地址
  6. 存储单位换算关系:
    小到大: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.基本地址变换

在这里插入图片描述

访问数据时访问内存次数

  1. 通过pcb访问数据:访问内存3次
    访问 p c b ( 内存中 ) → 访问页表 ( 内存中 ) → 访问数据 ( 内存中 ) 访问pcb(内存中)\to 访问页表(内存中)\to 访问数据(内存中) 访问pcb(内存中)访问页表(内存中)访问数据(内存中)
  2. 通过寄存器访问数据:访问内存2次
    页表寄存器 → 页表 ( 内存中 ) → 数据地址 ( 内存中 ) 页表寄存器\to 页表(内存中)\to 数据地址(内存中) 页表寄存器页表(内存中)数据地址(内存中)
  3. 通过快表访问数据:访问内存1次
    快表 → 数据地址 ( 内存中 ) 快表\to 数据地址(内存中) 快表数据地址(内存中)

示例1:
如何实现地址映射,逻辑地址为2500,内存地址为
答:

  1. 逻辑地址 → \rarr 页面地址: 2500 / 1024 = [ 2 , 452 ] 2500/1024=[2,452] 2500/1024=[2452]
  2. 页面地址 → \rarr 物理块地址: [ 2 , 452 ] → [ 6 , 452 ] [2,452]\to[6,452] [2452][6452]
  3. 物理块地址 → \rarr 内存地址: [ 6 , 452 ] → 6596 [6,452]\to6596 [6452]6596
2.快表

快表:增设一个具有并行查寻能力的特殊高速缓冲寄存器。


4.5.3 访问内存的有效时间(课后阅读)

4.5.4 两级和多级页表

4.5.5 反置页表(课后阅读)

4.6 分段存储管理方式

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

folielxx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值