一种面向光纤通信的缓存动态管理方案

2019-06-01 10:06杨明伟杜建华薛楠李斌
电脑知识与技术 2019年12期
关键词:光纤通信嵌入式系统动态管理

杨明伟 杜建华 薛楠 李斌

摘要:缓存作为一种有限资源,在进行数据通信时,负责进行数据的缓冲,在数据通信速度的提升中起关键作用。本文提出了一種缓存动态管理方案,与传统的缓存管理方式相比,本文提出的缓存动态管理方式能更有效地使用缓存,缓存更多的消息,从而提升通信速度。

关键词:嵌入式系统;光纤通信;缓存;动态管理

中图分类号:TP309 文献标识码:A

文章编号:1009-3044(2019)12-0045-02

1 引言

随着机载计算机技术的不断发展,越来越多的设计使用光纤通信进行信息交互,光纤通信构成的系统越来越大,系统内交互的频率也越来越高,这就对通信的速度与通信的频度提出了更高的要求。在机载嵌入式系统中,光纤通信速度和频度的提高不但涉及底层硬件逻辑技术的提升,还需上层软件更有效地进行资源管理[1]。

在机载嵌入式系统中,由于嵌入式系统的固有特性,系统内缓存资源十分有限,然而通信过程中,缓存对数据的收发都有着决定性的影响[2]。在数据发送时,上层软件将数据写入数据缓存中,然后由逻辑负责将数据搬至硬件并发送,在数据接收时,逻辑将数据从硬件搬至数据缓存,上层软件直接从数据缓存中读取数据。在数据的接收和发送过程中,都涉及数据缓存空间的申请和释放,而嵌入式系统内缓存空间大小有限,缓存的数据也有限。在传统的缓存管理方式中,根据消息的最大长度进行缓存空间的申请,而在实际应用过程中,只有少数消息的长度会接近最大消息长度,大部分的消息都远达不到最大消息长度,这些短消息导致大部分缓存空间处于空闲状态,并不能用于缓存新数据,从而浪费掉大量的系统资源。

本文提出一种缓存动态管理方案,将传统方式中的缓存一个消息所占的缓存空间进行再次分割,分为连续的八个相对较小的缓存缓冲区。当进行缓存空间申请时,根据所需缓存的数据的长度,针对性地进行空间选择,得到大于所需空间且最接近所需大小的缓存,降低缓存空间的空闲比率,从而从整体上提高数据缓存的利用率。

2 相关研究

在嵌入式操作系统中,BSP负责进行缓存空间的配置,然后向上层软件提供缓存空间的相关信息,包括缓存空间的首地址和空间长度,上层软件通过调用系统提供的缓存空间申请函数进行缓存空间的申请[3]。

在光纤通信中,消息分为短消息和长消息两种。短消息不大于4KB,长消息则为16M,在软件初始化时,按照消息类型的不同,直接申请对应消息最大长度的缓存空间。对于长消息,则申请16MB空间作为消息缓冲区;短消息则申请4KB的缓存空间作为消息缓冲区。因而,在有限的缓存空间中只能申请一定数量的长消息缓冲区和短消息缓冲区。

传统的缓存空间管理方式并没有对缓存空间进行针对性管理。当消息收发过程中需要进行数据缓存时,直接将已申请的与消息类型对应的消息缓冲区直接全部分配给该消息。比如,当消息发送长度为5B的短消息数据,直接将4KB的短消息缓冲区分配给了该消息;接收1MB的长消息时,直接分配了16MB的长消息缓冲区。这种方式能够进行正常的消息收发,然而会造成缓存空间的极大浪费,存在进一步提升的空间。

通过对使用光纤通信的数据进行分析发现,在机载嵌入式系统中,大多数的消息的长度是达不到所在消息的消息类型的最大长度的。短消息中,发送和接收频度越高的消息,其携带的数据越小;携带数据越大的消息,其发送和接收的频度也越低。因而,当数据收发的频度越高,发送的消息长度越短,发现的利用率越低,限制了光纤通道的吞吐率的进一步提升。

通过对缓存空间高效管理,能够降低缓存空间的空闲比率,提高缓存的使用效率,从而提升通信速率。

3 缓存动态管理方案与设计

3.1 缓存空间初始化

在进行缓存空间动态管理时,与传统方式相同,需要先调用操作系统提供的缓存空间申请函数申请消息缓冲区,申请的4KB的短消息缓冲区和16MB的长消息缓冲区数目与传统方式相同,然而与传统方式不同之处在于对申请下来的消息缓冲区进行了针对性管理。

本文提出的缓存动态管理方案中,将一个缓冲区进行分割,将其从一个完整的缓冲区分割为8个大小相同的小缓冲区,每个小缓冲区的大小只有原先缓冲区大小的八分之一。对于4KB大小的缓冲区块,每个小缓冲区为512B;对于16MB大小的缓冲区,每个小缓冲区为2MB。分割之后,将小缓冲区则作为重新分配的基本单位,但是管理时则是对包含8个小缓冲区的原始缓冲区块进行管理。

我们构建一个特定结构体即缓冲区信息结构体来对每个缓冲区块进行管理。该结构体包含以下几个信息:

(1)buffSize:无符号整形,表示每个小缓冲区的大小。4KB的缓冲区块中该变量为512,16MB的缓冲区块中该变量为2M;

(2)allocFlag:无符号短整形,表示该缓冲区块中各个小缓冲区的分配情况。0-7位分别表示第0-7块的分配情况,对应位为1表明该小缓冲区已经被分配,对应位为0,表明该小缓冲区还未分配。如图1中第0个缓冲区块所示,当缓冲区块中的小缓冲区被分配后,对应的标志位置为1;

(3)allocOffset:无符号短整形数组,表示申请目标个数的小缓冲区时的分配起始位置。该数组包含8个数据,0-7的数据分别代表了分配1-8个连续缓冲区时的起始分配位置。如图1中的第0个缓冲区块所示,初始化时,存在8块连续的未分配的小缓冲区,所有大小的数据的起始分配位置都为0;当分配了2个小缓冲区时,剩下6个连续的小缓冲区,1-6块的起始分配都变为2,7块和8块则没有可分配位置,对应数据置为0xFFFF;

(4)maxBuffCnt:无符号短整型,表示小缓冲区的最大连续数量。如图1所示,对于第0个缓冲区块,初始化时,还未进行缓冲区申请,故小缓冲区最大连续数量为8,当缓冲区0和缓冲区1被分配后,小缓冲区最大连续数量变为6。

3.2 缓存空间申请

当软件进行缓存空间申请时,并不需要重新调用缓存空间申请函数申请新的缓存空间,而是从初始化之后的一个个缓冲区块中进行分配。

缓存空间进行分配时,主要包含以下几个步骤:

(1)首先根据准备缓存的消息的类型决定分配的缓冲区块类型,如果是短消息,则在4KB的缓冲区块中进行分配,如果是长消息,则在16MB的缓冲区块中进行分配;

(2)根据需要申请的缓存空间的大小,计算出需要的小缓冲区的数量N。如果是短消息,则除以512,然后向上取整;如果是长消息,则除以2M,然后向上取整;

(3)从目标缓冲区块数组中,从第0个缓冲区块往后依次进行查找。当找到第一个满足maxBuffCnt大于所需的小缓冲区数量的缓冲区块时,则在该缓冲区块中进行小缓冲区的分配;

(4)根据该缓冲区块对应的信息结构体中的信息,将该缓冲区块中从allocOffset[N-1]位置开始的N个小缓冲区分配给申请的软件;

(5)根据分配后的小缓冲区的分配情况更新该缓冲区块对应的缓冲区信息结构体中的信息,包括allocFlag,allocOffset和maxBuffCnt。

更新目标缓冲区块对应的信息时,首先修改分配标志allocFlag,然后根据分配标志进行分配起始偏移allocOffset,此时采用的方法如下:

(1)从第0个缓冲区开始,此时小缓冲区编号N为0,最大连续数Count為0,此次连续的起始位置Start为0,记录偏移Offset为0,根据偏移位置的变化依次对后续小缓冲区执行如下查询;

(2)当对第N个小缓冲区执行查询时,如果该小缓冲区未被分配,进行如下操作。首先对最大连续数Count进行判断,如果Count为0,则Start值变为N;然后Count加1,如果更新之后的Count大于Offset,将Start记录在allocOffset[Offse]中,Offset进行加1;最后小缓冲区编号加1,对第N+1个小缓冲区进行查询;

(3)如果第N个小缓冲区已被分配,则最大连续数Count变为0,Offset不变,Start为0,小缓冲区编号加1,对第N+1个小缓冲区进行查询;

(4)当对所有小缓冲区查询之后,此时最大连续缓冲数目maxBuffCnt的值为Offset的当前值,如果Offset小于7,则将allocOffset[Offset~7]中的数据全部更改为0xFFFF。

3.3 缓存空间释放

进行缓存空间释放时,就是将申请的缓存空间重新放回原先的缓冲区块中。释放时步骤如下:

(1)根据缓存空间缓存的消息的类型,确定该缓存空间所属的缓冲区消息的类型;

(2)计算出该地址相对于缓存空间基址的偏移;

(3)根据偏移计算出所在缓冲区块的位置;

(4)释放缓存空间;

(5)与申请缓存空间时相同,更新所在缓冲区块的信息结构体中的信息。

4 结束语

本文提出一种基于嵌入式系统,面向光纤通信的缓存动态管理方案,该方案可以实现对缓存的动态管理,降低缓存的空闲比率,提高缓存利用率,从而提升通信速度。经过测试,相对于传统的缓存管理方式,本文提出的动态缓存管理方式能够有效提高缓存利用率和通信速度,满足机载嵌入式系统中通信对缓存空间管理的需求。

参考文献:

[1] 田令平.嵌入式操作系统内存管理研究[J].电脑知识与技术, 2006(4):169-171.

[2] 双,帅建梅,吴庆响.一种新的面向对象程序的内存管理器[J].计算机工程,2012,38(9):21-23.

[3] 魏海涛,姜昱明,李建武等.内存管理机制的高效实现研究[J].计算机工程与设计,2009,30(16):3708-3712.

【通联编辑:梁书】

猜你喜欢
光纤通信嵌入式系统动态管理
浅析基于SDH的多业务平台(MSTP)技术及应用
浅析建筑工程造价的动态管理与控制
工程监理对工程造价的动态管理与控制探讨
嵌入式系统课程“中断、异常与事件”教学实践及启示
面向实践创新人才培养的嵌入式系统教学研究