苏州那里可以建网站,黄页网址18岁以下勿入,全国免费信息发布平台,公司网页设计报告5000字vmalloc 用途
vmalloc只用于内核模块的逻辑地址分配#xff0c;也就是说它的逻辑地址是挂在init_mm的pgd页表上的。它可将几段不连续物理区域合并分配一个连续逻辑区域。主要用于内核和驱动。
vmalloc 实现
入口在__vmalloc_node_range。 首先分配一个vm_struct#xff0c…vmalloc 用途
vmalloc只用于内核模块的逻辑地址分配也就是说它的逻辑地址是挂在init_mm的pgd页表上的。它可将几段不连续物理区域合并分配一个连续逻辑区域。主要用于内核和驱动。
vmalloc 实现
入口在__vmalloc_node_range。 首先分配一个vm_struct分配一个逻辑地址区到给它并插入全局vmap_area_root红黑树中__alloc_vmap_area逻辑地址区的范围在VMALLOC_START(0xffffc90000000000UL)到VMALLOC_END之间大小为32T。 通过kmalloc_node分配一组struct page然后用页分配器分配从per cpu page list 分配一批页__alloc_pages_bulk不是调用page_alloc接口去分配多页的块当pcplist中不足时会从buddy上再分配一批页到pcplist上。buddy选择numa的顺序是先从最近的numa节点分配再按numa距离去找下一个近的numa节点分配分配过程中是否尝试低水位分配、当指定迁移类型内存不够是否优先从其它numa节点同一迁移类型分配还是由本节点其它迁移类型分配由vm_area_alloc_pages传入的gfp决定。 最后将分配的一批页逐页映射到init_mm页表的pte上vmap_pages_range_noflush实现逻辑地址的连续。
参考
要根据逻辑地址找到对应struct page或根据struct page找到它的物理地址可以参考https://blog.csdn.net/qq_37517281/article/details/134713650
一个问题
逻辑上连续的内存映射为物理上不连续内存相对会比逻辑和物理都连续的内存会造成更多tlb抖动吗没学过这个不知道答案