• 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 函数作用:

         

  • 相关阅读:
    laydate 显示结束时间不小于开始时间
    [Draft]iOS.ObjC.Pattern.Builder-Pattern
    [Draft]iOS.Architecture.16.Truth-information-flow-and-clear-responsibilities-immutability
    iOS.ObjC.__attribute__.1-all-_attribute_-directives
    Security.ssl-pinning
    iOS.mach_msg_trap()
    iOS.redefinition-of-struct-x
    Swift.Operator-and-Items-in-Swift(1)
    iOS.Animation.Math-behind-CATransform3D
    Security.website-that-focus-on-mobile-app-security
  • 原文地址:https://www.cnblogs.com/honpey/p/5122921.html
Copyright © 2020-2023  润新知