snowrain 发表于 2004-12-21 17:38:23

请教skyeye源码中的几个问题

armmmu.c中translate函数中计算一级描述符地址
l1addr = state->mmu.translation_table_base & 0xFFFFC000;
l1addr = (l1addr | (virt_addr >> 18)) & ~3;
...


i)translation_table_base已经是入口地址了,后面直接或上(virt_addr >> 18)应该就可以了,为什么要 & 0xFFFFC000?

ii)为什么要~3;

iii)一级描述符是个什么概念?在OS段页式访问中,一般是先查段的页表,再查页,最后将该页物理首地址+偏移得到对应的物理地址,这里二级描述符中怎么也分了页式变换以及段变换。

iv)
switch (l1desc & 3) {
        case 0:
        case 3:
      case 1:
          ...
          switch (l2desc & 3) {
                                case 0:
                                case 3:
...
==>l1desc/l2desc为什么要&3?这样的结果表示什么?

哪位朋友可以给我解释一下?

chyyuu 发表于 2004-12-28 09:45:26

这里解释比较麻烦,建议看看有关arm的mmu的硬件相关文档(如ARM reference manual等)。

snowrain 发表于 2004-12-28 21:49:29

我去查查看

斑竹可否大致说说,让我有个大概的认识?
页: [1]
查看完整版本: 请教skyeye源码中的几个问题