
内存管理
天麓
很懒的码农
展开
-
慢慢欣赏linux pud_index和pud_page解析
#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_P.原创 2022-04-15 08:05:14 · 443 阅读 · 0 评论 -
慢慢欣赏linux pud_offset解析
typedef struct { pudval_t pud; } pud_t; =>typedef u64 pudval_t;#define pud_offset(dir, addr) ((pud_t *)__va(pud_offset_phys((dir), (addr)))) { =>#define pud_offset_phys(dir, addr) (pgd_page_paddr(READ_ONCE(*(dir))) + pud_index(addr) * sizeof(pu.原创 2022-04-13 06:48:06 · 748 阅读 · 0 评论 -
慢慢欣赏linux pgd_page解析
typedef struct { pgdval_t pgd; } pgd_t;#define pgd_page(pgd) pfn_to_page(__phys_to_pfn(__pgd_to_phys(pgd))){ =>#define __pgd_to_phys(pgd) __pte_to_phys(pgd_pte(pgd)) { =>static inline pte_t pgd_pte(pgd_t pgd) { return __pte(pgd_val.原创 2022-04-12 08:03:47 · 463 阅读 · 0 评论 -
每个程序员都应该了解的内存知识
http://blog.jobbole.com/34303/原创 2018-04-17 07:02:17 · 233 阅读 · 0 评论 -
微视linux 进程和线程地址空间的深入理解
深入理解linux内核p86谈到:从0x0000 0000到0xbfff ffff的线性地址,无论进程运行在用户态还是内核态都可以寻址;从0xc000 0000到0xffff ffff的线性地址,只有内核态的进程才能寻址。如何理解这段话呢?进程的虚拟地址空间是0~4G-1。通过两段页表映射。进程创建后在用户空间运行,通过系统调用进入内核态,内核态存在访问用户态空间的场景,例如读取或者写用...原创 2019-05-15 07:06:11 · 255 阅读 · 0 评论 -
linux内核学习(4)建立正式内核的页式内存映射, 以x86 32位模式为例
linux内核学习(4)建立正式内核的页式内存映射, 以x86 32位模式为例void __init setup_arch(char **cmdline_p){ max_low_pfn_mapped = init_memory_mapping(0, max_low_pfn<<PAGE_SHIFT); =>unsigned long __init_refok init_memory_mapping(unsigned long start, unsigned long end)原创 2021-01-01 08:47:53 · 285 阅读 · 0 评论