现代处理器通常至少有4个RAM片选管脚,每个管脚所连RAM芯片在系统总的起始地址和大小可以通过寄存器设置。
对应内存bank的数据结构有struct meminfo:
struct meminfo {
int nr_banks;
struct membank bank[NR_BANKS];
};
内存节点(node)
内存节点是指由一个或者多个内存bank组成的内存集合,如果一个内存节点由多个内存bank组成,这些内存bank之间可以连续也可以不连续,即节点内可以存在内存孔洞。
在设置中
CONFIG_DISCONTIGMEM
/*
未设置,则只有一个bank,即只有一个内存node,内存地址连续;
处理器地址寻址间每两个RAM的地址范围固定,若接入的RAM小于这个最大寻址范围,将出现内存孔洞。此时,若不设置CONFIG_DISCONTIGMEM,所有内存bank都属于内存节点0,如果设置了CONFIG_DISCONTIGMEM,将浪费一定的时间为孔洞内存创建struct page。
孔洞对系统启动后无影响,因为孔洞已经被mem_init()回收。
*/
对应内存节点的重要数据结构有 struct pglist_data(pg_data_t):
typedef struct pglist_data {
struct zone node_zones[MAX_NR_ZONES];
struct zonelist node_zonelists[MAX_ZONELISTS];
int nr_zones;
#ifdef CONFIG_FLAT_NODE_MEM_MAP /* means !SPARSEMEM */
struct page *node_mem_map;
#ifdef CONFIG_CGROUP_MEM_RES_CTLR
struct page_cgroup *node_page_cgroup;
#endif
#endif
#ifndef CONFIG_NO_BOOTMEM
struct bootmem_data *bdata;
#endif
#ifdef CONFIG_MEMORY_HOTPLUG
/*
* Must be held any time you expect node_start_pfn, node_present_pages
* or node_spanned_pages stay constant. Holding this will also
* guarantee that any pfn_valid() stays that way.
*
* Nests above zone->lock and zone->size_seqlock.
*/
spinlock_t node_size_lock;
#endif
unsigned long node_start_pfn;
unsigned long node_present_pages; /* total number of physical pages */
unsigned long node_spanned_pages; /* total size of physical page
range, including holes */
int node_id;
wait_queue_head_t kswapd_wait;
struct task_struct *kswapd;
int kswapd_max_order;
} pg_data_t;
内存页区(zone)
内存页区是定义在内存节点(node)中的概念,每个内存节点可以分成3个内存页区,即
1、DMA页区(ZONE_DMA=0):可DMA操作
2、Normal页区(ZONE_NORMAL=1):禁止DMA操作
3、HighMem页区(ZONE_HIGHMEM=2):高端内存区域
对应内存页区的重要数据结构有struct zone(内容比较长,就不粘贴了~、~,上LXR自己找找呗)
空闲内存区域(free area)
空闲内存区域是内存页区内连续2^N页空闲内存组成的内存区域,其中N的范围在0~MAX_ORDER-1之间的整数,MAX_ORDER默认为11.
对应的数据结构有struct free_area:
struct free_area {
struct list_head free_list[MIGRATE_TYPES];
unsigned long nr_free;
};
上一篇:ARM平台linux内核Notes 2
下一篇:s3c6410裸机程序(2)
推荐阅读最新更新时间:2024-11-05 07:20
设计资源 培训 开发板 精华推荐
- LTC2946IMS-1 在 -48V 系统中使用低侧检测(1.5kHz I2C 接口)进行电源、电荷和能量监控的典型应用
- 用于 3.3V 至 5.5V RS-232 收发器的 RS-232 隔离接口
- MB39C022N降压DC/DC转换器+低噪声LDO的典型应用
- 使用 Analog Devices 的 AD7879ACPZ 的参考设计
- 5个IO控制20个LED
- ST1S12GR 0.7A、1.7 MHz 降压型开关稳压器的典型应用
- EVAL-AD5235SDZ,用于 AD5235 双通道、1024 位、非易失性存储器数字电位器的评估板
- REF191 具有限流功能的精密微功耗、低压差、电压基准的典型应用
- MAX1720 负载稳压负输出电压的典型应用
- AM1S-4824SZ 1W DC-DC转换器典型应用