一种Scatter-Gather DMA的数据传输方法及装置制造方法及图纸

技术编号:20622243 阅读:36 留言:0更新日期:2019-03-20 14:17
本发明专利技术公开了一种SG DMA的数据传输方法,包括:以数组形式创建SG DMA数据传输链表一和链表二并且创建第一组缓冲区和第二组缓冲区;通过CPU将用户空间数据拷贝入第一组缓冲区、将链表一的地址写入IO设备;在启动SG DMA数据传输的同时通过CPU将用户空间数据拷贝入第二组缓冲区;创建中断处理程序,待SG DMA传输完成后,CPU接收SG DMA发送的传输完成中断指令将链表二的地址写入IO设备;依次循环直到用户空间数据完全写入IO设备内存位置。本发明专利技术还公开了一种SG DMA的数据传输装置。该方法和装置解决了CPU同DMA无法同时参与数据传输的问题,提高数据在DMA传输时的效率。

A Data Transfer Method and Device for Scatter-Gather DMA

The invention discloses a data transmission method of SG DMA, which includes: creating the link list 1 and the link list 2 of SG DMA data transmission in array form and creating the first buffer and the second buffer; copying user space data into the first buffer through CPU, writing the address of link list 1 into IO device; and copying user space data through CPU while starting SG DMA data transmission. Becks into the second buffer; creates an interrupt handler, and when the SG DMA transmission is completed, the CPU receives the transmission completion interrupt instruction sent by SG DMA and writes the address of Chain 2 to the IO device; then circulates until the user space data is completely written to the memory location of the IO device. The invention also discloses a data transmission device of SG DMA. This method and device solve the problem that CPU and DMA can not participate in data transmission at the same time, and improve the efficiency of data transmission in DMA.

【技术实现步骤摘要】
一种Scatter-GatherDMA的数据传输方法及装置
本专利技术涉及计算机数据传输领域,并且更具体地,特别是指一种Scatter-GatherDMA的数据传输方法及装置。
技术介绍
DMA(DirectMemoryAccess),即直接存储器存取,是一种快速传送数据的机制。数据传递可以从IO设备到内存,从内存到IO设备或从一段内存到另一段内存。利用它进行数据传送时不需要CPU的参与。每台电脑主机板上都有DMA控制器,通常计算机对其编程,并用一个适配器上的ROM(如软盘驱动控制器上的ROM)来储存程序,这些程序控制DMA传送数据。一旦控制器初始化完成,数据开始传送,DMA就可以脱离CPU,独立完成数据传送。Scatter-gatherDMA(SGDMA,分散-收集DMA)方式是与blockDMA方式相对应的一种DMA方式。在DMA传输数据的过程中,要求源物理地址和目标物理地址必须是连续的。但是在某些计算机体系中连续的存储器地址在物理上不一定是连续的,所以DMA传输要分成多次完成。如果在传输完一块物理上连续的数据后引起一次中断,然后再由主机进行下一块物理上连续的数据传输,那么这种方式就为blockDMA方式。Scatter-gatherDMA方式则不同,它使用一个链表描述物理上不连续的存储空间,然后把链表首地址告诉DMAmaster。DMAmaster在传输完一块物理连续的数据后,不用发起中断,而是根据链表来传输下一块物理上连续的数据,直到传输完毕后再发起一次中断。scatter-gatherDMA方式比blockDMA方式效率高。通常使用scatter-gatherDMA数据发送流程如图1所示,首先创建SGDMA数据传输链表,然后驱动程序在内核空间创建一组物理地址不连续的缓冲区,并将缓冲区的物理地址填入数据传输链表的节点中,CPU需要将用户空间的数据通过memcpy拷贝如内核空间缓冲区,将链表地址写入设备DMA寄存器,启动DMA传输,DMA开始数据传输,并在传输完成后发送中断,中断处理程序进行下一次的数据传输。这种传输方式数据从用户空间到内存空间的数据拷贝同内存空间数据通过DMA到设备是串行传输,CPU同DMA无法同时参与数据传输工作,这样数据造成无法充分利用DMA的数据传输带宽。现有技术中尚未披露一种SGDMA的数据传输方法及装置,该方法和装置通过创建两个SGDMA数据传输链表和两组内核空间缓冲区,在SGDMA传输数据的同时通过CPU将用户空间数据拷贝入缓冲区实现用户空间到内核空间、内核空间到IO设备空间的并行数据传输,解决了CPU同DMA无法同时参与数据传输的问题,提高数据在DMA传输时的效率。
技术实现思路
有鉴于此,本专利技术实施例的目的在于提出一种SGDMA的数据传输方法及装置,该方法和装置通过创建两个SGDMA数据传输链表和两组内核空间缓冲区,在SGDMA传输数据的同时通过CPU将用户空间数据拷贝入缓冲区实现用户空间到内核空间、内核空间到IO设备空间的并行数据传输,解决了CPU同DMA无法同时参与数据传输的问题,提高数据在DMA传输时的效率。基于上述目的,本专利技术实施例的一方面提供了一种SGDMA的数据传输方法,包括:1)以数组形式创建SGDMA数据传输链表一和链表二并且在内核空间中创建第一组缓冲区和第二组缓冲区;2)通过CPU将用户空间数据拷贝入第一组缓冲区并将链表一的地址写入IO设备;3)启动SGDMA数据传输,并通过CPU将另外的用户空间数据拷贝入第二组缓冲区;4)待SGDMA传输完成后,CPU将链表二的地址写入IO设备;5)启动进一步的SGDMA数据传输,并通过CPU将进一步的用户空间数据拷贝入第一组缓冲区,待进一步的SGDMA传输完成后,CPU将链表一的地址写入IO设备并且重复步骤3)到5)直到用户空间数据完全写入IO设备内存位置。在一些实施方式中,在内核空间中创建第一组缓冲区和第二组缓冲区包括每个链表对应一组内核空间缓冲区。在一些实施方式中,缓冲区数量对应链表节点数。在一些实施方式中,每个链表节点包括一个连续的物理缓冲区的物理地址。在一些实施方式中,内核空间缓冲区被配置为物理地址不连续的内核空间缓冲区。在一些实施方式中,启动SGDMA数据传输,并通过CPU将另外的用户空间数据拷贝入第二组缓冲区包括:判断当前传输的是第几组数据并基于此传递之前未被传输的用户空间数据。在一些实施方式中,待SGDMA传输完成后,CPU将链表二的地址写入IO设备包括:CPU响应于接收到SGDMA设备发送的数据传输中断信号将链表二的地址写入IO设备。在一些实施方式中,数据传输包括用户空间到内核空间、内核空间到IO设备空间的并行数据传输。在一些实施方式中,将链表一或链表二的地址写入IO设备包括将链表一或链表二地址写入IO设备的SGDMA寄存器。本专利技术实施例的另一方面,还提供了一种SGDMA的数据传输装置,包括:处理器;存储器,该存储器存储有所述处理器可执行的指令,该处理器在执行所述指令时实现上述方法。本专利技术具有以下有益技术效果:本专利技术实施例提供的一种SGDMA的数据传输方法及装置,通过创建两个SGDMA数据传输链表和两组内核空间缓冲区,在SGDMA传输数据的同时通过CPU将用户空间数据拷贝入缓冲区实现用户空间到内核空间、内核空间到IO设备空间的并行数据传输,解决了CPU同DMA无法同时参与数据传输的问题,提高数据在DMA传输时的效率。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为现有技术中SGDMA的数据传输的流程示意图;图2为本专利技术提供的SGDMA的数据传输方法的流程示意图。具体实施方式为使本专利技术的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本专利技术实施例进一步详细说明。需要说明的是,本专利技术实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称非相同的实体或者非相同的参量,可见“第一”“第二”仅为了表述的方便,不应理解为对本专利技术实施例的限定,后续实施例对此不再一一说明。基于上述目的,本专利技术实施例的第一个方面,提出了一种SGDMA的数据传输方法的实施例。图2示出的是本专利技术提供的SGDMA的数据传输方法的实施例的流程示意图。一种SGDMA的数据传输方法,可选地,包括以下步骤:步骤S201,以数组形式创建SGDMA数据传输链表一和链表二并且在内核空间中创建第一组缓冲区和第二组缓冲区;步骤S202,通过CPU将用户空间数据拷贝入第一组缓冲区并将链表一的地址写入IO设备;步骤S203,启动SGDMA数据传输,并通过CPU将另外的用户空间数据拷贝入第二组缓冲区;步骤S204,待SGDMA传输完成后,CPU将链表二的地址写入IO设备;步骤S205,启动进一步的SGDMA数据传输,并通过CPU将进一步的用户空间数据拷贝入第一组缓冲区,待进一步的SGDMA传输完成后,CPU将链表一的地址写入IO设备并且重复步骤3)到5)直到用户空间数据完全写入IO设备内存位置。如图2本文档来自技高网
...

【技术保护点】
1.一种SG DMA的数据传输方法,其特征在于,包括以下步骤:1)以数组形式创建SG DMA数据传输链表一和链表二并且在内核空间中创建第一组缓冲区和第二组缓冲区;2)通过CPU将用户空间数据拷贝入第一组缓冲区并将链表一的地址写入IO设备;3)启动SG DMA数据传输,并通过CPU将另外的用户空间数据拷贝入第二组缓冲区;4)待SG DMA传输完成后,CPU将链表二的地址写入IO设备;5)启动进一步的SG DMA数据传输,并通过CPU将进一步的用户空间数据拷贝入第一组缓冲区,待进一步的SG DMA传输完成后,CPU将链表一的地址写入IO设备并且重复步骤3)到5)直到用户空间数据完全写入IO设备内存位置。

【技术特征摘要】
1.一种SGDMA的数据传输方法,其特征在于,包括以下步骤:1)以数组形式创建SGDMA数据传输链表一和链表二并且在内核空间中创建第一组缓冲区和第二组缓冲区;2)通过CPU将用户空间数据拷贝入第一组缓冲区并将链表一的地址写入IO设备;3)启动SGDMA数据传输,并通过CPU将另外的用户空间数据拷贝入第二组缓冲区;4)待SGDMA传输完成后,CPU将链表二的地址写入IO设备;5)启动进一步的SGDMA数据传输,并通过CPU将进一步的用户空间数据拷贝入第一组缓冲区,待进一步的SGDMA传输完成后,CPU将链表一的地址写入IO设备并且重复步骤3)到5)直到用户空间数据完全写入IO设备内存位置。2.根据权利要求1所述的方法,其特征在于,在内核空间中创建第一组缓冲区和第二组缓冲区包括每个链表对应一组内核空间缓冲区。3.根据权利要求2所述的方法,其特征在于,缓冲区数量对应链表节点数。4.根据权利要求3所述的方法,其特征在于,每个链表节点包括一个连续的物理缓冲区的物理地址。...

【专利技术属性】
技术研发人员:赵瑞东王朝晖陈亮甫贾国强
申请(专利权)人:山东超越数控电子股份有限公司
类型:发明
国别省市:山东,37

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1