内存管理相关之分段分页机制

1. 分段,分页机制

  不分页:   线性地址   ==   物理地址
分页:   线性地址   !=   物理地址

线性地址空间也就是所有可能线性地址的范围.

操作系统会在启动的时候测量到实际的内存有多少,   什么范围.   如果支持分页,
线性地址是多少无所谓,   只要最后映射到的物理地址在16M范围内就可以

--------

虚拟地址是操作系统提供的一种地址描述,处理器本身并无虚拟地址的提法
而线性地址是处理器具有的一种地址描述
二者不可混淆
在处理器这级,各种地址的关系如下,
段寄存器:偏移   组成逻辑地址
段寄存器指向的描述符的段基址+偏移地址=线性地址
如果不分页,线性地址=物理地址
如果分页,线性地址通过分页机制转换为物理地址

操作系统提出的虚拟地址概念是对处理器内存寻址的扩展,
虚拟存储由内存和外存组成,外存是除内存外的其他物理存储,比如磁盘等
比如把一块数据装入到一块虚拟存储
这块虚拟存储由一段线性地址描述,
其中一部分数据装入物理内存,对应的线性地址设置为存在标志
不能放入内存的部分就被操作系统放在外存上,对应的线性地址设置为不存在标志
当处理器访问这块线性地址时,
如果访问到了存在标志的线性地址,就可以直接读取(暂不考虑是否分页转化物理地址)
如果访问到了不存在标志的线性地址,处理器将发出(页或段)不存在异常,这个异常通常被操作系统hook,这样执行流程将来到系统异常处理例程,操作系统把外存中的数据装入内存,
并把对应线性地址里的不存在标志置为存在,然后返回到发生异常处重新执行
http://blog.csdn.net/yunsongice/category/646543.aspx?PageNumber=2

2. 分段机制

  虚拟地址(逻辑地址)->线性地址转换

涉及段描述符表, 段选择符,段描述符


段选择符:

段选择符与描述符表:

段描述符:

3. 分页机制

   为什么采用二级分页?(以一页4K来看,可以有2^20页)

理论上讲不会节省空间,因为一级情况下,占用: 2^20 *4 = 4M. 二级情况下,占用2^10*4 + 2^20*4

但实际中,如果页表只有一级,那么2^20个页表要线性排列,即在连续的空间上排列,即使某项为空也要留下页表项的位置。
如果有两级页表,那么第一级的空间仍然要分配,但第二级的页表可以以1024(4K/4)项为单位不连续分布,这样的话如果页表使用的空间基本与进程使用的空间呈线性,如果进程使用的内存空间小,就可以大大减少页表所占空间。
最后,如果进程使用所有的线性地址空间,用二级页表的空间比用一级页表的空间大0.1%左右。

也就是说,(1). 进程有自己独立的页表项 (2). 页表目录是必需的 (3). 如果是一级的话,就必需有4M空间 (4) 一般进程不会用到那么大内存空间。所以如果以8M来说,就只需要4K+ 2* 4k = 12k大小(页表是按需分配的)


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值