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

         

  • 相关阅读:
    据说,能找出15个以上的的视力才正常....
    看看用PS来转基因的动物,居然很欢乐!!
    《天引》读书笔记——由新月形面积引发的人类长达2000年的探索。
    练习使用策略模式
    折半查找
    UltraEdit常用配置&搭建Java/C开发环境
    一个操作系统的实现_十分钟完成的操作系统——到这里博客迁移工作圆满结束
    C++中的变量初始化
    LeetCode Range Sum Query
    Peeking Iterator
  • 原文地址:https://www.cnblogs.com/honpey/p/5122921.html
Copyright © 2011-2022 走看看