单任务快速缓冲读写方法

文档序号:6419931阅读:189来源:国知局
专利名称:单任务快速缓冲读写方法
技术领域
本发明涉及到计算机数据通讯领域,尤其涉及单任务情况下对数据缓冲区存储空间的使用方法。
背景技术
随着社会对于信息交流需求的不断增强,随着通讯技术在社会日常生活中的逐渐深入,极大地推动了信息技术和通讯技术的发展。在这样的一个过程中,对于数据的处理技术,也获得了较多的进步。目前,在分散式数据采集系统中进行数据流交换,一般通过设立数据缓冲区的方法实现,数据缓冲区的建立,可以在数据高峰期的情况下达到流量的均衡,也可以在下一级处理单元发生故障时,暂时保存需要传递的数据。数据缓冲区可以设在诸如SDRAM、SRAM、EEPROM以及硬盘等任意的存储媒质中。对于数据缓冲区的管理,关键是对于数据的读写方法,如果数据的长度较为规则,数据的读写相对比较简单。但是当数据长度不规则的时候,情况就比较复杂,目前常用的办法是将存储空间分区,一部分用于存储,另外一部分用于建立索引,如发明专利申请《闪存中存储块的分区及读写信息标识的方法》(专利公开号1351350)所用的就是这种方法。这种方法的缺点很多,首先是在存储空间上可能造成浪费使用上述方法,必须保留一定的空间用于存储索引表,特别是当数据长短不一时,在一定空间内可以存储的数据量是变化的,而索引表必须足够长,才能存下所有的数据索引,从而在存储空间上造成了浪费;其次造成读写操作复杂化,花费的时间比较长,用索引表进行数据存储,在写操作时要在不同的空间寻址—首先在索引区找到可以写入的地址,再到数据区写入数据;在读操作时也要在不同的地址段(索引区和数据区)进行操作,这样,需要管理索引表和数据表两个队列,操作复杂度增加,进一步导致读写出错的可能性增加。

发明内容
本发明的目的是克服现有技术存在的存储空间浪费严重、读写操作复杂的缺点,以期提出一种针对不规则数据长度的、节约存储空间、读写操作简单、管理方便的单任务快速缓冲读写方法。
为了实现上述目的,本发明提出了一种单任务快速缓冲读写方法,其特征在于,包括以下步骤(1)建立逻辑存储区将存储介质的存储空间按照地址方式进行管理,每个地址指向一个字节,并将可用的地址空间首尾相接,建立环形缓冲区,对该环形缓冲区定义相连接的头与尾,头地址等于尾地址,从而将该环形缓冲区构建成逻辑存储区;(2)数据的读写操作和管理写入数据时,首先判断存储空间是否足够,然后将数据从当前写指针指向的地址开始写入,写入完成后,已经有数据的空间视为被占用空间,并将写指针移动到写完内容的下一个地址;读出数据时,首先判断存储缓冲区内是否有数据,如果有数据且数据量小于或等于需要读出的数据量,则将所有的数据全部读出;否则按照帧的大小进行识别,判断可以取出的不打断帧结构的字节量,并从读指针开始处进行读取,读出后的空间视作空闲空间;然后将读指针移到下一个可以读取的地址。
本发明对不定长度的数据通过建立环行缓冲区,将数据加报头的方法,使存储区的使用效率得到提高,所有数据以产生报头,顺序存储的方式,最大限度地利用了存储空间,进行无缝存储。本发明所述方法还通过读写指针的灵活应用,和当前空闲空间和已用空间这两个变量的定义,将读写操作的速度提高,操作也很方便,提高了管理数据读写的效率。


图1是环形存储空间示意图。
图2是数据在存储区存放示意图。
图3是本发明所述方法中的写操作流程图。
图4是本发明所述方法中的读操作流程图。
图5是常用报头包含长度字段数据包结构示意图。
图6是读指针大于写指针时存储空间状态图。
图7是本发明所述方法中的成帧操作的流程图。
具体实施例方式
本发明所述方法的特点主要是在读写操作上在同一个地址段进行顺序操作,不需往返寻址。同时,为了进一步加快操作,利用两个变量来度量当前的空闲空间和已填充空间,以确定当前存储空间的状态,并确认是否可以进行读写操作,以及进行何种读写操作。本发明所述的方法包括两个部分1、建立逻辑存储区;2、数据的读写操作和管理。下面结合附图对其进行详细说明。
一般情况下,存储介质可以由SRAM或者SDRAM等高速易失元件构成,也可以是FLASH等非易失元件,其他诸如硬盘等可读写存储单元也可以构成存储介质。存储空间按照地址管理,每个地址指向一个字节,并将可用的地址空间首尾相接,建立环形缓冲区,如图1所示。该环形缓冲区实际上就构成一个逻辑上的存储区,头尾相连,头地址等于尾地址。与此同时,对于需要写入存储空间的内容,除了不定长的原始数据以外,在原始数据前还需要加上一个长度字段,作为报头。该字段的内容就是源数据的长度。长度字段的数据类型(整型数或者长整型数等),可以根据需要处理的原始数据最大长度来确定。
另外,为衡量存储空间的利用状态,还需要增加“空闲空间大小”和“已占用空间大小”两个变量。同时在数据写入的时候,依地址次序紧密占用,不留空隙。为了更好地管理读写操作,还需要增加两个辅助变量,一个是读指针,一个是写指针。用于指向当前读写操作到达的具体地址。
在具体实施过程中,建立逻辑缓冲区时首先将作为存储区的起始地址和终止地址定义为一个QUE_START和一个QUE_END的宏。分别表示存储区映射到内存的地址。这两个地址,在逻辑上是同一个位置,但是在实际空间上,是不同的两个地方。这样,在这个存储缓冲区中,最大的可利用地址空间是TotalSize=QUE_END-QUE_START+1。然后建立一个结构,包括如下变量UWORDpWriteAddr,下一个写操作的地址指针;UWORD pReadAddr,下一个读操作的地址指针;UWORD FreeSize,当前缓冲区中可用的空间;UHWORD OccupiedSize,当前缓冲区中已经被占用的空间。数据包在存储之前,需要进行添加报头的处理。如图5所示。添加的报头中长度字段是必须的。长度字段指示的是数据包的数据占用的地址空间长度,如图2所示。长度字段自身的长度,则根据数据包的长度设定。通常一个占用两个字节的长度字段,可以描述长度为65535个字节的数据包。
数据的读写操作包括以下内容所有数据的写入,以字节方式,依次占用存储空间。读出时也是以字节为单位依次读出,读出过程也可以看作是清空存储空间的过程。
在写入的时候,先判断空间是否足够,然后将数据从当前写指针指向的地址开始写入。写入完成后,数据占用的空间视作已占用空间,然后将写指针移动到写完内容的下一个地址。这一过程如图3所示。在读出的时候,如图4所示,先判断存储缓冲区内是否有数据,如果有数据且数据量小于等于需要的读出的量,就可以将所有的数据全部读出;否则就需要按照帧的大小进行识别,判断可以取出小于等于需要读出的字节量,从读指针开始处进行读取,读出后的空间视作空闲空间,然后将读指针移到下一个可以读的地址。
下面是数据包的写入操作实施方式在读写的时候,需要清楚存储区内目前有多少空闲的空间,有多少可以已经存入的数据。空闲空间和占用空间的计算方法如下当写指针大于读指针的时候,如图1所示FreeSize=TotalSize-(pWriteAddr-pReadAddr)-1、OccupiedSize=pWriteAddr-pReadAddr。当写指针大于读指针的时候,如图6所示,FreeSize=pReadAddr-pWriteAddr-1、OccupiedSize=TotalSize-(pReadAddr-pWriteAddr)。当进行写入操作的时候,流程如图3所示;写入的时候,依次存储,没有空隙。当进行读出操作的时候,流程如图4所示;需要注意的是,读出的时候,通常是要按帧结构读出,而不是按照字节长度读出。因此,当存储区内的数据总长度大于要读出的数据时,需要先进行断帧操作即找出在这个长度范围内,又是整数个帧的数据。这个断帧操作的流程可以用流程图7表示。
通过这样的方法,在写入的时候,只需要对一段连续的空间进行操作,而不必对两段空间操作,节省了时间;无缝的存储次序,节约了空间;读出操作中,也是只需要对一段空间操作,同样节约时间。在具体的实施方式上,只需要少数的几个全局变量,就可以完成代码编写,是一种安全可靠的方法。
权利要求
1.一种单任务快速缓冲读写方法,其特征在于,包括以下步骤(1)建立逻辑存储区将存储介质的存储空间按照地址方式进行管理,每个地址指向一个字节,并将可用的地址空间首尾相接,建立环形缓冲区,对该环形缓冲区定义相连接的头与尾,头地址等于尾地址,从而将该环形缓冲区构建成逻辑存储区;(2)数据的读写操作和管理写入数据时,首先判断存储空间是否足够,然后将数据从当前写指针指向的地址开始写入,写入完成后,将写指针移动到写完内容的下一个地址;读出数据时,首先判断存储缓冲区内是否有数据,如果有数据且数据量小于或等于需要读出的数据量,则将所有的数据全部读出;否则按照帧的大小进行识别,判断可以取出的数据量,并从读指针开始处进行读取,读出后的空间视作空闲空间;然后将读指针移到下一个可以读取的地址。
2.根据权利要求1所述的单任务快速缓冲读写方法,其特征在于,在所述步骤(1)中,需要写入存储空间的内容,还包括在原始数据前的长度字段,其数据类型根据要处理的原始数据的最大长度来确定。
3.根据权利要求1所述的单任务快速缓冲读写方法,其特征在于,在所述步骤(1)中,还需要设置两个辅助变量,一个是读指针,一个是写指针,用于指向当前读写操作到达的具体地址。
4.根据权利要求1所述的单任务快速缓冲读写方法,其特征在于,在所述步骤(2)中,在写入数据时,以字节方式依次占用存储区的存储空间;在读出数据时,以字节为单位依次读出。
全文摘要
本发明公开了一种数据通信领域中的单任务快速缓冲读写方法,包括(1)建立逻辑存储区;(2)数据的读写操作和管理写入数据时,首先判断存储空间是否足够,然后将数据从当前写指针指向的地址开始写入,写入完成后,将写指针移动到写完内容的下一个地址;读出数据时,首先判断存储缓冲区内是否有数据,如果有数据且数据量小于或等于需要读出的数据量,则将所有的数据全部读出;否则按照帧的大小进行识别,判断可以取出的数据量,并从读指针开始处进行读取;然后将读指针移到下一个可以读取的地址。本发明可以克服现有技术存在的存储空间浪费严重、读写操作复杂的缺点,能够实现节约存储空间、读写操作简单、管理方便的目的。
文档编号G06F12/04GK1540523SQ20031010228
公开日2004年10月27日 申请日期2003年10月30日 优先权日2003年10月30日
发明者刘燕, 周文端, 花茂盛, 章利勇, 刘 燕 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1