结构体:init_mm 位置:mm/Init-mm.c
1 struct mm_struct init_mm = {
2 .mm_rb =RB_ROOT, /*红黑树根节点*/
3 .pgd =swapper_pg_dir, /*内核页全局目录地址*/
4 .mm_users =ATOMIC_INIT(2), /*用户空间用户数*/
5 .mm_count =ATOMIC_INIT(1), /*引用数*/
6 .mmap_sem =__RWSEM_INITIALIZER(init_mm.mmap_sem), /*信号量*/
7 .page_table_lock=__SPIN_LOCK_UNLOCKED(init_mm.page_table_lock), /*保护锁*/
8 .mmlist = LIST_HEAD_INIT(init_mm.mmlist), /*所活动mm的链表*/
9 INIT_MM_CONTEXT(init_mm) /*处理器相关上下文*/
};
结构体:memblock_region 位置:arch/arm/mm/mmu.c:1170
1 struct memblock_region {
2 phys_addr_tbase; /*基地址*/
3 phys_addr_tsize; /*大小*/
4 #ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP
5 int nid; /*noid id*/
6 #endif
7 };
结构体:memblock_type 位置:include/linux/memblock.h
1 struct memblock_type {
2 unsignedlong cnt; /* regions 个数 */
3 unsignedlong max; /* 已分配数组大小 */
4 phys_addr_t total_size; /* 所有regions总大小 */
5 structmemblock_region *regions;
6 };
结构体: memblock 位置:linux/include/asm/setup.h
1 struct memblock {
2 phys_addr_t current_limit; /*内存限制 */
3 structmemblock_type memory; /*可用内存*/
4 structmemblock_type reserved; /*保留内存*/
5 };
结构体:map_desc 位置:arch/arm/mm/mmu.c:1176
1 structmap_desc {
2 unsignedlong virtual; /*要映射到的虚拟地址*/
3 unsignedlong pfn; /*要映射的物理页帧号*/
4 unsignedlong length; /*映射长度*/
5 unsignedint type; /*映射内存类型*/
6 };
结构体:mem_type 位置:arch/arm/mm/mmu.c:716
1 struct mem_type {
2 pteval_t prot_pte; /*二层页式flags */
3 pmdval_t prot_l1; /*二层页式flags*/
4 pmdval_t prot_sect; /*单层段式flags*/
5 unsigned int domain; /*内存所属域*/
6 };
结构体: membank 位置:linux/include/asm/setup.h
1 struct membank {
2 phys_addr_t start; /*Bank起始地址*/
3 unsignedlong size; /*Bank大小*/
4 unsignedint highmem; /*高端内存标记*/
5 };
结构体: meminfo 位置:linux/include/asm/setup.h
1 struct meminfo {
2 intnr_banks; /*Bank的数量*/
3 structmembank bank[NR_BANKS]; /*Bank数组*/
4 };
1 typedefstruct{ pteval_t pte; } pte_t; /*页表项结构*/
2 typedefstruct{ pmdval_t pmd; } pmd_t; /*页中间目录结构*/
3 typedefstruct{ pmdval_t pgd[2]; } pgd_t; /*页全局目录结构*/
4 typedefstruct{ pteval_t pgprot; } pgprot_t;/*页保护目录结构*/
结构体: pg_data_t 位置:include/linux/Mmzone.h
2 typedef struct pglist_data{
3 struct zonenode_zones[MAX_NR_ZONES]; /*zone节点数组*/
4 struct zonelistnode_zonelists[MAX_ZONELISTS]; /*zonelist数组*/
5 int nr_zones; /*zone个数*/
6 spinlock_tnode_size_lock; /*锁*/
7 unsigned long node_start_pfn; /*节点开始页帧号*/
8 unsigned long node_present_pages; /* 物理页总数 */
9 unsigned long node_spanned_pages; /* 包含洞在内的所有页帧数*/
10 int node_id; /*node编号*/
11 } pg_data_t;
结构体: bootmem_data位置:include/linux/Mmzone.h
1 typedefstructbootmem_data {
2 unsignedlong node_min_pfn; /*存放bootmem位图的第一个页面 */
3 unsignedlong node_low_pfn; /*低端物理内存顶点,最大896MB*/
4 void*node_bootmem_map; /*指向bootmem位图*/
5 unsigned long last_end_off /*用来存放在前一次分配中所分配的最后一个字节相对于hint_idx的位移量*/
6 unsigned long hint_idx; /*前一次分配的最后一个页面的页面号 */
7 struct list_headlist; /*链表结构*/
} bootmem_data_t;
【内存管理】重要数据结构
最新推荐文章于 2024-08-10 18:31:58 发布