一种数据传输的方法及系统技术方案

技术编号:2840625 阅读:149 留言:0更新日期:2012-04-11 18:40
本发明专利技术适用于计算机通信领域,提供了一种数据传输方法,所述方法基于主存缓冲区和内核实现,所述主存缓冲区包括至少两个缓冲块,每个缓冲块配置有指示该缓冲块的指示信息,所述方法包括:第一通信方从内核获取至少一个空闲缓冲块的指示信息,并将数据写入对应的空闲缓冲块;第二通信方从内核获取所述承载数据的缓冲块的指示信息,并从对应的承载数据的缓冲块读取数据。相应的,本发明专利技术还提供一种数据传输系统。本发明专利技术在两个通信方之间进行通信时,实现双方通信中的数据零拷贝,有效提高了系统性能,节省了宝贵的内存资源,降低了系统成本。

【技术实现步骤摘要】

本专利技术属于数据通信领域,尤其涉及一种外围设备和用户程序之间数据传输的方法及系统
技术介绍
目前,在很多面向特殊用途的芯片解决方案中,普遍采用的是通用中央处理器(Central Processing Unit,CPU)核加数字信号处理(Digital SignalProcessing,DSP)引擎的嵌入式系统架构,如网际协议(Internet Protocol,IP)处理器、第三代(3G)手机芯片、IP电视(IPTV)的芯片等。Linux是嵌入式系统采用的主流操作系统之一。 在以Linux构建的嵌入式系统中,CPU核以外的处理设备,如输入/输出(Input/Output,I/O)设备等外围设备与主存之间的数据通讯通常采用直接内存访问(Direct Memory Access,DMA)方式。由于CPU与外围设备的通信性能限制,一般必须在系统启动时在主存中配置固定的内存空间作为DMA缓冲区,实现内存和外部存储器之间的数据交换,而不是在每次通讯时动态配置。另外,主存中还必须保持若干个由操作系统可以直接访问的内核缓冲区,缓冲外围设备和主存之间需要交换的数据。 由于Linux系统采用虚拟地址映射,用户态与内核态均不能直接访问对方的地址空间。因此,通常用户态与内核态的相互通讯有两种方式一是将数据在内核态和用户态之间做一次拷贝,这种方式适用于数据量小,且性能不敏感的应用。二是使用地址映射,即将用户态地址和物理地址都映射到同一块物理内存,这种方式适用于数据量大,且性能要求较高的应用,在实现时主要分成两个阶段 1.外围设备驱动使用DMA方式从DMA缓冲区存取数据;2.用户程序使用操作系统从内核缓冲区调用存取数据;在阶段1中,当外围设备使用DMA方式对预先配置的DMA缓冲区完成数据存取后,触发中断通知操作系统数据已经处理完毕,中断例程调度其他程序将DMA缓冲区中的数据拷贝到内核缓冲区。在阶段2中,用户程序使用系统调用获取内核缓冲区对应的用户态地址。 在上述方案中,由于用户程序与设备外围设备之间的数据通讯至少要经历一次拷贝,数据通讯效率比较低。同时,使用DMA方式写数据时,由于数据缓冲使用无缓冲(uncached)模式且采取静态分配模式,读取效率低下。由于地址映射是很费时的操作,因此,当用户态与内核态通讯使用地址映射方式时,通常使用大块连续内存,一次映射就绪,并由相应的内核模块来管理这块内存。除非使用保留内存,很难在系统运行一段时间之后分配到大块连续内存。同时,如果与外围设备通讯的数据大小有很大波动,则会导致保留内存中出现大量碎片。
技术实现思路
本专利技术实施例的目的在于提供一种数据传输方法和系统,实现两个通信方之间的数据零拷贝通信。 为了解决上述技术问题,本专利技术实施例提出的技术方案如下一种数据传输方法,所述方法基于主存缓冲区和内核实现,所述主存缓冲区包括至少两个缓冲块,每个缓冲块配置有指示该缓冲块的指示信息,所述方法包括下述步骤第一通信方从内核获取至少一个空闲缓冲块的指示信息,并将数据写入对应的空闲缓冲块;第二通信方从内核获取所述承载数据的缓冲块的的指示信息,并从对应的承载数据的缓冲块读取数据。 一种数据传输系统,所述系统包括第一通信方、第二通信方、内核和主存缓冲区;主存缓冲区包括至少两个缓冲块,每个缓冲块配置有指示该缓冲块的指示信息;内核,用于管理缓冲块的指示信息;第一通信方,从主存缓冲区获取至少一个空闲缓冲块的指示信息,并将数据块写入对应的空闲缓冲块;第二通信方,从内核获取所述承载数据的缓冲块的指示信息,并从对应的承载数据的缓冲块读取数据。 本专利技术实施例通过将主存缓冲区划分为至少两个缓冲块,并在两个通信方之间进行通信时,采用让对方获取承载数据的缓冲块的指示信息,对方根据指示信息直接去缓冲块读取数据,实现双方通信中的数据零拷贝,有效提高了系统性能,节省了宝贵的内存资源,降低了系统成本。附图说明图1是本专利技术实施例中缓冲块的状态迁移示意图;图2是本专利技术实施例中数据传输的实现原理图;图3是本专利技术实施例中数据传输的系统结构图。具体实施方式为了使本专利技术实施例的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本专利技术实施例进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本专利技术,并不用于限定本专利技术。 本专利技术实施例适用于包含内核的操作系统,且操作系统中的用户程序与内核对应不同的地址空间,在本专利技术实施例中,外围设备与用户程序之间动态交换缓冲块指示信息,同时结合地址映射实现了用户程序与外围设备之间数据的零拷贝,可以大幅度提高数据传输性能。 在本专利技术实施例中,内核将主存缓冲区划分为至少两个缓冲块,对应每个缓冲块配置有指示该缓冲块的指示信息,指示信息可以为缓冲块指针,也可以为指代缓冲块的信息体,信息体可以包含缓冲块指针,指示信息通常是由内核进行管理。该指示信息包含对应缓冲块的物理地址。缓冲块的大小可以相等,以方便内核管理,每个缓冲块的大小不限,一般为主存缓冲区的最小自然单位,当然缓冲块的大小也可以不相等。这样就可以将用户数据分解成以缓冲块为单元的数据组,然后通过缓冲块实现数据传输。 如图1所示,为方便管理,可以根据当前使用者的不同,将主存缓冲区中的缓冲块分为以下四个状态自由态此时缓冲块未写入数据,处于空闲状态,可以随时被外围设备或者用户程序取用;外围设备占用态缓冲块被外围设备占用,外围设备可以读写数据;内核占用态此时缓冲块中已经有数据,且被内核所使用;用户程序占用态此时缓冲块被用户程序占用,用户程序可以读写数据。 状态迁移的方式可以为从自由态转移到用户程序占用态再转换到内核占用态或逆向转换,也可以为从自由态转移到外围设备占用态再转移到内核占用态或逆向转移。 每个状态中的所有缓冲块的指示信息可以用一个队列来管理,每一个指示信息队列对应一个相同状态的缓冲块队列,本专利技术实施例中,对应四种缓冲块状态,指示信息队列相应包括自由态缓冲块指示信息队列,用于指示处于自由态的空闲缓冲块;内核占用态缓冲块指示信息队列,用于指示处于内核占用态的缓冲块;外围设备占用态缓冲块指示信息队列,用于指示处于外围设备占用态的缓冲块;用户程序占用态缓冲块指示信息队列,用于指示处于用户程序占用态的缓冲块; 当然,根据需要,还可以设定不同状态的缓冲块及相应的指示信息队列。 作为本专利技术的另一实施例,每一个缓冲块的状态也可以使用主存缓冲区首部的状态记录表来记录,这样只需要一个缓冲块队列就可以记录所有缓冲块的状态了。 由于外围设备和用户程序使用的是不同的地址空间,因此缓冲块的交换需要结合地址映射。当数据从外围设备传输到用户程序时,需要将缓冲块的物理地址映射到用户空间,建立缓冲块的物理地址与用户态地址之间的映射。在用户空间,每一个缓冲块都有一个单独的用户态地址,每一个用户态地址分别对应唯一的物理地址。 地址映射的方式可以在传输数据之前进行,也可以在将数据写入缓冲块后进行。 参见图2,以缓冲块指示信息队列对缓冲块状态进行管理为例,介绍本专利技术实施例数据从外围设备传输到用户程序的过程。首先,外围设备需要获取至少一个空闲缓冲块,即从内核中自由态缓冲块指示信息队列中获取至少一个自由态缓冲块指示信息,然后根据指针信息中的缓冲块物理本文档来自技高网
...

【技术保护点】
一种数据传输方法,其特征在于,所述方法基于主存缓冲区和内核实现,所述主存缓冲区包括至少两个缓冲块,每个缓冲块配置有指示该缓冲块的指示信息,所述方法包括下述步骤:    第一通信方从内核获取至少一个空闲缓冲块的指示信息,并将数据写入对应的空闲缓冲块;    第二通信方从内核获取所述承载数据的缓冲块的指示信息,并从对应的承载数据的缓冲块读取数据。

【技术特征摘要】
1.一种数据传输方法,其特征在于,所述方法基于主存缓冲区和内核实现,所述主存缓冲区包括至少两个缓冲块,每个缓冲块配置有指示该缓冲块的指示信息,所述方法包括下述步骤第一通信方从内核获取至少一个空闲缓冲块的指示信息,并将数据写入对应的空闲缓冲块;第二通信方从内核获取所述承载数据的缓冲块的的指示信息,并从对应的承载数据的缓冲块读取数据。2.如权利要求1所述的数据传输方法,其特征在于,所述指示信息为缓冲块指针或者指代缓冲块的信息体。3.如权利要求1所述的数据传输方法,其特征在于,所述第一通信方和第二通信方中,其中一方为外围设备,另一方为用户程序。4.如权利要求3所述的数据传输方法,其特征在于,所述指示信息中包含缓冲块的物理地址,并且,所述方法还包括所述内核将缓冲块的物理地址映射到用户空间,建立缓冲块的物理地址与用户态地址之间的映射关系。5.如权利要求4所述的数据传输方法,其特征在于,所述方法还包括所述外围设备根据缓冲块指示信息中包含的物理地址在对应的缓冲块上写入数据或从对应的缓冲块上读取数据;所述用户程序根据所述映射关系,查询缓冲块指示信息中物理地址对应的用户态地址,然后根据所述用户态地址在对应的缓冲块上写入数据或从对应的缓冲块上读取数据。6.如权利要求4或5所述的数据传输方法,其特征在于所述内核在数据传输之前,将主存缓冲区包括的所有缓冲块的物理地址映射到用户...

【专利技术属性】
技术研发人员:陈康林南元
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:94[中国|深圳]

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

1