计算机操作系统(慕课版)第五章 存储器管理 学习笔记

第五章 存储器管理

在这里插入图片描述
1.1 存储器的层次结构

  • 存储器的层次结构
    • 速度由快到慢
    • 容量由小到大
    • 寄存器和主存掉电后存储的信息不再存在
    • 辅存的信息长期保存

在这里插入图片描述
1.2
物理地址(绝对地址)
物理内存的地址,内存以字节为单位编址
物理地址空间:所有物理地址的集合

逻辑地址(虚拟地址、相对地址)
由CPU产生的地址,即程序编译后使用的相对于0字节的地址
逻辑地址空间:由程序所生成的所有逻辑地址的集合

1.3 可重定位装入方式(静态重定位)

  • 一次性实现逻辑地址到物理地址的转换,以后不再转换。
    • 重定位:逻辑地址转换为物理地址的过程,也称为地址变换
    • 在装入时,完成重定位
    • 需硬件支持
  • 缺点:一个程序通常需要占用连续的内存空间,程序装入内存后不能移动。不易实现共享。

重定位:把作业地址空间中使用的逻辑地址变换成内存空间中的物理地址的过程。又称地址映射。
在这里插入图片描述
物理地址=逻辑地址+程序在内存的起始地址

2.1 连续分配存储管理方式
连续分配方式: 指为一个用户程序分配一片连续的内存空间。
单一连续分配,固定分区分配 ,动态分区分配,动态可重定位分区分配

2.2 单一连续分配
分配方式:单道程序环境下,仅装有一道用户程序,即整个内存的用户空间由该程序独占。

  • 优点:管理简单。
  • 缺点:不支持多道;内存空间浪费大,各类资源的利用率也不高;

存储管理方法:通过增加界限寄存器,划分os区与用户区。
采用静态链接、静态重定位方式装入。
作业一旦进入内存,就要等待它运行结束后才能释放内存。
在这里插入图片描述
2.3 分区分配方式存储管理
将内存分成若干个分区(大小相等/不相等),除OS占一区外,其余的每一个分区容纳一个用户程序。
按分区的变化情况,可将分区存储管理进一步分为:

  • 固定分区
  • 动态分区
    (1)固定分区分配
  • 实现原理:
    • 预先把可分配的主存储器空间分割成若干个连续区域,称为一个分区。
    • 分区的大小可以相等,也可以不等,但分区大小固定不变,每个分区装一个且只能装一个作业。
  • 数据结构:系统需建立一张分区说明表或使用表
  • 主要特点:管理简单,但因作业的大小并不一定与某个分区大小相等,从而使一部分存储空间被浪费。所以主存的利用率不高。

在这里插入图片描述
例如:
在某系统中,采用固定分区分配管理方式,内存分区(单位字节)情况如图所示,现有大小为1K、9K、33K、121K的多个作业要求进入内存,试画出它们进入内存后的空间分配情况,并说明主存浪费多大?
在这里插入图片描述
解答:
在这里插入图片描述
主存浪费空间=(8-1)+(32-9)+(120-33)+(331-121)=7+23+87+210=327(k)

(2)动态分区分配方式

  • 又称为可变分区分配,根据进程的实际需要,动态地为之分配内存空间。
  • 实现原理:
    • 在作业进入内存时,根据作业的大小动态地建立分区,并使分区的大小正好适应作业的需要。
    • 因此系统中分区的大小是可变的,分区的数目也是可变的。
  • 数据结构:空闲分区表、空闲分区链
  • 分配算法:顺序式分配算法、索引式分配算法
    在这里插入图片描述
    在这里插入图片描述
    3.1 分配算法
    首次适应算法、循环首次适应算法、最佳适应算法、最坏适应算法

3.2 基于顺序搜索的首次适应算法
为作业选择分区时总是按地址从低到高搜索,只要找到可以容纳该作业的空白块,就把该空白块分配给该作业。
空闲分区链以地址递增的次序链接
从链首开始顺序查找,直到找到一个大小能满足要求的空闲分区为止
缺点:低址部分留下许多小碎片

例如:
系统中的空闲分区表如下,现有三个作业分配申请内存空间100K、30K及7K。给出按首次适应算法的内存分配情况及分配后空闲分区表。
在这里插入图片描述

解:按首次适应算法,
申请作业100k,分配3号分区,剩下分区为20k,起始地址160K ;
申请作业30k, 分配1号分区,剩下分区为2k,起始地址50K ;
申请作业7k, 分配2号分区,剩下分区为1k,起始地址59K ;
其内存分配图及分配后空闲分区表如下
在这里插入图片描述

3.3 基于顺序搜索的循环首次适应算法(下次适应算法)
从上次找到的空闲分区的下一个空闲分区开始查找,直到找到一个能满足要求的空闲分区
空闲分区分布更均匀,减少了查找的开销
缺点:缺乏大的空闲分区

例 :系统中的空闲分区表如下,现有三个作业分配申请内存空间100K、30K及7K。给出按循环首次适应算法的内存分配情况及分配后空闲分区表。
在这里插入图片描述
解:按循环首次适应算法,
申请作业100k,分配3号分区,剩下分区为20k,起始地址160K;
申请作业30k,分配4号分区,剩下分区为301k,起始地址210K ;
申请作业7k,分配1号分区,剩下分区为25k,起始地址27K ;
其内存分配图及分配后空闲分区表如下
在这里插入图片描述
3.4 基于顺序搜索的最佳适应算法
在进行内存分配时,从空闲分区表首开始顺序查找,直到找到第一个满足其大小要求的空闲分区为止。
空闲分区按其容量从小到大的顺序链接
搜索整个序列,找到适合条件的最小的分区进行分配
优点:用最小空间满足要求;
缺点:留下许多难以利用的小碎片

例 :系统中的空闲分区表如下,现有三个作业分配申请内存空间100K、30K及7K。给出按最佳适应算法的内存分配情况及分配后空闲分区表。
在这里插入图片描述
申请作业100k,分配3号分区,剩下分区为20k,起始地址160K;
申请作业30k, 分配2号分区,剩下分区为2k,起始地址50K ;
申请作业7k, 分配1号分区,剩下分区为1k,起始地址59K ;

在这里插入图片描述
在这里插入图片描述
3.5 基于顺序搜索的最坏适应算法
空闲分区按其容量从大到小的顺序链接
搜索整个序列,寻找最大的分区进行分配
优点:分割后空闲块仍为较大空块;
缺点:缺乏大的空闲分区

例 :系统中的空闲分区表如下,现有三个作业分配申请内存空间100K、30K及7K。给出按最坏适应算法的内存分配情况及分配后空闲分区表。
在这里插入图片描述
解:申请作业100k,分配1号分区,剩下分区为231k,起始地址280K;
申请作业30k,分配1号分区,剩下分区为201k,起始地址310K ;
申请作业7k, 分配1号分区,剩下分区为194k,起始地址317K
在这里插入图片描述
在这里插入图片描述

3.6 基于索引搜索的分配算法
1.快速适应算法

  • 将空闲分区按其容量大小进行分类,具有相同类别容量的所有空闲分区设有一个空闲分区链表
  • 系统设有一张管理索引表,每一项对应一个空闲分区类型
  • 分配时,根据进程长度,从索引表中寻找到能容纳它的最小空闲分区链表;从链表中取下第一块进行分配
  • 特点
    • 优点:不分割分区,不产生碎片,查找效率高
    • 缺点:分区归还主存时算法复杂,系统开销较大,存在浪费

. 伙伴系统(buddy system)
固定分区:限制活动进程的数目,内存利用率低。
动态分区:算法复杂,系统开销大
伙伴系统规定,无论已分配分区或空闲分区,其大小均为2的k次幂,k为整数,l≤k≤m,其中:21表示分配的最小分区的大小,2m表示分配的最大分区的大小,通常2m是整个可分配内存的大小

在这里插入图片描述
3)哈希算法

  • 建立哈希函数,构造一张以空闲分区大小为关键字的哈希表,该表的每一个表项对应于一个空闲分区链表的头指针。
  • 进行分配时,根据空闲区大小,通过计算哈希函数,得到在哈希表中的位置,找到对应的空闲分区链表。
  • 优点:查找快速!

4.1 分区分配操作 (这个看书,书上挺详细)

  1. 分配内存
    设请求的分区大小为u.size,表中每个空闲分区的大小可表示为m.size。
    若m.size-u.size≤size(size是事先规定的不再切割的剩余分区的大小),说明多余部分太小,可不再切割,将整个分区分配给请求者;
    否则从该分区中按请求的大小划分出一块内存空间分配出去,余下的部分仍留在空闲分区链(表)中。
    在这里插入图片描述
    4.2 内存回收
    在这里插入图片描述
    在分区存储管理方式中,必须把作业装入到一片连续的内存空间。
    如果系统中有若干个小的分区,其总容量大于要装入的作业,但由于它们不相邻接,也将致使作业不能装入内存。

4.3 动态重定位分区分配

例 :如图所示系统中有四个小空闲分区,不相邻,但总容量为90KB,如果现有一作业要求分配40KB的内存空间,由于系统中所有空闲分区的容量均小于40KB,故此作业无法装入内存。
这种内存中无法被利用的存储空间称为“零头”或“碎片”.
在这里插入图片描述
内部碎片:指分配给作业的存储空间中未被利用的部分。如固定分区中存在的碎片。
外部碎片:指系统中无法利用的小的空闲分区。如动态分区中存在的碎片。
在这里插入图片描述

4.4 动态重定向
动态运行时装入时,程序指令在执行时将相对地址转换为绝对(物理)地址的方法叫做动态重定位。
在系统中增设一个重定位寄存器,用它来存放程序(数据)在内存中的起始地址。
在这里插入图片描述
动态分区分配算法流程图
5.1 分页存储管理方式
把物理内存分成大小固定的块,称为物理块(frame)。(大小为2的幂,通常为1KB~8KB)
把逻辑内存也分成固定大小的块,称为页(page)。

各页从0开始编号。
内存空间中的块,称为物理块或页框(frame),同样从0开始编号。
运行一个有N页大小的程序,需要找到N个空的页框来装入程序
页和块通过页表一一对应
存在页内碎片:进程最后一页经常装不满,而形成不可利用的碎片。
在这里插入图片描述
若页面较小:
优点:减少页内碎片和内存碎片的总空间,有利于提高内存利用率。
缺点:每个进程页面数增多,从而使页表长增加,占用内存就较大。页面换进换出速度将降低。
若页面较大:
优点:每个进程页面数减少,页表长度减少,占用内存就较小。页面换进换出速度将提高。
缺点:会增加页内碎片不利于提高内存利用率。

5.1 地址结构
在这里插入图片描述

  • 页号P
    • 12-31位:20位
    • 地址空间最多允许有1M(2的20次方)页
  • 位移量W(页内地址)
    • 0-11:12位
    • 每页大小为4KB (2的12次方)
      物理地址:物理地址
      地址长为22位,其中0-11位为块内地址,即每块的大小为2的12次方=4KB,与页相等
      12-21位为块号,内存地址空间最多允许2的10次方 =1K块。

例题:
设有一页式存储管理系统,向用户提供的逻辑地址空间最大为16页,每页2048B,内存总共有8个存储块,试问逻辑地址至少应为多少位?内存空间有多大?
在这里插入图片描述
解:(1)每页的大小:2048B=2的11次方B,所以页内地址为11位。
最多允许的页数:16页=2的4次方页,所以页号为4位。
故逻辑地址至少应为11+4=15位。
(2) 由于块的大小与页大小相等,所以块内地址也为11位。
最多允许的块数:8块=2的3次方块,所以块号为3位。
故内存空间至少应为14位,
内存空间=2的14次方 =16KB

对某特定机器,其地址结构是一定的。
若给定一个逻辑地址空间中的地址为A,页面的大小为L,则页号P和页内地址d可按下式求得:
在这里插入图片描述
其中,INT:整除函数,MOD:取余函数
例如:系统页面大小为1KB,设A=5168B,则P=5,d=48

例:已知逻辑地址为2230,每页大小为1KB,则对应页号及页内地址为多少?

A=2230 L=1024
P=[2230/1024]=2
d=2230-2048=182

5.3 页表
系统为每个进程建立了一张页表。
逻辑地址空间内的所有页,依次在页表中有一表项,记录相应页在内存中对应的物理块号。
页表的作用:实现从页号到块号的地址映射。

在这里插入图片描述
5.4 引入快表后的有效访问时间EAT

  • 查找快表需要的时间为 λ
  • 假设访问内存一次需要的时间为t
    EAT = t + t = 2t (基本分页存储系统中)
  • 命中率—在联想寄存器中找到页号的百分比,比率与联想寄存器的大小有关,假设为a
  • 引入快表的有效访问时间 (EAT)
    EAT = λ * a + (t + λ)(1 – a) + t

例: 有一页式系统,其页表存放在主存中。
(1)如果对主存的一次存取需要100ns,试问实现一次页面访问的存取时间是多少?
(2)如果系统加有快表,对快表的一次存取需要20ns,若平均命中率为85%,试问此时的存取时间为多少?

解:(1)实现一次页面访问的存取时间为: 100ns2=200ns
(2)系统加有快表,则实现一次页面访问的存取时间为: 0.85
(20ns+100ns)+(1-0.85)(20ns+2100ns)=135ns
在这里插入图片描述

5.5 两级页表
例子(32位逻辑地址空间)
页面大小为4KB时(12位),若采用一级页表结构,应具有20位的页号,即页表项应有1M个;
在采用两级页表结构时,再对页表进行分页,使每页中包含210个页表项,最多允许有210个页表分页。
地址变换机构上,增设一个外层页表寄存器
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
5.6 多级页表
如果页面大小为4KB,那么还剩下52位,假定物理块大小为4K来划分页表,则余下的42位用于外层页号。此时在外层页表中可能有4096G个页表项,要占用16384GB的连续内存空间
在这里插入图片描述
5.7 反置页表

引入目的:为减少页表占用的内存空间
结构:一个系统一张页表,对每个内存物理块设置一个页表项。
页表项内容:页号,以及拥有这个页的进程的pid
优点:减少了需要储存每个页表的内存,
缺点:访问一个页时,增加了寻找页表需要的时间。
可使用哈希表来将查找限制在一个或少数几个页表条目。
AS/400、IBM RISC System 和IBM RT采用

反置页表地址转换机制
反置页表地址转换机制
地址变换

  • 根据进程标识符和页号,去检索反置页表。
  • 如果检索到与之匹配的页表项,则该页表项(中)的序号i便是该页所在的物理块号,可用该块号与页内地址一起构成物理地址送内存地址寄存器。
  • 若检索了整个反置页表仍未找到匹配的页表项,则表明此页尚未装入内存,需要调页。

一台机器有48位虚地址和32位物理地址,若页长为8KB,问页表共有多少个页表项?如果设计一个反置页表,则有多少个页表项?
页表项: 2 ^ 48 / 8192 = 34359738368
反置页表: 2 ^ 32 / 8192 = 524288

5.8 分段存储管理方式
(1) 引入目的1:为了满足用户(程序员)在编程和使用上多方面的要求
一个程序是一些段的集合,一个段是一个逻辑单位,如:
main program,
procedure,
function,
local variables, global variables,
common block,
stack,
symbol table, arrays
引入目的2:由于分页式存储在共享数据方面存在一定的缺陷

  • 需要共享的程序段往往不能正好放在某一个或某几个页内,故在进行共享时若将所处页面都共享出去则必将导致一些不需共享的数据被共享
  • 若某段程序需要增加数据而使程序段增长时,页式不易实现

(2) 分段系统的基本原理
将用户作业的逻辑地址空间划分成若干个段,每段定义一组逻辑信息。
每个段都有自己的名字,通常用一个段号来代替段名,每个段都从0开始编址,并存储在一段连续的地址空间内,段内地址连续,段间离散。
段的长度由相应的逻辑信息组的长度决定,因此各段长度不等。
在这里插入图片描述

  • 在系统中为每个进程建立一张段映射表(段表),用于实现从逻辑段到物理内存区的映射。
  • 段表常驻内存中,由控制寄存器保存其地址。
  • 每个段在表中占有一个表项,记录了该段在内存中的起始地址(基址)和段的长度。

在这里插入图片描述

(3)利用段表实现地址映射
在这里插入图片描述

例:在一个段式存储管理系统中,其段表为:
段号 内存起始地址 段长
0 210 500
1 2350 20
2 100 90
3 1350 590
4 1938 95
试求表中逻辑地址对应的物理地址是什么?

0430
2120

解:逻辑地址为:段号+段内地址
逻辑地址 | 0 | 430 |对应的物理地址为:210+430=640
逻辑地址| 2 | 120 | 因为段内地址120>段长90,所为该逻辑地址为非法地址。

分页和分段的主要区别在这里插入图片描述
5.7 段页式存储管理方式
结合了页式和段式的优点而形成
1.基本原理
段页式存储管理是分段和分页原理的结合,即先将用户程序分成若干个段(段式),每个进程一张段表。
再把每个段分成若干个页(页式)。每一段一张页表。
其地址结构由段号、段内页号、及页内位移三部分所组成。

练习

1.设一个逻辑地址空间有32页,每页1024字节,映射到8块的物理内存上。则逻辑地址空间需要____位,物理地址空间需要____位。
答:15 13
2.一个32位地址计算机使用两级页表。虚地址被分为9位的顶级页表部分,11位的二级页表部分和偏移部分,则页面长度为____,地址空间一共有____页。
答:2的12次方 2的20次方
3.某段式存储管理采用下表所示页表结构,试计算[0,450],[1,50],[2,70]的内存地址。其中方括号内前一元素为段号,后一元素为段内地址。当无法进行地址变换时,请说明会产生何种中断。
在这里插入图片描述
答:[0,450]内存地址为2000+450=2450
[1,50]产生“越界中断”,[2,70]产生“缺页中断”

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值