CN111290708B - 一种基于动态调整的环形缓冲区的数据处理方法及设备 - Google Patents
一种基于动态调整的环形缓冲区的数据处理方法及设备 Download PDFInfo
- Publication number
- CN111290708B CN111290708B CN202010058173.4A CN202010058173A CN111290708B CN 111290708 B CN111290708 B CN 111290708B CN 202010058173 A CN202010058173 A CN 202010058173A CN 111290708 B CN111290708 B CN 111290708B
- Authority
- CN
- China
- Prior art keywords
- data
- ring buffer
- buffer area
- written
- buffer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Systems (AREA)
Abstract
本发明提供了一种基于动态调整的环形缓冲区的数据处理方法,包括以下步骤:环形缓冲区进行正常读写数据;获取环形缓冲区剩余可写入单元;当环形缓冲区的无剩余可写入单元时,根据待写入数据个数动态开辟数据缓冲区;若存在多个待写入数据,则依次开辟多个数据缓冲区,每个数据缓冲区通过链表进行连接,同时将待写入数据写入数据缓冲区。采用本发明的技术方案动态开辟数据缓冲区,应用上灵活可行,动态建立的缓冲区在使用完毕后由系统完成释放操作,不会无效占用系统内存。
Description
技术领域
本发明涉及数据处理领域,特别涉及一种基于动态调整的环形缓冲区的数据读写方法及设备。
背景技术
环形缓冲区的存储空间在逻辑上首位相连,在物理存储上是一维的长度固定的连续线性结构,如图1所示,在应用中,环形缓冲区的大小通常固定不变(图1中长度为8),定义读取指针和读写指针来分别指向当前可读和可写数据的位置;初始状态下,读写指针指向同一个位置,当前环形缓冲区中存储的数据个数N为0;当写入一个数据,N+1,写指针移动到下一个可写的位置;当读出一个数据,N-1,读指针移到下一个可读的位置;当写入数据的个数达到缓冲区最大容量时,表示环形缓冲区被写满,读指针和写指针指向同一个位置。缓冲区被写满后,如果还需要写入数据,则存在两种可能的操作:第一种是不执行写入操作,直接返回;第二种是覆盖写入,覆盖掉尚未读取的数据。
由此可见,当数据写入和读出的速度匹配时,环形缓冲区的工作效率很高,可以大大提高系统处理数据的并发能力;但当出现数据写入速度大于读出速度继而导致缓冲区被写满的情况发生时,系统必然会产生数据丢失(如果不执行写入操作直接返回,则当前待写入的数据可能会被后续的待写入数据覆盖;如果覆盖写入则当前尚未读取的数据会被待写入的数据覆盖),对于一些数据敏感的系统,不允许丢失任何一组数据,这时传统的环形缓冲区的读写处理方式显然就无法满足要求。
为避免数据丢失,在环形缓冲区初始大小固定的情况下,普遍的解决办法有两种:
第一种是直接建立一个更大的环形缓冲区,把当前环形缓冲区里的内容完全拷贝过去,如图2所示,原有环形缓冲区长度为4,新建了一个更大的长度为8,把原来的D0-D3的数据全部拷贝到新的更大的缓冲区中,D4-D8为可新增数据。这种方法的缺陷在于:新增缓冲区的大小必须确定,无法动态改变;存在数据拷贝的开销,如果数量巨大可能影响系统性能;原缓冲区没有释放,无效占用系统内存资源。
第二种是在原环形缓冲区上扩充单元,如图3所示,原有环形缓冲区长度为4,扩充新的4个单元加入进来,整个的环形缓冲区的长度变成8个。这种方法的缺陷在于:新增缓冲区的大小必须确定,无法动态改变;读写指针的移动变得复杂,可读和可写的位置跟缓冲区的扩充点密切相关。
现有的方法都因为待写入的数据量大小并不确定,导致无法确定新建的缓冲区的大小,方法的灵活性很差;另外,因为当前的缓冲区是静态建立的,当不操作时无法在系统内存中释放掉会导致内存空间被无效占用。
发明内容
针对现有技术中存在的问题,提供了一种新的基于动态调整的环形缓冲区数据处理方法。该方法基于固定长度的环形缓冲区,当数据缓冲区满无法再写入数据时,将待数据写入到动态新建的数据缓冲区中。为方便管理这些数据缓冲单元以链表形式连接起来。当环形缓冲区中的数据被读出后,按顺序将动态数据缓冲区的内容拷贝到环形缓冲区中,并释放数据缓冲区。
本发明采用的技术方案如下:一种基于动态调整的环形缓冲区的数据处理方法,包括以下步骤:
环形缓冲区进行正常读写数据;
获取环形缓冲区剩余可写入单元;
当环形缓冲区的无剩余可写入单元时,根据待写入数据个数动态开辟数据缓冲区;若存在多个待写入数据,则依次开辟多个数据缓冲区,每个数据缓冲区通过链表进行连接,同时将待写入数据写入数据缓冲区。
进一步的,所述多个数据缓冲区根据开辟顺序依次通过链表链接,链表头指向最先开辟的数据缓冲单元。
进一步的,所述获取环形缓冲区剩余可写入单元的具体方法为:获取当前环形缓冲区的写入指针及读取指针;当写入指针与读取指针指向同一个环形缓冲区的环内单元时,表示环形缓冲区无剩余可写单元。
进一步的,当环形缓冲区内有数据被读取后,将链表中链表头指向的数据缓冲单元中的待写入数据拷贝到当前写入指针所指向的环内单元,并将链表头指向下一个数据缓冲单元。
进一步的,在每个数据缓冲单元中待写入数据被拷贝到环形缓冲区后,释放该数据缓冲单元。
进一步的,在所有开辟的数据缓冲单元中待写入数据都拷贝完毕后,释放整个链表。
本发明还提供了一种基于动态调整的环形缓冲区的数据处理终端设备,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现上述的环形缓冲区的数据处理方法。
与现有技术相比,采用上述技术方案的有益效果为:
1、无需根据待写入的数据规划新增的数据缓冲区大小,而是动态开辟缓冲区,应用上灵活可行;
2、不存在需要进行数据大批量拷贝的需要,另外,使用后的动态缓冲区可以被释放,不会占用系统内存资源;
3、原环形缓冲区的读写指针的移动不受影响。
附图说明
图1是现有技术中环形缓冲区结构示意图。
图2是现有技术中环形缓冲区其中一种改进示意图。
图3是现有技术中环形缓冲区另一种改进示意图。
图4是本发明中环形缓冲区与数据缓冲单元构建示意图。
图5时本发明中环形缓冲区读取示意图。
具体实施方式
下面结合附图对本发明做进一步描述。
本发明提供了一种基于动态调整的环形缓冲区数据处理方法,该方法基于固定长度的环形缓冲区,环形缓冲区进行正常读写数据;获取环形缓冲区剩余可写入单元,当数据缓冲区满无法再写入数据时,将待数据写入到动态建立的数据缓冲单元中。为方便管理这些数据缓冲单元以链表形式连接起来,当环形缓冲区中的数据被读出后,按顺序将动态缓冲单元的内容拷贝到环形缓冲区中,并释放缓冲单元。
在一个实施例中,如图4所示,环形缓冲区长度为8,其中,readPointer和writePointer分别为读取指针与写入指针,正常读写时,读写指针沿着顺时针方向移动,当写入数据和读出数据的速度向匹配时,环形缓冲区表现为正常的非空也非满的状况,环形缓冲区内的各个单元被反复使用,工作效率极高。
如图4所示,当读取指针与写入指针再次指向环形缓冲区中的同一个环内单元时,表示环形缓冲区已经写满,无法再写入数据进环形缓冲区,由此,根据待写入数据的个数动态开辟数据缓冲区;若存在多个待写入数据,则依次开辟多个数据缓冲区,每个数据缓冲区通过链表进行连接,同时将待写入数据写入数据缓冲区,链表头指向最先开辟的数据缓冲区;当系统创建链表结构并进行数据写入时,环形缓冲区自身正常的数据读取操作继续进行。
如图5所示,当环形缓冲区中有数据被读取后,读取指针移动到下一个环内单元。
环形缓冲区内有数据被读取后,将链表中链表头指向的数据缓冲单元中的待写入数据拷贝到当前写入指针所指向的环内单元,并将链表头指向下一个数据缓冲单元。
在每个数据缓冲单元中待写入数据被拷贝到环形缓冲区后,释放该数据缓冲单元。
随着环形缓冲区内的数据不断被读出,读取指针经顺时针方向向前移动,依次将链表中排队的数据缓冲区中待写入数据拷贝到环内的可写入单元中。当所有的动态创建的数据缓冲单元都拷贝完毕,整个链表也完全被释放,不会占用系统内存。
当没有新建动态缓冲单元的时候,读写指针按照约定正常工作;当读写指针指向同一个单元时,表示环形缓冲区满无法写入数据,系统开始新建动态数据缓冲区,新增数据进入动态数据缓冲区以链表形式存放,原环形缓冲区中的写指针不动,读指针按节奏读出数据并移动到下一个位置,环形缓冲区出现空单元,此时将存储在链表中的数据拷贝到当前写指针位置(即此空单元位置)并将写指针移动到下一个位置。随着环形缓冲区内的数据不断被读出,链表中的数据不断被拷贝到环形缓冲区中,链表中的数据缓冲区也不断被释放,最终完成整个链表的数据的转移。
本发明还提供了一种环形缓冲区的数据写入终端设备。该实施例的环形缓冲区的数据处理终端设备包括:处理器、存储器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,例如环形缓冲区的数据写入程序。所述处理器执行所述计算机程序时实现上述环形缓冲区的数据处理方法实施例中的步骤。
本发明并不局限于前述的具体实施方式。本发明扩展到任何在本说明书中披露的新特征或任何新的组合,以及披露的任一新的方法或过程的步骤或任何新的组合。如果本领域技术人员,在不脱离本发明的精神所做的非实质性改变或改进,都应该属于本发明权利要求保护的范围。
本说明书中公开的所有特征,或公开的所有方法或过程中的步骤,除了互相排斥的特征和/或步骤以外,均可以以任何方式组合。
本说明书中公开的任一特征,除非特别叙述,均可被其他等效或具有类似目的的替代特征加以替换。即,除非特别叙述,每个特征只是一系列等效或类似特征中的一个例子而已。
Claims (6)
1.一种基于动态调整的环形缓冲区的数据处理方法,其特征在于,包括以下步骤:
环形缓冲区进行正常读写数据;
获取环形缓冲区剩余可写入单元;
当环形缓冲区的无剩余可写入单元时,根据待写入数据个数动态开辟数据缓冲区;若存在多个待写入数据,则依次开辟多个数据缓冲区,每个数据缓冲区通过链表进行连接,同时将待写入数据写入数据缓冲区;链表头指向最先开辟的数据缓冲区;当系统创建链表结构并进行数据写入时,环形缓冲区自身正常的数据读取操作继续进行;
当环形缓冲区中的数据被读出后,按顺序将数据缓冲区的内容拷贝到环形缓冲区中,并释放该数据缓冲区;
环形缓冲区内有数据被读取后,将链表中链表头指向的数据缓冲单元中的待写入数据拷贝到当前写入指针所指向的环内单元,并将链表头指向下一个数据缓冲单元。
2.根据权利要求1所述的数据处理方法,其特征在于,所述多个数据缓冲区根据开辟顺序依次通过链表链接,链表头指向最先开辟的数据缓冲单元。
3.根据权利要求1所述的数据处理方法,其特征在于,所述获取环形缓冲区剩余可写入单元的具体方法为:获取当前环形缓冲区的写入指针及读取指针;当写入指针与读取指针指向同一个环形缓冲区的环内单元时,表示环形缓冲区无剩余可写单元。
4.根据权利要求3所述的数据处理方法,其特征在于,在每个数据缓冲单元中待写入数据被拷贝到环形缓冲区后,释放该数据缓冲单元。
5.根据权利要求1或4所述的数据处理方法,其特征在于,在所有开辟的数据缓冲单元中待写入数据都拷贝完毕后,释放整个链表。
6.一种基于动态调整的环形缓冲区的数据处理终端设备,其特征在于,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现如权利要求1至5中任意一项所述的环形缓冲区的数据处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010058173.4A CN111290708B (zh) | 2020-01-19 | 2020-01-19 | 一种基于动态调整的环形缓冲区的数据处理方法及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010058173.4A CN111290708B (zh) | 2020-01-19 | 2020-01-19 | 一种基于动态调整的环形缓冲区的数据处理方法及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111290708A CN111290708A (zh) | 2020-06-16 |
CN111290708B true CN111290708B (zh) | 2022-03-11 |
Family
ID=71029912
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010058173.4A Active CN111290708B (zh) | 2020-01-19 | 2020-01-19 | 一种基于动态调整的环形缓冲区的数据处理方法及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111290708B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111865824A (zh) * | 2020-06-19 | 2020-10-30 | 重庆川仪自动化股份有限公司 | 一种串口通信中的双指针环形缓冲区设计方法及系统 |
CN111966498B (zh) * | 2020-08-27 | 2023-08-25 | 南京电研电力自动化股份有限公司 | 一种配电房物联网网关数据快速处理方法、系统及存储介质 |
CN113138839B (zh) * | 2021-04-23 | 2023-02-03 | 深圳市科思科技股份有限公司 | 环形队列缓冲区及其运行方法、计算机可读存储介质 |
CN113489378B (zh) * | 2021-08-19 | 2022-05-10 | 厦门乃尔电子有限公司 | 一种支持动态可调节采样率的振动能量计算方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1780254A (zh) * | 2004-11-17 | 2006-05-31 | 华为技术有限公司 | 网络处理器中使用缓冲区的方法 |
US7620753B1 (en) * | 2005-03-17 | 2009-11-17 | Apple Inc. | Lockless access to a ring buffer |
GB2505884B (en) * | 2012-09-12 | 2015-06-03 | Imagination Tech Ltd | Dynamically resizable circular buffers |
-
2020
- 2020-01-19 CN CN202010058173.4A patent/CN111290708B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN111290708A (zh) | 2020-06-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111290708B (zh) | 一种基于动态调整的环形缓冲区的数据处理方法及设备 | |
USRE49875E1 (en) | Memory system having high data transfer efficiency and host controller | |
US4603380A (en) | DASD cache block staging | |
US5652887A (en) | Dynamic Meta commands for peripheral devices | |
EP0019358B1 (en) | Hierarchical data storage system | |
JPH09259033A (ja) | バッファ書き込み方法 | |
US5293618A (en) | Method for controlling access to a shared file and apparatus therefor | |
US5717916A (en) | Method for providing an improved fully associative cache memory having a finite state machine and linked list structure | |
US5386514A (en) | Queue apparatus and mechanics for a communications interface architecture | |
CN111290709B (zh) | 一种可动态调整的环形缓冲区 | |
US5430846A (en) | List-based buffering mechanism for buffering data between processes in a data processing system | |
JP2009199384A (ja) | データ処理装置 | |
US6633928B2 (en) | Fast process context switching buffer | |
JPS6049946B2 (ja) | バッファメモリ制御方式 | |
JP2767966B2 (ja) | 高速ファイルアクセス方式 | |
JP2735400B2 (ja) | 非同期入出力制御方式 | |
JPH0462645A (ja) | 記憶装置及びオーバーフロー処理方法 | |
JPH04350741A (ja) | 索引順編成ファイルのアクセス高速化方法 | |
JPH02189627A (ja) | データメモリのアクセス回路 | |
JPH0512093A (ja) | フアイルブロツク排他解除方式 | |
JPH11328028A (ja) | 入出力バッファ、入出力バッファ制御方法、共有ファイルアクセス方法、多重計算機システム,入出力バッファ制御プログラムを記録した記録媒体、共有ファイルアクセスプログラムを記録した記録媒体 | |
JPH01108652A (ja) | アドレス変換方式 | |
JPS63120349A (ja) | フアイル多重制御方式 | |
JP2000047935A (ja) | 高速メモリアクセス処理装置 | |
JPH05257795A (ja) | バッファ管理方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |