Nucleus操作系统内存池模块移植的研究与应用

最新更新时间:2013-01-20来源: 21IC关键字:Nucleus  操作系统  模块移植 手机看文章 扫描二维码
随时随地手机看文章
   内存池方式的内存管理是一种可计量、高效的内存管理方式,它具有减少内存碎片、提高分配速度、防止内存泄漏等优势[1]。目前在国内基于内核的内存池大多基于Linux内核[2]。本文主要基于Nucleus操作系统内核来介绍内存池静态与动态分配在TD-LTE无线综合测试仪移植中的研究与应用,阐述了在不同分配方式中的内存池结构、分配算法以及适用环境。
1 静态方式分配内存池
    静态内存池管理方式中内存池分为池(pool)和块(partition)。之所以称之为静态管理方式,是因为在使用过程中块的大小是固定的(即在创建过程中块大小是确定的)。静态内存池的整体结构如图1所示,池和块都有自己的头,池是由双向循环链表链接而成,块是由单向链表链接而成,每一块的头中还包含了自己属于哪一个池的属性。可用块的信息以单向链表的形式存储于池头中,并且可用块与已经分配的块的个数都在池头中有记录。

1.1 静态内存池的创建
    池头中的主要参数包括内存池控制块指针、内存池名(只取8个字符)、起始地址、内存池总大小(字节为单位)、内存池分块大小(字节为单位)、挂起方式(先进先出或按优先级)等,图2是仿真器上运行过程中静态内存池结构体截图。
    对图2中两个结构体链表参数说明如下:(1)pm_created:当前已经创建的内存池,采用双向循环链表连接,插入方式是在最后一个节点和首节点间填充;(2)pm_available_list:存储当前还可用partition的链表,结构与块的头部结构header_ptr相同(PM_OVERHEAD=8 B小块的头header_ptr:单向链表,内部有指向下一小块的指针和所属大块的控制块地址)。

    在Nucleus内核中,内存池的创建主要由函数PMC_Create_Partition_Pool负责,创建流程如下:调用过程中首先进行参数合法性检测;然后在池头(控制块)中写入各个参数,创建链表;之后是一个重要的循环体,负责初始化partition链表,分配所有的partition,每个partition的大小在分配时需要在函数传入参数值的基础上加8 B,用来存储header_ptr;最后在内存池线程保护后将新的内存池插入内存池链表并计数。
1.2 静态内存池的分配
    在TD-LTE无线综合测试仪中分配前由协议栈提供所需要分配的大小,这里主要是放置协议内部配置信息与层间交互原语。由于这些信息的大小固定,只是有几种不同大小的固定模式,所以很适合采用静态分配的方式来分配内存,只需要根据数据大小选择密度合适的内存池即可。移植过程中使用了不同大小的partition构建不同密度的内存池,因此,可根据申请partition的大小来判定用那种密度的内存池,以减少内部碎片的大小。这种方法可以有效避免空间浪费[3],同时又可提高分配效率。
    在Nucleus内核中静态内存池的分配主要由函数PMC_Allocate_Partition负责,其主要参数为内存池指针(指向调用的内存指针,不能为NULL,设置为可用内存地址即可)、分配大小和挂起标志位。函数中主要判断内存池指针是否合法、内存池与partition是否匹配、指向调用的内存指针是否合法、任务挂起标志位是否有效。其分配流程如图3所示。过程如下:调用内核函数TCT_System_Protect(TCT_Protect)保护内存池同步互斥通道。判断是否还有可用partition,若有,则将可用数量减1、分配数量加1并更新pm_available_list以及将指向调用内存指针赋值为当前分配的partition地址(partition地址要+8 B删去头);若没有,则将任务挂起直至有可用Partition才恢复。最后解保护并返回。

1.3 静态内存池的释放
    系统采用PMC_Deallocate_Partition函数来完成释放。流程如下:调用内核函数保护内存池同步互斥通道。判断是否有等待任务,若有,则分配给这个任务当前partition,再判断当前任务是否允许被抢占,允许就调用TCT_Control_To_System抢占当前任务、激活等待内存的任务;若没有,则等待任务,将当前partition重新接入到可用partition列表的头部。最后调用TCT_Unprotect解保护。
2 动态方式分配内存池
    动态内存池也分为池和块两个部分,动态池直接由双向循环链表实现连接。内部块是动态分配的,由最小可分配空间来限制块的最小值。与静态分配不同,动态分配块也由双向循环链表来链接。创建时的初始结构为两个块,在申请时动态分割。图4是仿真器上运行过程中动态内存池与块的结构体截图。

    池控制块结构中dm_memory_list与块头结构体相同,池通过dm_memory_list来完成块搜索;块头结构中dm_memory_pool与大块头结构相同,通过它来比配大块。
2.1 动态内存池的创建
    初始化完成时的内存结构:初始化创建完成时内存池中有2个块,1个大小为总大小减去32 B,包含自己的头DM_OVERHEAD=16 B,设置为可以状态free=‘0x01’;1个大小为16 B,只有自己的头,没有空间,设置为不可以状态free=‘0x00’。因此,此时的可用空间为除去池的控制块外的总大小减去32 B。初始化结构如图5所示(没有将池控制块表示出来)。

 

 

    创建时,首先为控制块指针赋值,内存池大小与最小分区大小进行字对齐校正;判断控制块指针、起始地址、最小分配空间、挂起标志是否合法。创建过程如下:初始化控制块中的各个参数,并按图5初始化小块、创建小块双向循环链表,与静态分配相同需要先进行线程保护再加入到池动态内存池链表。
2.2 动态内存池的申请
    动态申请主要用于操作系统内模块(如任务、队列等)的堆栈分配与模块占用空间的分配。由于在TD-LTE无线综合测试仪中这些分配的空间大小浮动不定,因此需要使用动态分配内存。Nucleus中动态分配采用首次匹配原则,每一次申请内存时动态分配申请大小加16 B(这个16 B的头对应剩下的可用空间)的内存池空间,并把分配过的部分设置为不可用状态free=‘0x00’。
    负责实现的函数是DMC_Allocate_Memory。首先进行各种参数的合法性检测,然后将分配空间size小于最小分配空间的分配空间大小赋值为最小空间,对size进行字对齐处理,调用线程保护后采用首先匹配法来找适用空间,即:在循环体中先判断free标志,是空闲块(free=‘0x01’),则算出减去本次分配的头后所剩的空间,当此空间大于本次请求size时进行分配,小于时则移动到下一个块;若不是空闲块,则直接把剩余空间设置为0进行后面小于size时移动到下一个块的判断。注意:这里用到了控制块中的dm_search_ptr属性(结构与小块的头相同),该属性用于记录开始匹配的起始位置,作为判断循环体结束的条件之一,如果循环到此处,就表示没有找到可分配空间。图6是动态分配的流程图。

    循环结束后判断是否找到可用于分配的块,若找到则进行是否需要分割该可用块的判断。条件是这个可用块的大小大于或等于本次所需空间size+头大小+最小分配空间的值,若满足此条件则分割出一个新块并对其加头初始化,再计算出剩余可用空间;不满足此条件则直接计算剩余可用空间。分配的空间标志为非空闲后,把所分配空间的地址赋给指向调用的内存指针(注意去头)。为提高效率,还需要进行一个简单处理,即判断如果在搜索块时一次性匹配成功,则将dm_search_ptr移向下一个块。
    如果没有找到可用块则将任务挂起等待,没有采用挂起模式则直接返回NULL给指向调用的内存指针,最后调用TCT_Unprotect解保护。图7是分配第一块内存后动态内存池的结构。

2.3 动态内存池的释放
    释放过程与静态类似,需要注意的是,如果相邻块有空闲块需要合并,则合并后把dm_search_ptr指向当前合并的空闲块。
    动态分配内存的算法复杂度要高于静态分配,从时间复杂度来看,静态分配是O(1)、动态是O(n)。但是动态分配的内存利用率要高于静态分配内存[5],在实际应用中要结合具体情况决定采用何种分配方式。在本设计中合理使用了两种分配方式:在静态分配中进行密度的动态判断,在动态分配中进行静态的最小分配大小匹配。动、静相结合,使操作系统在分配中尽可能地节约内存的同时,有效减少了内存碎片。本分配方式已经运用于TD-LTE无线综合测试仪中,在实现操作系统基本内存管理功能的同时,满足了TD-LTE无线综合测试仪对系统内存资源和调度时间的设计要求。
参考文献
[1] 冯宝祥,王桂棠.嵌入式实时操作系统Nucleus PLUS在S3C2410A上移植的实现[J].电子设计应用,2007(5):104-106.
[2] 王小银,陈莉君.Linux内核中内存池的实现及应用[J]. 西安邮电学院学报,2001,16(4):40-43.
[3] 张磊,王忠仁.嵌入式系统中一种池式内存管理中应用 [J].实验科学与技术,2007,5(2):150-152
[4] LMAS S H.An application-level memory management service[C].ICTTA 2008.3rd International Conference on.7-11 April 2008:1-4.
[5] MUTSCHLER D W.Enhancement of memory pools toward a  multi-threaded implementation of the Joint integrated mission  model(JIMM)[C].WSC 06.Proceedings of the Winter.3-6 Dec.2006:856-862.

关键字:Nucleus  操作系统  模块移植 编辑:探路者 引用地址:Nucleus操作系统内存池模块移植的研究与应用

上一篇:全自动六轴玻璃打孔案例解析
下一篇:MAXIM的锂离子ModelGauge集成电路方案

推荐阅读最新更新时间:2023-10-17 15:13

嵌入式环境中Nucleus到Linux的程序移植方案
引言 Nucleus是单一地址空间操作系统的一种,作为商业化的嵌入式操作系统产品,曾被广泛使用。在MIPS架构中,其操作系统和用户程序完全工作在内核模式,且只占用和访问0x80000000以上的线性地址空间。因此,在 Nucleus中,操作系统和用户程序工作在线性地址空间中,且用户程序与内核服务之间没有明显的区分,进入内核服务更像是调用 API(Application Program Interface)而不需要上下文切换。其优点是限制少,编程方便,但系统健壮性差。 Linux 操作系统因其开放性和稳定性等优点,近年来为越来越多的嵌入式设计方案所采用。它有着严格的内核模式和用户模式的区别,在MIPS架构中,用户模式只能访问0x80
[嵌入式]
硬实时操作系统-RTLinux
摘要: 介绍了RTLinux的两个重点特点:硬实时性和完备性,及其在嵌入式系统应用中的一些重要功能,并结合实时处理的具体实例对其编程方法加以说明。 关键词: 操作系统 实时处理 Linux 嵌入式系统 近年来,基于PC的嵌入式系统得到迅速的发展。在各种不同的操作系统中,由于Linux操作系统的廉价、源代码的开放性以及系统的稳定性,使其在基于PC的嵌入式系统中的应用日益广泛。RTLinux(RealTime Linux) 是一种基于Linux的实时操
[嵌入式]
BAT染指汽车操作系统,中国消费者更在乎连通性
在过去5年里,中国领先的互联网集团百度、阿里巴巴和腾讯竞相将利润丰厚的应用放在智能手机屏幕上。然而,他们现在正将注意力转向制造智能和联网汽车——即所谓的在轮子上的智能手机——因为操作软件将成为汽车市场的下一个战场。     到目前为止,与上海汽车制造商上海汽车有限公司合资的上海斑马智行公司已经率先开发了汽车“操作系统”,其中包括触摸屏、GPS地图和其他通常能找到的功能。   斑马智行汽车软件系统就是被熟知的“ AliOS ”,它在上个月改名为“云os车载 汽车操作系统 ”,并安装在荣威RX5运动型多用途车上。该公司在2016年7月发布的这款车被称为“世界上首款大规模生产的互联网汽车”。根据中国汽车工业协会的数据,到2017年7
[嵌入式]
Ubuntu进攻物联网 发展智能家电、机器人操作系统
      因应物联网应用发展,Canonical宣布将以旗下Snappy Ubuntu Core发展对应智慧家电、机器人等硬体的作业系统,同时相容ARM或x86硬体架构处理器,并且降低硬体需求规格、简化升级复杂度,以及提供更具弹性的客制化空间。另外,Canonical也将进一步提升Snappy Ubuntu Core系统稳定性与可靠度,避免智慧家电无形中造成使用者个人资讯外泄等风险。 根据Canonical创办者Mark Shuttleworth表示,预计将以Snappy Ubuntu Core发展对应智慧家电、机器人等硬体的作业系统,同时相容ARM或x86硬体架构处理器,并且降低硬体需求规格、简化升级复杂度,以
[手机便携]
若谷歌仍不授权,华为已有准备 “B 计划”
据科技新报报道,美国对华为的贸易管制仍未解除,华为台湾总代理讯崴技术总经理雍海 1 日表示,目前华为对台湾厂商的采购不断增加,未来预期还会更多,但由于涉及到与华为的合作协议,不方便透露具体数字。同时雍海也强调,倘若下半年华为新机没有谷歌授权的 Android 操作系统,就将启动“B 计划”。 雍海指出,今年 6 月底华为 P30 系列手机全球出货量突破 1,000 万台,相较去年的 P20 系列提前 62 天达成目标,创下了华为旗舰机突破千万支的最快纪录。 雍海表示,华为将对台湾电子产业的未来扮演非常重要的角色,作为非常重要的合作伙伴,华为也会为台湾产业发展带来更多且更大的进展。 此外雍海也表示,在台湾市场,华为销售动
[嵌入式]
丰田未来五年内将推出全新Arene操作系统
北京时间8月26日消息,据国外媒体报道,当地时间8月25日,丰田首席产品整合官Keiji Yamamoto在东京对外宣布了针对丰田和雷克萨斯品牌未来车型的相关软件开发计划。 Keiji Yamamoto还公布了令人为之振奋的消息,那就是丰田将在未来五年内发布全新Arene操作系统。另外,从今年秋季发布的下一代雷克萨斯NX车型开始,软件在线升级(OTA updates)功能将覆盖丰田公司旗下更多车型。值得一提的是,上述功能此前已经在特斯拉和大众等丰田竞争对手中推广开来。 迄今为止,雷克萨斯和丰田已经出产了大约1000万辆互联汽车。事实上,雷克萨斯LS500h旗舰车型和丰田Mirai燃料电池电动轿车已经支持OTA升级功能,不过
[汽车电子]
下一代操作系统可能就是IoT操作系统
  每一代信息产业都会诞生新一代的 操作系统 。因为每一代信息产业都会诞生不同的平台,每一代平台都由新一代的 操作系统 所驱动。PC时代有Windows,移动时代有Android和iOS。下面就随嵌入式小编一起来了解一下相关内容吧。   PC已成昨日黄花,而移动互联网已然停滞不前,对于大多数互联网企业以而言都在展望下一个爆发点——下一个平台究竟是何种模样?下一个流量富矿究竟在何方?按照“每一代平台都由新一代的 操作系统 所驱动”这个角度来看,下一代操作系统可能也会因此诞生。   纵观如今的产业发展来看,下一代操作系统很可能就是 IoT 操作系统。    手机为基础的 IoT 布局已经失效    IoT 不是趋势,而是现实。
[嵌入式]
蔚来整车全域操作系统“天枢”发布
2023年9月21日,在NIO IN 2023 蔚来创新科技日上,蔚来正式发布整车全域操作系统天枢SkyOS。据蔚来董事长李斌在现场介绍,“天枢”取名于北斗,天枢是北斗星的第一颗星,象征轮回循环和永恒不变的枢纽。 整车全域操作系统天枢SkyOS是蔚来整车底层操作系统,也是行业内首个由车企自研并发布的智能电动汽车整车全域操作系统,为整车研发建立全方位、立体的技术体系,使各种设备能够有机地融合在一起,实现高效协同工作。根据规划,天枢SkyOS全功能量产将在NT3平台车型上实现。 天枢SkyOS构建起1+4+N技术集群,涵盖车控、智驾、座舱、移动互联等多个领域,成为全面且领先的智能数字技术基座。 其中,“1”指“SkyOS
[汽车电子]
蔚来整车全域<font color='red'>操作系统</font>“天枢”发布
小广播
最新电源管理文章
换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved