CN102662910B - 基于嵌入式***的网络交互体系及网络交互方法 - Google Patents
基于嵌入式***的网络交互体系及网络交互方法 Download PDFInfo
- Publication number
- CN102662910B CN102662910B CN201210081358.2A CN201210081358A CN102662910B CN 102662910 B CN102662910 B CN 102662910B CN 201210081358 A CN201210081358 A CN 201210081358A CN 102662910 B CN102662910 B CN 102662910B
- Authority
- CN
- China
- Prior art keywords
- network
- message
- interface
- protocol stack
- shared drive
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 230000003993 interaction Effects 0.000 title claims abstract description 45
- 238000000034 method Methods 0.000 title claims abstract description 27
- 239000000872 buffer Substances 0.000 claims description 63
- 230000005540 biological transmission Effects 0.000 claims description 22
- 230000004044 response Effects 0.000 claims description 12
- 230000008569 process Effects 0.000 claims description 11
- 125000004122 cyclic group Chemical group 0.000 claims description 4
- 230000000977 initiatory effect Effects 0.000 claims description 3
- 238000013507 mapping Methods 0.000 claims description 3
- 230000015654 memory Effects 0.000 abstract description 9
- 238000004891 communication Methods 0.000 abstract description 7
- 230000006870 function Effects 0.000 description 40
- 238000005516 engineering process Methods 0.000 description 2
- 230000007717 exclusion Effects 0.000 description 2
- 239000002253 acid Substances 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 230000002045 lasting effect Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000033772 system development Effects 0.000 description 1
Landscapes
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种基于嵌入式***的网络交互体系及网络交互方法,所述的网络交互体系包括:用户态中的网络接口、网络驱动、用户态网络协议栈以及第一IO接口;第二IO接口以及驱动接口;核心态中的内核网络协议栈、虚拟网络驱动以及虚拟字符设备驱动;以及,共享内存。所述的网络交互方法包括以下步骤:初始化;以及:当消息携带由用户态网络协议栈执行的通用命令时,消息的接收与发送;当消息携带由内核网络协议栈执行的通用命令时,消息的接收与发送。本发明将用户态的网络驱动与内核网络协议栈进行衔接,实现了传统网络应用程序也能在用户态网络驱动下使用,优化了网络通讯的性能。
Description
技术领域
本发明涉及嵌入式***,特别涉及一种基于嵌入式***的网络交互体系及网络交互方法。
背景技术
当前计算机***发展的趋势是体积的减小,于是便出现了掌上电脑和与之适应的嵌入式***。嵌入式***为一种计算机操作***,当其运行在如掌上电脑一类的计算机上,往往具有实时***的特征,但嵌入式***在体积、内存容量以及电源等方面受到限制。这就要求操作***和应用程序必须有效地对内存进行管理。由于嵌入式***一般不使用虚拟储存技术,开发人员往往仅能对有限的物理内存做适应开发。
现有技术的处理器或处理器核能够在两种模式下运行,即内核态和用户态。当嵌入式***通过***调用进入内核态时,处理器执行内核代码。完成嵌入式***的一些功能。当嵌入式***进入内核态时,应用程序的上下文将从当前执行的处理器或处理内核上切换出去,即现有技术的嵌入式***采用了“上下文切换”来支持内核态与用户态的切换。这种上下文切换机制带来了许多物理内存上的开销,尤其是对于一些操作***密集型应用,若频繁进行上下文切换对性能有较大的影响,降低嵌入式***的运行速度。
为了在嵌入式***的网络交互方面克服上述问题,当前的许多嵌入式***已将网络驱动及网络协议栈从内核态实现变为在用户态实现,一般的网络应用程序可通过修改其内部代码以支持网络协议栈,其基于的网络交互体系包括:
网络接口;
实现于用户态的网络驱动,将消息读取至网络接口;
实现于用户态的网络协议栈,包括多个特定的网络协议层;
IO接口,被安排用于从网络应用程序接收消息与向网络应用程序传递消息;所述的消息为携带为由特定网络协议层执行的通用命令。
这种将网络驱动以及网络协议栈实现在用户态的嵌入式***能够在很大程度上减少了内核态与用户态之间的上下文切换,缩短了数据的传递路径,并且提高了网络交互性能,嵌入式***的内存也得到了有效的利用。
但此种嵌入式***的网络驱动无法与内核网络协议栈衔接。由于一些网络应用程序(包括网络调试工具)无法修改其内部代码,故仅支持内核协议栈,网络驱动无法直接与这些网络应用程序进行数据交换。因此,这种将网络驱动以及网络协议栈实现在用户态的嵌入式***会导致部分网络应用程序无法使用。
发明内容
本发明的目的在于提供一种基于嵌入式***的网络交互体系及网络交互方法,能够对用户态网络驱动与内核网络协议栈进行衔接,实现了仅支持内核网络协议栈的网络应用程序也能在用户态网络驱动场景下使用,该类型的嵌入式***得到了普适。
一种基于嵌入式***的网络交互体系,所述的嵌入式***能够通过***调用进入用户态以及内核态,所述的网络交互体系包括:
用户态中的网络接口、网络驱动、用户态网络协议栈以及第一IO接口;第二IO接口以及驱动接口;
核心态中的内核网络协议栈、虚拟网络驱动以及虚拟字符设备驱动;以及,
共享内存;
所述的第一IO接口以及第二接口用于从网络应用程序接收消息以及向网络应用程序传递消息;其中,通过第一IO接口进行交互的消息携带由用户态网络协议栈的特定网络协议层执行的通用命令,通过第二IO接口进行交互的消息携带由内核网络协议栈的特定网络协议层执行的通用命令;
所述的用户态网络协议栈,处理用于执行的通用命令,依据通用命令生成由网络驱动执行的特定命令;
所述的内核网络协议栈,处理用于执行的通用命令,依据通用命令生成由虚拟网络驱动执行的特定命令;
虚拟网络驱动,执行内核网络协议栈的特定命令,访问内核网络协议栈并实现共享内存与内核网络协议栈之间的消息交互;
驱动接口,访问共享内存并实现网络驱动与共享内存之间的消息交互;以及,
虚拟字符设备驱动,用于向驱动接口提供内核态的控制接口以及将所述的共享内存映射至用户态的地址空间。
下面介绍本发明的优选技术方案。
具体地,所述的第二IO接口为套接字接口。
进一步地,所述的共享内存被组织成循环缓冲区,并采用无锁的方式进行读写。
进一步地,所述的驱动接口通过调用vn_put函数以及vn_get函数读取共享内存中的数据。
进一步地,虚拟字符设备驱动的控制接口包括ioctl接口以及mmap接口。
一种利用如上所述网络交互体系实现的网络交互方法,包括以下步骤:
(1)对网络交互体系的初始化,加载虚拟络驱动以及虚拟字符设备驱动,建立共享内存;
(2)当所述的消息携带由用户态网络协议栈执行的通用命令,消息的接收或发送包括步骤:
在网络接口或第一IO接口中载入消息;
读取所述的消息;
基于所述的消息,对网络驱动以及用户态网络协议栈发起操作;
向网络应用程序发送消息或从网络应用程序传送消息,并在完成操作时在网络接口或第一IO接口中载入响应;以及,
读取所述的响应;
(3)当所述的消息携带由内核网络协议栈执行的通用命令,消息的接收或发送包括步骤:
在网络接口或第二IO接口中载入消息;
读取所述的消息;
基于所述的消息,对网络驱动、驱动接口、共享内存、虚拟网络驱动以及内核网络协议栈发起操作;
向网络应用程序发送消息或从网络应用程序传送消息,并在完成操作时在网络接口或第二IO接口中载入响应;以及,
读取所述的响应。
在步骤(1)中,所述的建立共享内存,包括步骤:
(1.1)申请两段各512个页面大小的空间,计算出每个页的页框号,将这些页全设置成为保留页;
(1.2)网络驱动通过驱动接口控制所述的虚拟字符设备驱动,将所述两段空间映射到用户态的地址空间。
进一步地,所述的共享内存包括发送缓冲区以及接收缓冲区,在步骤(3)中,
所述的向网络应用程序发送消息,包括步骤:
网络驱动调用驱动接口检查共享内存的接收缓冲区是否满,若满则丢包,不满则通过驱动接口将消息发送至接收缓冲区;以及,
内核网络协议栈调用虚拟网络驱动轮询接收缓冲区,通过虚拟网络驱动读取接收缓冲区内的消息并与网络应用程序进行消息交互;
所述的从网络应用程序传送消息,包括步骤:
内核网络协议栈调用虚拟网络驱动检查共享内存的发送缓冲区是否满,若满则丢包,不满则通过虚拟网络驱动将消息放入共享内存的发送缓冲区;以及,
网络驱动调用驱动接口轮询发送缓冲区,通过驱动接口读取发送缓冲区内的消息并与网络接口进行消息交互。
更进一步地,所述的轮询包括步骤:
a、在共享内存上建立工作队列;
b、将轮询任务放入到工作队列;
c、检查共享内存的缓冲区是否为空,如果未空则一直读取消息;如果共享内存的缓冲区为空,则将轮询任务放入工作队列等待指定的时间。
为了将网络驱动收到的消息传递给内核网络协议栈(即消息的接收)或将内核上层网络协议栈需要发送的网络消息包传递给用户态网络驱动程序(即消息的发送),首先得有一种内核态与用户态的通讯方式。
由于传统的内核态与用户态通讯方式是***调用,频繁地***调用会带来频繁的上下文切换,带来较大的性能损失,另外由于内核态和用户态地址空间的不同,通过***调用的方式在两态间传递消息必须进行消息拷贝,这又会带来性能损失,为了避免这些性能损失,采用建立共享内存的方式实现内核态与用户态的通讯,大大减少了***调用的次数与消息的拷贝次数。同时,为了优化共享内存,可将所述的共享内存组织为一循环缓冲区,并采用无锁方式进行读写,能够避免使用互斥锁带来的开销。但这种读写方式必须使用轮询方式来查看缓冲区是否为满或为空。
但一般的轮询由于一直检测缓冲区会导致CPU负荷过重,造成很大的性能损失。因此,本发明在传统的轮询方式上进行优化,在缓冲区的读取端读端若有消息则移植读取,直到缓冲区空,即将读取操作放入至一个工作队列等候,并在指定的时间间隔后重启读取操作,这时缓冲区若有新的消息则开始读消息;若此时缓冲区再空,则再次将读取操作放入工作队列中等待指定的时间,这样就避免了持续读取操作带来的CPU性能开销。
实现内核态与用户态之间的通讯需要将消息与上层网络协议栈衔接起来,通过虚拟网络驱动能够实现内核网络协议栈与用户态网络驱动的消息交互:虚拟网络驱动可按网络驱动模型编写,实现消息的收发。
虚拟字符设备驱动实现了对***控制,包括建立共享内存,用户态网络驱动可通过操作该虚拟字符设备驱动对应的设备文件对***进行控制,如ioctl以及mmap,建立的共享内存申请分配也是通过该字符设备驱动的mmap方法实现。
本发明能够在网络驱动下实现内核网络功能,基于传统套接字的网络应用程序能够在用户态网络驱动下执行,同时保证很高的性能;本发明将用户态的网络接口与内核网络协议栈进行衔接,实现了传统网络应用程序也能在用户态网络驱动下使用,并且优化了网络通讯的性能。
附图说明
图1是本发明网络交互体系的结构示意图;
图2是本发明网络交互方法的流程示意图;
图3是本发明网络交互方法中消息接收流程示意图;
图4是本发明网络交互方法中消息发送流程示意图。
具体实施方式
下面结合附图详细介绍本发明的具体实施方式。
一种基于嵌入式***的网络交互体系,如图1所示,包括***用户态中的网络接口、网络驱动、第一IO接口、第二IO接口、驱动接口以及用户态网络协议栈,***内核态中的虚拟字符设备驱动、虚拟网络驱动以及内核网络协议栈,共享内存。
所述的用户态网络协议栈以及内核网络协议栈均包括多个特定的网络协议层。
由于绝大部分的网络应用程序(下称一类网络应用程序)支持用户态网络协议栈,且实现于用户态的网络驱动能直接访问用户态网络协议栈,因此,所述的网络交互体系在一类网络应用程序的网络交互中能够在用户态直接实现网络应用程序的网络交互过程,具体地,网络交互体系包括:
第一IO接口,用于从一类网络应用程序接收消息以及向一类网络应用程序传递消息;所述的消息携带由用户态网络协议栈的特定网络协议层执行的通用命令;
用户态网络协议栈,处理用于执行的通用命令,依据通用命令生成由网络驱动执行的特定命令;
网络驱动,执行用户态网络协议栈的特定命令,访问用户态网络协议栈并实现网络接口与网络协议栈之间的消息交互。
在用户态的网络应用程序中,存在部分的网络应用程序(下称二类网络应用程序)仅支持内核网络协议栈,且实现于用户态的网络驱动不能直接访问内核网络协议栈,因此,所述的网络交互体系在二类网络应用程序的网络交互中须在内核态实现网络应用程序的网络交互过程。具体地,网络交互体系包括:
第二IO接口,用于从二类网络应用程序接收消息以及向二类网络应用程序传递消息;所述的消息携带由内核网络协议栈的特定网络协议层执行的通用命令;
内核网络协议栈,处理用于执行的通用命令,依据通用命令生成由虚拟网络驱动执行的特定命令;
虚拟网络驱动,执行内核网络协议栈的特定命令,访问内核网络协议栈并实现共享内存与内核网络协议栈之间的消息交互;
驱动接口,访问共享内存并实现网络驱动与共享内存之间的消息交互;以及,
虚拟字符设备驱动,用于向驱动接口提供内核态的控制接口以及将所述的共享内存映射至用户态的地址空间。
所述的共享内存由两块内存构成,一块用于作为发送缓冲区,另一块用于作为接收缓冲区。两块缓冲区均被组织成循环缓冲区,并采用无锁的方式进行读写,这样能够避免使用互斥锁带来的开销。以共享内存的方式实现内核态与用户态的通信,能够大大减少***调用的次数与数据的拷贝次数。
所述的第二IO接口为套接字接口。为了实现网络应用程序与内核网络协议栈进行消息交互,创建一个套接字接口,并设置套接字接口的设置通讯类型(如TCP、UDP、广播等)。在网络应用程序与内核网络协议栈进行消息交互时,调用send、recv等用户态套接字库函数进行消息交互。
在本实施例中,由于用户态的网络驱动无法对网络交互体系内核态的部分进行控制,也无法直接对共享内存进行访问,因此本体系首先设置了驱动接口,能够实现网络驱动对共享内存中数据的读写。
更为具体地,由于网络驱动需对体系数据传递的控制,驱动接口具体需实现如下功能:
1、为网络驱动提供操作共享内存的方法,包括通过该驱动接口执行vn_put函数以及vn_get函数,其中,vn_put函数实现了将数据写入接收缓冲区的功能,vn_get函数实现了将数据从发送缓冲区读取的功能;
2、***初始化,即在网络驱动运行时,对内核态中虚拟网络驱动以及虚拟字符设备驱动的程序加载;包括通过该驱动接口执行vn_init函数,其中,vn_init函数实现了***的初始化,配置共享内存的在用户空间的mac地址,即将共享内存映射至用户态的地址,并发送开始收发命令字。
3、封装屏蔽共享内存的内部细节。
由于驱动接口无法直接调用内核态中的文件,为了实现驱动接口的上述功能并进一步完善上述功能,本体系还于内核态设置了虚拟字符设备驱动。
虚拟字符设备驱动用于向驱动接口提供内核态的控制接口以及将所述的共享内存映射至用户态的地址空间;通过驱动接口以及虚拟字符设备驱动,实现于用户态的网络驱动能够对内核态中相应的文件进行读写特定操作并能够在内核态中触发执行表1所示函数功能。
表1函数及其执行功能
函数名 | 功能 |
vn_cdev_open(open) | 赋值私用数据指针 |
vn_cdev_exit(release) | 无 |
vn_cdev_ioctl(ioctl) | 提供ioctl功能 |
vn_cdev_mmap(mmap) | 提供内存映射功能 |
其中,对驱动接口提供的控制接口,包括ioctl接口以及mmap接口,分别实现对vn_cdev_ioctl函数的调用以及vn_cdev_mmap函数的调用;实现的功能如下:
一、vn_cdev_ioctl函数,在此处实现了3个控制命令字,即:
VN_IOC_START:开始数据收发;
VN_IOC_STOP:暂停数据收发;以及,
VN_IOC_MAPDIR:选择mmap函数指定的内存块。
二、mmap函数,调用remap_pfn_range函数将之前初始化时申请的内存空间映射到用户态的地址空间中,从而实现共享内存。
虚拟网络驱动主要负责将内核网络协议与共享内存衔接起来,执行内核网络协议栈的特定命令,访问内核网络协议栈并实现共享内存与内核网络协议栈之间的消息交互,使得网络驱动能够间接地访问内核网络协议栈,实现一个虚拟的网络接口。通过用户态网络配置工具ifconfig、vconfig等可以对该虚拟网络驱动进行配置,该虚拟驱动按照传统网络设备模型编写,具体实现函数如表2所示。
表2虚拟网络驱动的实现函数
一种利用了上述网络交互体系的网络交互方法,实现了网络应用程序与网络之间的消息交互过程,如图2所示,包括消息的接收以及消息的发送,包括以下步骤:
(1)对网络交互体系的初始化,加载虚拟络驱动以及虚拟字符设备驱动,建立共享内存;
(2)当所述的消息携带由用户态网络协议栈执行的通用命令,消息的接收或发送包括步骤:
在网络接口或第一IO接口中载入消息;
读取所述的消息;
基于所述的消息,对网络驱动以及用户态网络协议栈发起操作;
向网络应用程序发送消息或从网络应用程序传送消息,并在完成操作时在网络接口或第一IO接口中载入响应;以及,
读取所述的响应;
(3)当所述的消息携带由内核网络协议栈执行的通用命令,消息的接收或发送包括步骤:
在网络接口或第二IO接口中载入消息;
读取所述的消息;
基于所述的消息,对网络驱动、驱动接口、共享内存、虚拟网络驱动以及内核网络协议栈发起操作;
向网络应用程序发送消息或从网络应用程序传送消息,并在完成操作时在网络接口或第二IO接口中载入响应;以及,
读取所述的响应。
进一步地,在步骤(1)中,所述的建立共享内存,包括步骤:
(1.1)申请两段各512个页面大小的空间,计算出每个页的页框号,将这些页全设置成为保留页;
(1.2)网络驱动通过驱动接口控制所述的虚拟字符设备驱动,将所述两段空间映射到用户态的地址空间。
更为具体地,共享内存的建立即内存分配的过程进一步包括:
对网络交互体系的初始化,调用get_free_pages申请两段各512个页面大小的空间,分别名为rx_buff和tx_buff;
调用virt_to_page计算出每个页的页框号,对每个页调用SetPageReserved,将这些页全设置成为保留页;
网络驱动通过驱动接口调用map函数,继而调用了虚拟字符设备驱动提供的mmap函数,将这两段内存映射到用户态的地址空间。
进一步地,所述的共享内存包括发送缓冲区以及接收缓冲区,在步骤(3)中,
所述的向网络应用程序发送消息,包括步骤:
网络驱动调用驱动接口检查共享内存的接收缓冲区是否满,若满则丢包,不满则通过驱动接口将消息发送至接收缓冲区;以及,
内核网络协议栈调用虚拟网络驱动轮询接收缓冲区,通过虚拟网络驱动读取接收缓冲区内的消息并与网络应用程序进行消息交互;
所述的从网络应用程序传送消息,包括步骤:
内核网络协议栈调用虚拟网络驱动检查共享内存的发送缓冲区是否满,若满则丢包,不满则通过虚拟网络驱动将消息放入共享内存的发送缓冲区;以及,
网络驱动调用驱动接口轮询发送缓冲区,通过驱动接口读取发送缓冲区内的消息并与网络接口进行消息交互。
所述的消息在本实施例即为指定MAC地址或者广播包(即一般意义上的数据包);
向网络应用程序发送消息,即消息的接收,采用经优化的轮询方式,当接收缓冲区中有数据,虚拟网络驱动则不断地从接收缓冲区中取出数据,提交给内核网络协议栈,当接收缓冲区空时,将接收例程放入等待队列,等待指定时间后重启接收例程,具体可如图3所示,图3所述的数据接收流程中,等待的指定时间为4ms。
从网络应用程序传送消息,即消息的发送,进一步包括:在内核网络协议栈需要发送数据时,调用vn_ndev_tx,该函数将检查发送缓冲区是否已满,不满则将数据拷贝到缓冲区中,满了则丢弃该数据包;当发送缓冲区中有数据,用户态网络驱动则不断地从发送缓冲区中取出数据发送,当接收缓冲区空时,将发送例程放入等待队列,等待指定时间后重启发送例程,具体可如图4所示,图4所述的数据发送流程中,等待的指定时间为1ms。
更进一步地,轮询的实现是通过将轮询任务放入到工作队列中实现的,包括步骤:
a、在共享内存上建立工作队列;
b、将轮询任务放入到工作队列;
c、检查共享内存的缓冲区是否为空,如果未空则一直读取消息;如果共享内存的缓冲区为空,则将轮询任务放入工作队列等待指定的时间。
具体实现方式如下:
首先,将轮询任务放入到工作队列;
调用create_singlethread_workqueue建立一个工作队列wq,创建一个任务poll_work,通过INIT_WORK函数将该任务与轮询函数vn_ndev_poll绑定起来;最后,通过调用queue_delayed_work将该任务提交给工作队列wq,该任务将在指定的jiffies之后执行。
其次,检查接收缓冲区是否有数据包,如果有则一直读数据包,直到接收缓冲区空,并将轮询任务放入到工作队列等候;如果接收缓冲区为空,则将轮询任务放入工作队列等待指定的时间。
在轮询函数vn_ndev_poll中,该函数首先检查接收缓冲区是否为空,不为空则调用vn_ndev_do_poll接收数据包,然后调用queue_delayed_work将自身任务poll_work提交给工作队列。这样轮询函数就能按一定的时间间隔不断的被执行,这样也就实现了轮询。
Claims (2)
1.一种基于嵌入式***的网络交互***实现的网络交互方法,所述的嵌入式***能够通过***调用进入用户态以及核心态,其特征在于,
所述的基于嵌入式***的网络交互***包括:
用户态中的网络接口、网络驱动、用户态网络协议栈以及第一IO接口;第二IO接口以及驱动接口;
核心态中的内核网络协议栈、虚拟网络驱动以及虚拟字符设备驱动;以及,
共享内存;
所述的第一IO接口以及第二接口用于从网络应用程序接收消息以及向网络应用程序传递消息;其中,通过第一IO接口进行交互的消息携带由用户态网络协议栈的特定网络协议层执行的通用命令,通过第二IO接口进行交互的消息携带由内核网络协议栈的特定网络协议层执行的通用命令;
所述的用户态网络协议栈,处理用于执行的通用命令,依据通用命令生成由网络驱动执行的特定命令;
所述的内核网络协议栈,处理用于执行的通用命令,依据通用命令生成由虚拟网络驱动执行的特定命令;
虚拟网络驱动,执行内核网络协议栈的特定命令,访问内核网络协议栈并实现共享内存与内核网络协议栈之间的消息交互;
驱动接口,访问共享内存并实现网络驱动与共享内存之间的消息交互;以及,
虚拟字符设备驱动,用于向驱动接口提供核心态的控制接口以及将所述的共享内存映射至用户态的地址空间;
所述的共享内存被组织成循环缓冲区,并采用无锁的方式进行读写;
所述的网络交互方法包括以下步骤:
(1)对网络交互***的初始化,加载虚拟网络驱动以及虚拟字符设备驱动,建立共享内存;
(2)当所述的消息携带由用户态网络协议栈执行的通用命令,消息的接收或发送包括步骤:
在网络接口或第一IO接口中载入消息;
读取所述的消息;
基于所述的消息,对网络驱动以及用户态网络协议栈发起操作;
向网络应用程序发送消息或从网络应用程序传送消息,并在完成操作时在网络接口或第一IO接口中载入响应;以及,
读取所述的响应;
(3)当所述的消息携带由内核网络协议栈执行的通用命令,消息的接收或发送包括步骤:
在网络接口或第二IO接口中载入消息;
读取所述的消息;
基于所述的消息,对网络驱动、驱动接口、共享内存、虚拟网络驱动以及内核网络协议栈发起操作;
向网络应用程序发送消息或从网络应用程序传送消息,并在完成操作时在网络接口或第二IO接口中载入响应;以及,
读取所述的响应;
在步骤(1)中,所述的建立共享内存,包括步骤:
(1.1)申请两段各512个页面大小的空间,计算出每个页的页框号,将这些页全设置成为保留页;
(1.2)网络驱动通过驱动接口控制所述的虚拟字符设备驱动,将所述两段空间映射到用户态的地址空间;
所述的共享内存包括发送缓冲区以及接收缓冲区,在步骤(3)中,
所述的向网络应用程序发送消息,包括步骤:
网络驱动调用驱动接口检查共享内存的接收缓冲区是否满,若满则丢包,不满则通过驱动接口将消息发送至接收缓冲区;以及,
内核网络协议栈调用虚拟网络驱动轮询接收缓冲区,通过虚拟网络驱动读取接收缓冲区内的消息并与网络应用程序进行消息交互;
所述的从网络应用程序传送消息,包括步骤:
内核网络协议栈调用虚拟网络驱动检查共享内存的发送缓冲区是否满,若满则丢包,不满则通过虚拟网络驱动将消息放入共享内存的发送缓冲区;以及,
网络驱动调用驱动接口轮询发送缓冲区,通过驱动接口读取发送缓冲区内的消息并与网络接口进行消息交互。
2.如权利要求1所述的网络交互方法,其特征在于,所述的轮询包括步骤:
a、在共享内存上建立工作队列;
b、将轮询任务放入到工作队列;
c、检查共享内存的缓冲区是否为空,如果未空则一直读取消息;如果共享内存的缓冲区为空,则将轮询任务放入工作队列等待指定的时间。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210081358.2A CN102662910B (zh) | 2012-03-23 | 2012-03-23 | 基于嵌入式***的网络交互体系及网络交互方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210081358.2A CN102662910B (zh) | 2012-03-23 | 2012-03-23 | 基于嵌入式***的网络交互体系及网络交互方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102662910A CN102662910A (zh) | 2012-09-12 |
CN102662910B true CN102662910B (zh) | 2014-10-15 |
Family
ID=46772406
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210081358.2A Active CN102662910B (zh) | 2012-03-23 | 2012-03-23 | 基于嵌入式***的网络交互体系及网络交互方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102662910B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108268328B (zh) | 2013-05-09 | 2022-04-22 | 华为技术有限公司 | 数据处理装置及计算机 |
CN103593225B (zh) * | 2013-10-30 | 2016-10-05 | 浙江大学 | 移动虚拟化场景中多Android***复用Binder IPC机制的方法 |
CN104077190A (zh) * | 2014-06-09 | 2014-10-01 | 汉柏科技有限公司 | 一种arm网口驱动的用户态移植方法和*** |
CN105827588B (zh) * | 2015-12-23 | 2019-03-15 | 广东亿迅科技有限公司 | 一种基于网络驱动层的流媒体数据分发*** |
CN106020926B (zh) | 2016-04-29 | 2019-10-25 | 华为技术有限公司 | 一种用于虚拟交换机技术中数据传输的方法及装置 |
CN108712308B (zh) * | 2018-06-06 | 2021-11-26 | 郑州云海信息技术有限公司 | 虚拟网络中检测网络设备的方法和装置 |
CN110618962A (zh) * | 2019-08-16 | 2019-12-27 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | Ft-m6678芯片的多核网络并发访问方法、***及介质 |
CN112463662B (zh) * | 2020-12-16 | 2024-04-05 | 福州创实讯联信息技术有限公司 | 一种用户态控制i2c设备的方法与终端 |
CN113067849B (zh) * | 2021-02-05 | 2022-05-10 | 湖南国科亿存信息科技有限公司 | 基于Glusterfs的网络通信优化方法及装置 |
CN113259400B (zh) * | 2021-07-14 | 2021-09-28 | 南京易科腾信息技术有限公司 | 基于网络协议的网络交互***、方法及存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101873337A (zh) * | 2009-04-22 | 2010-10-27 | 电子科技大学 | 一种基于rt8169千兆网卡和Linux操作***的零拷贝数据捕获技术 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040128391A1 (en) * | 2002-12-31 | 2004-07-01 | Robert Patzer | Method and system for managing a validity period in association with a presence attribute |
EP1496589A1 (de) * | 2003-07-11 | 2005-01-12 | Siemens Aktiengesellschaft | Vorrichtung und Verfahren zum Schutz einer elektrischen Maschine |
CN101478549B (zh) * | 2009-01-20 | 2011-10-05 | 电子科技大学 | 共享内存流媒体服务器的运行方法及其功能模块构架 |
CN102122255B (zh) * | 2011-03-15 | 2012-09-05 | 合肥华云通信技术有限公司 | 利用虚拟字符设备和genetlink实现Linux***中进程间通信的方法 |
-
2012
- 2012-03-23 CN CN201210081358.2A patent/CN102662910B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101873337A (zh) * | 2009-04-22 | 2010-10-27 | 电子科技大学 | 一种基于rt8169千兆网卡和Linux操作***的零拷贝数据捕获技术 |
Also Published As
Publication number | Publication date |
---|---|
CN102662910A (zh) | 2012-09-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102662910B (zh) | 基于嵌入式***的网络交互体系及网络交互方法 | |
CN101304373B (zh) | 一种实现局域网内高效传输大块数据的方法及*** | |
CN101303656B (zh) | 一种Java应用程序远程直接内存访问方法 | |
CN103942178A (zh) | 多核处理器上实时操作***与非实时操作***之间的通信方法 | |
CN101957808B (zh) | 多cpu间的通信方法、***及cpu | |
JP2006500672A (ja) | バス接続システム | |
CN114553635B (zh) | Dpu网络设备中的数据处理方法、数据交互方法及产品 | |
CN102065568B (zh) | 基于数据描述符的mac软硬件交互方法及其硬件实现装置 | |
CN108366018A (zh) | 一种基于dpdk的网络数据包处理方法 | |
EP4387207A1 (en) | Communication method based on user-mode protocol stack, and corresponding apparatus | |
CN110874336B (zh) | 一种基于申威平台的分布式块存储低延迟控制方法及*** | |
WO2024082944A1 (zh) | 一种多处理器数据交互方法、装置、设备及存储介质 | |
CN110971621B (zh) | 基于sdio接口的嵌入式多cpu互联电路、互联方法及驱动方法 | |
CN101452430A (zh) | 多处理器之间的通信方法与包括多处理器的通信装置 | |
CN108829530B (zh) | 一种图像处理方法及装置 | |
CN102843435A (zh) | 一种在集群***中存储介质的访问、响应方法和*** | |
CN101778038B (zh) | 基于千兆以太网的嵌入式设备高速数据传输*** | |
CN113285839A (zh) | 基于dpdk的可编程数据平面软件交换机的设计方法 | |
CN103019975A (zh) | 通用串行总线传输控制方法及主机设备 | |
CN101867565A (zh) | 一种移动宽带设备的通用驱动方法及驱动器 | |
CN110659143A (zh) | 一种容器间的通讯方法、装置及电子设备 | |
CN113923061B (zh) | 基于智能网卡的gpu网络通信方法、智能网卡、介质、设备 | |
CN101980170A (zh) | 一种微内核***中软件模块的通信方法、***及装置 | |
CN102117261A (zh) | 一种芯片内部处理器之间的通信方法 | |
CN104156332A (zh) | 基于外部pci-e连接的高性能并行计算方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |