操作系统——内存管理之内存分配(分页,分段,段页)

最近分享了关于内存分配的相关知识,整理了一下PPT,总结成博客

在操作系统中,内存管理的目的是什么呢?
其中最主要的就是提高内存的利用率,所谓的提高内存利用率,就是尽可能的在内存中多存储进程,这就涉及到为进程分配内存空间了。分配的方式主要是有两种——连续分配和离散分配

在开始分享分配方式之前,先想以下的问题

现在咱们知道了进程在CPU执行之前是存放到内存里的,那么存的方式就是上述的两种,咱们先从连续分配开始


连续分配


在操作系统刚刚发展时,内存中只能存放一个进程,所以被称为单一连续存储。而随着操作系统的发展,发展到了早期多道批处理系统,这时的内存可以存放多个进程,便有了

固定分区分配

分区的方式有两种,分区大小相等和不等,而在固定分区有个缺点便是一个进程只能存放一个进程,如下图

这时有三个用户进程存放到固定分区的内存中,由于一个进程只能存放一个用户进程,因此会产生内部碎片,为了进一步的提高内存的利用率,引入了

动态分区分配

动态分区分配:系统初始只有一个大的空闲区(用户区),当进程请求空间时,由系统根据进程需要的空间大小划分出一片空闲区分配给进程。从图中可以看出,从进程1到最后只剩下进程2,4,3。虽然提高了内存的利用率,但是也会产生外部碎片

小总结:

在连续分区分配中,进程连续的存储到内存中,会产生碎片。

试想一下假如一个进程不连续的分配(离散分配)到内存中,如下图

如果进程和内存空间被分割的足够小,是不是就可以进一步提高内存的利用率呢,这就是分页的原理


离散分配


分页存储管理

将进程分成与内存物理块(页框)一样大小的页,如图所示,16KB的进程分为四个小进程,然后不连续的装入到内存中,

那么,如何知道进程的哪一个页装入到哪一个页框中呢?这就引入了页表

而我们知道,CPU在执行进程时根本是执行的指令,所以,在进程的存储单元,其实是存放的指令,如下图

其中,进程在这时候是按逻辑地址分的,进程A_0为1KB,一般一个存储单元(内存按字节编址)为1B,进程A_0共有1024个存储单元,每一个存储单元存放的是指令,如下图所示,将它装入内存

在指令1中显示,往地址80的存储单元写入1,这时候的80还是逻辑地址,而CPU是在内存中寻找存放指令的地址(CPU寻址),即物理地址,那么这时候的物理地址怎么算呢

步骤1:根据页大小算出页框的起始地址
步骤2:加上该指令在该页的页内偏移量
步骤3:两者相加即可得出物理地址

为了按照程序员的逻辑进行编程,又引入了

分段存储管理

这时候如何完成地址转化呢,通过段表

通过这张图应该很清晰的知道进程是如何分段的,而在实际应用中,会把二者综合起来,分段(按照程序员逻辑分),再把段进行分页,这也就引入了

段页存储管理

 


总结


至此内存分配就总结完了,有不足之处,还请斧正

  • 36
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序猿成长轨迹

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

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

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

打赏作者

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

抵扣说明:

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

余额充值