人工智能趋势对当今企业的影响
.管理逻辑 Linux对物理页面管理的框架如上图,由于本文阐述的是物理内存外碎片,所以关于伙伴系统本文只做简单分析,不涉及具体的细节并不阐述关于per cpu pageset等内容,如果读者有兴趣,可以参考内核源码。 Linux将物理内存分为不同的node和zone来管理:
zone管理单元下的内存通过free_area数组将内存分成11个块链表进行管理: 二、Linux物理内存管理框架 阐述物理内存外碎片化的来龙去脉前,先得明白Linux是如何管理物理内存的?Linux内核采用的是buddy system allocation,即著名的伙伴系统分配器。 1.设计思路
伙伴系统分配器的核心思路:将系统的空闲页面分为11个块链表,每个块链表分别管理着1,2,4,8,16,32,64,128,256,512和1024个物理页帧号连续的页面。每个页面大小为4K bytes,buddy管理的块大小范围从4K bytes到4M bytes,以2的倍数递增。 2.物理内存外碎片化:指系统中无法利用的小内存块。 例如系统剩余内存为16K bytes,但是这16K bytes内存是由4个4K bytes的页面组成,即16K内存物理页帧号#1不连续。在系统剩余16K bytes内存的情况下,系统却无法成功分配大于4K的连续物理内存,该情况就是内存外碎片导致,本文中阐述的就是物理内存外碎片化。
注:#1物理页帧号:Linux物理内存是通过页面进行管理,并对每个页面进行编号,称为页帧号,如果是连续的两个物理页面,其页帧号是连续的。 结语 该篇主要讲了Redis的ZSET数据类型的底层实现跳跃表,先从跳跃表是什么,引出跳跃表的概念和数据结构,剖析了其主要组成部分,进而通过多幅过程图解释了Redis是如何设计跳跃表的,最后结合源码对跳跃表进行描述,如创建过程,添加节点过程,获取某个节点排名过程,中间穿插例子和过程图。 如果觉得写得还行,麻烦给个赞👍,您的认可才是我写作的动力! 如果觉得有说的不对的地方,欢迎评论指出。
好了,拜拜咯。 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |