- 论坛徽章:
- 0
|
本帖最后由 qswul 于 2011-08-01 07:54 编辑
研究内核很久了,一直有以下一些疑问没有解决,请高手帮忙指点一下,问题基于内核2.6.28
1、对于这个数组protection_map,我们可以看出当vm是私有属性时,并不立刻将VM_WRITE属性转换成_PAGE_RW属性,而在do_anonymous_page中,多了一个这么处理entry = maybe_mkwrite(pte_mkdirty(entry), vma);,即当vm具有VM_WRITE属性时,PTE态设置为_PAGE_RW属性。对于私有vm,这种延迟设置_PAGE_RW属性是出于什么目的?
2、zone_watermark_ok()中,最后一个循环是用于防碎片的,但由于我数学底子比较差,一直没看懂其理论依据,烦请点拨一下
3、Linux设计VM_MAYREAD、VM_MAYWRITE、VM_MAYEXEC、VM_MAYSHARE到底出于什么目的,尤其是VM_MAYWRITE的作用
4、这个个问题和freescale的powerpPC有关,在head_fsl_booke.s的finish_tlb_load中,有这么一段指令
li r10, (_PAGE_HWEXEC | _PAGE_PRESENT)
rlwimi r10, r11, 31, 29, 29
and r12, r11, r10
其中rlwimi r10, r11, 31, 29, 29的目的是提取PTE的_PAGE_DIRTY属性,然后根据此属性来决定是否提取PTE的_PAGE_RW属性到MAS3中,这是为什么呢?我没看过其他CPU是如何实现的,是不是也采用一样的判断?
5、谁能帮忙解释一下_PAGE_ACCESSED和_PAGE_DIRTY的目的,网上很多文章一笔带过,简单是说使页面变年轻和标志页面脏,但我有所怀疑不止这么简单,再看一段指令,还是和PowerPC有关,在head_fsl_booke.s的DataTLBError中,有这么一段指令
li r13,_PAGE_PRESENT|_PAGE_ACCESSED
rlwimi r13,r12,11,29,29
FIND_PTE
andc. r13,r13,r11
这段指令目的是先找到指定地址对应的PTE的值,然后和,_PAGE_PRESENT|_PAGE_ACCESSED
|_PAGE_RW进行比较来决定这个PTE是否有效,然后选择是跳转到DSI异常还是直接加载PTE到TLB中。这里疑问就来了,为什么要使用_PAGE_ACCESSED作为判断标志? |
|