返回列表 发帖

[徒弟原创] [ Linux内核培训课程 ]- [wwcd]-[第七次课后作业]

[徒弟原创] [ Linux内核培训课程 ]- [wwcd]-[第七次课后作业]

(1)32bit的ARM的虚拟地址空间范围是多少?系统的物理地址空间是根据什么确定的?

  答:32bit的ARM的虚拟地址空间范围0~0xFFFFFFFF (2^32=4G)。
       系统的物理地址空间是根据自身实际的物理内存空间确定的。

(2)Linux使用了ARM的哪几种mmu映射方法?

  答:一级页表变换和二级页表变换。

(3)ARM的MMU映射页表的基地址存放在哪个寄存器?

  答:ARM的MMU映射页表的基地址存放在CP15的协处理器的C2寄存器中。

(4)Linux是如何解决ARM在开启MMU之前和之后的地址跳变问题的?

  答:        虚拟存储空间到物理存储空间的映射是以内存块为单位进行的,虚拟存储空间
          中的一块连续存储空间被映射成物理存储空间中同样大小的一块连续存储空间。每
          一个地址变换条目(页表项)记录了一个虚拟存储空间的存储块的基地址与物理存
          储空间相应的一个存储块的基地址的对应关系。根据存储块大小不同,可以有多种
          地址变换。


(5)准备ARM MMU的一级映射的描述符的必要条件有哪些?

   答:页表基址、存储空间、访问权限和域控制属性

(4)(5)不是非常准确,所以我这里纠正一下。

对于(4)呢,你只回答了arm mmu映射的基本方法,并不是解决mmu开启之前和之后的跳变问题。解决这个问题是通过linux把0-4M大小的物理内存同时映射到0-4M的虚拟地址空间和(0xc0000000+0 )-( 0xc0000000+4M)的虚拟地址空间,这样在开启mmu前后程序可以认为还是运行在0-4M的地址空间,但是其实这时候这个0-4M已经是虚拟地址了,然后通过ldr来跳到0xc0000000+0 )-( 0xc0000000+4M)的地址空间,这时候跳变就没有问题了,因为mmu已经开启了。

对于(5)你的答案“页表基址、存储空间、访问权限和域控制属性”。其实这里的存储空间应该改成物理地址和要map到的虚拟地址,也就说说物理地址和虚拟地址都要知道才能准备好描述符的。

要好好理解下,继续努力吧!

TOP

感谢师傅的指导,我会继续努力的!

TOP

返回列表
网页右侧QQ悬浮滚动在线客服
网页右侧QQ悬浮滚动在线客服