CN108345551A - 一种存储数据的方法及装置 - Google Patents
一种存储数据的方法及装置 Download PDFInfo
- Publication number
- CN108345551A CN108345551A CN201710050677.XA CN201710050677A CN108345551A CN 108345551 A CN108345551 A CN 108345551A CN 201710050677 A CN201710050677 A CN 201710050677A CN 108345551 A CN108345551 A CN 108345551A
- Authority
- CN
- China
- Prior art keywords
- buffer unit
- data
- length
- read
- initial position
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/28—DMA
- G06F2213/2806—Space or buffer allocation for DMA transfers
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Bus Control (AREA)
Abstract
本发明公开了一种存储数据的方法及装置,属于视频监控领域。所述方法包括:第一DMA控制器获取至少一个缓存单元中的每个缓存单元对应的DMA描述符,所述至少一个缓存单元是第二DMA控制器对应第一缓冲区中存储有所述待读取数据的缓存单元,所述第一DMA控制器和所述第二DMA控制器是两个不同的DMA控制器,缓存单元对应的DMA描述符包括所述待读取数据在所述缓存单元中的起始位置、步距、步长和数据长度,所述步长小于或等于所述步距;根据所述每个缓存单元对应的DMA描述符,分别读取所述每个缓存单元包括的待读取数据;将所述读取的数据存储在所述第一DMA控制器对应的第二缓冲区中。本发明能够提高存储效率。
Description
技术领域
本发明涉及视频监控领域,特别涉及一种存储数据的方法及装置。
背景技术
计算机中包括大量的DMA(Direct Memory Access,直接内存存储)控制器,每个DMA控制器对应一个缓冲区,该DMA控制器对应的缓冲区可以用于存储该DMA控制器需要处理的数据。有时DMA控制器需要处理其他缓冲区中存储的数据,此时该DMA控制器需要先从其他缓冲区中读取数据并存储到自己对应的缓冲区中。
假设,DMA控制器需要从第一缓冲区中读取数据并存储到第二缓冲区中,第一缓冲区包括多个缓存单元,通常各缓存单元的地址不连续。由于DMA控制器不能读取存储地址不连续的数据,所以DMA控制器需要请求计算机的CPU(Central Processing Unit,中央处理器)先分配一个地址连续的存储空间,将第一缓冲区包括的各缓存单元中存储的数据读取到该该存储空间中;然后DMA控制器再从该存储空间中读取待读取数据并存储到第二缓冲区中。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
DMA控制器在读取数据时,需要CPU先将第一缓冲区中的数据存储到分配的存储空间中,然后再从该存储空间中读取数据并存储到第二缓冲区中,所以DMA控制器需要等待CPU先进行一次数据读取和存储,不仅消耗大量的CPU资源,降低DMA控制器的数据存储效率。
发明内容
为了减少占用CPU资源以及提高存储效率,本发明提供了提供了一种存储数据的方法及装置。所述技术方案如下:
一方面,提供了一种存储数据的方法,所述方法包括:
第一直接内存存储DMA控制器获取至少一个缓存单元中的每个缓存单元对应的DMA描述符,所述至少一个缓存单元是第二DMA控制器对应的第一缓冲区中存储有待读取数据的缓存单元,所述第一DMA控制器和所述第二DMA控制器是两个不同的DMA控制器,缓存单元对应的DMA描述符包括所述待读取数据在所述缓存单元中的起始位置、步距、步长和数据长度,所述步长小于或等于所述步距;
所述第一DMA控制器根据所述每个缓存单元对应的DMA描述符,分别读取所述每个缓存单元包括的待读取数据;
所述第一DMA控制器将所述读取的数据存储在所述第一DMA控制器对应的第二缓冲区中。
可选的,第一缓存单元对应的DMA描述符包括所述待读取数据在所述第一缓存单元中的第一起始位置、第一步距、第一步长和第一数据长度,所述第一缓存单元为所述至少一个缓存单元中的任一缓存单元;
所述根据所述每个缓存单元对应的DMA描述符,分别读取所述每个缓存单元包括的待读取数据,包括:
根据所述第一起始位置、第一步距、第一步长和第一数据长度,确定所述第一缓存单元包括的待读取的n段数据,任意相邻两段数据之间的间隔等于所述第一步距与所述第一步长之间的差值,所述相邻两段数据的起始位置之间的间隔等于所述第一步距,所述n段数据的长度之和等于所述第一数据长度,n为大于或等于1的整数;
从所述第一缓存单元中读取所述各段数据。
可选的,如果第一数值大于或等于所述第一步长,所述第一数值为所述第一缓存单元包括的最后一位数据的位置与所述第n段数据的起始位置之间的差值,则第二缓存单元对应的DMA描述符包括待读取数据在所述第二缓存单元中的第二起始位置、第二步距、第二步长和第二数据长度,所述第二起始位置是所述第二缓存单元的起始位置与第一差值之和,所述第一差值为所述第一步距与所述第一数值之间的差值,所述第二缓存单元是所述第一缓存单元的下一个缓存单元。
可选的,如果第一数值小于所述第一步长,则第二缓存单元对应第一DMA描述符和第二DMA描述符;
所述第一DMA描述符包括所述待读取数据在所述第二缓存单元中的第三起始位置和第三数据长度,所述第三起始位置为所述第二缓存单元的起始位置,所述第三数据长度为所述第一步长与所述第一数值之间的差值;
所述第二DMA描述符包括所述待读取数据在所述第二缓存单元中的第四起始位置、第三步距、第三步长和第四数据长度,所述第四起始位置为所述第二缓存单元的起始位置与第二差值之和,所述第二差值为所述第一步距与所述第一数值之间的差值。
可选的,所述第一DMA控制器根据所述每个缓存单元对应的DMA描述符,分别读取所述每个缓存单元中的有效数据,还包括:
在所述第二缓存单元中,所述第一DMA控制器从所述第三起始位置开始读取长度为所述第三数据长度的数据。
可选的,所述第一DMA控制器获取至少一个缓存单元中的每个缓存单元对应的DMA描述符之前,还包括:
所述第一DMA控制器在所述第一缓冲区中将地址连续的多个缓存单元合并为一个缓存单元。
另一方面,提供了一种存储数据的装置,所述装置包括:
获取模块,用于获取至少一个缓存单元中的每个缓存单元对应的直接内存存储DMA描述符,所述至少一个缓存单元是第二DMA控制器对应的第一缓冲区中存储有所述待读取数据的缓存单元,所述装置和所述第二DMA控制器是两个不同的DMA控制器,缓存单元对应的DMA描述符包括所述待读取数据在所述缓存单元中的起始位置、步距、步长和数据长度,所述步长小于或等于所述步距;
读取模块,用于根据所述每个缓存单元对应的DMA描述符,分别读取所述每个缓存单元包括的待读取数据;
存储模块,用于将所述读取的数据存储在所述装置对应的第二缓冲区中。
可选的,第一缓存单元对应的DMA描述符包括所述待读取数据在所述第一缓存单元中的第一起始位置、第一步距、第一步长和第一数据长度,所述第一缓存单元为所述至少一个缓存单元中的任一缓存单元;
所述读取模块包括:
确定单元,用于根据所述第一起始位置、第一步距、第一步长和第一数据长度,确定所述第一缓存单元包括的待读取的n段数据,任意相邻两段数据之间的间隔等于所述第一步距与所述第一步长之间的差值,所述相邻两段数据的起始位置之间的间隔等于所述第一步距,所述n段数据的长度之和等于所述第一数据长度,n为大于或等于1的整数;
读取单元,用于从所述第一缓存单元中读取所述各段数据。
可选的,如果第一数值大于或等于所述第一步长,所述第一数值为所述第一缓存单元包括的最后一位数据的位置与所述第n段数据的起始位置之间的差值,则第二缓存单元对应的DMA描述符包括待读取数据在所述第二缓存单元中的第二起始位置、第二步距、第二步长和第二数据长度,所述第二起始位置是所述第二缓存单元的起始位置与第一差值之和,所述第一差值为所述第一步距与所述第一数值之间的差值,所述第二缓存单元是所述第一缓存单元的下一个缓存单元。
可选的,如果第一数值小于所述第一步长,则第二缓存单元对应第一DMA描述符和第二DMA描述符;
所述第一DMA描述符包括所述待读取数据在所述第二缓存单元中的第三起始位置和第三数据长度,所述第三起始位置为所述第二缓存单元的起始位置,所述第三数据长度为所述第一步长与所述第一数值之间的差值;
所述第二DMA描述符包括所述待读取数据在所述第二缓存单元中的第四起始位置、第三步距、第三步长和第四数据长度,所述第四起始位置为所述第二缓存单元的起始位置与第二差值之和,所述第二差值为所述第一步距与所述第一数值之间的差值。
可选的,所述读取单元,还用于在所述第二缓存单元中,从所述第三起始位置开始读取长度为所述第三数据长度的数据。
可选的,所述装置还包括:
合并模块,用于在所述第一缓冲区中将地址连续的多个缓存单元合并为一个缓存单元。
本发明提供的技术方案的有益效果是:
第一DMA控制器通过获取第一缓冲区中存储有的待读取数据的每个缓存单元对应的DMA描述符,由于每个缓存单元中存储的数据地址连续,所以第一DMA控制器根据每个缓存单元对应的DMA描述符,直接从每个缓存单元中读取数据并将从每个缓存单元中的读取的数据存储到第二缓冲区中。从而不需要先将第一缓冲区中的数据先缓存到一个地址连续的空间中,提高了存储效率,也避免占用了CPU资源。
附图说明
图1-1是本发明实施例提供的DMA控制器读取数据的示意图;
图1-2是本发明实施例提供的第一缓冲区的结构示意图;
图1-3是本发明实施例提供的合并缓存单元的流程图;
图1-4是本发明实施例提供的合并后的第一缓冲区的结构示意图;
图2-1是本发明实施例提供的配置缓存单元的DMA描述符的流程图;
图2-2是本发明实施例提供的读取缓存单元中的数据示意图;
图2-3是本发明实施例提供另一的读取缓存单元中的数据示意图;
图2-4是本发明实施例提供另一的读取缓存单元中的数据示意图;
图2-5是本发明实施例提供另一的读取缓存单元中的数据示意图;
图2-6是本发明实施例提供另一的读取缓存单元中的数据示意图;
图3是本发明实施例提供的一种存储数据的方法流程图;
图4是本发明实施例提供的一种存储数据的装置结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
计算机中包括多个DMA控制器,每个DMA控制器对应一个缓冲区,每个缓冲区包括至少一个缓存单元。通常该至少一个缓存单元中存在部分缓存单元的地址不连续或者每个缓存单元的地址均不连续。
缓冲区对应一个链表。在该链表中,该缓冲区包括的每个缓存单元对应一个表项,该表项包括该缓存单元的长度、起始地址和指向下一个表项的指针信息。
对于任意一个DMA控制器,为了便于说明,称该DMA控制器为第一DMA控制器,第一DMA控制器对应的第二缓冲区可以用于存储第一DMA控制器将要处理的数据,第二DMA控制器可以从第二DMA控制器对应的第一缓冲区中读取数据并存储到其对应的第二缓冲区中,然后再对其对应的第二缓冲区中的数据进行处理。
第一DMA控制器在读取数据时会按照预设的步长和步距读取一段或多段数据,该步长小于或等于该步距,每段数据的数据长度为该步长,任意相邻两段数据之间的间隔为该步距与该步长之间的差值,且任意相邻两段数据的起始位置之间的间隔为该步距。例如,参见图1-1,第一DMA控制器读取的第一段数据、第二段数据和第三段数据的数据长度均为该步长,第一段数据的起始位置和第二段数据的起始位置之间的间隔为该步距,以及第二段数据的起始位置和第三段数据的起始位置之间的间隔也为该步距。
有时第一DMA控制器需要从第二DMA控制器对应的第一缓冲区中读取数据并将该数据存储到自身对应的第二缓冲区中。为了便于说明,称该DMA控制器需要读取的数据为待读取数据。
其中,第一DMA控制器将第一缓冲区中待读取数据存储到第二缓冲区时,可以经过如下几个过程:第一、合并第一缓冲区中地址连续的缓存单元;第二、配置缓存单元对应的DMA描述符,该缓存单元是合并后的第一缓冲区或未合并的第一缓冲区中存储有待读取数据的缓存单元;第三、根据该缓存单元对应的DMA描述符,从第一缓冲区中读取待读取数据并存储到第二缓冲区中。
其中,配置完缓存单元的DMA描述符后,当第一DMA控制器每次需要从第一缓冲区中读取数据时,第一DMA控制器都可以根据该缓存单元的DMA描述符,从第一缓冲区中读取数据并存储到第二缓冲区中。
对于上述第一过程,即合并第一缓冲区中地址连续的缓存单元。将地址连续的缓存单元合并实质是将地址连续的缓存单元对应的表项合并。当某个缓存单元与其下一个缓存单元的地址连续时,该缓存单元对应的表项包括的该缓存单元的起始地址和长度之和等于该下一个缓存单元对应的表项中包括的该下一个缓存单元的起始地址。
例如,第一缓冲区还对应一个第一链表。第一缓冲区如图1-2所示,包括缓存单元1、缓存单元2、缓存单元3和缓存单元4。第一缓冲区对应的第一链表也包括四个表项,分别为表项1、表项2、表项3和表项4。表项1包括缓存单元1的起始地址0、长度10和指向下一个表项2的指针信息1;表项2包括缓存单元2的起始地址10、长度15和指向下一个表项3的指针信息2;表项3包括缓存单元3的起始地址27、长度11和指向下一个表项4的指针信息3;表项4包括缓存单元4的起始地址40和长度17。其中,缓存单元1对应的表项1包括的缓存单元1的起始地址0和长度10之和等于缓存单元2对应的表项2包括的缓存单元2的起始地址10;所以缓存单元1和缓存单元2是地址连续的两个缓存单元。
参见1-3,本发明实施例提供了一种合并缓存单元的流程,该流程用于合并第一缓冲区中地址连续的缓存单元,该流程的执行主体可以为第一DMA控制器,包括:
步骤101:创建一个表项并称为第一表项,将第一链表的第一个表项称为第二表项,将第二表项包括的缓存单元的起始地址和长度存储在创建的第一表项中。
例如,创建一个表项11,将表项11称为第一表项11,将第一链表的第一个表项1称为第二表项1,将第二表项1包括的缓存单元1的起始地址0和长度10存储在创建的第一表项11中。
步骤102:如果第二表项不是第一链表的最后一个表项,根据第二表项包括的指针信息确定第二表项的下一个表项。
具体地,确定第二表项包括的指针信息指向的表项,确定出的表项为第二表项的下一个表项。
如果第二表项是第一链表的最后一个表项,则结束操作。
例如,第二表项1包括指针信息1,根据指针信息1确定指针信息1指向的表项2为第二表项1的下一个表项。
步骤103:计算第二表项包括的缓存单元的起始地址和长度之和得到第一数值。
例如,计算第二表项1包括的缓存单元1的起始地址0和长度10之和得到第一数值10。
步骤104:判断第一数值是否与该下一个表项包括的缓存单元的起始地址相同,如果相同,执行步骤105,如果不同,执行步骤106。
例如,判断出第一数值10与该下一个表项2包括的缓存单元2的起始地址10相同,执行步骤105。
步骤105:将第一表项包括的缓存单元的长度增加第二数值,第二数值为该下一个表项包括的缓存单元的长度,将该下一个表项称为第二表项,返回执行102。
例如,将第一表项11包括的缓存单元的长度10增加第二数值15,这样第一表项11包括的缓存单元的长度变为25,第二数值15为该下一个表项2包括的缓存单元2的长度15,将该下一个表项2称为第二表项2。
第二表项2不是第一链表的最后一个表项,根据第二表项2包括的指针信息2确定第二表项2的下一个表项为表项3;计算第二表项2包括的缓存单元2的起始地址10与长度15之和得到第一数值为25,判断出第一数值25与该下一个表项3包括的缓存单元3的起始地址27不同,执行步骤106。
步骤106:创建新的表项,设置指向该新的表项的指针信息,将该指针信息存储在第一表项中,并称该新的表项为第一表项,将该下一个表项称为第二表项。
例如,创建一个新表项12,设置指向新表项12的指针信息11,将该指针信息11存储在第一表项11中,称新表项12为第一表项12,将该下一个表项3称为第二表项3。
步骤107:将第二表项包括的缓存单元的起始地址和长度存储在第一表项中,返回执行步骤102。
例如,将第二表项3包括的缓存单元3的起始地址27和长度11存储在第一表项12中。第二表项3不是第一链表的最后一个表项,根据第二表项3包括的指针信息3确定第二表项3的下一个表项为表项4,计算第二表项3包括的缓存单元3的起始地址27和长度11之和得到第一数值为38;判断出第一数值38与下一个表项4包括的缓存单元4的起始地址40不同,则创建一个新表项13,设置指向新表项13的指针信息13,将该指针信息13存储在第一表项12中,将该新表项13称为第一表项13,将该下一个表项4称为第二表项4,将第二表项4包括的缓存单元4的起始地直址40和长度17存储在第一表项13中,由于第二表项4是第一链表的最后一个表项,结束返回。
这样合并后的第一缓冲区对应的第一链表包括表项11、表项12和表项13。如图1-4所示,表项11、表项12和表项13分别对应合并后的第一缓冲区包括的缓存单元1、缓存单元2和缓存单元3。表项11包括合并后的第一缓冲区的第一个缓存单元1的起始地址0、长度25和指针信息11;表项12包括合并后的第一缓冲区的第二个缓存单元的起始地址27、长度11和指针信息12;表项13包括合并后的第一缓冲区的第三个缓存单元3的起始地址40和长度17。
对于上述第二个过程,即配置至少一个缓存单元中的每个缓存单元对应的DMA描述符,该至少一个缓存单元是合并后的第一缓冲区或未合并的第一缓冲区中存储有待读取数据的缓存单元。缓存单元对应的DMA描述符包括待读取数据在该缓存单元中的起始位置、步距、步长和数据长度。
其中每个缓存单元对应的DMA描述符可以由技术人员配置,也可以由第一DMA控制器按图2-1所示流程来配置。参见图2-1,详细配置过程可以为:
步骤201:从第一DMA控制器中获取待读取数据在第一缓冲区的起始位置、数据总长度、步距和步长。
例如,假设待读取数据在第一缓冲区中的起始位置为3,数据总长度为21,步距为5,步长为3。所以本步骤可以从第一DMA控制器中获取该起始位置3、数据总长度21、步距为5以及步长为3。
步骤202:根据待读取数据在第一缓冲区中的起始位置,找出第一缓冲区中包括该起始位置的缓存单元作为待处理的第一个缓存单元。
具体地,从第一缓冲区对应的第一链表中获取第一个表项,根据第一个表项包括的第一个缓存单元的起始地址和长度确定第一个缓存单元占用的地址范围;如果该地址范围包括该起始位置,则确定第一个缓存单元为包括该起始位置的缓存单元,否则,根据第一个表项包括的指针信息获取第二个表项,并按上述方式确定第二个表项对应的第二个缓存单元是否包括该起始位置,如果不包括,再获取第三个表项,直到找出包括该起始位置的缓存单元时为止。
例如,从合并后的第一缓冲区对应的第一链表中获取第一个表项11,根据第一个表项11包括的第一个缓存单元1的起始地址0和长度25确定第一个缓存单元1占用的地址范围为0至24;而待读取数据在第一缓冲区中的起始位置为3,所以第一个缓存单元1包括该起始位置3并称第一个缓存单元1为待处理的第一个缓存单元。
步骤203:根据第一起始位置、该步距、步长和待读取数据的数据总长度,确定待处理的第一个缓存单元中需要读取的x段数据,第一起始位置为待读取数据在第一缓冲区中的起始位置。
具体地,在待处理的第一个缓存单元占用的地址范围内,根据该步距和步长,从第一起始位置开始确定第一个缓存单元存储的待读取的x段数据,该x段数据中任意相邻的两段数据之间的间隔等于该步距和该步长之间的差值,且该相邻的两段数据的起始地址之间的间隔等于该步距,且该x段数据的数据长度之和小于或等于待读取数据的数据总长度。
例如,参见图2-2,在第一个缓存单元1占用的地址范围0至24内,从第一起始位置3开始确定第一个缓存单元1存储的待读取的5段数据,分别为第1段数据、第2段数据、第3段数据、第4段数据和第5段数据。任意相邻两段数据之间的间隔等于2,即等于该步距5和步长3之间的差值且每段数据的起始位置之间的间隔等于该步距5。
步骤204:计算该x段数据的长度之和得到第一数据长度,配置第一个缓存单元对应的DMA描述符,该DMA描述符包括待读取数据在第一个缓存单元中的第一起始位置、第一步距、第一步长和第一数据长度。
其中,第一步距可以与步骤201中获取的步距相等,第一步长可以与步骤201中获取的步长相等。
例如,计算第1段数据至第5段数据的长度之和等于13,得到第一数据长度为13,配置第一个缓存单元1对应的DMA描述符,该DMA描述符包括待读取数据在第一个缓存单元1中的第一起始位置3,第一步距5、第一步长3和第一数据长度13。
步骤205:如果待读取数据的剩余长度不为0,则判断第一数值是否大于或等于该步长,如果是,执行步骤206,如果否,执行步骤209。
其中,剩余长度等于待读取数据的数据总长度减去第一数据长度,第一数值是第一个缓存单元包括的最后一位数据的位置与第x段数据的起始位置之间的间隔。
其中,第一数值有如下三种情况。参见图2-3,第一数值大于步长且小于或等于步距。参见图2-4,第一数值等于步长。以及参见图2-5,第一数值大于0且小于步长。
例如,将待读取数据的数据总长度21减去第一数据长度13,得到的剩余长度为8,不为0,则获取第一个缓存单元1的最后一位数据的位置24,第5段数据的起始位置为23,所以得到第一数值为1,小于步长3,因而执行步骤209。
步骤206:确定第一个缓存单元的下一个缓存单元作为待处理的第二个缓存单元,确定待读取数据在第二个缓存单元中的第二起始位置为第二个缓存单元的起始位置与第一差值之和,第一差值为步距与第一数值之间的差值。
步骤207:根据第二起始位置、该步距、步长和待读取数据的剩余长度,确定待处理的第二个缓存单元中需要读取的y段数据,该y段数据的长度之和小于或等于剩余长度。
具体地,在第二个缓存单元占用的地址范围内,根据该步距和步长,从确定的第二起始位置开始确定第二个缓存单元存储的待读取的y段数据,该y段数据中任意相邻的两段数据之间的间隔等于该步距和步长之间的差值,且该相邻的两段数据的起始地址之间的间隔等于该步距,且该y段数据的数据长度之和小于或等于剩余长度。
步骤208:配置第二个缓存单元对应的DMA描述符,该DMA描述符包括待读取数据在第二个缓存单元中的第二起始位置、第二步距、第二步长和第二数据长度,第二数据长度为该y段数据的长度之和。
将待读取数据的剩余长度减小第二数据长度。其中,第二步距可以与步骤201中获取的步距相等,第二步长可以与步骤201中获取的步长相等。
步骤209:配置第二个缓存单元对应的第一DMA描述符,第一DMA描述符包括第三起始位置和第三数据长度,第三起始位置为第二个缓存单元的起始位置,第三数据长度为步长与第一数值之间的差值。
将待读取数据的剩余长度减小第三数据长度。
例如,参见图2-6,配置第二个缓存单元的第一DMA描述符,该第一DMA描述符包括第三起始位置和第三数据长度,第三起始位置为第二缓存单元的起始位置27,第三数据长度为2,第三数据长度为步长3与第一数值1之间的差值。
将待读取数据的剩余长度8减少第三数据长度2,得到的剩余长度为6。
步骤210:如果待读取数据的剩余长度不为0,根据该步距、步长和待读取数据的剩余长度,确定从第四起始位置起第二个缓存单元中需要读取的z段数据,该z段数据的长度和第三数据长度之和小于或等于剩余长度,第四起始位置是第二个缓存单元的起始位置与第二差值之和,第二差值是步距与第一数值之间的差值。
具体地,在第二个缓存单元占用的地址范围内,根据该步距和步长,从第四起始位置开始确定第二个缓存单元存储的待读取的z段数据,该z段数据中任意相邻的两段数据之间的间隔等于该步距和步长之间的差值,且该相邻的两段数据的起始地址之间的间隔等于该步距,且该z段数据的长度和第三数据长度之和小于或等于剩余长度。
例如,将待读取数据的剩余长度8减少第三数据长度2,得到的剩余长度为6,不为0,所以确定第四起始位置31,第四起始位置31等于第二个缓存单元2的起始位置27与第二差值4之和,第二差值4等于步距5与第一数值1之间的差值。在第二个缓存单元2占用地址范围27至37内,从第四起始位置31开始确定需要读取的两段数据,分别为第1段数据和第2段数据。
步骤211:配置第二个缓存单元的第二DMA描述符,第二DMA描述符包括第四起始位置、第三步距、第三步长和第四数据长度,第四数据长度等于该z段数据的长度之和。
其中,第三步距可以与步骤201中获取的步距相等,第三步长可以与步骤201中获取的步长相等。将待读取数据的剩余长度减小第四数据长度,如果待读取数据的剩余长度不为零,则确定第二缓存单元的下一个缓存单元作为待处理的第三缓存单元,并继续按上述步骤204至210的流程来处理,直到剩余长度为0时为止。
例如,配置第二个缓存单元的第二DMA描述符包括第四起始位置31、第三步距5、第三步长3和第四数据长度4,第四数据长度4等于第1段数据和第2段数据的长度之和。将待读取数据的剩余长度6减小第四数据长度4,得到的剩余长度为2,不为0,所以计算第二个缓存单元2的最后一位数据的位置37与第2段数据的起始位置36之间的第一差值1,该第一差值1小于步长3。因此配置第三个缓存单元的第一DMA描述符,该第一DMA描述符包括第五起始位置40和第五数据长度2,第五起始位置40为第三个缓存单元3的起始位置40,第五数据长度2为步长3与第一数值1之间的差值。将待读取数据的剩余长度2减小第五数据长度2得到的剩余长度为0,结束返回。
对于上述第三个过程。参见图3,本发明实施例提供了一种存储数据的方法,该方法用于第一DMA控制器将第一缓冲区包括的待读取数据存储到第二缓冲区,包括:
步骤301:第一DMA控制器获取至少一个缓存单元中的每个缓存单元对应的DMA描述符,至少一个缓存单元是第二DMA控制器对应的第一缓冲区中存储有待读取数据的缓存单元,第一DMA控制器和第二DMA控制器是两个不同的DMA控制器,缓存单元对应的DMA描述符包括待读取数据在该缓存单元中的起始位置、步距、步长和数据长度,该步长小于或等于该步距。
步骤302:第一DMA控制器根据每个缓存单元对应的DMA描述符,分别读取每个缓存单元包括的待读取数据并存储在第一DMA控制器对应的第二缓冲区中。
其中,第一缓存单元对应的DMA描述符包括待读取数据在第一缓存单元中的第一起始位置、第一步距、第一步长和第一数据长度,第一缓存单元为至少一个缓存单元中的任一缓存单元。本步骤可以为:根据第一起始位置、第一步距、第一步长和第一数据长度,确定第一缓存单元包括的待读取的n段数据,任意相邻两段数据之间的间隔等于该步距与该步长之间的差值,且该相邻两段数据的起始位置之间的间隔等于第一步距,n为大于或等于1的整数,且该n段数据的长度之和等于第一数据长度;从第一缓存单元中读取该n段数据,并将读取的n段数据存储在第二缓冲区中。
可选的,如果第一数值大于或等于第一步长,第一数值为第一缓存单元包括的最后一位数据的位置与第n段数据的起始位置之间的差值,则第二缓存单元对应的DMA描述符包括待读取数据在第二缓存单元中的第二起始位置、第二步距、第二步长和第二数据长度,第二起始位置是第二缓存单元的起始地址和第一差值之和,第一差值是第一步距与第一数值之间的差值,第二缓存单元是第一缓存单元的下一个缓存单元。
可选的,如果第一数值小于第一步长,则第二缓存单元对应第一DMA描述符和第二DMA描述符;第一DMA描述符包括待读取数据在第二缓存单元中的第三起始位置和第三数据长度,第三起始位置为第二缓存单元的起始位置,第三数据长度为该步长与第一数值之间的差值;第二DMA描述符包括待读取数据在第二缓存单元中的第四起始位置、第三步距、第三步长和第四数据长度,第四起始位置为第二缓存单元的起始位置与第二差值之和,第二差值为第一步距与第一数值之间的差值。
相应的,本步骤还可以可以为:在第二缓存单元中,第一DMA控制器从第三起始位置开始读取长度为第三数据长度的数据并将读取的数据存储在第二缓冲区中。
以及,在第二缓存单元中,第一DMA控制器从第四起始位置开始确定m段数据,任意相邻两段数据之间的间隔等于第三步距与第三步长之间的差值,相邻两段数据的起始位置之间的间隔等于第三步距,m为大于或等于1的整数,且该m段数据的长度之和等于第四数据长度。对于该至少一个缓存单元中除第一缓存单元和第二缓存单元以外的其他每个缓存单元,均按与第二缓存单元相同的方式读取数据。
例如,第一DMA控制器获取第一缓冲区中的第一个缓存单元1对应的DMA描述符,第二个缓存单元2对应的第一DMA描述符和第二DMA描述符,第三个缓存单元3对应的第一DMA描述符。
第一个缓存单元1对应的DMA描述符包括第一起始位置3、第一步长3、第一步距5和第一数据长度13。参见图2-2,根据第一起始位置3、第一步长3和第一步距5,确定5段数据,分别为第1段数据、第2段数据、第3段数据、第4段数据和第5段数据,该5段数据中任意相邻两段数据之间的间隔为第一步距5和第一步长3之间的差值,任意相邻两段数据的起始位置之间的间隔为第一步距5,该5段数据的长度之和等于第一数据长度13。读取该5段数据并存储到第二缓冲区中。
对于第一个缓存单元1的下一个缓存单元,即对于第二个缓存单元2,第二个缓存单元2对应第一DMA描述符和第二DMA描述符,第一DMA描述符包括第二起始位置27和第二数据长度2,第二DMA描述符包括第三起始位置31、第三步距5、第三步长3和第三数据长度4。相应的,参见图2-6,根据第二起始位置27和第二数据长度2,从第二个缓存单元2中的第二起始位置27起读取数据,读取的数据的长度为第二数据长度2,将读取的数据存储在第二缓冲区中。根据第三起始位置31、第三步长3和第三步距5,确定两段数据,分别为第1段数据和第2段数据,该两段数据的长度之和等于第一数据长度13,该两段数据之间的间隔为第三步距5和第三步长3之间的差值,该两段数据的起始位置之间的间隔为第三步距5。读取该两段数据并存储到第二缓冲区中。
对于第二个缓存单元2的下一个缓存单元,即对于第三个缓存单元3,第三个缓存单元3对应第一DMA描述符,第一DMA描述符包括第四起始位置40和第四数据长度2。相应的,根据第四起始位置40和第四数据长度2,从第三个缓存单元3中的第四起始位置40起读取数据,读取的数据的长度为第四数据长度2,将读取的数据存储在第二缓冲区中。
参见图4,本发明实施例提供了一种存储数据的装置400,所述装置400包括:
获取模块401,用于获取至少一个缓存单元中的每个缓存单元对应的DMA描述符,所述至少一个缓存单元是第二DMA控制器对应的第一缓冲区中存储有所述待读取数据的缓存单元,所述装置400和所述第二DMA控制器是两个不同的DMA控制器,缓存单元对应的DMA描述符包括所述待读取数据在所述缓存单元中的起始位置、步距、步长和数据长度,所述步长小于或等于所述步距;
读取模块402,用于根据所述每个缓存单元对应的DMA描述符,分别读取所述每个缓存单元包括的待读取数据;
存储模块403,用于将所述读取的数据存储在所述装置400对应的第二缓冲区中。
可选的,第一缓存单元对应的DMA描述符包括所述待读取数据在所述第一缓存单元中的第一起始位置、第一步距、第一步长和第一数据长度,所述第一缓存单元为所述至少一个缓存单元中的任一缓存单元;
所述读取模块402包括:
确定单元,用于根据所述第一起始位置、第一步距、第一步长和第一数据长度,确定所述第一缓存单元包括的待读取的n段数据,任意相邻两段数据之间的间隔等于所述第一步距与所述第一步长之间的差值,所述相邻两段数据的起始位置之间的间隔等于所述第一步距,所述n段数据的长度之和等于所述第一数据长度,n为大于或等于1的整数;
读取单元,用于从所述第一缓存单元中读取所述各段数据。
可选的,如果第一数值大于或等于所述第一步长,所述第一数值为所述第一缓存单元包括的最后一位数据的位置与所述第n段数据的起始位置之间的差值,则第二缓存单元对应的DMA描述符包括待读取数据在所述第二缓存单元中的第二起始位置、第二步距、第二步长和第二数据长度,所述第二起始位置是所述第二缓存单元的起始位置与第一差值之和,所述第一差值为所述第一步距与所述第一数值之间的差值,所述第二缓存单元是所述第一缓存单元的下一个缓存单元。
可选的,如果第一数值小于所述第一步长,则第二缓存单元对应第一DMA描述符和第二DMA描述符;
所述第一DMA描述符包括所述待读取数据在所述第二缓存单元中的第三起始位置和第三数据长度,所述第三起始位置为所述第二缓存单元的起始位置,所述第三数据长度为所述第一步长与所述第一数值之间的差值;
所述第二DMA描述符包括所述待读取数据在所述第二缓存单元中的第四起始位置、步距、步长和第四数据长度,所述第四起始位置为所述第二缓存单元的起始位置与第二差值之和,所述第二差值为所述步距与所述第一数值之间的差值。
可选的,所述读取单元,还用于在所述第二缓存单元中,从所述第三起始位置开始读取长度为所述第三数据长度的数据。
可选的,所述装置400还包括:
合并模块,用于在所述第一缓冲区中将地址连续的多个缓存单元合并为一个缓存单元。
在本发明实施例中,通过获取存储的待读取数据的每个缓存单元对应的DMA描述符,根据每个缓存单元对应的DMA描述符,直接从每个缓存单元中读取数据并将从每个缓存单元中的读取的数据存储到第二缓冲区中。从而不需要先将第一缓冲区中的数据先缓存到一个连续地址空间中,提高了存储效率。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (12)
1.一种存储数据的方法,其特征在于,所述方法包括:
第一直接内存存储DMA控制器获取至少一个缓存单元中的每个缓存单元对应的DMA描述符,所述至少一个缓存单元是第二DMA控制器对应的第一缓冲区中存储有待读取数据的缓存单元,所述第一DMA控制器和所述第二DMA控制器是两个不同的DMA控制器,缓存单元对应的DMA描述符包括所述待读取数据在所述缓存单元中的起始位置、步距、步长和数据长度,所述步长小于或等于所述步距;
所述第一DMA控制器根据所述每个缓存单元对应的DMA描述符,分别读取所述每个缓存单元包括的待读取数据;
所述第一DMA控制器将所述读取的数据存储在所述第一DMA控制器对应的第二缓冲区中。
2.如权利要求1所述的方法,其特征在于,第一缓存单元对应的DMA描述符包括所述待读取数据在所述第一缓存单元中的第一起始位置、第一步距、第一步长和第一数据长度,所述第一缓存单元为所述至少一个缓存单元中的任一缓存单元;
所述根据所述每个缓存单元对应的DMA描述符,分别读取所述每个缓存单元包括的待读取数据,包括:
根据所述第一起始位置、第一步距、第一步长和第一数据长度,确定所述第一缓存单元包括的待读取的n段数据,任意相邻两段数据之间的间隔等于所述第一步距与所述第一步长之间的差值,所述相邻两段数据的起始位置之间的间隔等于所述第一步距,所述n段数据的长度之和等于所述第一数据长度,n为大于或等于1的整数;
从所述第一缓存单元中读取所述各段数据。
3.如权利要求2所述的方法,其特征在于,如果第一数值大于或等于所述第一步长,所述第一数值为所述第一缓存单元包括的最后一位数据的位置与所述第n段数据的起始位置之间的差值,则第二缓存单元对应的DMA描述符包括待读取数据在所述第二缓存单元中的第二起始位置、第二步距、第二步长和第二数据长度,所述第二起始位置是所述第二缓存单元的起始位置与第一差值之和,所述第一差值为所述第一步距与所述第一数值之间的差值,所述第二缓存单元是所述第一缓存单元的下一个缓存单元。
4.如权利要求3所述的方法,其特征在于,如果第一数值小于所述第一步长,则第二缓存单元对应第一DMA述符和第二DMA描述符;
所述第一DMA描述符包括所述待读取数据在所述第二缓存单元中的第三起始位置和第三数据长度,所述第三起始位置为所述第二缓存单元的起始位置,所述第三数据长度为所述第一步长与所述第一数值之间的差值;
所述第二DMA描述符包括所述待读取数据在所述第二缓存单元中的第四起始位置、第三步距、第三步长和第四数据长度,所述第四起始位置为所述第二缓存单元的起始位置与第二差值之和,所述第二差值为所述第一步距与所述第一数值之间的差值。
5.如权利要求4所述的方法,其特征在于,所述第一DMA控制器根据所述每个缓存单元对应的DMA描述符,分别读取所述每个缓存单元中的有效数据,还包括:
在所述第二缓存单元中,所述第一DMA控制器从所述第三起始位置开始读取长度为所述第三数据长度的数据。
6.如权利要求1至5任一项权利要求所述的方法,其特征在于,所述第一DMA控制器获取至少一个缓存单元中的每个缓存单元对应的DMA描述符之前,还包括:
所述第一DMA控制器在所述第一缓冲区中将地址连续的多个缓存单元合并为一个缓存单元。
7.一种存储数据的装置,其特征在于,所述装置包括:
获取模块,用于获取至少一个缓存单元中的每个缓存单元对应的直接内存存储DMA描述符,所述至少一个缓存单元是第二DMA控制器对应的第一缓冲区中存储有所述待读取数据的缓存单元,所述装置和所述第二DMA控制器是两个不同的DMA控制器,缓存单元对应的DMA描述符包括所述待读取数据在所述缓存单元中的起始位置、步距、步长和数据长度,所述步长小于或等于所述步距;
读取模块,用于根据所述每个缓存单元对应的DMA描述符,分别读取所述每个缓存单元包括的待读取数据;
存储模块,用于将所述读取的数据存储在所述装置对应的第二缓冲区中。
8.如权利要求7所述的装置,其特征在于,第一缓存单元对应的DMA描述符包括所述待读取数据在所述第一缓存单元中的第一起始位置、第一步距、第一步长和第一数据长度,所述第一缓存单元为所述至少一个缓存单元中的任一缓存单元;
所述读取模块包括:
确定单元,用于根据所述第一起始位置、第一步距、第一步长和第一数据长度,确定所述第一缓存单元包括的待读取的n段数据,任意相邻两段数据之间的间隔等于所述第一步距与所述第一步长之间的差值,所述相邻两段数据的起始位置之间的间隔等于所述第一步距,所述n段数据的长度之和等于所述第一数据长度,n为大于或等于1的整数;
读取单元,用于从所述第一缓存单元中读取所述各段数据。
9.如权利要求8所述的装置,其特征在于,如果第一数值大于或等于所述第一步长,所述第一数值为所述第一缓存单元包括的最后一位数据的位置与所述第n段数据的起始位置之间的差值,则第二缓存单元对应的DMA描述符包括待读取数据在所述第二缓存单元中的第二起始位置、第二步距、第二步长和第二数据长度,所述第二起始位置是所述第二缓存单元的起始位置与第一差值之和,所述第一差值为所述第一步距与所述第一数值之间的差值,所述第二缓存单元是所述第一缓存单元的下一个缓存单元。
10.如权利要求9所述的装置,其特征在于,如果第一数值小于所述第一步长,则第二缓存单元对应第一DMA描述符和第二DMA描述符;
所述第一DMA描述符包括所述待读取数据在所述第二缓存单元中的第三起始位置和第三数据长度,所述第三起始位置为所述第二缓存单元的起始位置,所述第三数据长度为所述第一步长与所述第一数值之间的差值;
所述第二DMA描述符包括所述待读取数据在所述第二缓存单元中的第四起始位置、第三步距、第三步长和第四数据长度,所述第四起始位置为所述第二缓存单元的起始位置与第二差值之和,所述第二差值为所述第一步距与所述第一数值之间的差值。
11.如权利要求10所述的装置,其特征在于,所述读取单元,还用于在所述第二缓存单元中,从所述第三起始位置开始读取长度为所述第三数据长度的数据。
12.如权利要求7至11任一项权利要求所述的装置,其特征在于,所述装置还包括:
合并模块,用于在所述第一缓冲区中将地址连续的多个缓存单元合并为一个缓存单元。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710050677.XA CN108345551B (zh) | 2017-01-23 | 2017-01-23 | 一种存储数据的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710050677.XA CN108345551B (zh) | 2017-01-23 | 2017-01-23 | 一种存储数据的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108345551A true CN108345551A (zh) | 2018-07-31 |
CN108345551B CN108345551B (zh) | 2020-05-12 |
Family
ID=62974380
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710050677.XA Active CN108345551B (zh) | 2017-01-23 | 2017-01-23 | 一种存储数据的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108345551B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110865952A (zh) * | 2018-08-28 | 2020-03-06 | 上海天王星智能科技有限公司 | 利用缓存优化dma传输 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1582989A1 (en) * | 2004-04-02 | 2005-10-05 | Matsushita Electric Industrial Co., Ltd. | Data transfer processing device and data transfer processing method |
CN1882927A (zh) * | 2003-11-25 | 2006-12-20 | 英特尔公司 | 追踪数据流处理器的进展 |
CN101876956A (zh) * | 2009-12-15 | 2010-11-03 | 北京中星微电子有限公司 | Sd卡的文件存取方法及装置 |
CN103635887A (zh) * | 2013-09-23 | 2014-03-12 | 华为技术有限公司 | 缓存数据的方法和存储系统 |
-
2017
- 2017-01-23 CN CN201710050677.XA patent/CN108345551B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1882927A (zh) * | 2003-11-25 | 2006-12-20 | 英特尔公司 | 追踪数据流处理器的进展 |
EP1582989A1 (en) * | 2004-04-02 | 2005-10-05 | Matsushita Electric Industrial Co., Ltd. | Data transfer processing device and data transfer processing method |
CN101876956A (zh) * | 2009-12-15 | 2010-11-03 | 北京中星微电子有限公司 | Sd卡的文件存取方法及装置 |
CN103635887A (zh) * | 2013-09-23 | 2014-03-12 | 华为技术有限公司 | 缓存数据的方法和存储系统 |
Non-Patent Citations (1)
Title |
---|
刘波文 编著: "《轻松玩转ARM Coreex-M3微控制器—基于LPC1788系列》", 31 January 2015 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110865952A (zh) * | 2018-08-28 | 2020-03-06 | 上海天王星智能科技有限公司 | 利用缓存优化dma传输 |
CN110865952B (zh) * | 2018-08-28 | 2022-07-29 | 上海忆芯实业有限公司 | 利用缓存优化dma传输 |
Also Published As
Publication number | Publication date |
---|---|
CN108345551B (zh) | 2020-05-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8938603B2 (en) | Cache system optimized for cache miss detection | |
CN105205014B (zh) | 一种数据存储方法和装置 | |
US20170262372A1 (en) | Cache Memory System and Method for Accessing Cache Line | |
CN109614377A (zh) | 分布式文件系统的文件删除方法、装置、设备及存储介质 | |
JP6401512B2 (ja) | キャッシュメモリシステム及びその動作方法 | |
JP6269257B2 (ja) | 情報処理装置、情報処理システム、情報処理装置の制御プログラム、および情報処理装置の制御方法 | |
CN113641596B (zh) | 缓存管理方法、缓存管理装置、处理器 | |
CN108984130A (zh) | 一种分布式存储的缓存读取方法及其装置 | |
CN110209493A (zh) | 内存管理方法、装置、电子设备及存储介质 | |
CN106708749B (zh) | 一种数据查找方法 | |
CN103645873B (zh) | 一种在趋势曲线系统中实现高效数据缓存的方法 | |
CN105359142B (zh) | 哈希连接方法和装置 | |
CN109558348A (zh) | 数据搬移方法、装置及系统 | |
CN113900974A (zh) | 一种存储装置、数据存储方法及相关设备 | |
JP2008234320A (ja) | キャッシュ制御回路 | |
CN108345551A (zh) | 一种存储数据的方法及装置 | |
CN101783814A (zh) | 海量存储系统的元数据存储方法 | |
CN110515860A (zh) | 一种内存中存储数据的地址标识方法、系统及装置 | |
CN109671127B (zh) | 一种实现波形绘制的方法及装置 | |
CN116955222A (zh) | 智能预取缓冲器和队列管理 | |
JPS61209485A (ja) | 画像表示装置 | |
CN109783006A (zh) | 计算系统及操作计算系统的方法 | |
JP2009199367A (ja) | 計算機システム、i/oスケジューラ及びi/oスケジューリング方法 | |
JP5505195B2 (ja) | メモリの制御装置、及び制御方法 | |
CN116048377A (zh) | 固态硬盘的数据处理方法及相关设备 |
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 |