linux内核在哪里定义了内存中页面或页框的大小?(请说一下具体路径)

linux内核在哪里定义了内存中页面或页框的大小?(请说一下具体路径),第1张

我说下我的结论吧,只供楼主参考:

创建页表是通过函数__create_page_tables来实现的;这里,我们使用的是arm的L1主页表,L1主页表也称为段页表(sectionpage table)L1主页表将4 GB的地址空间分成若干个1MB的段(section),因此L1页表包含4096个页表项(sectionentry).。每个页表项是32 bits(4bytes),因而L1主页表占用4096*4=16k的内存空间。

启动MMU后会重新分配,在start_kernel的paging_init(struct machine_desc *mdesc)这个函数中,这也是分析内核的一个难点了

不能插图啊,望见谅!!!

Linux将物理内存按固定大小的页面(一般为4K)划分内存,在内核初始化时,会建立一个全局struct

page结构数组mem_map[

]。如系统中有76G物理内存,则物理内存页面数为76*1024*1024k/4K=

19922944个页面,mem_map[

]数组大小19922944,即为数组中每个元素和物理内存页面一一对应,整个数组就代表着系统中的全部物理页面。

在服务器中,存在NUMA架构(如Nehalem、Romly等),Linux将NUMA中内存访问速度一致(如按照内存通道划分)的部分称为一个节点(Node),用struct

pglist_data数据结构表示,通常使用时用它的typedef定义pg_data_t。系统中的每个结点都通过pgdat_list链表pg_data_t->node_next连接起来,该链接以NULL为结束标志。每个结点又进一步分为许多块,称为区域(zones)。区域表示内存中的一块范围。区域用struct

zone_struct数据结构表示,它的typedef定义为zone_t。更多详细的解答可以查看《Linux就该这么学》。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/5923664.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-08
下一篇2023-03-08

发表评论

登录后才能评论

评论列表(0条)

    保存