内存管理

操作系统对内存进行合理的划分和有效的管理称为内存管理

  1. 内存管理功能

内存空间的分配与回收
地址转换
内存空间的扩容(虚拟内存)
存储保护(各作业在各存储空间内运行,互不干扰)

  1. 进程运行的基本原理

进程被创建之前首先要将程序和数据装入内存。需要经历如下步骤
1、编译。讲程序编译成若干模块
2、链接。讲程序编译后形成的目标模块链接在一起,形成完整的装入模块
3、装入。由装入程序将装入模块装入内存运行

链接的三种方式
1、静态链接。在程序运行之前,先将各模块进行链接成完整的可执行程序,以后不进行修改
2、装入时动态链接。在装入内存时,一遍链接一边装入
3、运行时动态链接。程序执行时才进行链接和装入

装入的三种方式
1、绝对装入。程序的逻辑地址与内存实际地址完全相同,装入时不需要对程序的地址以及数据进行修改。

2、可重定位装入(静态重定位)。地址交换通常是在装入时一次完成的。特点:作业装入内存时,必须分配要求的内存空间,否则无法装入,对装入的作业无法在内存移动,也无法再申请内存空间

3、动态运行时装入(动态重定位)。模块装入内存时,不立即进行地址交换,而是等到程序运行时才进行地址交换,因此,装入时的地址都是相对地址。需要一个重定位寄存器支持。特点:可以将程序分部到不连续的存储区,程序运行期间,根据需要动态申请分配内存,便于程序段的共享。
在这里插入图片描述

逻辑地址和物理地址
逻辑地址:编译后,各个模块都是从0号单元开始编址,然后链接成一个从0号单元开始的逻辑地址空间。
物理地址:转换后的最终地址。进程运行时执行指令和访问数据,最后都通过物理地址主存中存取,当程序装入内存时必须将逻辑地址转化成物理地址,这个过程将地址重定位。

内存保护
CPU访问某一地址时,会去与界地址寄存器(限长寄存器)进行比较,界地址比较器包含了逻辑地址的最大值,每个逻辑地址值都要小于界地址寄存器,若无地址越界则加上重定位寄存器的值映射成物理地址,再送交内存单元。重定位寄存器包含最小物理地址值
在这里插入图片描述

内存的覆盖于交换
内存的覆盖与交换技术是在多道程序环境下用来扩充内存的两种方法。

覆盖。覆盖原理:讲用户空间分为一个固定区和若干个覆盖区,将经常活跃部分放在固定区,将程序经常活跃的部门放在固定区,其余部门按照调用关系进行分段,首先将那些将要访问的段放入覆盖区,其他段放在外存中,等到需要调用时调入覆盖区覆盖原有的段。

交换。交换的原理:把处于等待状态 的程序从内存移到辅存,把内存空间腾出来(换出过程)。把准备好竞争CPU运行的程序从辅存移到内存(换入过程)

连续分配管理方式
连续分配方式是指为一个用户程序分配一个连续的内存空间。

1.单一连续分配
内存在此方式下分为系统区和用户区,程序放入用户区中,且只能放入一道程序。因此不需要进行内存保护。特点:简单、无外部碎片,可以采用覆盖技术,只能单用户、单任务、存储器的利用率低。

2.固定分区分配
讲内存划分若干固定大小的区域,每个区域装入一道作业。

分区大小相等缺乏灵活性。
通常分区大小不等的会按照大小进行排队并建立一张分区说明表,当程序装入时检索该表,若找到合适的分区则给予分配并将状态设置为已分配,未找到合适的则拒绝分配
在这里插入图片描述
这种分区方式的问题:1、程序太大放不进任何分区,则需要使用覆盖技术。2、主存利用率低,当程序大小固定时,也会占用一个完整的内存分区空间,这样分区内部就存在空间浪费,称为内部碎片。

3、动态分区分配
当程序装入内存时,根据进程的大小动态地建立分区,使分区大小等于程序需要。
在这里插入图片描述
如图所示这种方法会导致越来越多的外部碎片。因此动态分区的分配策略有如下算法:
1、首次适应。空闲分区以地址递增的次序链接,分配内存时顺序查找,找到大小能满足的第一个空闲分区。
2、最佳适应算法。空闲分区按容量递增的方式形成分区链。找到第一个能满足要求的空闲分区。
3、最坏适应法。以容量递减,找到一个分区即最大分区
4、邻近算法。在首次适应算法上,从上次查找结束的位置开始继续查找。

算法的优劣性如下:
首次大于最佳大于(最坏、邻近)
在这里插入图片描述
在这里插入图片描述

非连续分配管理
当内存空间大于1G,但是连续的内存不超过1G时,程序是无法运行的,此时需要采用非连续性分配的管理方式。将程序所需要的1G内存空间分散的分配到内存的各个区域,这样需要建立额外的索引。
非连续分配管理根据分区大小是否固定分为,分页存储与分段存储两种方式。

1、分页存储管理方式
无论是哪种分区方式,都会产生碎片,分页的方式是为了避免碎片的产生。
分页避免碎片的原理:它会将主内存划分为同等大小的块,进程也按照块的大小进行划分,与分区不同的是,块比分区要小很多,这样只有当进程装入最后一个块时,才会产生碎片。如下是分页的架构图

程序进行划分,每一块都有个页号,页号对应页表中块号,通过块号可以相应的取出物理内存地址。

2、分段存储管理方式
分页存储是占在计算机的角度,为了提高内存利用率。分段则是为了程序员。比如:进程由:主程序、两个子程序、栈和数据组成。将其分为五段,每一段都是从0开始编址,且分配连续的地址空间。此时需要指定段号和段内偏移量。分段内存架构图
在这里插入图片描述
通过段号对应的段表中的段长以及起始位置(偏移量),取出基址后的物理位置用于存储作业

逻辑地址到物理地址的转化
在这里插入图片描述

段页式管理方式
由于页式存储能提高内存利用率,段式存储结构能反映程序的逻辑结构并利于段共享,因此可以将两种结合。

在段页式系统中,作业的逻辑地址首先分为若干逻辑段,再将段分成若干固定的页。
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值