1825_ChibiOS的OSLIB中的存储分配器

news/2024/11/30 2:32:54/

         全部学习汇总: GreyZhang/g_ChibiOS: I found a new RTOS called ChibiOS and it seems interesting! (github.com)

1. 之前有点不是很理解什么是静态OS,从这里基本上得到了这个答案。所谓的静态,其实就是内核之中不会使用Free以及Malloc这样的存储分配功能。

2. 虽然内核之中没有用到这样的存储动态分配机制,但是OSLIB提供了三种存储分配机制,这样软件可以在实现自己功能的时候采用这样的功能。

3. 这里有个参数配置是配置系统堆的大小的,如果设置为0那么将会使用可用的全部存储。这里可用的全部存储,其实是链接器根据链接文件分配的,这个在后面的内容中得到了证实。

4. 三种分配机制:内核分配器、存储池分配器、堆分配器。具体的特点这里有介绍,后面会独立在梳理。

5. 内核分配器,这个支持从上到下以及从下到上的分配模式,分配的速度非常快。并且,分配的时候还可以指定对齐以及偏移等属性。不过,这种存储分配方式不支持分配出去的存储的回收。

1. 接下来的一种存储的处理方式是系统堆分配,这种处理方式跟FreeRTOS有点类似。对应的堆其实是在APP中通过一个数组来占用的一块连续空间。这里同时也说了前面的一个理解,那就是堆大小参数为0的时候,堆的大小信息其实是来自于链接器根据链接文件分配的存储空间。

2. 不同的分配方式采用的接口是不同的。

3. 如果使用了偏移以及对齐等属性指定,可能会有一部分存储浪费。

1. 存储池分配器是按照块来分的,这种机制在其他的RTOS中也见过。比较好的一点是这种方式其实是可以避免存储碎片的产生的。

2. 存储池的实现机制其实是通过链表来实现的,但是释放的存储不会保证下一次再分配的时候还保持之前的内容不变。

1. 带有保护机制的存储池分配器,跟存储池的机制类似,只是链表的元素个数是固定的。

2. 在实现的时候,分配采用了计数器信号进行保护。这样,当存储申请发现存储不够的时候是会触发一个线程的等待的。

堆分配器其实是实现了一个跟标准库类似的free以及malloc的功能。

         最后给出来了几种分配器的各方面的对比。虽然说参数上有一定的衡量度,但是究竟哪一种方案是最好的是没有定论的。最合适的选择还得结合自己的使用需求来确定。


http://www.ppmy.cn/news/1198316.html

相关文章

【Linux】:重定向和用户缓冲区

重定向和用户缓冲区 一.输出重定向1.现象2.系统调用接口 二.缓冲区1.引子2.刷新 三.回答引例 文件描述符对应匹配规则:从0下标开始,寻找最小的没有被使用的数组位置,它就是新的文件描述符(fd)。 一.输出重定向 1.现象 在这里我们向1号文件内…

CSRF攻击(2), 绕过Referer防御

CSRF攻击(2), 绕过Referer防御 一. 场景: 攻击服务器: 192.168.112.202 目标服务器: 192.168.112.200说明: 1. 前端页面的功能是修改密码. 2. 将恶意页面放到202服务器上, 在目标200服务器上访问恶意页面, 目的是绕过200服务器上对CSRF的防御, 修改密码. 二. 后端防御代码: …

机器视觉在农业、医疗等领域的应用与拓展

机器视觉在农业、医疗等领域有着广泛的应用和拓展,以下是具体的介绍: 在农业领域,机器视觉技术可以用于农作物生长状态监测、品质检测、产量预测等方面。通过对农作物的生长状态进行实时监测,可以及时发现病虫害、营养不足等问题…

python图像处理 ——图像锐化

python图像处理 ——图像锐化 前言一、原理二、 空间域锐化滤波1.拉普拉斯算子(Laplacian)2.罗伯茨算子(Roberts)3.Sobel算子4.Prewitt算子5.Scharr算子 三、实验对比 前言 由于收集图像数据的器件或传输图像的通道存在一些质量缺…

ELK搭建以及使用教程(多pipiline)

1、环境准备 服务器:Centos7 Jdk版本:1.8 Es版本:7.12.1 kibana版本:7.12.1 logstash版本:7.12.1 IP地址安装软件192.168.50.211Es,Kibana,logstash 2、安装docker 安装步骤参考:https:…

win10提示mfc100u.dll丢失的解决方法,快速解决dll问题

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“mfc100u.dll丢失”。那么,mfc100u.dll是什么?mfc100u.dll是Microsoft Visual C Redistributable文件之一,它包含了用于MFC (Microsoft Foundation Class…

StringBuffer-安全可变字符串容器

1、诞生原因 StringBuffer适用于作为共享变量使用,因为它通过排它锁来保证线程安全,也就是用了synchronized关键字修饰了相关操作方法,而这些方法的用法及特性与StringBuilder相同,只不过StringBuffer增加了一个缓存字符数组toSt…

三、操作系统

(一)概述 操作系统是管理整个系统的软、硬件资源的系统,既是人和硬件之间的一种接口,也是应用软件与硬件之间的接口。 (二)进程管理 1.进程的状态 进程的状态是操作系统对进程进行管理的时候设置的几种状…