用于数据通信的编程接口的制作方法
【专利摘要】在用于数据通信的编程接口的实施例中,可以从对应于应用的用户模式虚拟存储缓冲器分配请求队列和完成队列。该请求队列和完成队列可以被锁定到物理存储器并且之后被映射到内核模式系统地址,从而使得该请求队列和完成队列可以由内核模式执行线程访问。从应用接收请求以便内核处理该请求队列中的数据,并且向该内核发布系统调用以便内核模式执行线程处理该请求。内核模式执行线程之后可以处理来自该应用的附加请求而无需发布附加的系统调用。
【专利说明】用于数据通信的编程接口
【背景技术】 [0001]目前,连接高性能联网应用与计算设备内核的应用编程接口(API)不能有效地应对联网应用的增加数据处理请求。例如,“Windows Socket^API (即“Winsock”)被配置成促进由应用发布的操作,以便向与物理网络设备通信的内核层发送数据并且从内核层接收数据。一般地,在套接字(socket)的寿命过程期间发布多次发送和接收操作。因此,作为整体的发送和接收处理开销可以组成网络处理的大半并且有可能组成应用的大半。
[0002]例如在传统的Winsock API中,启动发送和接收操作涉及做系统调用来将用户模式虚拟存储器锁定到物理存储器并且启动数据到内核中的传递。之后典型地需要附加的系统调用来获得传递的完成状态并且将用户模式虚拟存储器从物理存储器中解锁。因此,如果应用一次又一次地使用相同的存储器来发送和接收数据,那么现有的Winsock发送和接收API会招致多余的存储器锁定(pin)和解锁(unpin)。
【发明内容】
[0003]本
【发明内容】
被提供来介绍用于数据通信的编程接口的简化概念,并且这些概念将在下文的【具体实施方式】中得到进一步的描述和/或在附图中被示出。本
【发明内容】
不应当被看作是描述所要求保护的主题的本质特征,也不是用来确定或限制所要求保护的主题的范围。
[0004]本文描述了用于数据通信的编程接口。在实施例中,可以从对应于应用的用户模式虚拟存储缓冲器分配请求队列。该请求队列可以被锁定到物理存储器并且之后被映射到内核模式系统地址从而使得内核模式执行线程可以访问该请求队列。可以为内核从应用接收请求来处理该请求队列中的数据,并且为该内核模式执行线程向内核发布(issue)系统调用来处理该请求。该内核模式执行线程之后可以处理来自该应用的附加请求而无需发布附加的系统调用。例如,I/O请求可以是一个系统调用,但是不需要任何存储器锁定开销,并且该I/O的完成将无需任何系统调用开销而发生。可以注册套接字来将数据请求从应用提供到内核。在实施例中,注册套接字包含向该套接字识别完成队列、从用户模式虚拟存储缓冲器分配请求队列,以及将该请求队列锁定到物理存储器。
[0005]在其它的实施例中,将用户模式虚拟存储缓冲器注册为与应用对应。从该用户模式虚拟存储缓冲器分配完成队列并将该完成队列锁定到物理存储器。之后将该完成队列映射到内核中的内核模式系统地址。该完成队列经由内核模式系统地址接收来自内核模式执行线程的完成通知,并且使得该应用经由用户模式虚拟存储缓冲器能够访问该完成通知而无需任何内核进行用户系统调用的开销。
【专利附图】
【附图说明】
[0006]参考下列附图来描述用于数据通信的编程接口的实施例。在附图中使用相同的数字来标记图中示出的类似特征和组件,其中:
图1图示了一个示例计算设备,其中可以实现用于数据通信的编程接口的实施例。[0007]图2图示了根据一个或多个实施例,到内核的数据请求的一个示例。
[0008]图3图示了根据一个或多个实施例,用于数据通信的编程接口的(多个)示例方法。
[0009]图4图示了根据一个或多个实施例,用于数据通信的编程接口的(多个)附加示例方法。
[0010]图5图示了可以实现用于数据通信的编程接口的多个实施例的一个示例设备的各种组件。
【具体实施方式】
[0011]本文描述了一种用于数据通信的编程接口。可以在计算设备的软件中实现“通信栈”来经由网络通信数据。典型的通信栈包含其中实现联网应用的应用层和其中实现操作系统内核的内核层。所述应用层为应用暴露从该通信栈的底层细节中抽象出来的接口。所述内核层与被配置成在网络上通信数据的联网设备交互。
[0012]典型地,为了在网络上发送数据,应用推送数据通过用户模式应用编程接口(API),之后联网栈对该数据进行处理来构造(frame)用户模式和内核模式二者中的协议。根据本文所述,用户模式指的是一种执行模式,其中对诸如物理存储器和I/O设备之类的系统资源的访问受到操作系统的保护,以便在运行于同一系统中的多个应用之间提供隔离。根据本文所述,内核模式指的是一种执行模式,其中提供对所有系统资源的访问但是仅仅允许操作系统代码的特定部分运行在内核模式中。该数据之后被移动到内核层中的诸如网卡(NIC)之类的联网设备,该联网设备促进数据在网络上的通信。NIC是一种由系统使用来在网络上发送和接收数据的硬件设备。
[0013]因此,应当指出的是,为了使应用在网络上通信数据,该应用必须首先将数据从应用层传输到内核层。编程接口(比如微软公司的“Windows Socket”,即“Winsock”)被配置成连接应用层与内核层并且可以被用于促进应用层和内核层之间的数据传递。
[0014]在传统的Winsock API中,启动(initiate)发送和接收操作涉及做系统调用来将用户模式虚拟存储器锁定到物理存储器并且启动数据到内核中的传递。如本文所述,“系统调用”指的是用于用户模式代码向运行在内核模式中的系统代码发布请求的一种机制。这就是用户模式应用如何以受保护的方式获取访问系统资源的权限并且使用系统资源的方式。另外,典型地使用附加的系统调用来得到该传递的完成状态并且之后从物理存储器解锁用户模式虚拟存储器。因此,如果该应用一次又一次地使用相同的存储器来发送和接收数据,那么现有的Winsock发送和接收API将招致多余的存储器锁定和解锁。
[0015]对内核的系统调用的高频率通常导致内核上沉重的处理负载,该内核也许不能有效地应对高容量的联网数据处理请求,特别是对于联网应用的高速数据处理需求来说更是如此。因此,通信延迟(也被称作等待时间)通常由应用层和内核层之间的数据通信所导致。另外,联网应用在数据通信期间会经历抖动、等待时间的变化。
[0016]在实施例中,描述了一种与现有通信栈、应用和网络协议兼容的编程接口。在使得能够实现高速数据通信方面的在先尝试已经尝试修改整个通信栈。应该理解本文描述的编程接口可以被实现为现有编程接口的修改,并且不会影响通信栈。该编程接口的实施例通过降低对内核的系统调用的数量,改进了处理器负载,缩短了网络通信的等待时间,并且减少了抖动。[0017]该编程接口将用户模式虚拟存储器到物理存储器的锁定和导出同数据传递请求启动和完成处理分离开来。因此,用户模式应用只要注册用户模式虚拟存储缓冲器一次(这可能涉及该存储缓冲器到该物理存储器位置的锁定),之后就可以将所注册的用户模式虚拟存储缓冲器用于多个数据传递请求而无需再注册或解锁该存储缓冲器。通过将数据传递启动和完成与存储器的锁定和解锁分离开来,该编程接口使得能够实现数据传递启动和完成处理而无需做多次系统调用。
[0018]在实施例中,该编程接口使用请求队列来请求启动并且使用完成队列来用于找回(retrieve)请求完成。该请求队列和完成队列可以从对应于该应用的用户模式虚拟存储缓冲器被分配并且被锁定物理存储器。之后可以将该请求队列和完成队列映射到内核模式系统地址来使得内核模式执行线程能够访问请求队列和完成队列。
[0019]这种配置使得用户模式应用能够连续将各个请求排队到请求队列中,同时内核模式执行线程(诸如系统线程或中断)连续从该请求队列中排出各个请求来处理各请求。由于在内核模式中完成各个请求,因此内核模式执行线程可以将完成通知排队到到完成队列中。之后用户模式应用可以直接将这些完成通知从完成队列中出列(dequeue)。应当指出的是,之后该编程接口只需要在没有内核模式执行线程已经被指派来处理来自请求队列的已排队请求时发布系统调用。
[0020]尽管用于数据通信的编程接口的特征和概念可以实现在任何数目的不同设备、系统、环境、网络和/或配置中,但是在下文中的示例设备、系统和方法的背景下来描述用于数据通信的编程接口的实施例。
[0021]图1图示了一个示例计算设备100,在其中可以实现用于数据通信的编程接口的各种实施例。该示例计算设备100可以被配置成任何类型的计算设备或服务器,并且可以采用任何数目的不同组件和不同组件的组合来实现,这将参考图5中的示例设备来进一步描述。例如,计算设备100可以被实现为服务器、电视客户端设备、计算设备、游戏系统、电器设备、电子设备,和/或任何其它类型的可以实现在网络上发送和接收数据的设备中的一种或其组合。因此,该计算设备100还可以实现为被实现来接收和/或通信无线数据的无线设备,诸如移动电话(例如蜂窝式、VoIP、WiFi等等)、便携式计算机设备、媒体播放器设备,和/或任何其它能够发送和接收数据的无线设备中的一种或其组合。
[0022]计算设备100可以经由网络102通信数据,该网络102可以被实现为包含促进数据通信的有线和/或无线网络。也可以通过使用任何类型的网络拓扑和/或通信协议来实现该网络,并且该网络可以被表示或者否则被实现为两个或更多网络的组合。该网络也可以包含由移动运营商管理的移动运营商网络,诸如通信服务提供商、手机提供商,和/或因特网服务提供商之类。移动运营商可以促进用于任何类型的无线设备或移动电话(例如蜂窝式、VoIP、WiFi等等)的移动数据和/或语音通信。
[0023]计算设备100可以包含一个或多个处理器104(例如微处理器、控制器等等中的任一设备),其处理各种计算机可执行指令来控制该设备的工作。该设备还包含一个或多个使得能够实现数据存储的存储器设备106 (例如计算机可读存储介质)。存储器设备可以被实现为任何类型的存储器、存储介质,和/或合适的电子数据存储装置。
[0024]计算设备100还可以包含编程接口 108,其被配置成将各种应用110 (例如联网应用)与通信栈的底层细节连接。该应用可以被实现成经由网络发送和接收数据。该编程接口 108还被配置成将内核112 (例如操作系统内核)与联网设备114 (诸如网卡之类)连接来在网络上通信数据。该编程接口可以被实现为计算机可执行指令(诸如软件应用之类),并且由该计算设备的所述一个或多个处理器执行来实现本文描述的各种实施例。
[0025]在一个实施例中,编程接口 108被实现成接收诸如来自应用110的注册请求来在网络102上通信数据。为了在网络上通信数据,由内核112处理该数据,该内核112被实现成促进数据到联网设备114的通信来进行在网络上的通信。编程接口 108被实现成接收注册请求并且之后通过注册用户模式虚拟地址和长度二者来注册对应于应用110的用户模式虚拟存储缓冲器116。注册用户模式虚拟存储缓冲器还可以包含向应用发送注册识别符,在数据传递请求期间该应用可以使用该注册识别符。
[0026]编程接口 108还可以被实现成从用户模式虚拟存储缓冲器116分配完成队列。该完成队列被分配得足够大以在该注册请求中保持由应用110指定的完成条目(entry)的数目。分配该完成队列后,该编程接口可以将完成队列锁定到物理存储器118并且将该完成队列映射到内核112中的内核模式系统地址(例如在虚拟存储器空间中)。
[0027]通过将物理存储器118的相同区域映射到用户模式虚拟存储缓冲器116和内核模式系统地址二者,编程接口 108使得应用110和内核112能够同时访问该完成队列。该完成队列能够经由内核模式系统地址从由内核112启动的内核模式执行线程接收完成通知,并且使得应用110能够经由用户模式虚拟存储缓冲器访问该完成通知。该完成队列可以被实现为环形FIFO队列,其使得内核能够向完成队列公布完成,其之后可以由该应用找回。
[0028]编程接口 108还可以注册从应用110向内核112提供数据请求的套接字。在一个实施例中,该编程接口注册现有的套接字,比如Winsock API。注册该套接字包括从用户模式虚拟存储缓冲器116分配请求队列。该请求队列被分配得足够大来保持由该应用指定的请求条目的数目。注册该套接字还包含将该请求队列锁定到物理存储器118,以及将该请求队列映射到内核模式系统地址。通过将物理存储器的相同区域映射到用户模式虚拟存储缓冲器和内核模式系统地址二者,该编程接口使得应用110和内核112能够同时访问该请求队列。
[0029]该请求队列可以经由用户模式虚拟存储缓冲器从应用接收数据,并且使得内核模式执行线程能够经由内核模式系统地址访问数据。该请求队列也可以被实现为环形FIFO队列,其使得该应用能够在该请求队列中公布请求,其之后可以由内核找回。作为注册进程的一个部分,该编程接口还被实现成向该套接字识别完成队列,比如通过将该完成队列的位置和长度传送到该套接字。
[0030]图2图示了根据用于数据通信的编程接口的多个实施例的到内核的数据请求的一个示例200。该示例200包含已经参考图1描述的应用110、用户模式虚拟存储缓冲器116,以及内核模式虚拟存储器120。如图2所示,应用110和用户模式虚拟存储缓冲器116位于应用层202中,并且内核模式虚拟存储器120位于内核层204中。
[0031]在这个示例中并且根据上文的讨论,编程接口 108已经注册了能够从应用向内核提供数据请求的套接字。例如,该编程接口可以从用户模式虚拟存储缓冲器116分配请求队列206,并且将该请求队列映射到内核模式虚拟存储器120中(例如在内核模式系统地址处)的对应请求队列208。另外,该编程接口可以从该用户模式虚拟存储缓冲器分配完成队列210,并且将该完成队列映射到该内核模式虚拟存储器中(例如在内核模式系统地址处)的对应完成队列212。
[0032]在一个实施例中,编程接口 108被实现成从应用110接收请求以供该内核处理请求队列206中的数据。该请求可以由该应用通过在请求队列206中放置数据并且之后为该编程接口识别请求队列206来生成,比如通过包含请求队列206的注册识别符,该注册识别符之前由该编程接口发送到该应用。
[0033]编程接口 108被实现成确定是否指派内核模式执行线程214 (诸如系统线程或中断)来处理该请求。该编程接口可以发布系统调用到内核,以便内核模式执行线程214处理该请求。一旦该内核模式执行线程被启动来处理该请求,则该应用能够连续地将请求排队到该请求队列中,而该内核模式执行线程获取来自该请求队列的请求来处理来请求。因此,如果已经指派一个内核模式执行线程来处理位于该请求队列的请求,那么该编程接口不需要发布随后的系统调用,因为该内核模式执行线程被实现成自动处理各请求。
[0034]内核模式执行线程214被实现成通过经由内核模式系统地址(例如在虚拟存储器空间中)从请求队列208找回数据来处理请求。例如,如图2中的箭头所示,由应用110放置在请求队列206中的数据被映射到内核模式虚拟存储器120中的请求队列208,在那里它可以由该内核模式执行线程找回和处理。处理该数据后,内核模式执行线程214被实现成在内核模式虚拟存储器120中的完成队列212中公布完成通知。例如,该内核模式执行线程可以在处理该数据后通过处理该请求并且将该请求提供给促进网络上的数据通信的联网设备(比如网卡)来公布完成通知。
[0035]应用110被实现成经由用户模式虚拟存储缓冲器116监视完成队列210来探测由该内核模式执行线程公布的完成通知。例如,如图2中的箭头所示,由该内核模式执行线程放置在完成队列212中的完成通知被映射到在用户模式虚拟存储缓冲器116中的完成队列210,在那里它被应用110探测到。该完成通知向该应用指示该请求已经由内核模式执行线程所处理。在探测到该完成通知后,该应用随后可以将该完成通知从该完成队列出列并且重用请求队列206 (即刚刚由最近完成的请求使用的请求队列)来用于附加的请求。在一个实施例中,如果在该请求被处理后应用先前请求过发送信号,那么该内核模式执行线程被实现成在处理该请求后直接向该应用发送信号。
[0036]在一个实施例中,编程接口 108被实现成从应用110接收附加请求,以便内核处理请求队列206中的附加数据。例如,在该应用探测到完成通知后,该应用可以将附加数据放置在该请求队列中。在这个实例中,已经指派内核模式执行线程214来处理该请求,并且该内核模式执行线程之后可以处理该附加请求而无需发布附加系统调用到内核。
[0037]在一个实施例中,该编程接口可以被实现成检查已经被放置在该请求和完成队列中的数据来避免系统级损坏(例如避免损坏其它应用或系统状态)。例如,应当指出的是,当用户模式应用代码直接访问该请求或完成队列时,它可能具有通过改变该队列的内容来损坏该队列的完整性的能力。因此,通过执行检查,该编程接口确保了用户模式应用至多只能够损坏它自身的完整性,但是不会影响其它应用的完整性或该系统的完整性。
[0038]根据用于数据通信的编程接口的一个或多个实施例,分别参考图3和图4来描述示例方法300和400。一般地,通过使用软件、固件、硬件(例如固定逻辑电路)、手工处理,或其任何组合可以实现本文描述的任何服务、功能、方法、步骤、组件和模块。软件实现代表当由计算机处理器执行时实现特定任务的程序代码。可以在计算机可执行指令的一般背景下描述(多种)示例方法,其可以包含软件、应用、例程、程序、对象、组件、数据结构、步骤、模块、功能等等。该程序代码可以被存储在一个或多个计算机可读存储介质设备中,该计算机可读存储介质可以在计算机处理器本地和/或远离计算机处理器。该方法也可以在分布式计算环境中由多个计算机设备实施。此外,本文描述的特征是独立于平台的,并且可以在具有各种处理器的各种计算平台上实现。
[0039]图3图示了用于数据通信的编程接口的(多个)示例方法300,并且参考图1和图2中示出的编程接口 108来描述该方法。方法框被描述的顺序不旨在被解释为一种限制,并且任何数目的所描述的方法框都可以以任何顺序组合来实现方法或可替换的方法。
[0040]在框302处,注册对应于一个应用的用户模式虚拟存储缓冲器。例如,编程接口108 (图1)注册对应于应用110的用户模式虚拟存储缓冲器116。在框304处,从该用户模式虚拟存储缓冲器分配完成队列并且将该完成队列锁定到物理存储器。例如,编程接口 108从用户模式虚拟存储缓冲器116分配完成队列210 (图2)并且将该完成队列锁定到物理存储器118。
[0041]在框306处,将该完成队列映射到内核中的内核模式系统地址。例如,编程接口108将完成队列210映射到内核112中的内核模式系统地址。该完成队列可以经由内核模式系统地址从内核模式执行线程214接收完成通知并且使得应用能够经由用户模式虚拟存储缓冲器访问该完成通知。在框308处,注册一个从该应用向内核提供数据请求的套接字。例如,编程接口 108注册一个从应用110向内核112提供数据请求的套接字。在实施例中,注册套接字可以包含在框310、312和314处描述的特征。
[0042]在框310处,从用户模式虚拟存储缓冲器分配请求队列并且将该请求队列锁定到物理存储器。例如,编程接口 108从用户模式虚拟存储缓冲器116分配请求队列206并且将该请求队列锁定到物理存储器118。在框312处,将该请求队列映射到内核中的内核模式系统地址。例如,编程接口 108将请求队列206映射到内核112中的内核模式系统地址。该请求队列被实现成经由该用户模式虚拟存储缓冲器从该应用接收数据并且使得该内核模式执行线程能够经由该内核模式系统地址访问该数据。在框314处,向该套接字识别该完成队列。例如,编程接口 108向套接字识别完成队列210。
[0043]图4图示了用于数据通信的编程接口的(多个)示例方法400,并且参考图1和图2中示出的编程接口 108来描述该方法。在实施例中,参考图4描述的示例方法框在图3的方法框已经完成后开始(例如在框314处向套接字识别完成队列后)。方法框被描述的顺序不旨在被解释为一种限制,并且任何数目的所描述的方法框都可以以任何顺序组合来实现方法或可替换的方法。
[0044]在框402处,从应用接收请求以便该内核处理请求队列中的数据。例如,编程接口108 (图1)从应用110接收请求以便该内核112处理该请求队列中的数据。该请求可以包含注册识别符。在框404处,向内核发布系统调用以便内核模式执行线程处理该请求。例如,编程接口 108发布系统调用给内核112以便内核模式执行线程214处理该请求。
[0045]在框406处,在完成队列中接收完成通知。例如,当来自该应用的请求被处理时,内核模式执行线程214可以经由内核模式虚拟存储缓冲器120在完成队列210中公布完成通知。
[0046]在框408处,从该应用接收附加请求,以便该内核处理请求队列中的附加数据,并且在框410处,内核模式执行线程处理该附加请求而无需发布系统调用。例如,编程接口108从应用110接收附加请求以便内核112处理请求队列206中的附加数据,并且指派内核模式执行线程214来处理该附加请求。该内核模式执行线程被实现成处理附加请求而无需向内核发布附加的系统调用。
[0047]图5图示了一个示例设备500的各种组件,其可以被实现为参考图1-4描述的任何设备或由设备实现的服务。在实施例中,该设备可以以任何形式的用电设备(consumer)、计算机、服务器、便携式设备、用户、通信、电话、导航、电视、电器、游戏设备、媒体回放设备和/或电子设备被实现为固定或移动设备中的任何一种或组合。该设备还可以与用户(即人)和/或操作该设备的实体相关联,从而使得设备描述包含用户、软件、固件、硬件和/或设备的组合的逻辑设备。
[0048]设备500包含通信设备502,其使得能够实现设备数据504的有线和/或无线通信,设备数据504例如是所接收的数据、正在被接收的数据、预定用于广播的数据、数据的数据包等等。该设备数据或其它设备内容可以包含该设备的配置设置、该设备上存储的媒体内容、和/或与该设备的用户相关联的信息。存储在该设备上的媒体内容可以包含任何类型的音频、视频和/或图像数据。该设备包含一个或多个数据输入506,经由该数据输入506可以接收任何类型的数据、媒体内容和/或输入,比如用户可选择输入、消息、通信、音乐、电视内容、录制的视频内容,以及接收自任何内容和/或数据来源的其它任何类型的音频、视频和/或图像数据。
[0049]设备500还包含通信接口 508,诸如串行、并行、网络或无线接口中的任何一种或多种。该通信接口提供该设备与网络之间的连接和/或通信链路,通过该网络其它电子的、计算的和通信设备与该设备通信数据。
[0050]设备500包含一个或多个处理器510 (例如任何微处理器、控制器等等),其处理各种计算机可执行指令来控制该设备的工作。可替换地或附加地,该设备可以由与处理和控制电路有关地实现的软件、硬件、固件或固定逻辑电路中的任何一种或其组合来实现,其一般地被指示为512。尽管未示出,该设备可以包含在该设备内耦合各种组件的系统总线或数据传递系统。系统总线可以包含不同总线结构中的任何一种或其组合,比如存储总线或存储控制器、外围总线、通用串行总线、和/或利用各种总线架构中的任何种类的处理器或局部总线。
[0051]设备500还包含一个或多个使得能够实现数据存储的存储器设备(例如计算机可读存储介质)514,诸如随机读取存储器(RAM)、非易失性存储器(例如只读存储器(ROM)、闪速存储器等等),以及磁盘存储设备。磁盘存储设备可以被实现为任何类型的磁或光学存储设备,比如硬盘驱动器、可刻录的和/或可重写的盘等等。该设备还可以包含海量存储媒体设备。
[0052]计算机可读介质可以是任何由计算设备访问的可用媒介或介质。作为示例而非限制,计算机可读介质可以包括存储介质和通信介质。存储介质包含实现在用于信息存储的任何方法或技术中的易失性和非易失性、可移动和不可移动的介质,这些信息为比如计算机可读指令、数据结构、程序模块或其它数据。存储介质包含但是不限于RAM、R0M、EEPR0M、闪速存储器或其它存储技术、CD-ROM、数字多功能光盘(DVD)或其它光学存储装置、磁盒、磁带、磁盘存储装置或其它磁存储设备,或任何其它能够被用于存储信息并且可由计算机访问的媒介。
[0053]通信介质典型地包含计算机可读指令、数据结构、程序模块、或其它在调制数据信号中的数据,比如载波或其它运输机制。通信介质还包含任何信息输送介质。术语“调制数据信号”意味着一种信号,它的一种或多种特性可以以在该信号中编码信息的方式而被设置或改变。作为示例而非限制,通信介质包含诸如有线网络或直接有线连接之类的有线介质和诸如超声、RF、红外或其它无线介质之类的无线介质。
[0054]存储装置514提供数据存储机制来存储设备数据504、其它类型的信息和/或数据,以及各种设备应用516。例如,操作系统518可以保持作为具有存储装置并在处理器上被执行的软件应用。该设备应用还可以包含设备管理器(比如任何形式的控制应用)、软件应用、信号处理和控制模块、源于特定设备的代码、针对特定设备的硬件抽象层等等。在这个示例中,设备应用516包含被示出作为软件模块和/或计算机应用的编程接口 520。可替换地或附加地,该编程接口可以被实现为硬件、软件、固件、固定逻辑或其任何组合。
[0055]设备500还包含音频和/或视频处理系统522,其为音频系统524生成音频数据和/或为显示系统526生成显示数据。该音频系统和/或显示系统可以包含处理、显示和/或否则再现音频、视频、显示和/或图像数据的任何设备。可以经由RF (射频)链路、S端子输出(S-video)链路、复合视频链路、分量视频链路(component video link)、DVI (数字视频接口)、模拟音频连接,或其它类似的通信链路将显示数据和音频信号通信到音频设备和/或显示设备。在实现中,该音频系统和/或显示系统可以是该设备的外部组件。可替换地,该音频系统和/或显示系统是该示例设备的集成组件。
[0056]尽管已经以具体到特征和/或方法的语言描述了用于数据通信的编程接口的各个实施例,但是随附的权利要求的主题不一定被限制为所描述的具体特征或方法。相反地,具体特征和方法作为用于数据通信的编程接口的示例实现而被公开。
【权利要求】
1.一种计算机实现的方法,包括: 注册对应于应用的用户模式虚拟存储缓冲器; 从用户模式虚拟存储缓冲器分配完成队列并且将该完成队列锁定到物理存储器; 将完成队列映射到内核中的第一内核模式系统地址,该完成队列被配置成经由该内核模式系统地址从内核模式执行线程接收完成通知并且使得该应用能够经由该用户模式虚拟存储缓冲器访问该完成通知; 注册被配置成从应用向内核提供数据请求的套接字,所述注册套接字包括: 从用户模式虚拟存储缓冲器分配请求队列并且将该请求队列锁定到物理存储器;将请求队列映射到第二内核模式系统地址,该请求队列被配置成经由该用户模式虚拟存储缓冲器从该应用接收数据并且使得内核模式执行线程能够经由第二内核模式系统地址访问该数据;以及 向该套接字识别该完成队列。
2.根据权利要求1所述的计算机实现的方法,其中所述注册用户模式虚拟存储缓冲器还包括向应用发送该缓冲器的注册识别符。
3.根据权利要求2所述的计算机实现的方法,进一步包括: 从该应用接收请求以便内核处理请求队列中的数据,该请求包含缓冲器的注册识别符;以及 发布系统调用到内核以便内 核模式执行线程处理该请求。
4.根据权利要求3所述的计算机实现的方法,其中所述内核模式执行线程被配置成通过经由第二内核模式系统地址从请求队列找回数据来处理该请求。
5.根据前面权利要求3所述的计算机实现的方法,进一步包括接收完成队列中的完成通知,当请求被处理时,由内核模式执行线程经由内核模式虚拟存储缓冲器在完成队列中公布该完成通知。
6.根据权利要求5所述的计算机实现的方法,其中所述应用被配置用于: 经由用户模式虚拟存储缓冲器监视完成队列来探测由内核模式执行线程公布的完成通知,该完成通知向应用指示该请求已经由内核模式执行线程所处理;以及为响应于探测到完成通知,而针对附加请求重用该请求队列。
7.根据权利要求3所述的计算机实现的方法,进一步包括从应用接收附加请求以便内核处理请求队列中的附加数据,并且内核模式执行线程处理该附加请求而无需向内核发布附加系统调用。
8.一种计算设备,包括: 至少存储器和处理器来实现编程接口,该编程接口被配置成: 从对应于应用的用户模式虚拟存储缓冲器分配请求队列和完成队列; 将该请求队列和该完成队列锁定到物理存储器;以及 将该请求队列和完成队列映射到内核中的内核模式系统地址来使得内核模式执行线程能够访问该请求队列和完成队列。
9.根据权利要求8所述的计算设备,其中所述编程接口被进一步配置成: 从应用接收请求以便内核处理请求队列中的数据;以及 向内核发布系统调用以便内核模式执行线程处理该请求,该内核模式执行线程被进一步配置成处理来自该应用的附加请求。
10.根据权利要求9所述的计算设备,其中所述内核模式执行线程被配置成通过从请求队列找回数据来处理来自该应用的请求,并且其中所述内核模式执行线程被进一步配置成处理来自该应用的附加请求 而无需编程接口发布附加的系统调用。
【文档编号】G06F9/06GK103608767SQ201280030914
【公开日】2014年2月26日 申请日期:2012年6月13日 优先权日:2011年6月23日
【发明者】O.N.埃尔图盖, K.E.霍尔顿, J.尼维尔特 申请人:微软公司