• dtb中的reuseable和nomap属性


    1、reusable会在early_init_dt_reserve_memory_arch()函数中加入到memblock.reserve的region中,因而可以在/sys/kernel/debug/memblock/reserved中看到

    2、no-map属性的内存在early_init_dt_reserve_memory_arch()函数中不会加入到memblock.reserve的region中,只会将其flag设置MEMBLOCK_NOMAP,因而在/sys/kernel/debug/memblock/reserved中无法看到

    3、reusable属性的内存会在map_mem()函数中通过如下代码段进行建立线性映射

    /* map all the memory banks */
    for_each_mem_range(i, &start, &end) {        //遍历所有的memblock.memory
        if (start >= end)
            break;
        /*
         * The linear map must allow allocation tags reading/writing
         * if MTE is present. Otherwise, it has the same attributes as
         * PAGE_KERNEL.
         */
        //只映射MEMBLOCK_NOMAP属性的区域
        __map_memblock(pgdp, start, end, pgprot_tagged(PAGE_KERNEL),
                        flags);
    }

    4、与第三部遥相呼应,no-map属性的内存不会在map_mem()中建立线性映射

    下面是将内存加入到buddy系统的流程

    5、reusable属性的内存不会释放到buddy系统。在free_low_memory_core_early()函数中会遍历所有的memblock.reserve区域,并通过reserve_bootmem_region(start, end)将各个reserved的PFN对应的struct page设置reserved标志:__SetPageReserved(page)

    6、而no-map属性的内存在memblock.memory中,同样在free_low_memory_core_early()函数中会遍历所有(memory && !reserved)的memblock regions;同时在遍历过程中还会调用should_skip_region()过滤掉MEMBLOCK_NOMAP标志的region。因而对于no-map属性的内存区域,虽然在memblock.memory区且没有在memblock.reserve区,但是由于MEMBLOCK_NOMAP标志的存在是不会释放的buddy系统的(况且no-map是没有建立线性映射的)。

  • 相关阅读:
    SQL Server 简单事务学习
    C# TreeView,递归循环数据加载到treeView1中
    javascript;Jquery;获取JSON对象,无刷新分页,异步加载,异步删除,实例。
    jquery获取当前页面的URL信息
    java的数据类型相关知识点
    java 图书馆初级编写
    1.1 弹出窗口控制
    轮播图片切换(函数传参)
    商品计算
    js中的作用域
  • 原文地址:https://www.cnblogs.com/liuhailong0112/p/15062251.html
Copyright © 2020-2023  润新知