tlsf算法-概念、原理、内存碎片问题分析

article/2025/10/17 0:51:08

文章目录

  • 一、tlsf算法介绍
  • 二、tlsf代码分析
    • 2.1 mapping_search
    • 2.2 search_suitable_block
  • 三、参考链接

一、tlsf算法介绍

tlsf(全称Two-Level Segregated Fit,内存两级分割策略算法),第一级(first level,简称fl)将内存大小按2的幂次方划分一个粗粒度的范围,如一个72字节的空闲内存的fl是6(72介于26和27之间),第二级(second level,简称sl)在第一级的基础上做线性化的细粒度划分,分为多少等份由可配置的SLI参数确定,在32bit的系统中,最优的SLI是4或者5,若为4,则等分为24=16份,每一份分割叫做Segregated list(分割链表),如下图中的[104…111],链表上挂着的是大小范围为104…111的free blocks,数字104…111代表的是内存的大小,而非内存地址,tlsf算法将内存分成不同大小的块,如下图的[104…111]这个分割链表管理了两个内存块,一个大小109字节,一个大小104字节。前面介绍了tlsf算法会对内存按照大小做两级分割,接着讨论怎么根据内存大小查找free block,tlsf算法根据需要的内存大小根据前面的两级分割算法计算出fl和sl,采用good fit策略,分割链表中的free block都必须大于需要的内存大小,如需要一个72字节的内存,假设SLI=2(简单起见,做4等分),则fl=6,sl=0,加入选择sl=0这个分割链表,则由于67小于72,不满足分割列表中所有free block大于需要的内存的条件,所以需要取sl=1,如果sl=1这个分割链表不为空则返回这个链表中的第一个free block给到应用程序。
在这里插入图片描述

二、tlsf代码分析

tlsf在tlsf_malloc中先调用block_locate_free获取free block,再调用block_prepare_used获取free block的内存地址返回给应用程序。在这个过程中,与good fit相关的是两个函数mapping_search和search_suitable_block。

2.1 mapping_search

/* This version rounds up to the next block size (for allocations) */
static void mapping_search(size_t size, int* fli, int* sli)
{if (size >= SMALL_BLOCK_SIZE){const size_t round = (1 << (tlsf_fls_sizet(size) - SL_INDEX_COUNT_LOG2)) - 1;size += round;}mapping_insert(size, fli, sli);
}
//在mapping_search调用mapping_insert
/*
** TLSF utility functions. In most cases, these are direct translations of
** the documentation found in the white paper.
*/static void mapping_insert(size_t size, int* fli, int* sli)
{int fl, sl;if (size < SMALL_BLOCK_SIZE){/* Store small blocks in first list. */fl = 0;sl = tlsf_cast(int, size) / (SMALL_BLOCK_SIZE / SL_INDEX_COUNT);}else{fl = tlsf_fls_sizet(size);//计算first level indexsl = tlsf_cast(int, size >> (fl - SL_INDEX_COUNT_LOG2)) ^ (1 << SL_INDEX_COUNT_LOG2);//计算second level indexfl -= (FL_INDEX_SHIFT - 1);}*fli = fl;*sli = sl;
}

mapping_search先对size做一个四舍五入,再根据size计算fl和sl的索引,这个fl和sl索引作为下一步的search_suitable_block的起点。

2.2 search_suitable_block

static block_header_t* search_suitable_block(control_t* control, int* fli, int* sli)
{int fl = *fli;int sl = *sli;/*首先,在与给定的fl/sl索引相关的分割链表中搜索一个free block。*/unsigned int sl_map = control->sl_bitmap[fl] & (~0U << sl);if (!sl_map){/* 没有free block存在,搜索下一个first level */const unsigned int fl_map = control->fl_bitmap & (~0U << (fl + 1));if (!fl_map){/* 没有可用的free block,内存已经用完。*/return 0;}fl = tlsf_ffs(fl_map);*fli = fl;sl_map = control->sl_bitmap[fl];}tlsf_assert(sl_map && "internal error - second level bitmap is null");sl = tlsf_ffs(sl_map);*sli = sl;/* 返回分割链表的第一个free block */return control->blocks[fl][sl];
}

search_suitable_block根据fl个sl获取free block。

三、参考链接

LiteOS内存管理:TLSF算法


http://chatgpt.dhexx.cn/article/4CCtbbDs.shtml

相关文章

数学建模系列-优化模型(三)---排队论模型

所谓排队论模型&#xff0c;就是指一个模型中可根据交易简单的需要分为三个部分&#xff1a; &#xff08;1&#xff09;顾客造访 &#xff08;2&#xff09;服务顾客时间 &#xff08;3&#xff09;若不空闲&#xff0c;则顾客需要排队 下面是对于排队论模型的建模以及解决方法…

无线传感器网络:排队论(Queueing Theory)模型

文章目录 The arrival ProcessQueueing SystemThe M/M/1 queueThe M/M/1/N queue References 排队理论已被用于评估通信网络的性能很多年了。早在1917年&#xff0c;丹麦数学家 Erlang 就将该理论用于电话交换机的设计&#xff0c;并开创了现在著名的 Erlang-B 和 Erlang-C 公式…

排队论(Queuing theory)简介

Preliminary Questions 1.What does affect the performance of ——a computer system? ——a computer network? ——an Internet service? 2 How do we measure the performance of ——a computer system? ——a computer network? ——an Internet service…

泊松分布,指数分布与排队论模型

转自http://www.ruanyifeng.com/blog/2015/06/poisson-distribution.html泊松分布和指数分布&#xff1a;10分钟教程 https://www.bilibili.com/video/BV1L5411x7vH?p44北京工业大学运筹学 泊松分布与指数分布 泊松分布 泊松分布就是描述某段时间内&#xff0c;事件具体的…

排队论模型之M/M/S模型

相关参数 模型推导 例题 代码实现&#xff1a; s3; %服务台的个数 mu0.4; %单位时间内能服务的顾客数 lambda0.9; %单位时间内到达的顾客数rolambda/mu; rosro/s; sum10; %求解P0时把其分成两部分计算&#xff0c;分别为sum1,sum2 for i0:(s-1) sum1sum1ro.^i/factorial(i); …

排队模型和排队系统仿真

排队模型和排队系统仿真 Gary哥哥 2021.1.31 排队论又称随机服务系统&#xff0c;是研究系统随机聚散现象和随机服务系统工作过程的数学理论和方法&#xff0c;是运筹学的一个分支。排队论的基本思想是 1909 年丹麦数学家 A.K. 埃尔朗在解决自动电话设计问题时开始形成的&#…

数学模型算法实现之排队论

排队问题 https://wenku.baidu.com/view/475f68cb65ce0508763213a7.html 排队论详解 排队论又叫随机服务系统理论或公用事业管理中的数学方法。它是研究各种各样的排队现象的。它所要解决的主要问题是:在排队现象中设法寻求能够达到服务标准的最少设备,使得在满足服务对象…

排队论模型(二):生灭过程 、 M / M /s 等待制排队模型、多服务台模型

排队论模型&#xff08;一&#xff09;&#xff1a;基本概念、输入过程与服务时间的常用概率分布 排队论模型&#xff08;二&#xff09;&#xff1a;生灭过程 、 M / M /s 等待制排队模型、多服务台模型 排队论模型&#xff08;三&#xff09;&#xff1a;M / M / s/ s 损失…

排队论模型(四):M / M / s 混合制排队模型

排队论模型&#xff08;一&#xff09;&#xff1a;基本概念、输入过程与服务时间的常用概率分布 排队论模型&#xff08;二&#xff09;&#xff1a;生灭过程 、 M / M /s 等待制排队模型、多服务台模型 排队论模型&#xff08;三&#xff09;&#xff1a;M / M / s/ s 损失…

浅谈排队论

排队论起源于 1909 年丹麦电话工程师 A. K&#xff0e;爱尔朗的工作&#xff0c;他对电话通话拥挤问 题进行了研究。1917 年&#xff0c;爱尔朗发表了他的著名的文章—“自动电话交换中的概率理 论的几个问题的解决”。排队论已广泛应用于解决军事、运输、维修、生产、服务、库…

超详细的排队论建模

排队系统 顾客输入过程 顾客源&#xff08;总体&#xff09;&#xff1a;有限/无限顾客到达方式&#xff1a;逐个/逐批&#xff08;主要是逐个&#xff09;顾客到达间隔&#xff1a;随机型/确定型顾客到达&#xff1a;相互独立/相互关联输入过程&#xff1a;平稳/非平稳 排队…

排队论模型(五): 有限源排队模型、服务率或到达率依赖状态的排队模型

排队论模型&#xff08;一&#xff09;&#xff1a;基本概念、输入过程与服务时间的常用概率分布 排队论模型&#xff08;二&#xff09;&#xff1a;生灭过程 、 M / M /s 等待制排队模型、多服务台模型 排队论模型&#xff08;三&#xff09;&#xff1a;M / M / s/ s 损失…

排队论模型(一):基本概念、输入过程与服务时间的常用概率分布

排队论模型&#xff08;一&#xff09;&#xff1a;基本概念、输入过程与服务时间的常用概率分布 排队论模型&#xff08;二&#xff09;&#xff1a;生灭过程 、 M / M /s 等待制排队模型、多服务台模型 排队论模型&#xff08;三&#xff09;&#xff1a;M / M / s/ s 损失…

数学建模之排队论

排队是在日常生活中经常遇到的现象&#xff0c;如顾客到商店购买物品、病人到医院看病常 常要排队。此时要求服务的数量超过服务机构&#xff08;服务台、服务员等&#xff09;的容量。也就是说&#xff0c;到达的顾客不能立即得到服务&#xff0c;因而出现了排队现象。这种现象…

排队论简介

一、随机过程&#xff08;Stochastic Process&#xff09;&#xff1a; 1.定义&#xff1a; 设随机实验的样本空间S{s}&#xff0c;如果对于每个s&#xff0c;有对应属于参数集T的参数t的函数X(s,t)&#xff0c;那么对于所有的s&#xff0c;得到一组t的函数{X(s,t),t∈T}&…

数学建模:排队论模型

今天来简单介绍一下关于数学建模中排队论模型的基本情况和其在MATLAB中的实现方法&#xff1a; 排队论(Queuing Theory) &#xff0c;是研究系统随机聚散现象和随机服务系统工作过程的数学理论和方法&#xff0c;又称随机服务系统理论&#xff0c;为运筹学的一个分支。是通过对…

数学建模学习笔记(六):排队论模型

一、排队论基本概念 1、基本概念 &#xff08;1&#xff09;银行等 &#xff08;2&#xff09;车站等 &#xff08;3&#xff09;新生报到等&#xff08;电路中的串联&#xff09; &#xff08;4&#xff09;更多 随即服务系统&#xff1a;等待时间&#xff0c;被服务时间都不…

排队论(Queuing Theory)

目录 简介 一、基本概念 1.1 排队过程的一般表示 1.2 排队系统的组成和特征 1.2.1 输入过程 1.2.2 排队规则 1.2.3 服务过程 1.3 排队模型的符号表示 1.4 排队系统的运行指标 二、 输入过程与服务时间的分布 2.1 泊松流与指数分布 2.2 常用的几种概率分布 2.2.1 连…

排队论模型(七):排队系统的优化

排队论模型&#xff08;一&#xff09;&#xff1a;基本概念、输入过程与服务时间的常用概率分布 排队论模型&#xff08;二&#xff09;&#xff1a;生灭过程 、 M / M /s 等待制排队模型、多服务台模型 排队论模型&#xff08;三&#xff09;&#xff1a;M / M / s/ s 损失…

详细解析排队论

文章目录 (1)基本组成1.输入过程2.服务规则3.数量指标 (2)常见的分布1.泊松分布2.负指数分布 (4)排队模型记号(5)单服务台模型0.Little公式1.标准型M/M/1/ ∞ \infin ∞/ ∞ \infin ∞2.系统容量有限型M/M/1/N/ ∞ \infin ∞3.顾客源有限型M/M/1/ ∞ \infin ∞/m (6)多服务台模…