- 论坛徽章:
- 9
|
回复 6# Tinnal
HI:
我说明一下我的疑惑点,既然 vmalloc 分配的内存已经存在页表了,也有对应的物理页,我要明确下面几个问题.
1. 通过虚拟地址获得 PTE 页表之后,使用 pte_page 可以获得对应的物理页,此时物理页是 ZONE_HIGHMEM 的,
我要需要什么方法可以直接对 page 对应的内存进行读写操作呢?之前在 ZONE_NORMAL 的物理页我直接使用 page_address()
就可以获得 page 对应的内存.但对应 ZONE_HIGHMEM 的物理页,page_address 有转换 PKMAP 映射的物理页.
2. 每个通过 vmalloc 分配的内存区使用虚拟地址部分使用 struct vmap_area 进行管理,里面包含了虚拟区的起始和结束位置,以及红黑树与rcu 链表信息.
物理地址部分则通过 struct vm_start 进行管理,其中包含了物理地址的相关信息,我跟随代码并未发现对该结构体的 phys_addr 进行赋值.
所以不确定该地址是否通过缺页写上去还是 TLB 方式.
3. 我找了缺页中断处理函数,发现缺页中断函数都在 "__ex_table" 段内,在往下依我的能力无法找到对应的缺页处理函数,请问有没有看过相关的处理函数.
|
|