一种DMA数据传输方法及系统与流程

文档序号:18102104发布日期:2019-07-06 11:25阅读:777来源:国知局
一种DMA数据传输方法及系统与流程

本发明涉及数据处理领域,具体地涉及一种dma数据传输方法以及一种dma数据传输系统。



背景技术:

dma(directmemoryaccess,直接内存存取)数据传输可以以两种方式触发,一种是在驱动程序中请求,另外一种是硬件异步传输。第一种方式是主动的,一般情况是由驱动程序指示dma控制器,从给定的dma缓冲区中传输数据,传输是主动的,传输完成后,会产生中断,告诉操作系统,传输完毕。第二种是被动方式,为某个具体的外设分配一个dma缓冲区,然后在数据缓冲区填满的时候,产生中断告诉操作系统,可以进行传输了。

现有技术中,dma数据传输都是dma控制器通过系统总线,例如ht总线(hypertransport,端对端总线技术)控制外设与cpu(centralprocessingunit,主处理器)的主内存进行数据传输的。

但是,系统总线总是处于被cpu占用的状态,进行dma传输时需要dma控制器向cpu频繁地申请系统总线的使用周期;因此对于千兆网卡、ehci(enhancedhostcontrollerinterface,增强型主机控制器接口)等高速外设而言,上述系统总线会制约dma数据传输的性能。



技术实现要素:

鉴于上述问题,提出了本发明实施例以便提供一种克服上述问题或者至少部分地解决上述问题的一种dma数据传输方法及系统,以提高dma数据传输的性能。

相应的,本发明实施例还提供了一种dma数据传输系统,用以保证上述方法的实现及应用。

为了解决上述问题,本发明实施例公开了一种dma数据传输方法,所述方法应用于主板,所述主板包括主处理器、主内存、系统总线、桥片、桥片内存、dma控制器、外设;所述主内存、所述桥片分别通过所述系统总线与所述主处理器连接;所述桥片内存、所述dma控制器、所述外设分别与所述桥片连接;所述方法包括:

当检测到针对所述外设的数据传输请求时,将预设的所述桥片内存的物理地址空间分配为针对所述外设的dma缓冲区;所述桥片内存的物理地址空间与所述主内存中存储的内核的虚拟地址空间已建立映射;

获取所述外设的存储地址空间,以及与所述dma缓冲区对应的内核的虚拟地址空间;

调用所述dma控制器,通过所述外设的存储地址空间、所述内核的虚拟地址空间,控制所述外设与所述桥片内存之间的数据传输。

可选地,所述将预设的所述桥片内存的物理地址空间分配为针对所述外设的dma缓冲区,包括:

将预设的所述桥片内存的物理地址空间声明为针对所述外设的dma缓冲区;所述桥片内存的物理地址空间与所述主内存中存储的内核的虚拟地址空间已建立映射;

采用一致性dma映射函数,为所述外设分配所述dma缓冲区。

可选地,在所述当检测到针对所述外设的数据传输请求时,将预设的所述桥片内存的物理地址空间分配为针对所述数据传输请求的dma缓冲区的步骤之前,所述方法还包括:

建立所述桥片内存的物理地址空间与所述内核的虚拟地址空间之间的映射。

可选地,所述建立所述桥片内存的物理地址空间与所述内核的虚拟地址空间之间的映射的步骤,包括:

建立所述桥片内存中显存对应的物理地址空间与所述内核的虚拟地址空间之间的映射。

可选地,所述方法还包括:

释放所述dma缓冲区。

本发明实施例还公开了一种dma数据传输系统,所述系统应用于主板,所述主板包括主处理器、主内存、系统总线、桥片、桥片内存、dma控制器、外设;所述主内存、所述桥片分别通过所述系统总线与所述主处理器连接;所述桥片内存、所述dma控制器、所述外设分别与所述桥片连接;所述系统包括:

分配模块,用于当检测到针对所述外设的数据传输请求时,将预设的所述桥片内存的物理地址空间分配为针对所述外设的dma缓冲区;所述桥片内存的物理地址空间与所述主内存中存储的内核的虚拟地址空间已建立映射;

获取模块,用于获取所述外设的存储地址空间,以及与所述dma缓冲区对应的内核的虚拟地址空间;

控制模块,用于调用所述dma控制器,通过所述外设的存储地址空间、所述内核的虚拟地址空间,控制所述外设与所述桥片内存之间的数据传输。

可选地,所述分配模块包括:

声明单元,用于将预设的所述桥片内存的物理地址空间声明为针对所述外设的dma缓冲区;所述桥片内存的物理地址空间与所述主内存中存储的内核的虚拟地址空间已建立映射;

分配单元,用于采用一致性dma映射函数,为所述外设分配所述dma缓冲区。

可选地,所述系统还包括:

映射模块,用于建立所述桥片内存的物理地址空间与所述内核的虚拟地址空间之间的映射。

可选地,所述映射模块包括:

显存复用映射单元,用于建立所述桥片内存中显存对应的物理地址空间与所述内核的虚拟地址空间之间的映射。

可选地,所述系统还包括:

释放模块,用于释放所述dma缓冲区。

本发明实施例还公开了一种可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行一个或多个所述的dma数据传输方法。

本发明实施例包括以下优点:

本发明实施例应用于上述主板中的外设与桥片内存之间的dma数据传输,通过预先建立内核的虚拟地址空间与桥片内存的物理地址空间的映射;在进行数据传输前,将与上述物理地址空间对应的虚拟地址空间分配为dma缓冲区;从而通过dma控制器控制上述外设与上述桥片内存之间的dma数据传输;整个dma传输过程是通过桥片(具有总线功能,相当于片内总线)进行传输的,而不通过系统总线,因此避免了上述系统总线制约dma数据传输的问题,提高了dma数据传输的性能。

附图说明

图1是本发明的一种dma数据传输方法适用的主板的示意图;

图2是本发明的一种dma数据传输方法适用的主板的桥片结构的示意图;

图3是本发明的一种dma数据传输方法实施例的步骤流程图;

图4是本发明的另一种dma数据传输方法实施例的步骤流程图;

图5是本发明的一种dma数据传输系统实施例的结构框图。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。

参照图1上述,示出了本发明实施例适用的主板的示意图;其中,上述主板至少包括主处理器101、主内存102、系统总线103、桥片104、桥片内存105、dma控制器106、外设107;上述主内存102、上述桥片104分别通过上述系统总线103与上述主处理器101连接;上述桥片内存105、上述dma控制器106、上述外设107分别与上述桥片104连接。

外设是指连在计算机主机以外的硬件设备,对数据和信息起着传输、转送和存储的作用,是计算机系统中的重要组成部分;常见的外设有硬盘、网卡、usb闪存盘等。

上述桥片具有总线功能;示例性地,参照图2所示的一种桥片结构,其中,桥片可以包括处理器节点202以及多级总线结构203(片内总线);上述处理器节点202可以通过ht总线201与主处理器连接;上述多级总线结构203分别连接处理器节点202、桥片内存204、dma控制器205外设usb(universalserialbus,通用串行总线)接口206等;当然,上述多级总线结构203还可以连接图像处理器、各类接口,以及网卡、硬盘等其它外设,这里不再赘述。

本发明实施例的核心构思之一在于,针对上述的主板,通过预先建立内核的虚拟地址空间与桥片内存的物理地址空间的映射;在进行数据传输前,将与上述物理地址空间对应的虚拟地址空间分配为dma缓冲区;从而通过dma控制器控制上述外设与上述桥片内存之间的dma数据传输;整个dma传输过程是通过桥片(具有总线功能,相当于片内总线)进行传输的,而不通过系统总线,因此可以避免上述系统总线制约dma数据传输的问题,进而提高传输性能。

参照图3所示,本发明实施例提供一种应用于图1所示的主板中的一种dma数据传输方法,上述方法具体可以包括步骤301-303:

步骤301:当检测到针对上述外设的数据传输请求时,将预设的上述桥片内存的物理地址空间分配为针对上述外设的dma缓冲区;上述桥片内存的物理地址空间与上述主内存中存储的内核的虚拟地址空间已建立映射。

上述主内存中存储有内核,如针对linux操作系统的linux内核、针对windows操作系统的windows内核等。示例性地,对于32位的linux内核的逻辑地址空间划分0-3g为用户空间,3-4g为内核地址空间;即内核的虚拟地址空间,为0xc0000000-0xffffffff的1g大小;示例性地,对于64位的windows操作系统,内核的虚拟地址空间可以为0xffff0000`00000000~0xffffffff`ffffffff的256t大小。

示例性地,对于64位的操作系统和1g的桥片内存而言,可以将0xffff0000`00000000-0xffff0000`0fffffff中的256m虚拟地址空间与桥片内存中的0xf0000000~0xffffffff中的256m的物理地址空间建立一一映射。上述建立映射的256m空间大小可以根据实际需要进行设定,需要小于桥片内存的总大小。

上述桥片内存中用于与上述外设交互数据的一块区域被称作dma缓冲区。

示例性地,当进程调用read函数时,可以检测到外部设备的驱动程序的数据传输请求;示例性地,当dma被异步使用时,dma控制器会发出中断来通知新的数据到达,即数据传输请求;此时都需要分配一个dma缓冲区来进行dma数据传输。其中,read函数用于从文件或设备中读取数据。

示例性地,可以通过dma映射函数,将预设的上述桥片内存的物理地址空间分配为针对上述外设的dma缓冲区;在本发明实施例中,可以采用一致性映射,也可以采用流式映射,或者其它映射方式;这里不再赘述。

一个dma映射可以理解为分配一个dma缓冲区并为该缓冲区生成一个能够被访问的地址的组合操作。

步骤302:获取上述外设的存储地址空间,以及与上述dma缓冲区对应的内核的虚拟地址空间。

在本发明实施例中,因为在dma数据传输过程中,相关程序不能直接访问dma缓冲区对应的内存的物理地址,因此获取上述dma缓冲区对应的内核的虚拟地址空间。

当从外设向桥片内存中写入数据时,需要获知外设的存储地址空间(对应源地址)以及与上述dma缓冲区对应的内核的虚拟地址空间(对应目标地址)。

步骤303:调用上述dma控制器,通过上述外设的存储地址空间、上述内核的虚拟地址空间,控制上述外设与上述桥片内存之间的数据传输。

在进行dma传输前,可以进行传送前的预处理,即由主处理器配置dma控制器的相关寄存器;然后由dma控制器控制数据从源地址到目标地址的传输,例如从上述外设的存储地址空间向上述虚拟地址空间(实际映射到桥片内存的物理地址空间)进行传输;并在传送结束后,发送中断请求。

对于dma数据传输,示例性地,需要确定数据传输的源地址、目标地址,还可能涉及到和数据长度、传输通道选择、数据传输模式等。

示例性地,dma控制器可以为一个基于axi总线(advancedextensibleinterface,amba(advancedmicrocontrollerbusarchitecture,数据突发传输)片内总线协议的一部分)的单通道、可配置的dma控制芯片。

需要说明的是,在调用上述dma控制器时,上述dma控制器可以通过获取内核返回的与上述内核的虚拟地址空间对应的片内总线地址,来对上述桥片内存进行访问;可以通过获取预设的所述外设的片内总线地址,来对上述外设进行访问。上述虚拟地址空间对应的片内总线地址与上述虚拟地址空间对应的物理地址空间之间存在预设的对应关系,这与不同的系统架构相关。

dma控制器可以包括但不限于内存地址寄存器、外设地址寄存器、数据传输计数器等。

dma控制器从源地址传输数据到目标地址,还可以通过dma控制器内部的寄存器或fifo作缓存。

需要说明的是,在每次读取和写入之后,都需要更新源起始地址为下一次读取的源起始地址;以及将目标起始地址更新为下一次写入的目标起始地址。具体实现中,可以由数据传输计数器和地址寄存器完成次数更新操作,例如,每读取或写入一个数据,地址寄存器加1,从而得到下一个地址,与此同时,数据传输计数器则减1;如此循环,直至数据传输计数器的值为0,表示数据传输完毕。

需要说明的是,当从外设向桥片内存中写入数据时,上述外设地址寄存器可以用于存储上述源起始地址,即在外设的存储空间中需要读取的起始地址;上述内存地址寄存器可以用于存储上述目标起始地址,即上述dma缓冲区中写入的起始地址,对应于桥片内存中需要写入的物理地址。

示例性地,在进程调用read函数时,驱动程序分配一个dma缓冲区,指示dma控制器传输;dma控制器控制数据写入dma缓冲区中,完成时产生一个中断;中断处理程序获得写入的数据,应答中断,唤醒上述进程读取数据。

示例性地,dma控制器发出中断来通知新的数据到达;中断处理程序分配一个dma缓冲区;从外设的存储地址空间中读取数据写入dma缓冲区,完成时发出另一个中断;中断处理程序利用dma控制器分发新的数据,唤醒相关进程读取数据。

示例性地,在本发明实施例中,也可以在填满上述dma缓冲区时产生中断。

在本发明实施例中,因为不需要使用系统总线,因此可以采用数据块传输方式,dma控制器可以始终占用片内总线,直到数据传输结束。

本发明实施例应用于上述主板中的外设与桥片内存之间的dma数据传输,通过预先建立内核的虚拟地址空间与桥片内存的物理地址空间的映射;在进行数据传输前,将与上述物理地址空间对应的虚拟地址空间分配为dma缓冲区;从而通过dma控制器控制上述外设与上述桥片内存之间的dma数据传输;整个dma传输过程是通过桥片(具有总线功能,相当于片内总线)进行传输的,而不通过系统总线,因此避免了上述系统总线制约dma数据传输的问题,提高了dma数据传输的性能。

参照图4所示,本发明实施例提供一种应用于图1所示的主板中的一种dma数据传输方法,上述方法应用于主板,上述主板包括主处理器、主内存、系统总线、桥片、桥片内存、dma控制器、外设;上述主内存、上述桥片分别通过上述系统总线与上述主处理器连接;上述桥片内存、上述dma控制器、上述外设分别与上述桥片连接;上述方法具体可以包括步骤401-406:

步骤401:建立上述桥片内存的物理地址空间与上述内核的虚拟地址空间之间的映射。

在本发明实例中,可以通过bios(basicinputoutputsystem,基本输入输出系统)或者pmon(prommonitor)来建立上述桥片内存的物理地址空间与上述内核的虚拟地址空间之间的映射;其中pmon多用于嵌入式系统,作为基本硬件输入输出系统,兼有bios部分功能。

在本发明实施例中,上述内核的虚拟地址空间可以为内核高地址空间,即逻辑地址不存在的内存对应的虚拟地址空间。

可选地,上述建立上述桥片内存的物理地址空间与上述内核的虚拟地址空间之间的映射的步骤401,可以包括:建立上述桥片内存中显存对应的物理地址空间与上述内核的虚拟地址空间之间的映射。

上述桥片内存的物理地址空间可以为未声明过的,也可以是声明过的物理地址空间;例如,可以为声明作为显存的物理地址空间;可以通过显存复用提高桥片内存的资源利用率。

步骤402:将预设的上述桥片内存的物理地址空间声明为针对上述外设的dma缓冲区;上述桥片内存的物理地址空间与上述主内存中存储的内核的虚拟地址空间已建立映射。

上述内存声明过程主要包括:

1、根据上述桥片内存的物理地址空间,查找预设大小的一块空闲的内存空间(要大于等于上述dma缓冲区的大小,小于等于上述物理地址空间的大小),具体可以查找获得上述内存空间的内存页的首地址(虚拟地址);

2、根据上述内存空间,例如上述内存空间的内存页的首地址,在内存分配子系统里设置上述内存空间与上述外设标识的对应关系,那么这段内存空间就在系统里被声明成给上述外设标识对应的外设的内存空间了,即dma缓冲区。

示例性地,可以使用linux内核提供的函数执行上述声明过程,如下:

dma_declare_coherent_memory(structdevice*dev,dma_addr_tbus_addr,dma_addr_tdevice_addr,size_tsize,intflags);

以此将步骤401中建立映射的一段桥片内存的物理地址空间声明为上述外设的内存空间,作为dma缓冲区;其中,第一个参数为外设标识;第二个参数为片内总线地址(与上述物理地址空间对应,也可以输入为0);第三个参数为上述物理地址空间;第四个参数为声明的内存空间的大小,至少为dma缓冲区的大小;第五个参数为内存类型。

上述dma_declare_coherent_memory函数可以调用dma_init_coherent_memory(dma_addr_tbus_addr,dma_addr_tdevice_addr,size_tsize,intflags,

structdma_coherent_mem**mem),其中,需要输入的参数为上述片内总线地址,上述物理地址空间,上述声明的内存空间的大小,以及上述内存类型;并将查找的内存空间的内存页的首地址(虚地址)输出在上述mem变量里;

然后调用dma_assign_coherent_memory(dev,mem)函数,将述mem变量中的内存页的首地址,在内存分配子系统里设置好,那么这段内存空间就在系统里被声明成给与上述外设标识dev对应的外设的内存空间了。步骤403:采用一致性dma映射函数,为上述外设分配上述dma缓冲区。

上述内存分配过程主要包括:在上述外设对应的内存空间中,即上述已声明的内存空间中,根据上述dma缓冲区大小,寻找一块相应大小的空闲的内存空间分配给dma缓冲区。

示例性地,可以使用一致性dma映射的方式的内存分配函数,如下:

dma_alloc_coherent(structdevice*dev,size_tsize,dma_addr_t*dma_handle,gfp_tflag);

以此完成内存分配,为该dma缓冲区生成一个能够被访问的地址;其中,第一个参数为外设标识,第二个参数为dma缓冲区大小,第三个参数为可被访问的片内总线地址,第四个参数为内存分配方式。上述dma_alloc_from_coherent函数的核心为通过bitmap_find_free_region(),即使用bitmap(相当于一个标识各内存页的空闲状态、工作状态的表)模式的内存查找方式,从上述已声明的内存空间(与上述外设标识dev对应的内存空间)中查找到一块空闲的内存空间。dma控制器是直接操作片内总线地址的,也可以看作物理地址;总线地址和物理地址只是观察桥片内存的角度不同。片内总线地址是从设备角度上看到的桥片内存,物理地址是从cpu的角度看到的未经过转换的桥片内存(经过转换的是虚拟地址)。

采用一致性dma映射申请的dma缓冲区可以使用cache(高速缓冲存储器),并且保持cache一致性,可以提升系统性能。

cpu在访问内存时,首先判断所要访问的内容是否在cache中,如果在,就称为“命中(hit)”,此时cpu直接从cache中调用该内容;否则,就称为“不命中”,cpu只好去内存中调用所需的子程序或指令了。cpu不但可以直接从cache中读出内容,也可以直接往其中写入内容。由于cache的存取速率相当快,使得cpu的利用率大大提高,进而使整个系统的性能得以提升。cache的一致性就是指cache中的数据,与对应的内存中的数据是一致的。

如果cache缓存的内存区域不包括dma缓冲区,那么就没有一致性的问题;但是如果cache缓存包括了dma缓冲区的话,经过dma操作,cache缓存对应的内存数据已经被修改了,而cpu本身不知道(dma传输是不通过cpu的),它仍然认为cache中的数据就是内存中的数据,以后访问cache映射的内存时,它仍然使用旧的cache数据。这样就发生cache与内存的数据“不一致性”错误。

dma如果使用cache,那么一定要考虑cache的一致性;解决dma导致的一致性的方法最简单的就是禁止dma目标地址范围内(即dma缓冲区)的cache功能。因此在dma是否使用cache的问题上,可以根据dma缓冲区期望保留的的时间长短来决策。dam的映射就分为:一致性dma映射和流式dma映射。

一致性dma映射申请的缓存区能够使用cache,并且保持cache一致性。一致性映射具有很长的生命周期,在这段时间内占用的映射寄存器,即使不使用也不会释放。

流式dma映射实现比较复杂,生命周期比较短,而且禁用cache。建立流式dma映射,需要告诉内核数据的流动方向。

当设备需要一段一致性内存时,申请由dma_alloc_coherent分配的一段内存区域。

步骤404:获取上述外设的存储地址空间,以及与上述dma缓冲区对应的内核的虚拟地址空间。

上述内存分配函数可以返回与上述dma缓冲区对应的内核的虚拟地址空间;同时,还可以通过参数hangle返回dma缓冲区的总线地址,即片内总线地址,可由dma控制器访问。

步骤405:调用上述dma控制器,通过上述外设的存储地址空间、上述内核的虚拟地址空间,控制上述外设与上述桥片内存之间的数据传输。

步骤406:释放上述dma缓冲区。

示例性地,对于dma缓冲区的释放linux内核提供了相应了函数,如下:dma_release_declared_memory(structdevice*dev);

驱动程序可以通过函数dma_release_declared_memory(structdevice*dev)从系统中移除先前申明的内存区域;该函数不会检测当前区域是否在使用;确保该内存区域当前没有被使用;dma_release_declared_memory()函数是dma_declare_coherent_memory()函数的反向操作。

以此,在dma数据传输结束后,可以释放上述dma缓冲区对应的申请的桥片内存。

本发明实施例应用于上述主板中的外设与桥片内存之间的dma数据传输,通过预先建立内核的虚拟地址空间与桥片内存的物理地址空间的映射;在进行数据传输前,将与上述物理地址空间对应的虚拟地址空间分配为dma缓冲区;从而通过dma控制器控制上述外设与上述桥片内存之间的dma数据传输;整个dma传输过程是通过桥片(具有总线功能,相当于片内总线)进行传输的,而不通过系统总线,因此避免了上述系统总线制约dma数据传输的问题,提高了dma数据传输的性能;同时,可以通过桥片内存的显存复用,提高桥片内存的资源利用率。

对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。

参照图5所示,本发明实施例公开了一种dma数据传输系统,上述系统应用于主板,上述主板包括主处理器、主内存、系统总线、桥片、桥片内存、dma控制器、外设;上述主内存、上述桥片分别通过上述系统总线与上述主处理器连接;上述桥片内存、上述dma控制器、上述外设分别与上述桥片连接;上述系统具体可以包括如下模块:

分配模块501,用于当检测到针对上述外设的数据传输请求时,将预设的上述桥片内存的物理地址空间分配为针对上述外设的dma缓冲区;上述桥片内存的物理地址空间与上述主内存中存储的内核的虚拟地址空间已建立映射;

获取模块502,用于获取上述外设的存储地址空间,以及与上述dma缓冲区对应的内核的虚拟地址空间;

控制模块503,用于调用上述dma控制器,通过上述外设的存储地址空间、上述内核的虚拟地址空间,控制上述外设与上述桥片内存之间的数据传输。

可选地,上述分配模块501可以包括:

声明单元,用于将预设的上述桥片内存的物理地址空间声明为针对上述外设的dma缓冲区;上述桥片内存的物理地址空间与上述主内存中存储的内核的虚拟地址空间已建立映射;

分配单元,用于采用一致性dma映射函数,为上述外设分配上述dma缓冲区。

可选地,上述系统还可以包括:

映射模块,用于建立上述桥片内存的物理地址空间与上述内核的虚拟地址空间之间的映射。

可选地,上述映射模块可以包括:

显存复用映射单元,用于建立上述桥片内存中显存对应的物理地址空间与上述内核的虚拟地址空间之间的映射。

可选地,上述系统还可以包括:

释放模块,用于释放上述dma缓冲区。

本发明实施例应用于上述主板中的外设与桥片内存之间的dma数据传输,通过预先建立内核的虚拟地址空间与桥片内存的物理地址空间的映射;在进行数据传输前,将与上述物理地址空间对应的虚拟地址空间分配为dma缓冲区;从而通过dma控制器控制上述外设与上述桥片内存之间的dma数据传输;整个dma传输过程是通过桥片(具有总线功能,相当于片内总线)进行传输的,而不通过系统总线,因此避免了上述系统总线制约dma数据传输的问题,提高了dma数据传输的性能;同时,可以通过桥片内存的显存复用,提高桥片内存的资源利用率。

本发明实施例还公开了一种可读存储介质,当上述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行一个或多个上述的dma数据传输方法;上述方法应用于主板,所述主板包括主处理器、主内存、系统总线、桥片、桥片内存、dma控制器、外设;所述主内存、所述桥片分别通过所述系统总线与所述主处理器连接;所述桥片内存、所述dma控制器、所述外设分别与所述桥片连接;所述方法具体可以包括:

当检测到针对所述外设的数据传输请求时,将预设的所述桥片内存的物理地址空间分配为针对所述外设的dma缓冲区;所述桥片内存的物理地址空间与所述主内存中存储的内核的虚拟地址空间已建立映射;

获取所述外设的存储地址空间,以及与所述dma缓冲区对应的内核的虚拟地址空间;

调用所述dma控制器,通过所述外设的存储地址空间、所述内核的虚拟地址空间,控制所述外设与所述桥片内存之间的数据传输。

可选地,所述将预设的所述桥片内存的物理地址空间分配为针对所述外设的dma缓冲区,包括:

将预设的所述桥片内存的物理地址空间声明为针对所述外设的dma缓冲区;所述桥片内存的物理地址空间与所述主内存中存储的内核的虚拟地址空间已建立映射;

采用一致性dma映射函数,为所述外设分配所述dma缓冲区。

可选地,在所述当检测到针对所述外设的数据传输请求时,将预设的所述桥片内存的物理地址空间分配为针对所述数据传输请求的dma缓冲区的步骤之前,所述方法还包括:

建立所述桥片内存的物理地址空间与所述内核的虚拟地址空间之间的映射。

可选地,所述建立所述桥片内存的物理地址空间与所述内核的虚拟地址空间之间的映射的步骤,包括:

建立所述桥片内存中显存对应的物理地址空间与所述内核的虚拟地址空间之间的映射。

可选地,所述方法还包括:

释放所述dma缓冲区。

本发明实施例应用于上述主板中的外设与桥片内存之间的dma数据传输,通过预先建立内核的虚拟地址空间与桥片内存的物理地址空间的映射;在进行数据传输前,将与上述物理地址空间对应的虚拟地址空间分配为dma缓冲区;从而通过dma控制器控制上述外设与上述桥片内存之间的dma数据传输;整个dma传输过程是通过桥片(具有总线功能,相当于片内总线)进行传输的,而不通过系统总线,因此避免了上述系统总线制约dma数据传输的问题,提高了dma数据传输的性能;同时,可以通过桥片内存的显存复用,提高桥片内存的资源利用率。

对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以预测方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。

以上对本发明所提供的一种dma数据传输方法及系统,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

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