zoukankan      html  css  js  c++  java
  • page-cache层

    pagecache层内存管理

    如果使用page,尤其对于32位系统来说,kmap & kunmap,可以把做struct *page与虚拟地址的映射

    用kmap做一个临时的映射,然后通过kunmap释放以使用稀少的高端内存映射

    pagecache层中TOWRITE是为了解决livelock的问题

    pagecache是怎么做到高效的搜索算法的?

    tag标志位很关键!

    radix_tree_node的结构体时:

    2^6=64 2^4=16,所以一个 radix_tree_node slots 数组一般是 16 长或者 64 长,

    struct radix_tree_node {
            unsigned char   shift;  /* Bits remaining in each slot 是说traverl到这里,我已经偏移了几位了,所以在算子地址之前,需要先index >> parent->shift */
            unsigned char   offset; /* Slot offset in parent,位于父目录的哪个slot? */
            unsigned int    count;
            union {
                    struct {
                            /* Used when ascending tree */
                            struct radix_tree_node *parent;
                            /* For tree user */
                            void *private_data;
                    };
                    /* Used when freeing node */
                    struct rcu_head rcu_head;
            };
            /* For tree user */
            struct list_head private_list;
            void __rcu      *slots[RADIX_TREE_MAP_SIZE]; /×每个node包含有2^RADIX_TREE_MAP_SHIFT个slots×/
            unsigned long   tags[RADIX_TREE_MAX_TAGS][RADIX_TREE_TAG_LONGS];
    };
    

     tags数组,说明一个radix_node最多能设置三个tag,再多就不行了!

     第二维是一个bitmap,表示这个对应位上的 bit 是否被设置上了!比如radix

    #define RADIX_TREE_MAX_TAGS 3
    #ifndef RADIX_TREE_MAP_SHIFT
    #define RADIX_TREE_MAP_SHIFT    (CONFIG_BASE_SMALL ? 4 : 6)
    #endif
    #define RADIX_TREE_MAP_SIZE     (1UL << RADIX_TREE_MAP_SHIFT)
    #define RADIX_TREE_MAP_MASK     (RADIX_TREE_MAP_SIZE-1)
    
    #define RADIX_TREE_TAG_LONGS    
            ((RADIX_TREE_MAP_SIZE + BITS_PER_LONG - 1) / BITS_PER_LONG)
    RADIX_TREE_TAG_LOGS 表示

     node_maxindex 函数作用:

         

  • 相关阅读:
    安装node和npm
    安装git
    常用软件
    vscode常用插件
    git生成ssh key
    04.接口初始化规则与类加载器准备阶段和初始化阶段的意义
    03.编译期常量与运行期常量的区别与数组创建本质分析
    02.常量的本质含义与反编译及助记符
    01.类加载,连接与初始化过程
    HTTP 状态码大全
  • 原文地址:https://www.cnblogs.com/honpey/p/5122921.html
Copyright © 2011-2022 走看看