免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: lxy572535121
打印 上一主题 下一主题

[内存管理] 关于内存管理的一个小问题 [复制链接]

论坛徽章:
9
程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-14 06:20:00程序设计版块每日发帖之星
日期:2016-02-14 06:20:0015-16赛季CBA联赛之吉林
日期:2016-03-23 17:25:0015-16赛季CBA联赛之浙江
日期:2016-04-01 08:25:0615-16赛季CBA联赛之山西
日期:2016-04-01 10:09:1915-16赛季CBA联赛之广夏
日期:2016-06-03 15:58:212016科比退役纪念章
日期:2016-07-28 17:42:5215-16赛季CBA联赛之广东
日期:2017-02-20 23:32:43
1 [报告]
发表于 2017-05-03 19:58 |显示全部楼层
既然楼主发问了,我就来解释一下其中的原因。

  要了解这个问题,首先我们需要知道 4 种地址,即虚拟地址,逻辑地址,线性地址和物理地址。每种地址的理解如下:
  1. 虚拟地址
      每个进程运行时,只看得到自己在整个内存中运行,它会认为整个内存都是它的,此时,从进程的角度来看,内存提供的地址叫做虚拟地址。
      虚拟地址也就是进程直接接触的内存地址。
  2. 逻辑地址
      为了让进程觉得只有它一个进程在使用整个内存,而不被其他进程干扰,内核使用了分段机制,将内存分做一段一段的,每个段里面包含了代码段,数据段
      和其他各种段,内核使用段机制隔离了进程直接的内存访问。此时,内核使用逻辑地址来寻址每个段。逻辑地址有一个段选择符合一个偏移值构成。
      段选择符是由 20 位的段寄存器构成,偏移值由 32 位值构成。
      逻辑地址在寻址时,先通过段选择符在 GDT 或 LDT 中获得段描述符,段描述符有 8 字节构成,段选择符从 GDT 或 LDT 中获得段描述符之后,
      段描述符中函数该段在线性地址空间中的基地址,基地址由 32 位长。获得基地址之后,在和偏移值相加,就能获得线性地址。
      所以逻辑地址是相对分段机制而言。
  3. 线性地址
      线性地址也就是内核虚拟内存层次的地址,32 位系统中,虚拟内存将内存看做一个连续长度的地址空间,其长度为 2 的 32 次方,也就是 4G。
      线性地址主要负责分页机制下将虚拟内存对应到物理内存。
  4. 物理地址
      物理地址,顾名思义就是硬件内存的地址,该地址表示硬件内存存储器上的地址。

通过上面的前提,
  对于问题一:
       段限长的粒度是由段描述符中的 G 标志位控制,该位置位时表示段的限长为 4Kb~4G, G位清零,段限长为 1B ~ 1M。
       逻辑地址空间最多包含 16K 个段,而每个段长最长可以是 4G, 是的虚拟地址空间最大长度为 64T。
       段限长是 20 位,那么也就是按 G 值位的情况算,每个段长为 4G, 所有需要使用 32 位偏移来寻址 4G 里面的内容。

     问题 2
      虚拟地址是在逻辑地址之上,也就是每个进程都有一个虚拟地址,该虚拟地址长为 4G,进程是运行在分段机制之上
      由于分段机制的存在,它会让进程感觉整个 4G 的虚拟地址空间都由它独享。段机制会将进程才分成一个个数据段,代码段等。
      也就是说虚拟地址最终会转换为逻辑地址。
      虚拟地址的转换可以理解为如下:
     1. 虚拟地址正在由一个进程在使用,该进程任务虚拟空间由它独享。该进程的 TSS 里面存储了各种段寄存器的信息。
     2. 每个进程都会有各自的代码段,数据段等,例如这些段的地址会表示为 0x8004800 开始的 4K 是代码段, 0x8004900 开始的 4K 是数据段。
     3. 虚拟地址转换为逻辑地址是会先读取该进程对应的段寄存器,譬如 CS,GS,FS,SS 等,该寄存器里存放段选择符。比如 CS 的值位 0x8,那么他就以该值位索引,
         在 GDT 或 LDT 中查找段描述符,如 GDT[CS] -> 段描述符,获得段描述符之后,从段描述符中获得线性地址的基地址。
     4. 获得基地址之后,使用基地址加上偏移值,就可以获得对应的线性地址。

综上所述,可知
   

论坛徽章:
9
程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-14 06:20:00程序设计版块每日发帖之星
日期:2016-02-14 06:20:0015-16赛季CBA联赛之吉林
日期:2016-03-23 17:25:0015-16赛季CBA联赛之浙江
日期:2016-04-01 08:25:0615-16赛季CBA联赛之山西
日期:2016-04-01 10:09:1915-16赛季CBA联赛之广夏
日期:2016-06-03 15:58:212016科比退役纪念章
日期:2016-07-28 17:42:5215-16赛季CBA联赛之广东
日期:2017-02-20 23:32:43
2 [报告]
发表于 2017-05-03 22:47 |显示全部楼层
回复 3# _nosay

作者这样提问没有任何问题,
他是对逻辑地址产生疑问,而且 32bit 的系统虚拟地址表示 64 T 没有问题, 32bit 系统线性地址必须是 4G, 物理地址可以大于 4G。

论坛徽章:
9
程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-14 06:20:00程序设计版块每日发帖之星
日期:2016-02-14 06:20:0015-16赛季CBA联赛之吉林
日期:2016-03-23 17:25:0015-16赛季CBA联赛之浙江
日期:2016-04-01 08:25:0615-16赛季CBA联赛之山西
日期:2016-04-01 10:09:1915-16赛季CBA联赛之广夏
日期:2016-06-03 15:58:212016科比退役纪念章
日期:2016-07-28 17:42:5215-16赛季CBA联赛之广东
日期:2017-02-20 23:32:43
3 [报告]
发表于 2017-05-04 10:18 |显示全部楼层
回复 7# 剑魂箫心

32 位系统的物理地址使用 PAE 可达 64 G, 但线性空间必须是 4G, 虚拟地址和线性地址不是同一个概念!

论坛徽章:
9
程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-14 06:20:00程序设计版块每日发帖之星
日期:2016-02-14 06:20:0015-16赛季CBA联赛之吉林
日期:2016-03-23 17:25:0015-16赛季CBA联赛之浙江
日期:2016-04-01 08:25:0615-16赛季CBA联赛之山西
日期:2016-04-01 10:09:1915-16赛季CBA联赛之广夏
日期:2016-06-03 15:58:212016科比退役纪念章
日期:2016-07-28 17:42:5215-16赛季CBA联赛之广东
日期:2017-02-20 23:32:43
4 [报告]
发表于 2017-05-05 08:56 |显示全部楼层
回复 11# 剑魂箫心

PAE 概念是针对物理地址,物理内存!

论坛徽章:
9
程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-14 06:20:00程序设计版块每日发帖之星
日期:2016-02-14 06:20:0015-16赛季CBA联赛之吉林
日期:2016-03-23 17:25:0015-16赛季CBA联赛之浙江
日期:2016-04-01 08:25:0615-16赛季CBA联赛之山西
日期:2016-04-01 10:09:1915-16赛季CBA联赛之广夏
日期:2016-06-03 15:58:212016科比退役纪念章
日期:2016-07-28 17:42:5215-16赛季CBA联赛之广东
日期:2017-02-20 23:32:43
5 [报告]
发表于 2017-05-05 08:57 |显示全部楼层
回复 5# _nosay

为了更好的解释这些问题,我会将代码流程贴出来

论坛徽章:
9
程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-14 06:20:00程序设计版块每日发帖之星
日期:2016-02-14 06:20:0015-16赛季CBA联赛之吉林
日期:2016-03-23 17:25:0015-16赛季CBA联赛之浙江
日期:2016-04-01 08:25:0615-16赛季CBA联赛之山西
日期:2016-04-01 10:09:1915-16赛季CBA联赛之广夏
日期:2016-06-03 15:58:212016科比退役纪念章
日期:2016-07-28 17:42:5215-16赛季CBA联赛之广东
日期:2017-02-20 23:32:43
6 [报告]
发表于 2017-05-05 08:58 |显示全部楼层
回复 13# 爻易

Nice!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP