一种Scatter-GatherDMA的数据传输缓冲区设计方法与流程

文档序号:16608513发布日期:2019-01-14 21:21阅读:1600来源:国知局
一种Scatter-Gather DMA的数据传输缓冲区设计方法与流程

本发明公开一种数据传输缓冲区设计方法,涉及数据传输技术领域,具体地说是一种scatter-gatherdma的数据传输缓冲区设计方法。



背景技术:

dma(directmemoryaccess),即直接存储器存取,是一种快速传送数据的机制。数据传递可以从io设备到内存,从内存到io设备或从一段内存到另一段内存。利用它进行数据传送时不需要cpu的参与。每台电脑主机板上都有dma控制器,通常计算机对其编程,并用一个适配器上的rom(如软盘驱动控制器上的rom)来储存程序,这些程序控制dma传送数据。一旦控制器初始化完成,数据开始传送,dma就可以脱离cpu,独立完成数据传送。

scatter-gatherdma方式是与blockdma方式相对应的一种dma方式。在dma传输数据的过程中,要求源物理地址和目标物理地址必须是连续的。但是在某些计算机体系中连续的存储器地址在物理上不一定是连续的,所以dma传输要分成多次完成。如果在传输完一块物理上连续的数据后引起一次中断,然后再由主机进行下一块物理上连续的数据传输,那么这种方式就为blockdma方式。scatter-gatherdma方式则不同,它使用一个链表描述物理上不连续的存储空间,然后把链表首地址告诉dmamaster。dmamaster在传输完一块物理连续的数据后,不用发起中断,而是根据链表来传输下一块物理上连续的数据,直到传输完毕后再发起一次中断。scatter-gatherdma方式比blockdma方式效率高。

通常使用scatter-gatherdma数据发送流程,首先创建sgdma数据传输链表,然后驱动程序在内核空间创建一组物理地址不连续的缓冲区,并将缓冲区的物理地址填入数据传输链表的节点中,cpu需要将用户空间的数据通过memcpy拷贝如内核空间缓冲区,将链表地址写入设备dma寄存器,启动dma传输,dma开始数据传输,并在传输完成后发送中断,中断处理程序进行下一次的数据传输。这种传输方式数据从用户空间到内存空间的数据拷贝同内存空间数据通过dma到设备是串行传输,cpu同dma无法同时参与数据传输工作,造成数据无法充分利用dma的数据传输带宽。基于上述情况,本发明提供一种scatter-gatherdma的数据传输缓冲区设计方法,在使用scatter-gatherdma进行计算机主存到io设备间的数据传输时,实现用户空间到内核空间、内核空间到io设备空间的并行数据传输,提高数据在dma传输时的效率。



技术实现要素:

本发明针对现有技术存在的不足和问题,提供一种scatter-gatherdma的数据传输缓冲区设计方法,

本发明提出的具体方案是:

一种scatter-gatherdma的数据传输缓冲区设计方法,使用scatter-gatherdma进行数据传输时,创建两个scatter-gatherdma链表,并将两个scatter-gatherdma链表分别指向两组内核空间缓冲区,每组内核空间缓冲区的数量对应相应的scatter-gatherdma链表节点数,

用户空间数据拷贝到一组内核空间缓冲区并进行dma传输的同时,利用cpu将下次需传输的用户空间数据拷贝入另一组内核空间缓冲区,当上一次dma传输完成,利用中断处理程序启动下一次dma传输,直至将用户空间数据完全写入设备。

所述的方法中中断处理程序判断当前完成传输的是第几组数据,再将另一组内核空间缓冲区对应的链表地址告知设备,并启动下一次dma传输。

所述的方法中进行dma传输的具体过程为:先将用户空间数据拷贝入第一组内核空间缓冲区,将第一组内核空间缓冲区对应的scatter-gatherdma链表的地址告知设备,开始dma传输,

在dma传输的同时,cpu将下次需传输的用户空间数据拷贝入第二组内核空间缓冲区,当dma传输完成,设备发送传输完成中断之后,中断处理程序则将第二个scatter-gatherdma链表地址告知设备,并启动dma传输,直至将用户空间数据完全写入设备。

所述的方法中具体步骤为:

创建两个scatter-gatherdma链表,并将两个scatter-gatherdma链表分别指向两组内核空间缓冲区,两组内核空间缓冲区的物理地址不连续,每组内核空间缓冲区的数量对应相应的scatter-gatherdma链表节点数,并将两组内核空间缓冲区的物理地址分别填入相应的scatter-gatherdma链表节点中,

先将用户空间数据拷贝入第一组内核空间缓冲区,将第一组内核空间缓冲区对应的scatter-gatherdma链表的地址告知设备,开始dma传输,

在dma传输的同时,cpu将下次需传输的用户空间数据拷贝入第二组内核空间缓冲区,当dma传输完成,设备发送传输完成中断之后,中断处理程序则将第二个scatter-gatherdma链表地址告知设备,并启动dma传输,直至将用户空间数据完全写入设备。

本发明的有益之处是:

本发明提供一种scatter-gatherdma的数据传输缓冲区设计方法,创建两个scatter-gatherdma链表,并将两个scatter-gatherdma链表分别指向两组内核空间缓冲区,每组内核空间缓冲区的数量对应相应的scatter-gatherdma链表节点数,

用户空间数据拷贝到一组内核空间缓冲区并进行dma传输的同时,利用cpu将下次需传输的用户空间数据拷贝入另一组内核空间缓冲区,当上一次dma传输完成,利用中断处理程序启动下一次dma传输,直至将用户空间数据完全写入设备;利用本发明在使用scatter-gatherdma进行计算机主存到io设备间的数据传输时,cpu与dma同时参与数据传输工作,数据可以充分利用dma的数据传输带宽,实现用户空间到内核空间、内核空间到io设备空间的并行数据传输,提高数据在dma传输时的效率。

附图说明

图1本发明方法流程示意图。

具体实施方式

本发明提供一种scatter-gatherdma的数据传输缓冲区设计方法,使用scatter-gatherdma进行数据传输时,创建两个scatter-gatherdma链表,并将两个scatter-gatherdma链表分别指向两组内核空间缓冲区,每组内核空间缓冲区的数量对应相应的scatter-gatherdma链表节点数,

用户空间数据拷贝到一组内核空间缓冲区并进行dma传输的同时,利用cpu将下次需传输的用户空间数据拷贝入另一组内核空间缓冲区,当上一次dma传输完成,利用中断处理程序启动下一次dma传输,直至将用户空间数据完全写入设备。

利用本发明方法在在使用scatter-gatherdma进行计算机主存到io设备间的数据传输时,创建两个scatter-gatherdma链表,并将两个scatter-gatherdma链表分别指向两组内核空间缓冲区,两组内核空间缓冲区的物理地址不连续,每组内核空间缓冲区的数量对应相应的scatter-gatherdma链表节点数,并将两组内核空间缓冲区的物理地址分别填入相应的scatter-gatherdma链表节点中,

先将用户空间数据拷贝入第一组内核空间缓冲区,将第一组内核空间缓冲区对应的scatter-gatherdma链表的地址告知设备,开始dma传输,

在dma传输的同时,cpu将下次需传输的用户空间数据拷贝入第二组内核空间缓冲区,当dma传输完成,设备发送传输完成中断之后,中断处理程序则将第二个scatter-gatherdma链表地址告知设备,并启动dma传输,直至将用户空间数据完全写入设备。

利用上述本发明方法,实现用户空间到内核空间、内核空间到io设备空间的并行数据传输,提高数据在dma传输时的效率。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1