内存的分段和分页机制

内存分段

一个 C 编译器可能会创建如下段:,

  • 代码
  • 全局变量
  • 堆(内存从堆上分配)
  • 每个线程使用的栈
  • 标准的C库

段式存储管理地址变换机构

逻辑地址 = 段的基地址 + 段内地址

                                  

程序中各个段对应的情况图

                                  

 

内存分页

基本原理

  • 将进程的逻辑地址空间分成若干个大小相等的片,称为页面或页;
  • 内存空间分成与页大小相等的若干个存储块,称为物理块或页框。
  • 在为进程分配内存时,以块为单位,将进程中的若干页分别装入多个可以不相邻的块中。

页面大小的选择

页面的大小由机器的地址结构决定的。

页面的大小的权衡

  • 页面较小----内存碎片小;页表过长,占用较大内存空间。
  • 页面较大----页表短,占用较少内存;内存碎片大。
  • 通常页面的大小要适中,在512B~4MB之间。

页式存储管理逻辑地址结构

逻辑地址被分为两部分:

  1. 页号
  2. 页内位移

例如逻辑地址1500的二进制形式为0000 0101 1101 1100 由于页的大小为1024B,故页内位移占10位,剩下6位为页号

  • 逻辑地址1500对应的页号为1(二进制为0000 01)
  • 页内位移为476(二进制为01 1101 1100)

 

 

分页和分段的区别

分页和分段的目的

  • 页是信息的物理单位,分页是系统管理的需要,而不是用户的需要。
  • 段是信息的逻辑单位,它含一组意义完整的信息。分段是为了更好地满足用户的要求。

划分规则:

  • 页按物理结构划分,会有内部碎片
  • 段按逻辑结构划分,会有外部碎片
  • 段页基本分段和基本分页,会有内部碎片

页和段长度

  • 页的大小固定,由系统确定。
  • 段的长度不固定,决定于用户所编写的程序。

地址空间

  • 分页的作业地址空间是一维的,即单一的线性地址空间。
  • 分段的作业地址空间是二维的,程序员在标识一个地址时,需给出段名和段内地址。

内存碎片分为:内部碎片和外部碎片
【内部碎片】
内部碎片就是已经被分配出去(能明确指出属于哪个进程)却不能被利用的内存空间;
内部碎片是处于(操作系统分配的用于装载某一进程的内存)区域内部或页面内部的存储块。占有这些区域或页面的进程并不使用这个存储块。而在进程占有这块存储块时,系统无法利用它。直到进程释放它,或进程结束时,系统才有可能利用这个存储块。
【外部碎片】
外部碎片指的是还没有被分配出去(不属于任何进程),但由于太小了无法满足申请内存空间的新进程的请求。
外部碎片是处于任何两个已分配区域或页面之间的空闲存储块。这些存储块的总和可以满足当前申请的长度要求,但是由于它们的地址不连续或其他原因,使得系统无法满足当前申请。

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值