慢慢欣赏linux pud_index和pud_page解析

博客内容涉及到计算机内存管理中的页表转换机制,详细解释了PUD(Page Upper Directory)级别的地址转换过程,包括PUD_SHIFT的计算,PUD与PTE(Page Table Entry)的关系,以及物理地址到页面框架的转换。内容深入探讨了ARM64架构下的内存地址映射和管理技术。
#define pud_index(addr)		(((addr) >> PUD_SHIFT) & (PTRS_PER_PUD - 1))
	=>#define PUD_SHIFT		ARM64_HW_PGTABLE_LEVEL_SHIFT(1)
		=>#define ARM64_HW_PGTABLE_LEVEL_SHIFT(n)	((PAGE_SHIFT - 3) * (4 - (n)) + 3)
			=> 29
	=>#define PTRS_PER_PUD		PTRS_PER_PTE
		=>#define PTRS_PER_PTE		(1 << (PAGE_SHIFT - 3))
			=> 1 << 9
typedef struct { pudval_t pud; } pud_t;

#define pud_page(pud)		pfn_to_page(__phys_to_pfn(__pud_to_phys(pud)))
	=>#define __pud_to_phys(pud)	__pte_to_phys(pud_pte(pud))
		=>static inline pte_t pud_pte(pud_t pud)
		{
			return __pte(pud_val(pud));
		}
		=>#define __pte_to_phys(pte)	(pte_val(pte) & PTE_ADDR_MASK)
			=>#define PTE_ADDR_MASK		PTE_ADDR_LOW
				=>#define PTE_ADDR_LOW		(((_AT(pteval_t, 1) << (48 - PAGE_SHIFT)) - 1) << PAGE_SHIFT)
					=> ((1 << 36) - 1) << 12
	=>#define	__phys_to_pfn(paddr)	PHYS_PFN(paddr)
		=>#define PHYS_PFN(x)	((unsigned long)((x) >> PAGE_SHIFT))
	=>#define pfn_to_page __pfn_to_page
		=>#define __pfn_to_page(pfn)	(vmemmap + (pfn))
			=>#define vmemmap			((struct page *)VMEMMAP_START - (memstart_addr >> PAGE_SHIFT))

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值