首页
社区
课程
招聘
[旧帖] [求助] 关于分段和分页机制 0.00雪花
发表于: 2009-3-31 22:43 3797

[旧帖] [求助] 关于分段和分页机制 0.00雪花

2009-3-31 22:43
3797
小弟刚刚在学习x86的内存机制, 看到书上说逻辑地址(段选择符+偏移量)通过分段机制转换成线性地址, 然后线性地址通过分页机制转换成物理地址。
我想请问,我们在调试的时候看到的是逻辑地址的偏移量地址呢还是线性地址呢???

谢谢。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 148
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
什么调试WinDbgKd..
2009-3-31 23:01
0
雪    币: 202
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
实际上你根本不用去操心真实的物理地址,那都是操作系帮我们映射好了的。一般我们在调试的时候看到的都是每个程序单独的4g的虚拟地址,应该是你所说的线性地址。至于这个虚拟地址到底对应内存条上哪一片区域,这个不是我们操心的。

我也是初学,有不当之处,请高手指正。
2009-3-31 23:11
0
雪    币: 111
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
是逻辑地址的偏移量。

当进程切换的时候,cpu从TSS(任务状态段)中取出这个进程的段选择子加载到段选择寄存器,这个段选择子指向系统中的某一个段描述符表(或者全局描述符表或者局部描述符表),在描述符表中有关于这个段的详细信息,如这个段的起始地址、段长度等。

也就是说,线性地址是跟这个段在物理内存中的实际地址相关的,如果没有分页机制,线性地址就是实际的物理地址。分页机制的目的是允许一个完整的段不一定要加载在内存中一块连续的空间,通过页表,将线性地址映射到实际的物理地址,这样一来,一个完整的段可以以页为单位加载到内存中不同的地方。

调试的时候,我们看到的是编程时的逻辑地址,只是一个偏移量,这个地址与实际的物理内存无关,当然页就不是线性地址了。
2009-4-1 09:47
0
雪    币: 339
活跃值: (10)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
5
这应该牵涉“内存及进程管理”的方案了,不同的系统,不同的架构有着不同的处理。
就调试而言无伤大雅;如果想细致了解,请学习操作系统原理并参阅特定系统下的内核中处理方式
2009-4-1 11:19
0
雪    币: 111
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
可能我上面说的不是太准确,不过可以这么理解逻辑地址(即偏移量)和线性地址(虚拟地址)的关系:

逻辑地址和线性地址是从不同的角度来看问题:

逻辑地址是从编程的角度来看的,它表明了程序间各个指令、数据之间的相对位置,这种相对关系意义在于确保程序可以按照程序员的意愿来顺序执行。

而线性地址(虚拟地址)是从内存管理的角度来看的,它表明了一段程序在总线可寻址范围内的位置。比如32位机中,地址总线是32位,可寻址空间是4GB,通过逻辑地址到线性地址的映射,可以方便存储管理单元来对程序进行管理。线性地址其实就是通过分段机制,将逻辑地址映射到存储管理单元可寻址空间的一个映射。

这里纠正一下,如果没有分页机制,逻辑地址将直接变换成物理地址。如果有分页机制,线性地址和物理地址没有太大关系,也就是说,线性地址和分页实现了虚拟存储。

最后,就是物理地址了,顾名思义,物理地址就是程序和数据实际加载到内存中的位置。但是物理地址和线性地址不同,它可以比线性地址小,但是可以通过页映射和页交换机制实现用小的物理空间执行大于这块物理空间程序的目的。

最重要的是分清这几个概念的作用,这个清楚了,其他的也就清楚了。
2009-4-1 11:57
0
游客
登录 | 注册 方可回帖
返回
//