很多基础的概念,将跨越软件的层次而存在。比如slab,对于内核人员,我们都知道slab是buddy之上的一层。
因为buddy作为linux内核最底层的内存管理器,它分配1页,2页,4页,2^n页,但是作为内核的堆用户本身,经常只是调用kmalloc()申请一个小内存,或者调用kmem_cache_alloc()申请一个数据结构,2^n页给它,会形成大量碎片浪费。所以slab找buddy要了2^n页后,内部切割为同样size的object,再给kmalloc和kmem_cache_alloc()拿走。
它的逻辑如下:
这样一种软件本质意义上的需求,不会因为只是内核就需要。比如同样的slab算法,也被著名的用户态软件memcached需要着。
memcached是一种分布式内存对象缓存系统,用于动态web等应用以减轻数据库的负载。它在内存中缓存数据和对象,使用key-value对形式存储。它的网站首页(https://memcached.org/)显示了它的基本用法逻辑:
memcached的原理也类似内核态page cache的原理:
比如你查询一个数据库,可以先看看memcached里面有没有命中,命中就直接从memcached的内存里面拿到值了,没有的时候才需要去查数据库。查到后,可以把结果放入memcached,这样下次再访问同样数据,不再需要进行数据库的查询动作。
memcached也同样采用slab分配算法来组织数据的存放,里面可以组织不同大小的chunks:
正如linux内核的每一种不同slab里面的object的大小不一样。
我们安装1个memcached:
$ sudo apt-get install memcached
然后启动起来,你马上看到memcached打印说自己创建了各种不同chunk size的slab:
当然,还有更多的相似性,比如memcached里面的对象,也是lru算法替换。所以lru这种,也是一种本质上的事情。
KH97材磁芯助力新能源汽车产业稳健发展
电阻串理论
如何在TD-SCDMA网络上向TD-LTE平滑演进
NRAM商用能席卷根深蒂固的DRAM/NAND Flash吗?
乐视发布多款直播相机Liveman套件 其中包括与AEE合作无人机
探究slab在内核内存管理和用户态Memcached的双重存在
网络5.0技术白皮书的愿景及目标详解
Step7中如何实现PID控制,PID系统控制器的选择
苹果将投资4万亿韩元与起亚共同造车
我们说的是“曲奇云盘”
大功率电源中移相全桥的十二种工作模态
中国联通在营造5G产业合作新生态上走出了坚实的一步
智能网联汽车隐私开发方法与流程探究
西门子触摸屏有哪些常见问题?
Web3国内进展与海外落地现状
微电网实验室平台设计研究
2021年春晚将开展8K制作并进行直播
用LED灯替代汽车车灯的七大好处
一文读懂51单片机的RAM分区
苹果推送第三个iOS/iPadOS 14.5开发者测试版