- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux0.11 的地址
有 3 类地址需要区分清楚:
1. 程序(进程)的虚拟地址和逻辑地址
虚拟地址( virtual address )指程序产生的有段选择符和段内偏移两部分组成的地址。一
个程序的虚拟地址空间有 GDT 映射的全地址空间和 LDT 映射的局部地址空间组成。
逻辑地址 (logical address )指程序产生的段内偏移地址。 应用程序只与逻辑地址打交道,
分段分页对应用程序来说是透明的。也就是说 C 语言中的 ,汇编语言中的符号地址, C 中
嵌入式汇编的 ”m ”对应的都是逻辑地址。
2. CPU 的线性地址
线性地址( linear address)是逻辑地址到物理地址变换的中间层,是处理器可寻址空间
的地址。程序代码产生的逻辑地址加上段基地址就产生了线性地址。
3. 实际物理内存地址
物理地址 (physical address )是 CPU 外部地址总线上的寻址信号, 是地址变换的最终结
果,一个物理地址始终对应实际内存中的一个存储单元。 对 80386 保护模式来说, 如果开启
分页机制, 线性地址经过页变换产生物理地址。 如果没有开启分页机制, 线性地址直接对应
物理地址。页目录表项、页表项对应都是物理地址。
Linux 0.11 的内核数据段,内核代码段基地址都是 0, 所以对内核来说,逻辑地址就是
线性地址。 又因为 1 个页目录表和 4 个页表完全映射 16M 物理内存,所以线性地址也就是
物理地址。 故对 linux0.11 内核来说,逻辑地址,线性地址,物理地址重合。
个人总结:
分段和分页的区别:
分段可以给每个进程提供不同的线性地址
分页可以把同一线性地址空间映射到不同的物理地址
逻辑地址:
线性地址:
物理地址:
逻辑地址 -》分段单元 -》线性地址 - 》分页单元 - 》物理地址
Linux 在使用的时候避开了 Intel 原先的设计意图,只是对段基址设置了 0 ,这样逻辑地址
和线性地址就一样了,再经过分页机制,就最后变成了物理地址了。
Linux2.4 内核使用的空间中,虚拟地址和物理地址只是简单的相差了 3G
与 80386 段相关的宏定义
set_seg_desc
64 55 47 39 32
段基地址( BASE ) G D 0 AV 限长 P DPL 1 段基地址( BASE )
type
31..24 L 19..16 23..16
段基地址( BASE )15..0 段限长( LIMIT ) 15..0
31 23 15 7 0
/*****************************************************************************/
/* 功能 : 设置存储段描述符 ,把指定属性的段描述符放入 gate_addr 处 */
/* 参数 : gate_addr 段描述符的目的地址 */
/* type 描述符中类型域,具体见 80386 基础
原创力文档


文档评论(0)