本申请公开了一种基于异步环形缓冲区的数据读取、写入方法及装置,包括:在写入数据时,确定剩余存储空间大小;若其不小于待写入数据的数据大小,则根据写指针将待写入数据写入环形缓冲区的剩余存储空间,并更新写指针。在读取数据时,确定缓存数据大小;比较缓存数据大小以及目标读取数据大小,确定二者中的较小值;根据该读指针以及目标数据大小,读取环形缓存区中的缓存数据,并更新异步环形缓冲区的读指针。可见,若应用于产品升级场景中,可以保证硬件总线发送数据包不会超时;而且,这相比于先将全部数据写入内存再从内存将的全部数据读出并写入硬件存储器的实施方式而言,耗时更短,效率更高。
A data reading and writing method and device based on asynchronous ring buffer
【技术实现步骤摘要】
一种基于异步环形缓冲区的数据读取、写入方法及装置
本申请涉及数据处理
,特别是涉及一种基于异步环形缓冲区的数据读取、写入方法及装置。
技术介绍
对计算机系统产品而言,产品升级是平常而且重要的。比如,当旧版本的产品存在已知bug时,通常需要在新版本中完成bug的修复,并利用新版本的产品来更新旧版本的产品,实现产品升级。又比如,当需要在旧版本产品上添加新功能时,用户通常使用升级功能把具有新功能的新版本产品(更新文件/升级文件)下载到本地中,以利用新版本的产品更新旧版本的产品。目前,对于一般计算机系统产品而言,固件程序都存放在flash硬件芯片中,在进行产品升级时,就是通过升级工具把新版本的固件二进制文件下载存入产品内的flash硬件芯片内。一般的过程是:升级工具把二进制文件分拆成多个数据包通过硬件总线发送到产品系统内,产品系统把数据包缓存到内存中,二进制接收完毕后,再把二进制数据写入flash硬件芯片中,完成升级。但是,实际应用中,存在部分系统产品的内存比较小,而升级文件可能相对比较大。比如:对于Expander这种小型计算机系统而言,其内存可能只有2M(兆),而其升级文件为1.5M,在去除Expander运行所需的1M内存后,剩余1M内存不足以缓存升级文件。针对于此,如果产品接收到一包数据包后直接写入flash,不使用内存做缓存,虽然可以不考虑内存大小问题,但实际应用中硬件总线的速度很快,这使得两个数据包发送间隔时间很短,而每发送一包在直接写入flash时,写入flash中所需的时长是波动的。即,可能在较短时间内就可以完成该数据包的写入,也可能会花费较长时间才能完成该数据包的写入,这使得当数据包写入flash的过程需要花费较长时间时,硬件总线就会出现传输超时错误,从而会导致产品升级失败。
技术实现思路
本申请实施例提供了一种基于异步环形缓冲区的数据读取、写入方法及装置,以实现以较小的缓冲区完成对产品的成功升级。第一方面,本申请实施例提供了一种基于异步环形缓冲区的数据写入方法,所述方法包括:根据异步环形缓冲区的最大缓存空间大小以及所述异步环形缓冲区的读指针以及写指针,确定所述异步环形缓冲区的剩余存储空间大小;若所述剩余存储空间大小不小于待写入数据的数据大小,则根据所述写指针将所述待写入数据写入所述异步环形缓冲区的剩余存储空间;其中,当所述待写入数据写入至所述异步环形缓冲区中可写入数据的尾地址处并且所述待写入数据未写入完全时,所述待写入数据在所述异步环形缓冲区中可写入数据的首地址处继续写入;根据所述异步环形缓冲区的写指针以及所述待写入数据的数据大小,更新所述异步环形缓冲区的写指针。在一些可能的实施方式中,所述方法还包括:在将所述待写入数据写入所述异步环形缓冲区之前,申请互斥锁锁定数据写入操作。在一些可能的实施方式中,所述方法还包括:在完成将所述待写入数据写入所述异步环形缓冲区之后,释放所述互斥锁。所述根据所述异步环形缓冲区的写指针以及所述待写入数据的数据大小,更新所述异步环形缓冲区的写指针在一些可能的实施方式中,所述异步环形缓冲区的最大缓存空间的地址用一维数组表征,所述一维数组的长度为所述最大缓存空间的地址长度。第二方面,本申请实施例还提供了一种基于异步环形缓冲区的数据读取方法,所述方法包括:根据异步环形缓冲区的最大缓存空间大小以及所述异步环形缓冲区的读指针以及写指针,确定所述异步环形缓冲区的缓存数据大小;比较所述缓存数据大小以及目标读取数据大小,确定目标数据大小,所述目标数据大小为所述缓存数据大小与所述目标读取数据大小中的较小值;根据所述读指针以及所述目标数据大小,读取所述异步环形缓冲区中的缓存数据;其中,当读取至所述异步环形缓冲区中可读取数据的尾地址处并且所述待读取数据未读取完全时,在所述异步环形缓冲区中可读取数据的首地址处继续读取所述待读取数据;根据所述读指针以及所述目标数据大小,更新所述异步环形缓冲区的读指针。在一些可能的实施方式中,所述方法还包括:在读取所述异步环形缓冲区中的缓存数据之前,申请互斥锁锁定数据写入操作。在一些可能的实施方式中,所述方法还包括:在完成读取所述异步环形缓冲区中的缓存数据之后,释放所述互斥锁。在一些可能的实施方式中,所述异步环形缓冲区的最大缓存空间的地址用一维数组表征,所述一维数组的长度为所述最大缓存空间的地址长度。第三方面,本申请实施例还提供了一种基于异步环形缓冲区的数据写入装置,所述装置包括:确定模块,用于根据异步环形缓冲区的最大缓存空间大小以及所述异步环形缓冲区的读指针以及写指针,确定所述异步环形缓冲区的剩余存储空间大小;写入模块,用于若所述剩余存储空间大小不小于待写入数据的数据大小,则根据所述写指针将所述待写入数据写入所述异步环形缓冲区的剩余存储空间;其中,当所述待写入数据写入至所述异步环形缓冲区中可写入数据的尾地址处并且所述待写入数据未写入完全时,所述待写入数据在所述异步环形缓冲区中可写入数据的首地址处继续写入;更新模块,用于根据所述异步环形缓冲区的写指针以及所述待写入数据的数据大小,更新所述异步环形缓冲区的写指针。在一些可能的实施方式中,所述装置还包括:申请模块,用于在将所述待写入数据写入所述异步环形缓冲区之前,申请互斥锁锁定数据写入操作。在一些可能的实施方式中,所述装置还包括:释放模块,用于在完成将所述待写入数据写入所述异步环形缓冲区之后,释放所述互斥锁。在一些可能的实施方式中,所述异步环形缓冲区的最大缓存空间的地址用一维数组表征,所述一维数组的长度为所述最大缓存空间的地址长度。第四方面,本申请实施例还提供了一种基于异步环形缓冲区的数据读取装置,所述装置包括:确定模块,用于根据异步环形缓冲区的最大缓存空间大小以及所述异步环形缓冲区的读指针以及写指针,确定所述异步环形缓冲区的缓存数据大小;比较模块,用于比较所述缓存数据大小以及目标读取数据大小,确定目标数据大小,所述目标数据大小为所述缓存数据大小与所述目标读取数据大小中的较小值;读取模块,用于根据所述读指针以及所述目标数据大小,读取所述环形缓存区中的缓存数据;其中,当读取至所述异步环形缓冲区中可读取数据的尾地址处并且所述待读取数据未读取完全时,在所述异步环形缓冲区中可读取数据的首地址处继续读取所述待读取数据;更新模块,用于根据所述读指针以及所述目标数据大小,更新所述异步环形缓冲区的读指针。在一些可能的实施方式中,所述装置还包括:申请模块,用于在读取所述异步环形缓冲区中的缓存数据之前,申请互斥锁锁定数据写入操作。在一些可能的实施方式中,所述装置还包括:释放模块,用于在完成读取所述异步环形缓冲区中的缓存数据之后,释放所述互斥锁。在一些可能的实施方式中,所述异步环形缓冲区的最大缓存空间的本文档来自技高网...
【技术保护点】
1.一种基于异步环形缓冲区的数据写入方法,其特征在于,所述方法包括:/n根据异步环形缓冲区的最大缓存空间大小以及所述异步环形缓冲区的读指针以及写指针,确定所述异步环形缓冲区的剩余存储空间大小;/n若所述剩余存储空间大小不小于待写入数据的数据大小,则根据所述写指针将所述待写入数据写入所述异步环形缓冲区的剩余存储空间;/n其中,当所述待写入数据写入至所述异步环形缓冲区中可写入数据的尾地址处并且所述待写入数据未写入完全时,所述待写入数据在所述异步环形缓冲区中可写入数据的首地址处继续写入;/n根据所述异步环形缓冲区的写指针以及所述待写入数据的数据大小,更新所述异步环形缓冲区的写指针。/n
【技术特征摘要】
1.一种基于异步环形缓冲区的数据写入方法,其特征在于,所述方法包括:
根据异步环形缓冲区的最大缓存空间大小以及所述异步环形缓冲区的读指针以及写指针,确定所述异步环形缓冲区的剩余存储空间大小;
若所述剩余存储空间大小不小于待写入数据的数据大小,则根据所述写指针将所述待写入数据写入所述异步环形缓冲区的剩余存储空间;
其中,当所述待写入数据写入至所述异步环形缓冲区中可写入数据的尾地址处并且所述待写入数据未写入完全时,所述待写入数据在所述异步环形缓冲区中可写入数据的首地址处继续写入;
根据所述异步环形缓冲区的写指针以及所述待写入数据的数据大小,更新所述异步环形缓冲区的写指针。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在将所述待写入数据写入所述异步环形缓冲区之前,申请互斥锁锁定数据写入操作。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
在完成将所述待写入数据写入所述异步环形缓冲区之后,释放所述互斥锁。
4.根据权利要求1所述的方法,其特征在于,所述异步环形缓冲区的最大缓存空间的地址用一维数组表征,所述一维数组的长度为所述最大缓存空间的地址长度。
5.一种基于异步环形缓冲区的数据读取方法,其特征在于,所述方法包括:
根据异步环形缓冲区的最大缓存空间大小以及所述异步环形缓冲区的读指针以及写指针,确定所述异步环形缓冲区的缓存数据大小;
比较所述缓存数据大小以及目标读取数据大小,确定目标数据大小,所述目标数据大小为所述缓存数据大小与所述目标读取数据大小中的较小值;
根据所述读指针以及所述目标数据大小,读取所述异步环形缓冲区中的缓存数据;
其中,当读取至所述异步环形缓冲区中可读取数据的尾地址处并且所述待读取数据未读取完全时,在所述异步环形缓冲区中可读取数据的首地址处继续读取所述待读取数据;
根据所述读指针以及所述目标数据大小,更新所述异步环形缓冲区的读指针。
6.根据权利要求5所述的方法,其...
【专利技术属性】
技术研发人员:张羽,
申请(专利权)人:苏州浪潮智能科技有限公司,
类型:发明
国别省市:江苏;32
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。