第七章 内存管理

第七章 内存管理

拖延症拖了好久的第七章终于整理完了o( ̄▽ ̄)ブ

1.内存概述

内存包括系统内存和用户内存。本章讲述的均为用户内存。

程序被执行前必须全部加载进内存中。

通过细分用户内存可以满足更多进程需求,从而更高效使用CPU。

2.内存管理需求

2.1重定位

由于种种原因(主存共享、程序执行时加载到的内存位置、程序换入换出位置改变),程序加载在内存的位置不是固定的,内存访问必须映射到到新的物理地址。

即:把程序地址空间中使用的逻辑地址变成内存中物理地址的过程。

逻辑地址–>物理地址

关键:重定位寄存器

2.2保护

未授权情况下,进程不能访问其他进程的内存区域,不能干涉。

2.3共享

允许多个进程访问相同发内存区块

2.4逻辑组织

程序、数据按模块组织。采用模块管理有以下好处:模块单独编写和编译。可以执行模块级别的保护。可以在进程间共享模块。满足上述需求需要内存管理。

2.5物理组织

内存和外存之间信息流的组织具有困难。

1、可供程序或数据使用的主存可能不足•可供程序或数据使用的主存可能不足。必须采用覆盖技术。但覆盖技术浪费时间。

2、程序员在编写程序的时候不知道到底有多少可用的内存。

因此,主存、辅存两级信息流组织应该交由OS负责。顾需要内存管理。

3.内存分区

3.1固定分区

1、大小相等的分区

缺点:

程序可能太大不能放进一个分区。程序员必须进行覆盖设计以使程序能装入一个分区中运行(一个程序一个分区)

内存的利用率低,内部碎片多。

放置算法:

存在可用分区即可装入内存。

若分区已满,换出其中一个进程(调度问题)。

2、大小不等的分区

放置算法:放置到足够容纳该进程的最小分区中。

①每个区块维护一个进程队列

②所有区块一个进程调度队列

在这里插入图片描述

3、固定分区的缺点

分区数目固定

小作业不能有效利用空间(碎片多)

3.2动态分区

1、特点

分区长度和数目可变。进程进入内存时,系统可以分配它所需要的空间。

在内存中形成很多小空洞(外部碎片)

通过压缩技术克服外部碎片(os移动进程)

2、放置算法

①最佳适配:与要求大小最接近

②首次适配:从头开始扫描内存,选择大小足够的第一个可用块

③下次适配:从上一次放置的位置开始扫描内存,选择下一个大小足够的可用块。

3、置换算法

3.3伙伴系统

1、分配

a)整个空闲区块看成一个大小为2^U的块

b)如果请求块大小s满足: 2^(U-1) < s <= 2^U,则分配整块空闲块,结束(大于空闲块的一半,但小于整块空闲块,即占大半,一半装不下)

c)否则分成两个大小相等的伙伴块(一半装得下)

2^U ——> 2^(U-1) + 2^(U-1 )

转b)继续比较

在这里插入图片描述

例如:A进程,请求块大小s=128K,小于空闲块1024k,则把空闲块分成两个大小为512k的块。继续比较,128k<512k,继续把512k分成两个大小为256k的空闲块。再次比较,再次划分成两个128k的空闲块。A进程满足,可以装下。

2、释放

a)释放空间

b)有无空闲伙伴快

c)有,合并,转b);无,结束

3.4重定位

1、内存放置进程问题

每个分区一个进程队列的大小不等固定分区:利用简单重定位加载器,一个进程总可以指向同一个分区。(不管有无换入换出)

大小相等的分区,只有一个进程队列的大小不等的分区:一个进程可能在其生命周期中占据不同的分区。(换入换出造成)

压缩时,一个程序可能占用不同的分区。(进程发生移动)

2、区分地址类别

①逻辑地址:与物理分配地址无关

②相对地址:特殊的逻辑地址,相对某些已知点

③物理地址:绝对地址,内存中的实际地址

个人理解:根据下列图可以认为逻辑地址是在整个进程地址空间里面的地址,与所在分配的物理内存无关,逻辑地址是固定的。而物理地址,是对于整个内存空间来讲,是进程在内存中,指令/数据在内存中的真正地址。

所以,重定位就是将逻辑地址转换为物理地址。

在这里插入图片描述

3、重定位的硬件支持

基址寄存器:进程在内存中的起始地址。加上逻辑地址即等于物理地址。

界限寄存器:指明程序终止位置。如果计算得到的物理地址大于界限寄存器的值,则向操作系统发出中断信号。

在这里插入图片描述

4.分页

1、分页概述

大小不等的固定分区会产生内部碎片,大小可变的动态分区会产生外部碎片。所以,把内存划成大小固定、大小相等且比较小的块,每个进程也分成同样大小的小块,就不会产生外部碎片,只会产生进程最后一页的一小部分的内部碎片。(进程可能不能完整划分,会剩下比正常块要小的块)

称上述为:进程分页,内存分帧,页帧等大小。

简单分页类似于固定分区。不同之处在于分页技术的分区更小,而且一个程序占多个分区,分区不需要连续。

2、页表

OS为每个进程维护一个页表,为未使用的内存维护一个空闲帧列表。

页表给出了进程中每页所对应的帧的位置。(即进程的小块应该对应内存的哪个小块)

逻辑地址:页号+该页中的偏移量

物理地址:帧号+该帧中的偏移量(拼接,偏移量一样)

这里可以理解为帧和页并不是最小的地址单位,因为帧和框里面还会有一段地址空间,所以一条指令/数据的地址只占页或者帧的一小部分,因此会有偏移量。

在这里插入图片描述

5.分段

1、分段概述

与分页类似,把程序划分成几个段,段的大小可以不相等,但有最大长度限制。与动态分区类似,也会产生外部碎片,但一个程序可以占据多个分区,而且分区不连续(一个段一个分区),而且外部碎片很小。

分段对程序员是可见的,分页对程序员是透明的。

2、段表

OS为每个进程维护一个段表,也为未使用的进程维护一个空闲块列表。

段表每一项有相应段在内存中的起始地址(段号对应),还有段的长度。根据段号找起始物理地址。

逻辑地址:段号+偏移量

物理地址:起始物理地址+偏移量(做加法,偏移量一样)

在这里插入图片描述

6.安全问题

6.1缓冲区溢出攻击

输入到一个缓冲区或者数据保存区域的数据超过了其容量,从而导致覆盖了其他信息的一种状况。攻击者造成并利用这种状况使系统崩溃,或者通过插入特制的代码来控制系统.

防御策略:

–编译时防御系统,目的是强化系统以抵制潜伏于新程序中的恶意攻击。

–运行时防御系统,目的是检测并中止现有程序中的恶意攻击。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值