一种Linux数据传输方法、装置和用户终端与流程

文档序号:14774087发布日期:2018-06-23 02:32阅读:221来源:国知局
一种Linux数据传输方法、装置和用户终端与流程

本发明涉及Linux数据传输技术领域,更具体地说,涉及一种Linux数据传输方法、装置和用户终端。



背景技术:

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

现代CPU通常都实现了不同的工作模式,对应着不同级别的权限。从CPU的角度出发,为了保护内核的安全,Linux划分体系结构为用户空间和内核空间,在数据传输过程中的数据拷贝操作导致了极大的CPU开销,限制了操作系统有效进行数据传输操作的能力。

综上,现有的Linux系统下的数据传输方式,均为通过数据拷贝实现数据的传输,数据拷贝造成占用大量CPU等系统资源,甚至造成系统负担以至于拖慢整个系统的运行,大大限制Linux系统的数据传输的能力和执行能力,为维护人员基于Linux系统下对数据的传输带来了不便。



技术实现要素:

有鉴于此,本发明提供一种Linux数据传输方法、装置和用户终端以解决现有技术的不足。

为解决上述问题,本发明提供1、一种Linux数据传输方法,其特征在于,包括:

根据已知的物理空间首地址及映射后的虚拟空间首地址,生成虚拟地址与物理地址之间的地址转换接口;

分配待使用内存中可用的所述物理地址对应的物理空间内存块,并通过所述地址转换接口得到与其对应的所述虚拟地址的虚拟空间内存块,以便于对待存储数据进行写入时,通过操作所述虚拟空间内存块间接操作与其对应的所述物理空间内存块。

优选地,所述“根据已知的物理空间首地址及映射后的虚拟空间首地址,生成虚拟地址与物理地址之间的地址转换接口”之前,还包括:

内存空间初始化时,通过mmap映射系统保留或分配的物理内存,获得虚拟空间首地址。

优选地,所述“根据已知的物理空间首地址及映射后的虚拟空间首地址,生成虚拟地址与物理地址之间的地址转换接口”之后,还包括:

在可用内存释放后,确认与所述可用内存相邻的相邻可用内存;

若所述相邻可用内存为未分配内存,则将所述可用内存与所述相邻可用内存合并,生成所述待使用内存。

优选地,所述“在可用内存释放后,确认与所述可用内存相邻的相邻可用内存”之后,还包括:

若所述相邻可用内存为已分配内存,则将所述可用内存单独作为所述待使用内存。

优选地,所述地址转换接口包括物理至虚拟接口和虚拟至物理接口;

所述“根据已知的物理空间首地址及映射后的虚拟空间首地址,生成虚拟地址与物理地址之间的地址转换接口”包括:

基于所述物理空间首地址、所述虚拟空间首地址及长度的线性对应关系,分别生成所述虚拟地址至所述物理地址的虚拟至物理接口,以及所述物理地址到所述虚拟地址的物理至虚拟接口。

优选地,所述可用内存的空间由free链表和busy链表分配管理;

所述“在可用内存释放后,确认与所述可用内存相邻的相邻可用内存”之前,还包括:

根据内存申请,对比所述free链表的空间与所述内存申请对应的申请空间的大小;

若所述free链表的空间不小于所述申请空间大小,则将拆分所述free链表为所需空间和剩余空间,并由所述busy链表管理所述所需空间,由所述free链表管理所述剩余空间,以便于在可用内存释放后,根据所述free链表和所述busy链表的分配管理与所述可用内存相邻的相邻可用内存。

此外,为解决上述问题,本发明还提供一种Linux数据传输装置,包括:传输模块和分配模块;

所述传输模块,用于根据已知的物理空间首地址及映射后的虚拟空间首地址,生成虚拟地址与物理地址之间的地址转换接口;

所述分配模块,用于分配待使用内存中可用的所述物理地址对应的物理空间内存块,并通过所述地址转换接口得到与其对应的所述虚拟地址的虚拟空间内存块,以便于对待存储数据进行写入时,通过操作所述虚拟空间内存块间接操作与其对应的所述物理空间内存块。

此外,为解决上述问题,本发明还提供一种用户终端,包括存储器以及处理器,所述存储器用于存储Linux数据传输程序,所述处理器运行所述Linux数据传输程序以使所述用户终端执行如上述所述Linux数据传输方法。

此外,为解决上述问题,本发明还提供一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有Linux数据传输程序,所述Linux数据传输程序被处理器执行时实现如上述所述Linux数据传输方法。

本发明提供的一种Linux数据传输方法、装置和用户终端。其中,本发明所提供的方法基于Linux通过映射并建立虚拟内存空间的虚拟地址和物理内存空间的物理地址之间地址转换接口,并通过地址转换接口得到与物理空间内存块对应的虚拟空间内存块,从而实现在需要进行待存储数据的传输时,用户只需将其放入内存空间,直接使用分配得到的虚拟空间内存块,进而通过地址转换接口直接获得物理空间内存块,存储数据间接写入物理空间内存块。本发明所提供的Linux数据传输方法通过内存分配实现数据的零拷贝传输,不占用CPU等系统资源,避免了造成系统负担进而在数据传输量巨大时拖慢系统,大大提高了Linux系统的数据传输的能力和执行能力,为维护人员基于Linux系统下对数据的传输带来了方便。

附图说明

图1为本发明Linux数据传输方法实施例方案涉及的硬件运行环境的结构示意图;

图2为本发明Linux数据传输方法第一实施例的流程示意图;

图3为本发明Linux数据传输方法第二实施例的流程示意图;

图4为本发明Linux数据传输方法第三实施例的流程示意图;

图5为本发明Linux数据传输方法第四实施例的流程示意图;

图6为本发明Linux数据传输方法第五实施例的流程示意图;

图7为本发明Linux数据传输装置的功能模块示意图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

下面详细描述本发明的实施例,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。

此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。

在本发明中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”、“固定”等术语应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或成一体;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

如图1所示,图1是本发明实施例方案涉及的终端的硬件运行环境的结构示意图。

本发明实施例终端可以是PC,也可以是智能手机、平板电脑、电子书阅读器、MP3播放器、MP4播放器、便携计算机等具有显示功能的可移动式终端设备。

如图1所示,该终端可以包括:处理器1001,例如CPU,网络接口1004,用户接口1003,存储器1005,通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏、输入单元比如键盘、遥控器,可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是稳定的存储器,例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。

可选地,终端还可以包括摄像头、RF(Radio Frequency,射频)电路,传感器、音频电路、WiFi模块等等。此外,移动终端还可配置陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。

本领域技术人员可以理解,图1中示出的终端并不构成对终端的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

如图1所示,作为一种计算机可读存储介质的存储器1005中可以包括操作系统、数据接口控制程序、网络连接程序以及Linux数据传输程序。

本发明提供的一种Linux数据传输方法、装置和用户终端。其中,所述方法通过内存分配实现数据的零拷贝传输,不占用CPU等系统资源,避免了造成系统负担进而在数据传输量巨大时拖慢系统,大大提高了Linux系统的数据传输的能力和执行能力,为维护人员基于Linux系统下对数据的传输带来了方便。

实施例1:

参照图2,本发明第一实施例提供一种Linux数据传输方法,包括:

步骤S10,根据已知的物理空间首地址及映射后的虚拟空间首地址,生成虚拟地址与物理地址之间的地址转换接口;

上述,需要理解的是,Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

上述,基于Linux系统,数据进行传输时均需要进行大量占用CPU进行靠背,从而实现数据的传输,造成CPU巨大开销,极大的造成系统负担,限制了Linux操作系统有效进行数据传输的操作能力。

上述,根据已知的物理空间首地址及映射好的虚拟空间首地址,封装出虚拟地址和物理地址之间的地址转换接口,该接口和实现确认物理地址和虚拟地址间的数据的对应关系和地址转换。

步骤S20,分配待使用内存中可用的所述物理地址对应的物理空间内存块,并通过所述地址转换接口得到与其对应的所述虚拟地址的虚拟空间内存块,以便于对待存储数据进行写入时,通过操作所述虚拟空间内存块间接操作与其对应的所述物理空间内存块。

上述,内存可以为离散空间内存从而进行内存共享实现数据传输。系统需要为用户空间提供共享空间对应的不同空间下的地址转换的接口。

上述,在进行数据传输时,根据所需空间申请,查找可以使用的物理内存地址块,然后调用地址转换接口可以得到对应的虚拟地址块,供用户使用。当用户需要将数据放入内存空间时,直接使用分配得到的虚拟地址块,如需要对应物理地址相关的信息可以通过地址转换接口获得。进而在进一步的数据写入时,直接操作用户所分配的虚拟地址的虚拟空间地址块,存储数据地址转换接口间接写入物理空间内存块。

本实施例所提供的方法基于Linux通过映射并建立虚拟内存空间的虚拟地址和物理内存空间的物理地址之间地址转换接口,并通过地址转换接口得到与物理空间内存块对应的虚拟空间内存块,从而实现在需要进行待存储数据的传输时,用户只需将其放入内存空间,直接使用分配得到的虚拟空间内存块,进而通过地址转换接口直接获得物理空间内存块,将待存储数据写入物理空间内存块。本发明所提供的Linux数据传输方法通过内存分配实现数据的零拷贝传输,不占用CPU等系统资源,避免了造成系统负担进而在数据传输量巨大时拖慢系统,大大提高了Linux系统的数据传输的能力和执行能力,为维护人员基于Linux系统下对数据的传输带来了方便。

实施例2:

参照图3,本发明第二实施例提供一种Linux数据传输方法,基于上述图2所示的第一实施例,所述步骤S10“根据已知的物理空间首地址及映射后的虚拟空间首地址,生成虚拟地址与物理地址之间的地址转换接口”之前,还包括:

步骤S30,内存空间初始化时,通过mmap映射系统保留或申请的物理内存,获得虚拟空间首地址。

上述,需要理解的是,mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。mmap在用户空间映射调用系统中作用很大。mmap操作提供了一种机制,让用户程序直接访问设备内存,这种机制,相比较在用户空间和内核空间互相拷贝数据,效率更高。在要求高性能的应用中比较常用。mmap映射内存必须是页面大小的整数倍,面向流的设备不能进行mmap,mmap的实现和硬件有关。

上述,在芯片初始化,即为内存空间初始化时,系统调用mmap映射系统预留或申请的物理内存,获得对应的虚拟空间首地址;驱动根据物理地址及长度调用remap_pfn_range进行映射,返回虚拟空间地址给到用户空间。

实施例3:

参照图4,本发明第三实施例提供一种Linux数据传输方法,基于上述图2所示的第一实施例,所述步骤S10“根据已知的物理空间首地址及映射后的虚拟空间首地址,生成虚拟地址与物理地址之间的地址转换接口”之后,还包括:

步骤S40,在可用内存释放后,确认与所述可用内存相邻的相邻可用内存;

上述,本实施例通过建立内存管理机制实现内存的分配管理。在内存通过用户的使用或系统自动调配时释放后,内存管理机制确认释放的可用内存以及与其相邻的相邻可用内存,例如,可以为内存池中可用内存的内存地址相邻地址的可用内存。

上述,内存管理机制包含但不限于内存池的机制来实现;内存分配可以作为连接共享内存的接口,分配时并不作为真实内存分配操作的方式实现。

步骤S50,若所述相邻可用内存为未使用内存,则将所述可用内存与所述相邻可用内存合并,生成所述待使用内存。

步骤S60,若所述相邻可用内存为已使用内存,则将所述可用内存单独作为所述待使用内存。

上述,在本实施例中,用户或系统释放内存时,判断该内存是否为未使用内存,从而尝试将该内存与其相邻的内存合并,若相邻内存为未使用内存则合并成功,合并后作为一整块内存使用;如果其相邻内存为已使用内存则不能合并,该释放的内存块作为一个独立的内存块被使用。

实施例4:

参照图5,本发明第四实施例提供一种Linux数据传输方法,基于上述图2所示的第一实施例,所述地址转换接口包括物理至虚拟接口和虚拟至物理接口;

所述步骤S10“根据已知的物理空间首地址及映射后的虚拟空间首地址,生成虚拟地址与物理地址之间的地址转换接口”包括:

步骤S11,基于所述物理空间首地址、所述虚拟空间首地址及长度的线性对应关系,分别生成所述虚拟地址至所述物理地址的虚拟至物理接口,以及所述物理地址到所述虚拟地址的物理至虚拟接口。

上述,系统预留或申请的内存空间,因为物理地址空间首地址与虚拟地址空间首地址及长度是线性对应关系,所以可以通过二者之间的关系封装出虚拟地址到物理地址以及物理地址到虚拟地址的转换关系接口;即为,根据预留已知的物理空间首地址及映射好的虚拟空间首地址,封装出由虚拟地址到物理地址的转换接口phy_to_virt及虚拟地址到物理地址的转换接口virt_to_phy。

实施例5:

参照图6,本发明第四实施例提供一种Linux数据传输方法,基于上述图4所示的第三实施例,所述可用内存的空间由free链表和busy链表分配管理;

所述步骤S10“在可用内存释放后,确认与所述可用内存相邻的相邻可用内存”之前,还包括:

步骤S70,根据内存申请,对比所述free链表的空间与所述内存申请对应的申请空间的大小;

上述,需要理解的是,链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。

上述,内存池机制管理内存,采用两条链表(free、busy)来实现;每个链表维护地址及长度为有效属性。

上述,初始化时,free链表为当前可用物理内存空间属性,busy链表为空,当有内存申请时,即开始对比free链表中的空间与内存申请对应的申请空间的大小。

步骤S80,若所述free链表的空间不小于所述申请空间大小,则将拆分所述free链表为所需空间和剩余空间,并由所述busy链表管理所述所需空间,由所述free链表管理所述剩余空间,以便于在可用内存释放后,根据所述free链表和所述busy链表的分配管理与所述可用内存相邻的相邻可用内存。

上述,如果空间大于等于所需申请的内存,则将free链表拆分为所需申请的空间和剩余空间,然后将所需申请的空间交由busy链表维护,剩余空间交由free链表维护;当有内存释放时,判断相邻内存为未分配内存则合并到free链表中,相邻内存为已分配内存则不能合并则新加入到free链表中维护。

此外,参考图7,本发明还提供一种Linux数据传输装置,包括:传输模块10和分配模块20;

所述传输模块10,用于根据已知的物理空间首地址及映射后的虚拟空间首地址,生成虚拟地址与物理地址之间的地址转换接口;

所述分配模块20,用于分配待使用内存中可用的所述物理地址对应的物理空间内存块,并通过所述地址转换接口得到与其对应的所述虚拟地址的虚拟空间内存块,以便于对待存储数据进行写入时,通过操作所述虚拟空间内存块间接操作与其对应的所述物理空间内存块。

此外,本发明还提供一种用户终端,包括存储器以及处理器,所述存储器用于存储Linux数据传输程序,所述处理器运行所述Linux数据传输程序以使所述用户终端执行如上述所述Linux数据传输方法。

此外,本发明还提供一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有Linux数据传输程序,所述Linux数据传输程序被处理器执行时实现如上述所述Linux数据传输方法。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

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