微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 32位cpu寻址小结

32位cpu寻址小结

时间:11-28 来源:互联网 点击:

真是令人兴奋,这样的寻址过程为执行多任务提供了有力的保障,可以想象这是计算机执行性能上的一次飞跃!从此高速的cpu再也不会为无用武之地发愁了,它可以最大限度的发挥自己速度快的优势,同时处理好多个任务。是的,当我们眼前出现了新的景象的时候,我们有理由兴奋。但是,我们不应该就此满足。我们应该沿着新天地撇给我们的一丝亮光,继续前行,去找到这片新天地。人就是在这样的前行中不断让事情变得更完美。到这里,我们对于寻址过程的了解,只是开了一个头而已,但这是一个好头,我们体会到了32位cpu的强大优势。这足以让我们对完整的32位CPU寻址充满了期待。让我们鼓舞士气,沿着前人的足迹继续前行吧!

我们知道,程序代码和数据必须驻留在内存中才能得以运行,然而系统内存数量很有限,往往不能容纳一个完整程序的所有代码和数据,更何况现在是多任务系统,想让内存驻留所有任务程序显然不太可能。老式系统就是将程序分割成小份,只让当前系统运行它所有需要的那部分留在内存,其它部分都留在硬盘。当系统处理完当前任务片段后,再从外存中调入下一个待运行的任务片段,而且这个工作是由程序员自行完成。显然这增加了程序员的负担。
由此针对多任务系统发展了一种虚拟内存技术。虚拟内存技术就是一种由操作系统接管的按需动态内存分配的方法,它允许程序不知不觉中使用大于实际物理空间大小的存储空间(其实是将程序需要的存储空间以页的形式分散存储在物理内存和磁盘上)。 虚拟内存是将系统硬盘空间和系统实际内存联合在一起供进程使用,给进程提供了一个比内存大得多的虚拟空间。在程序运行时,把虚拟地址空间的一小部分映射到内存,其余都存储在硬盘上(也就是说程序虚拟空间就等于实际物理内存加部分硬盘空间)。当被访问的虚拟地址不在内存时,则说明该地址未被映射到内存,而是被存贮在硬盘中,因此需要的虚拟存储地址随即被调入到内存;同时当系统内存紧张时,也可以把当前不用的虚拟存储空间换出到硬盘,来腾出物理内存空间。 这样,为了提高系统性能,发展了虚拟内存技术,那么相应的,32位cpu也应该发展新的寻址技术来管理虚拟内存。 这是通过页机制来实现的。
因为使用页机制的原因,前面提到的通过段机制转换得到的地址仅仅是作为一个中间地址——线性地址了,该地址不代表实际物理地址,而是代表整个进程的虚拟空间地址。还得有一个将虚拟地址转换成物理地址的过程。

让我们来认识一下页机制。它就是把内存分成一个一个连续的页,每页大小4kb。与段不同,页不是程序功能块的体现。一个程序功能块可能占用好多个页。现在内存就像一本书了,一页一页的,每页的容量都是相等的。当然,我们很快可以联想到,要想能够很快的找到某页,最好给这本书分个章或者节什么的,然后逐级地向下查询。这就是32位cpu里页目录和页表所起的作用。页目录的长度是4kb,它最多可以包含1024个页目录项,每个页目录项32-bit,包含了页表的地址和有关信息。所以,页目录把4Gb空间分成了1024个页组,每个页组4MB的大小。页表的长度也是4kb,1024个页表项,每个页表项32-bit,包含页的地址和其它信息。这样,4MB的页组又被分成了1024个页面,每个页面大小4kb。所以找到某一个页就是先查页目录再查页表这么一个过程。为了找到页目录,我们需要知道其基地址。在32位cpu里,CR3寄存器里高20位放的就是页目录的地址,因为页目录的低12位总是0,这样保证页目录始终是页对齐的(每页大小4kB)。再来看一看前面通过32位段机制找到的线性地址。其高10位是页目录的偏移地址,一共1024个页目录用10位就可以标识可能的最大偏移了。加上CR3,就可以找到页目录,然后再通过页目录找到页表的基地址,线性地址的中间10位放的是页表的偏移量,这样就找到了页表。最后页表的基地址再加上CR3最低12位所表征的页表的偏移地址就找到了页,这个页的地址就是最终的物理地址。

前面提到,之所以采用页机制是为了虚拟内存技术。所以页目录也好,页表也好,除了地址信息外还有一些属性信息,比如,当前页表是不是在内存中等等。这样才能方便系统管理虚拟内存实施换进换出的功能。这里就不详述了。

总的来讲,32位寻址先通过32位段机制找到一个32位地址,如果没有采用分页,那么它就是物理地址。否则,只是一个线性地址,然后再通过CR3,页目录,页表找到页的地址,它才是最终的物理地址。其实,还用很多细节没有涉及到,比如这里提到的描述符表是全局描述符表,实际上还有局部描述符表,再比如描述符只重点介绍了地址位,优先级位和其它属性位都没有介绍。但是,一个完整的寻址图像已经展现在我们眼前了。它包含了32位CPU里的所有重要机制。剩下的问题不妨采取暂不过问,现用现学的方法。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top