操作系统概念第八章——内存管理

内存管理

概念

1、内存空间的分配与回收
i.连续分配管理方式(单一连续分配、固定分区分配、动态分区分配)
ii.非连续分配管理方式

2、内存空间的扩充
提供某种技术从逻辑上对内存空间进行扩充(虚拟内存)

3、地址转换
逻辑地址与物理地址的转换

4、存储保护
两种方式:在CPU设置一对上、下限寄存器;采用重定位寄存器(基址寄存器,放进程的起始物理地址)和界地址寄存器(限长寄存器,放进程的最大逻辑地址)

交换技术

内存紧张时,系统将内存中某些进程暂时换出外存,把外存中某些已具备运行条件的进程换入内存(进程在内存与磁盘间动态调度)
暂时换出外存等待的进程状态为挂起状态(可分为就绪挂起、阻塞挂起)

激活
挂起
事件出现
激活
挂起
创建态
就绪态
运行态
终止态
就绪挂起
阻塞态
阻塞挂起

1、具有对换功能的操作系统,磁盘空间分为文件区和对换区两部分。文件区主要用于存放文件,主要追求存储空间的利用率,采用离散分配;对换区空间只占磁盘空间小部分,被换出的进程数据存放在对换区,主要追求换出速度,采用连续分配方式。对换区I/O速度比文件区更快

2、PCB会常驻内存,不会被换出外存

连续分配管理方式

连续分配:指为用户进程分配的必须是一个连续的内存空间

单一连续分配

i.内存被分为系统区(常占内存的低地址部分)和用户区
ii.内存中只能有一道用户程序,用户程序独占整个用户区空间
iii.优点:实现简单、无外部碎片、不一定内存保护
iv.缺点:只能用于单用户、单任务操作系统;有内部碎片(分配给某进程的内存区域中有部分没用上的就是内部碎片);存储器利用率极低

固定分区分配

i.将用户空间分割为若干个大小固定的分区(分区大小相等——缺乏灵活性、分区大小不相等——增加灵活性)
ii.建立数据结构——分区说明表(对应分区的大小、起始地址、状态——是否被分配)。实现各个分区的分配与回收
iii.优点:实现简单、无外部碎片
iv.缺点:程序太大,所有分区不能满足,采用覆盖技术——产生内部碎片,内存利用率低

动态分区分配

i.又称“可变分区分配”,不会预先划分内存分区,根据进程的大小动态地建立分区
ii.使用数据结构记录内存使用情况——空闲分区表、空闲分区链
iii.动态分区分配算法
iv.没有内部碎片(分配给某进程的内存区域中,如果有些部分没有用上),但有外部碎片(内存中的某些空闲分区由于太小而难以利用)
v.可通过“紧凑”技术来解决外部碎片

动态分区分配算法

首次适应 First Fit

i.算法思想:每次都从低地址开始查找,找到第一个能满足大小的空闲分区
ii.实现:空闲分区一地址递增的次序排列。每次分配内存时查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区

最佳适应 Best Fit

i.算法思想:优先使用更小的空闲区,尽可能多地留下大片的空闲区
ii.实现:空闲分区按容量递增次序链接,每次分配内存时顺序查找空闲分区链,找到大小能满足要求的第一个空闲分区
iii.缺点:每次都选最小的分区进行分配,会留下越来越多、很小的内存块——产生很多的外部碎片

最坏适应 Worst Fit

i.算法思想:每次分配优先使用最大的连续空闲区——分配后剩余的空间区就不会太小,方便使用
ii.实现:空闲分区大小按容量递减次序链接,每次分配内存时顺序查找空闲分区链,找到大小能满足要求的第一个空闲分区
iii.缺点:导致较大连续空间迅速使用完——若有大进程则没有内存分区可用

邻近适应 Next Fit

i.类似首次适应,但每次都从上次查找结束的位置开始检索
ii.实现:按地址递增顺序排列。每次分配内存时,从上次查找结束的位置开始查找空闲分区链,找到大小能满足要求的第一个空闲分区
iii.高低地址空闲分区都有相同概率被使用,导致高地址部分大分区可能被划为小分区,最后导致无大分区可用

基本分页存储(非连续分配管理方式)

1、基本分页存储管理

i.思想:把内存分为一个个相等的小分区,再按照分区大小把进程拆分成一个个小部分
ii.内存空间分为一个个大小相等的分区,每个分区就是一个“页框”(页桢、内存块、物理块),每个页框有一个编号“页框号”(内存块号,页桢号、物理块号)。从0开始
iii.用户进程的地址空间被分为与页框大小相等的一个个区域,称为“页”(页面)。每个页面也有一个编号“页号”(也是从0开始)
iv.页框不能太大——可能产生过大内存碎片
v.页面——页框 有一一对应关系
vi.进程分页后——逻辑地址;内存分块后——物理地址;要将逻辑地址对应到物理地址中:物理地址(内存)=(页号对应的页面放在内存的)起始地址+偏移量

分页存储管理的逻辑地址结构如下所示:

31……1211……0
页号P页内偏移量W

地址结构包含两个部分:前一部分为页号,后一部分为页内偏移量W。在上图所示例子中,地址长度为32位,期中0~11位为页内偏移量,或称页内地址;12~31位为页号

如果有k位表示页内偏移量,则说明该系统中一个页面的大小是2^k个内存单元。
如果有M位表示页号,则说明在该系统中,一个进程最多允许有2^M个页面

2、基本地址变换机构

在这里插入图片描述

基本分段存储管理

与“分页”最大的区别就是——离散分配时所分配地址空间的基本单位不同
在这里插入图片描述

进程的地址空间

按照程序自身的逻辑关系划分为若干个段,每个段都有一个段名,每段从0开始编址

内存分配规则

以段为单位进行分配,每个段在内存中占据连续空间,但各段之间可以不相邻

分段

在这里插入图片描述
段表:从物理内存中找到各个逻辑段的存放位置

访问目标单元内存步骤

1、根据逻辑地址得到段号、段内地址
2、判断段号是否越界,越界中断
3、查询段表,找到对应的段表项,段表项存放的地址为F+S*段表项长度
4、检查段内地址是否越过段长,越界中断
5、计算得到物理地址
6、访问目标单元内存

页是信息的物理单位。分页的主要目的是为了实现离散分配,提高内存利用率。分页仅仅是系统管理上的需要,完全是系统行为,对用户是不可见的。
段是信息的逻辑单位。分段的主要目的是更好地满足用户需求。一个段通常包含着一组属于一个逻辑模块的信息。分段对用户是可见的,用户编程时需要显式地给出段名。

页的大小固定且由系统决定。段的长度却不固定,决定于用户编写的程序 分页的用户进程地址空间是一维的,程序员只需要给出一个记忆符即可表示一个地址
分段的用户进程地址空间是二维的,程序员在标识一个地址时,既要给出段名,也要给出段内地址。

分段比分页更容易实现信息的共享和保护

八、分页 vs 分段

分页:不会产生外部碎片,只有少量的业内碎片;不方便按照逻辑模块实现信息的共享和保护

分段:若段长过大,为其分配很大的连续空间会很不方便(需要紧凑操作),会产生外部碎片;方便实现逻辑模块信息共享保护

分段+分页 = 段页式管理:将进程按逻辑模块分段,再将各段分页,再将内存空间分为大小相同的内存块/页框。进程前将各页面分别装入各内存块中

段页式系统逻辑地址计算

段页式系统的逻辑地址结构由段号、页号、页内地址(业内偏移量)组成。如:

31……1615……1211……0
段号页号页内偏移量

段号的位数决定了每个进程最多可以分几个段 页号位数决定了每个段最大有多少页 业内偏移量决定了页面大小、内存块大小

上述例子中,若系统是按字节寻址的,则
段号占16位,因此在该系统中,每个进程最多有2616=64k个段
页号占4位,因此每个段最多有2^4=16页
页内偏移量占12位,因此每个页面、每个内存块大小位2^12=4096=4KB

访问顺序:
访问段表——>访问页表——>访问内存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值