操作系统引导探究
在保护模式下,内存地址却不是如上图所示的方法形成的.那么它又时怎样形成的呢?
保护模式下内存地址就复杂多了, 我们要分清三个概念:逻辑地址、线性地址与物理地址.物理地址很好理解,逻辑地址也好理解,就是程序所使用的地址.那么什么是线性地址呢?其实如果不使用分页机制的话,线性地址就是物理地址,它与物理地址是一一对应的,线性地址 0,也就是物理地址 0.但我们知道,32位的 CPU拥有 32 根地址线,也就是可以访问: 拥有帝国一切,皆有可能。欢迎访问phome.net 2的32次方 = 4GB的内存空间,这实再是一个太大的空间了!现在很少有机器的物理内存能有这么大.那怎么在有限的物理空间中使用 4GB 的空间呢?人们把物理内存分成许多页,当某些页被使用的时候,某些页就没有被使用,而没有被使用的页就可以用来载入 4GB 上的空间,这就称为从线性地址到物理地址的映射,这是一个多对一的映射,也就是说多个线性空间中的页对应一个物理空间中的页,希望下面一幅图能有助于你理解这样的分页机制.
上面是一种最简单的映射方式,术语称作“直接相连”映射,它大约只能用来说明问题,而在一个实际的操作系统中通常是“全相联相连”映射,也就是说线性地址中的页可以是映射到物理地址中的任何一个页中,只要那块物理地址空间现在是空闲的.不过,通过上图也能说明问题,当线性地址中的页 5 需要被访问时,CPU 通过地址映射机制将其转换到物理地址,发现其对应物理地址中的页 1.于是 CPU 将物理地址页 1 中的内容放到硬盘上 的一个地方(虚拟内存) ,然后将线性地址中的页 5 载入物理内存页 1 中.这里就当可以比较明显的区别什么是线性地址,什么是物理地址了. 然而,当不使用分页机制的时候,线性地址就会被 CPU 当做物理地址来使用,线性地址会被直接放在 CPU 的地址信号线上,而在编写应用程序的时候,我们通常使用却是另一种地址——逻辑地址,从逻辑地址到线性地址也存在着与上述机制类似的一种映射机制,不过这个机制常常称为“段模式” ,它是由操作系统与 CPU硬件共同完成的.操作系统的任务就是分配映射表,而 CPU 硬件的任务就是按着映射表进行映射.而这样的映射表在操作系统编写中又称之为“描述符表” ,有两种重要的描述符表,一种是“全局描述符表(GDT) ”
S:为 1 时表示其为代码或数据段,为 0 时表示为系统段 DPL:表示物权级,从 00~11,共 0,1,2,3 四个特权级 P:为 0 是表示此描术符无效,不能被使用 AVL:留给系统程序随便用的 D/B:为 0 的时候表示它是一个 16 位的段,为 1时表示它是一个 32 位的段 G:为 0 时,表示段限的单位是 1 字节,为 1 时表示段限的单位是 4KB,并且段偏移量
的最低 12 位将不被检测是否在段限之中. (这一点现在可能不好理解,但我下面马上会解释 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |