参考视频:传送门
非连续内存分配
为什么需要非连续内存分配? 种类:
1、分段
2、分页
3、页表
连续分配内存的缺点:
1、分配给一个程序的物理内存是连续的
2、内存利用率较低
3、有外碎片、内碎片问题
非连续分配内存的优点
1、一个程序的物理地址空间是非连续的
2、更好的内存利用和管理
3、允许共享代码和数据
4、支持动态加载和动态链接
非连续分配内存的缺点:
1、如何建立虚拟地址和物理地址之间的转换?开销很大
软件方案
硬件方案
两种硬件方案
分段
分页
分段
程序的分段地址空间
分段寻址方案
段访问机制
新概念:一个段:一个内存“块”
一个逻辑地址空间
程序访问内存地址需要 一个二元组(s,addr)
s:一个段号
addr:段内偏移
来个简单题:
分页管理基本原理
页的尺寸是固定的
划分物理内存至固定大小的帧
大小是2的幂次方
划分逻辑地址空间至相同大小的页
大小是2的幂次方
帧
物理内存被分割为大小相等的帧
一个内存物理地址是一个二元组(f,o)
f-帧号(F位 共有2^F个帧)
o-帧内偏移(S位,每帧有2^S字节)
物理地址=2^S*f+o
罕见的有题目练习:
页
页内偏移大小=帧内偏移大小
页号大小=帧号大小
分段和分页的区别
以下来自百度百科
1、页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率;或者说,分页仅仅是由于系统管理的需要,而不是用户的需要。
段是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好的满足用户的需要。
2、页的大小固定且由系统确定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而一个系统只能有一种大小的页面。
段的长度却不固定,决定于用户所编写的程序,通常由编辑程序在对源程序进行编辑时,根据信息的性质来划分。
3、分页的作业地址空间是一维的,即单一的线性空间,程序员只须利用一个记忆符,即可表示一地址。
分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。
我总结:最大的区别就是分页管理的每一页的大小是都是一样的,分段管理每一段都是不定的