存储器描述符列表高速缓存和管道处理的制作方法

文档序号:11450404阅读:305来源:国知局
存储器描述符列表高速缓存和管道处理的制造方法与工艺



背景技术:

用于使用计算设备的图像捕获设备来捕获图像的常规技术将图像存储在缓冲器中以便通过管道进行处理。每次要访问缓冲器时,创建缓冲器,然后使用探测、锁定和映射操作进行访问。由于每次执行操作时这种访问可能花费几毫秒,因此这可能会由于访问缓冲器的次数而对操作效率造成严重的影响,特别是在遇到被捕获的不断增大尺寸的图像时。



技术实现要素:

描述了存储器描述符列表高速缓存和管道处理技术。在一个或多个示例中,一种方法被配置为提高计算设备的管道内的缓冲器使用的效率。该方法包括,在计算设备的存储器中创建缓冲器,并且由计算设备高速缓存存储器描述符列表,该存储器描述符列表在缓冲器信息高速缓存器中描述缓冲器,并且与用作对存储器描述符列表的查找的句柄相关联。该方法还包括,传递句柄以通过计算设备的管道,从而由管道的一个或多个阶段对缓冲器内的数据进行处理,使得由所述一个或多个阶段通过作为调用的一部分将句柄用作查找来从缓冲器信息高速缓存器获得针对缓冲器的存储器描述符列表,以获得对数据的访问。

在一个或多个示例中,描述了一种提高由计算设备的管道对缓冲器内的数据的访问的效率的方法。该方法包括:由要访问缓冲器内的数据的计算设备的管道的至少一个阶段接收句柄,由所述至少一个阶段调用该句柄的源以通过将句柄用作在缓冲器信息高速缓存器中的查找来由所述计算设备获得描述缓冲器的存储器描述符列表,以及由所述至少一个阶段使用所获得的存储器描述符列表来访问所述缓冲器内的数据。

在一个或多个示例中,计算设备被配置为提高在计算设备的管道内的缓冲器使用的效率。计算设备包括被配置为执行一个或多个操作的处理系统和被配置为维护可由处理系统执行以执行操作系统的指令的存储器。操作系统被配置为,通过执行探测、锁定和映射操作在存储器中创建缓冲器;高速缓存存储器描述符列表,其在缓冲器信息高速缓存器中描述缓冲器,并且与支持对存储器描述符列表的查找的句柄相关联;由要访问缓冲器内的数据的管道的至少一个阶段接收句柄;由所述至少一个阶段调用所述句柄的源以获得所述存储器描述符列表;以及由所述至少一个阶段使用存储器描述符列表来访问缓冲器内的数据。

提供本发明内容以便以简化的形式介绍以下在具体实施方式中进一步描述的概念的选择。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。

附图说明

具体实施方式参照附图进行描述。在图中,附图标记的最左边的(多个)数字标识出该附图标记首次出现在其中的图。在具体实施方式和图中的不同实例中使用相同的附图标记可以指示相似或相同的项目。在图中表示的实体可以指示一个或多个实体,并且因此可以在讨论中可交换地对单一或复数形式的实体做出引用。

图1是可操作以采用本文描述的存储器描述符列表高速缓存和管道处理技术的示例实现中的环境的图示。

图2描绘了示例实现中的系统,其中示出了使用缓冲器锁定信息高速缓存器来管理对缓冲器的访问。

图3描绘了示例实现中的系统,其中在操作系统的用户和内核模式上下文中采用图2的缓冲器分配器模块,缓冲器锁定信息高速缓存器和存储器描述符列表的功能。

图4是描绘示例实现中的过程的流程图,该过程示出了存储器描述符列表的创建和使用。

图5是描绘示例实现中的过程的流程图,其中,缓冲器被创建并且句柄被用来通过使用经高速缓存的存储器描述符列表来传递对缓冲器的访问。

图6是描绘示例实现中的过程的流程图,其中,缓冲器被创建并且句柄被用来通过使用经高速缓存的存储器描述符列表来获得对缓冲器的访问。

图7图示出了包括示例设备的各种组件的示例系统,该示例设备可以被实现为如参照图1-6所描述的任何类型的计算设备,以实现本文描述的技术的实施例。

具体实施方式

概述

每次期望访问缓冲器时,甚至当最初在将数据(例如图像)向下发送到设备驱动器(例如,内核模式捕获驱动器)时将数据(例如,图像)捕获到缓冲器中时,照相机管道常规地执行探测、锁定和映射操作。由于在每次执行操作时这些操作可能消耗几毫秒,所以这个时间量可以快速地加起来,特别是当遇到大的缓冲器尺寸(例如,用于存储不断增大的图像尺寸)时,捕获会话中涉及的时间量增大,等等。因此,这些常规技术可能导致显着的性能和功率劣化。

描述了存储器描述符列表和高速缓存器处理技术。在一个或多个实现中,存储器描述符列表被高速缓存在缓冲器信息高速缓存器中并且与可用于执行查找以定位期望的存储器描述符列表的句柄相关联。存储器描述符列表描述了在计算机设备的存储器中分配的缓冲器。因此,通过探测、锁定和映射操作创建缓冲器,并且将描述该缓冲器的存储器描述符列表(例如,位置,尺寸等)存储在缓冲器信息高速缓存器中。

缓冲器信息高速缓存器中的存储器描述符列表与句柄相关联,该句柄被传递给可能期望访问缓冲器的下游组件,比如具有访问缓冲器的内核侧组件的管道中的阶段、信宿等等。以这种方式,这些组件使用句柄来避免重复的探测、锁定和映射操作,从而提高对缓冲器的访问效率,并且因而提高整个计算设备的可用资源。这些和其他技术的另外的示例在下面的部分中描述并在对应的图中示出。

示例环境

图1是可操作以采用本文描述的存储器描述符列表高速缓存和管道处理技术的示例实现中的环境100的图示。所图示出的环境100包括计算设备102的示例,其被图示为通信地耦合到设备(例如,外围设备)的台式pc,所述设备的示例被图示为照相机104,但是其他示例也被考虑,比如三维打印机、音频捕获设备、传感器等。这种设备的另一示例被图示为显示设备106。虽然被分开图示出,但是该设备也可以被合并作为计算设备102的组成部分,比如具有照相机、显示设备、麦克风等的平板配置。

计算设备102可以以各种方式配置,比如传统计算机(例如,台式个人计算机、膝上型计算机等)、移动站、娱乐器具、无线电话、平板、上网本等,如关于图7进一步描述的。因此,计算设备102的范围可以从具有大量存储器和处理器资源的全资源设备(例如,个人计算机、控制台)到具有有限的存储器和/或处理资源的低资源设备(例如,传统的机顶盒、手持式游戏控制台)。计算设备102还可以涉及使计算设备102执行一个或多个操作的软件。

计算设备102还被图示为包括各种硬件组件,其示例包括处理系统108,以及计算机可读存储介质的示例(在该实例中,其是存储器110)。存储器110被配置以维护可由处理系统108执行以执行一个或多个操作的应用112和其他软件。

处理系统108不受形成其的材料或其中所采用的处理机制的限制。例如,处理系统108可以包括(多个)半导体和/或晶体管(例如,电子集成电路(ic)),比如芯片上的系统、处理器、中央处理单元、处理核心、功能块等等。在这样的上下文中,可执行指令可以是电子可执行指令。可替换地,属于或针对处理系统108的机制并且因而属于或针对计算设备的机制可以包括但不限于量子计算、光学计算、机械计算(例如,使用纳米技术)等等​​。附加地,尽管示出了单个存储器110,但是可以采用各种各样的存储器的类型和组合,比如随机存取存储器(ram)、硬盘存储器、可移除介质存储器和其他类型的计算机可读存储介质。

计算设备102还被图示为包括操作系统114。操作系统114被配置为将计算设备102的底层功能抽象到在计算设备102上可执行的应用112。例如,操作系统114可以抽象处理系统108、存储器110、网络、输入/输出和/或显示设备108的显示功能等等,使得可以编写应用112而不知道“如何”实现该底层功能。例如,应用112可以向操作系统114提供要由显示设备106再现和显示的数据,而不了解将如何执行该再现。操作系统114还可以表示各种其他功能,比如管理可由计算设备102的用户导航的文件系统和用户界面。

该功能的示例被图示为缓冲器分配模块116。缓冲器分配模块116是用于维护具有多个缓冲器120的循环缓冲器系统118的操作系统114或其他地方的功能的表示。缓冲器120用于维护从设备获得的数据,比如从图像捕获设备104捕获的图像。在该示例中,缓冲器120由缓冲器分配器模块116维护在循环缓冲器系统118中,该缓冲器分配器模块116支持缓冲器120的重复使用。因此,缓冲器120的使用是循环的,例如,以捕获和释放图像并对于后来的图像进行重复。然而,如前所述,使用常规技术重复访问缓冲器120可能消耗大量资源(例如,移动应用中的处理、存储器和功率资源)以及涉及执行操作的时间。

因此,在该示例中,缓冲器分配模块116被配置为维护缓冲器锁定信息高速缓存器122,其包括所创建的每个缓冲器120的描述。通过在缓冲器锁定信息高速缓存器122中维护描述,缓冲器分配模块116能够促进避免重复使用探测、锁定和映射操作,从而提高计算设备102的操作效率,对于此的进一步描述在下面描述并在对应的图中示出。

图2描绘了示例实现中的系统200,其中示出了使用缓冲器锁定信息高速缓存器112来管理对缓冲器120的访问。使用第一、第二和第三阶段202、204、206来图示出系统200。在第一阶段202处,缓冲器分配器模块116在计算设备102的存储器110中创建缓冲器120。例如,缓冲器分配器模块116执行探测、锁定和映射操作以定位适合用作缓冲器的存储器110的部分,并且当找到时,将这些部分锁定以免于被计算设备102的其他功能使用,以及将这些部分映射为缓冲器120。该信息可以被称为存储器描述符列表208,并且被存储在缓冲器锁定信息高速缓存器122中,使得缓冲器120可以被再次定位并重复使用,如下面进一步描述的。

存储器描述符列表208与句柄210相关联。句柄210可用作查找(例如,通过用作索引)来定位对应的存储器描述符列表208。以这种方式,句柄210可用于获得存储器描述符列表208,并从其访问对应的缓冲器120,如下面进一步描述的。

在第二阶段204处,例如,设备驱动器212用于捕获设备数据214并将其加载到缓冲器120。设备驱动器212可以对应于照相机104,从而使得将由照相机104捕获的图像加载到缓冲器120中。为这样做,缓冲器分配器模块116传递句柄210,然后句柄210用于获得存储器描述符列表208并找到对应的缓冲器120。一旦设备数据214(例如,图像)被写入缓冲器120,设备驱动器212就将缓冲器120释放回缓冲器分配器模块116。以这种方式,使用句柄210来获得对缓冲器120的访问,而不重复探测、锁定和映射操作。

对于期望访问缓冲器120中的数据的后续组件,继续该过程。例如,句柄210用于将对缓冲器120的访问传递到设备管道216。设备管道216包括多个阶段218、220,其用于处理设备数据214,(例如,在照相机示例中的图像处理中涉及的一个或多个变换),以便进一步到达用于存储,传送或再现缓冲器120中的数据的信宿222。例如,阶段218可以使用句柄210作为查找的一部分来获得描述缓冲器120的存储器描述符列表208。阶段218将句柄210传递到缓冲器分配器模块116,然后缓冲器分配器模块116使用句柄210作为查找以定位存储器描述符列表208,然后其被提供回到阶段218。

阶段218然后可以访问缓冲器120,以便采用用于处理缓冲器120内的设备数据214的相关的硬件组件、内核模式功能等,例如,在其中设备管道216是图像处理管道的照相机104示例中的硬件jpeg编码器。一旦处理完成,句柄210就被传递到后续的阶段222、信宿222等,以执行类似的访问技术。

因此,缓冲器锁定信息高速缓存器122、存储器描述符列表208和句柄210支持这样的功能,其可用于由“下游”组件访问缓冲器而不重复探测、锁定和映射操作。一旦缓冲器120内的设备数据214的使用被完成(例如,由信宿222再现、存储或传送),缓冲器120就被缓冲器分配器模块116释放,以作为循环缓冲器系统118的一部分以供重复使用(例如,以捕获另一图像),这也可以在不重复探测、锁定和映射操作的情况下执行。这些技术也可以在用户模式/内核模式上下文中使用,其示例在下面描述并在对应的图中示出。

图3描绘了示例实现中的系统300,其中在操作系统114的用户和内核模式302、304上下文中采用缓冲器分配器模块116、缓冲器锁定信息高速缓存器122和存储器描述符列表208的功能。在该示例中,操作系统114包括内核模式116和用户模式118。图1的处理系统108,在操作系统114的控制下,根据正在执行的代码的类型在这些模式之间切换。例如,在用户模式118中执行应用112,并且在内核模式116中执行操作系统的部分(例如,内核组件)。

为了在用户模式118中执行应用112,操作系统114创建针对应用112的进程。该进程向应用112提供私有虚拟地址空间和私有句柄表。因为应用112的虚拟地址空间是私有的,所以一个应用不能改变属于另一个应用的数据,因此每个应用被隔离执行。因此,如果应用112崩溃,则崩溃被限制到该应用112,并且如此,其他应用和操作系统114被保护而免于崩溃,例如继续执行。

除了是私有的,应用112的虚拟地址空间还在用户模式118中受限制。如此,不准许从用户模式118访问为操作系统114预留的虚拟地址。然而,在内核模式116中运行的整个代码共享单个虚拟地址空间。

在所图示的示例中,在内核模式304内执行设备驱动器212(例如,内核流传输驱动器)。在设备管道216的捕获引擎308内执行设备代理306。设备代理306表示设备104到设备管道216的阶段210。因此,由设备代理306输出的流被阶段210视为由设备104本身输出的流。

在该示例中,一个或多个阶段210包括作为由阶段210执行的处理的一部分的核心模式组件310。例如,在所图示的照相机104的示例中,在内核模式304内执行内核模式组件310以便与图像处理硬件(例如硬件jpeg编码器)通过接口相连。缓冲器锁定信息高速缓存器122、存储器描述符列表208和句柄210的使用在本上下文内也是可用的。

在该示例中,设备代理306使用调用“ntcreatefile”(例如,根据该进程是否是应用容器,直接或间接使用设备访问中介)来创建pin对象。在内核模式304中创建“file_object”,并且将句柄210(例如,句柄对象)存储在用户模式302中,例如存储在设备代理中。该句柄210支持对内核对象的唯一查找,这在该示例中导致内核流传输pin对象。

设备代理306将具有用户模式句柄210的调用(例如,“deviceiocontrol”)用于经由设备驱动器,来捕获设备数据214以及将控制命令转发到设备104(例如,照相机),例如,“ksproperty”,扩展属性和“ioctl_ks_write_stream/ioctl_ks_read_stream”。

用于捕获的读缓冲器被配置为“neither_io”,并且在每次到内核模式304的行程中由设备驱动器212探测和锁定,并且在返回到用户模式302时被释放。

缓冲器120沿设备管道216向下传递,其中缓冲器也可传递到管道所利用的其他分立(discreet)的内核模式组件310。这些内核模式组件310也可以锁定并探测缓冲器120。

在一个或多个实现中,支持选择加入机制来锁定缓冲器120并将对应的存储器描述符列表208高速缓存在缓冲器锁定信息高速缓存器122中,例如作为内核流传输空间中的“cksqueue”对象。该技术也可以扩展到其他类型的缓冲器(例如,dx缓冲器),这也导致如上所述的对应的效率改进。

作为这些技术的一部分,可以允许以下设计。对于驱动器,通过对于“ksallocator_framing_ex”结构使用标志来添加功能以改变为使该特征成为针对设备驱动器212的客户端的选择加入(opt-in),从而使得“declare_sfmple_framing_ex”在头文件中添加下面定义的附加标志:

#defineksallocator_enable_mdl_caching0x00004000

(注意:这也可以被实现为单独的扩展属性控制)

附加地,可用于支持该设计的功能如下。

对于设备驱动器212,形成了头文件(例如“ks.h”)中的句柄和缓冲器有效负载的联合体(union)。这由设备代理206在缓冲器从往返行程返回到内核模式304时构造。该联合体在api调用中被用来检索其中存储了存储器描述符列表208的pin对象,其示例描述如下:

定义了两个外部应用编程接口(api)。首先,api“ksgetpinnedmemorymdlfromhandle”被定义以便基于例如从“imfsample”提取的全局唯一标识符获得被锁定的存储器描述符列表208。在存储在设备驱动器212中的列表中的样本上添加引用。其次,定义api“ksreleasememorymdlfromhandle”以便当内核模式组件310完成访问存储器描述符列表208时释放样本上的引用。

还定义了取消例程,其被设备驱动器212用于向使用存储器描述符列表208的内核模式组件310通知存储器描述符列表208的消灭,如下所示:

取消例程:

可以在“ksstream_header”上设置附加标志,以向设备驱动器212指示缓冲器120被高速缓存在缓冲器锁定信息高速缓存器122中,其示例如下:

#defineksstream_header_optionsf_persist_mdl0x00008000。

下面描述作为设备驱动器212的一部分的存储器描述符列表218的存储。存储器描述符列表208可以存储在列表(例如,“list_entry”)数据结构中。此列表是上述queue对象的一部分。该列表与“mutex”同步,从而将调用限制到irql<dispatch_level。这种布置的示例描述如下:

获取(acquire)和释放(release)语义可用于获取和释放存储器描述符列表208。设备驱动器120对获取器保持跟踪并管理该访问,使得在任何一个时间只有单个组件获取存储器描述符列表208。存储存储器描述符列表208的数据结构被引用计数,并且调用者供应取消例程。

当组件完成对存储器描述符列表208的使用时,使用释放调用通知设备驱动器212,然后设备驱动器212不再使用存储器描述符列表208,因为随后的使用可能导致错误。

请求访问存储器描述符列表208的组件能够处置调用失败,即不检索存储器描述符列表208。在这种情况下,例如,组件恢复到探测、锁定和映射操作以获得来自缓冲器212的系统地址。这可能例如由于存储器子系统在内核中设置了低存储器事件而发生。

获取调用,例如“ksgetpinnedmemorymdlfromhandle”具有输入参数全局唯一标识符,其如前所述从“imfsample”检索,然后例如通过具有分立的内核模式驱动器的私有接口传递到内核模式304。

在该示例中,全局唯一标识符被分裂成用户模式句柄和缓冲器。如上所述,从用户模式句柄获得内核模式“file_object”。

在“file_object”被视为pin对象之前,可以实施多个检查,例如,

i)对象是否是fileobject(文件对象)。这将保护我们免受句柄回收利用。

ii)对象是否是ks对象

iii)对象是否是pin

pin上的引用增加,使得其在调用期间不丢失。在调用期间获取pin控制锁,使得当调用进行时队列不会丢失。扫描队列中的列表,并且在没有其他客户端已经做出请求的情况下返回存储器描述符语言208。当调用返回时,pin上的引用计数被释放。

释放调用“ksreleasememorymdlfromhandle”减少在存储器描述符语言208上的引用计数,这在存储器描述符语言208被请求时进行。

外部调用也被利用来支持有效的缓冲器120访问。例如,可以执行检查来确定标志“ksstream_header_optionsf_persist_mdl”是否被设置,并且如果是,则停止探测。

在一些情况下,可用于缓冲器120的存储器110中的空闲空间量降低到阈值以下,这导致操作系统114通知已登记的观察者。响应于由内核揭露的这样的事件(例如,低存储器通知事件)而不是产生单独的线程,执行检查以确定当尝试访问列表时是否发信号通知了该事件,并因此修剪(prune)尝试。附加地,存储器描述符列表208仅在流传输活跃时被高速缓存,因此执行“waitonthedispatcherobject(等待分派器对象)”操作以具有零超时等待。这阻止了,将导致的上下文切换使得等待是非零的等待。如果事件被设置,则存储器描述符列表208列表将被修剪,即,存储器描述符列表208不被高速缓存,直到事件进入到未被发信号通知的状态。

在使用标志来控制探测的示例中,“ksthunk.sys”是类过滤器驱动器,其被激活用于32位应用,并且对于设备栈中的64位应用是可行的(passthrough)。以下调用处置thunking并锁定设备驱动器。

如果流头(streamheader)通告由设备代理306或设备驱动器212设置的标志,则该函数跳过探测和锁定。

下文描述了可用于通过设备管道216获得存储器描述符列表208的技术,例如“mfcore”和“mfplat”。对于“mfcore”,全局唯一标识符(guid)用于由设备代理306在样本上设置属性。作为guid的有效负载由调用(例如,“getguid”)检索,然后被传递到任何内核模式组件310以检索存储器描述符列表208。

对于“mfcore”,每当在样本上设置了“mfsampleextension_capturemetadata”属性时,该实体就跳过元数据缓冲器的分配。

缓冲器分配器模块116被配置为当存储器样本可用于馈送设备驱动器212并且不存在饥饿时修剪自身。当缓冲器分配器模块116被修剪时,一些样本被移除,并且在选择加入时通知设备驱动器212。

属性“ksproperty”被包括作为设备驱动器212的一部分,其从设备代理306发送到pin,使得设备驱动器212能够释放与样本相关联的存储器描述符列表208。

这是从imfvideosampleallocatornotifyex而不是imfvideosampleallocatornotify继承的接口cksbasepin的改变。方法notifyprune被添加到devproxy中的cksbasepin类中,其调用ksproperty来释放所涉及的样本。

方法“notifyprune”在分配器样本由缓冲器分配器模块116在“mfplat”中释放以修剪时被调用,并且也在分配器被终止时被调用。通过枚举来分隔调用,从而将修剪与清理区分开来。方法“notifyprune”将“ksproperty”调用到设备驱动器212中。设备驱动器212清理对应于正被修剪的缓冲器120的存储器描述符列表208。

缓冲器分配器模块116被配置为使得当返回到缓冲器分配器模块116时,样本元数据和guid有效负载不被清除。这可能涉及“cmfdxallocator”类中的“onlnvokedelete”函数的改变。如果在样本上设置了guid,则它对于下一次样本运行将持续。接口“imfvideosampleallocatornotifyex”与方法“notifyprune”一起使用,以回调到设备代理306来释放锁定的样本。

为元数据分配的存储器跨样本而持续,返回到缓冲器分配器模块116。这是对设备代理306的优化,该设备代理306例如在每次到设备驱动器212的行程中为元数据分配和释放新缓冲器。

下面描述可由客户端驱动器使用以利用高速缓存特征的示例:

例如,在“kspin_descriptor_ex”定义中,客户端驱动器导出的是标志“or'd”到“allocator_framing”标志。如果缓冲器分配器模块116正在分配系统存储器缓冲器,则这将开启存储器描述符列表208高速缓存。

以下描述用于确定是否执行探测和锁定的公共api,其采用两个输入参数。第一输入参数是guid,它是用户模式文件句柄和用户模式锁定地址的组合。用户地址是用于存储所使用的存储器描述符列表208的数据结构中的关键。这不使用探测和锁定操作。

取消例程也由要求锁定的存储器描述符列表208的外部组件供应。存储器描述符列表208是非空的并且包含有效的存储器描述符列表208地址。存储在队列中的存储器描述符列表208如果在队列中被发现则返回给调用者。如果没有找到,则返回给调用者一个合适的错误。

以下api接受两个输入参数,例如作为由设备代理306设置的样本属性的guid和由设备驱动器212返回的存储器描述符列表208:

结果,如果guid和存储器描述符列表208对于pin和用户模式缓冲器/mdl组合是有效的,则调用返回“status_success”。关于这些和其它示例的进一步的讨论将关于以下过程进行描述,并在对应的图中示出。

示例过程

以下讨论描述了可以利用先前描述的系统和设备来实现的存储器描述符列表高速缓存和管道处理技术。每个过程的各个方面可以在硬件、固件或软件、或其组合中实现。这些过程被示出为指定由一个或多个设备执行的操作的框的集合,并且不一定限于由各个块执行操作所示的顺序。在以下讨论的各部分中,将参照上述图。

关于图1-3的示例描述的功能,特征和概念可以在本文所述的过程的上下文中采用。此外,关于下面的不同过程描述的功能、特征和概念可以在不同的过程之间互换,并且不限于在单独过程的上下文中的实现。此外,与不同的代表性过程相关联的框和本文对应的图可以一起应用和/或以不同的方式组合。因此,关于本文中不同示例环境、设备、组件和过程描述的各个功能、特征和概念可以以任何合适的组合使用,并且不限于由列举的示例表示的特定组合。

图4描绘了示例实现中的过程400,其示出了存储器描述符列表208的创建和使用。创建pin(框402)以及实例化缓冲器分配器模块116(框404)。创建样本(例如,图像或其他数据)(框406)并发送样本(框408)。

在判定框410处确定是否高速缓存了存储器描述符列表208。如果是(来自判定框410的“是”),则在队列中执行搜索(框412)。如果不是(来​​自判定框410的“否”),则创建存储器描述符列表作为锁定的一部分,并且为这样创建的缓冲器获得系统地址(框414)。

存储器描述符列表被添加到队列中的列表(框416),并且设置标志以指示存储器描述符列表208在队列中可用(框418)。将存储器描述符列表208添加到irp(块420),并将数据捕获到缓冲器中(框422)。一旦请求完成(框424),存储器描述符列表208被罢免(框426)并且请求完成(框428),使得样本被发送回缓冲器分配模块。还考虑了各种其他示例。

图5描绘了其中创建缓冲器并且使用句柄以便通过使用高速缓存的存储器描述符列表来传递对缓冲器的访问的示例实现中的过程500。在该示例中,描述了一种方法来提高计算设备的管道内的缓冲器使用的效率。例如通过执行探测、锁定和映射操作在计算设备的存储器中创建缓冲器(框502)。

存储器描述符列表由计算设备高速缓存,所述存储器描述符列表在缓冲器信息高速缓存器中描述缓冲器并且与用作对存储器描述符列表的查找的句柄相关联(框504)。例如,存储器描述符列表208与作为缓冲器锁定信息高速缓存器122的一部分的句柄210相关联。

句柄被传递通过计算设备的管道,以便由管道的一个或多个阶段处理缓冲器内的数据,使得所述一个或多个阶段通过以下方式获得对数据的访问:作为调用的一部分,使用句柄作为查找,以便从缓冲器信息高速缓存器获得针对缓冲器的存储器描述符列表(框506),而例如不重复探测、锁定和映射操作。以这种方式,可以通过阶段218、220以有效的方式获得对缓冲器120的访问。

把句柄从管道传递到计算设备的信宿,以便由管道的一个或多个阶段处理缓冲器内的数据,所述一个或多个阶段通过以下方式获得对数据的访问:作为调用的一部分,使用句柄作为查找,以便从缓冲器信息高速缓存器获得针对缓冲器的存储器描述符列表(框508),而例如不重复探测、锁定和映射操作。同样,信宿222可以以有效的方式获得对缓冲器120的访问。

图6描绘了示例实现中的过程600,其中,创建了缓冲器,并且通过使用高速缓存的存储器描述符列表,句柄被用来获得对缓冲器的访问。在该示例中,描述了一种提高计算设备的管道对缓冲器内的数据的访问的效率的方法。由访问缓冲器内的数据的计算设备的管道的至少一个阶段接收句柄(框602)。阶段218例如接收句柄210。

由至少一个阶段对句柄的源进行调用,以便由计算设备通过使用句柄作为在缓冲器信息高速缓存器中的查找来获得描述缓冲器的存储器描述符列表(框604)。例如,阶段218使用句柄来调用缓冲器分配器模块116,以获得对应的存储器描述符列表208。

所获得的存储器描述符列表被至少一个阶段用于访问缓冲器内的数据(框606)。阶段218例如使用存储器描述符列表208来获得对缓冲器120的访问,并且在完成之后释放缓冲器120以供后续阶段220、信宿222等使用。

示例系统和设备

图7总体在700处图示出了示例系统,其包括代表可以实现本文描述的各种技术的一个或多个计算系统和/或设备的示例计算设备702,如通过包括缓冲器分配模块116所说明的那样。计算设备702可以是例如服务提供商的服务器,与客户端相关联的设备(例如,客户端设备),片上系统和/或任何其它合适的计算设备或计算系统。

如图所示的示例计算设备702包括彼此通信地耦合的处理系统704、一个或多个计算机可读介质706和一个或多个i/o接口708。尽管未示出,但是计算设备702还可以包括系统总线或者将各种组件彼此耦合的其他数据和命令传输系统。系统总线可以包括不同总线结构的任何一个或组合,比如存储器总线或存储器控制器、外围总线、通用串行总线、和/或利用各种总线架构中的任何一种的处理器或局部总线。还考虑了各种其他示例,比如控制线和数据线。

处理系统704代表使用硬件执行一个或多个操作的功能。因此,处理系统704被图示为包括可被配置为处理器、功能块等的硬件元件710。这可以包括在硬件中实现为专用集成电路或使用一个或多个半导体形成的其他逻辑设备。硬件元件710不受其形成的材料或其中采用的处理机制的限制。例如,处理器可以包括(多个)半导体和/或晶体管(例如,电子集成电路(ic))。在这样的上下文中,处理器可执行指令可以是电子可执行指令。

计算机可读存储介质706被图示为包括存储器/存储装置712。存储器/存储装置712表示与一个或多个计算机可读介质相关联的存储器/存储容量。存储器/存储组件712可以包括易失性介质(比如随机存取存储器(ram))和/或非易失性介质(比如只读存储器(rom)、闪速存储器、光盘、磁盘等)。存储器/存储组件712可以包括固定介质(例如,ram、rom,固定硬驱动器等)以及可移除介质(例如,闪速存储器、可移除硬驱动器、光盘等)。计算机可读介质706可以以下面进一步描述的各种其他方式配置。

(多个)输入/输出接口708代表允许用户将命令和信息键入到计算设备702并且还允许使用各种输入/输出设备向用户和/或其他组件或设备呈现信息的功能。输入设备的示例包括键盘、光标控制设备(例如,鼠标)、麦克风、扫描器、触摸功能(例如,被配置为检测物理触摸的电容式或其他传感器)、照相机(例如,其可以采用可见或不可见波长(比如红外频率)以将移动辨识为不涉及触摸的手势)等等。输出设备的示例包括显示设备(例如,监视器或投影仪)、扬声器、打印机、网卡、触觉响应设备等等。因此,计算设备702可以以下面进一步描述的各种方式进行配置,以支持用户交互。

本文可以在软件、硬件元件或程序模块的一般上下文中描述各种技术。一般地,这些模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、元素、组件、数据结构等。本文所使用的术语“模块”、“功能”和“组件”一般表示软件、固件、硬件或其组合。本文描述的技术的特征是平台无关的,这意味着这些技术可以在具有各种处理器的各种商业计算平台上实现。

所描述的模块和技术的实现可以存储在某种形式的计算机可读介质上或者通过某种形式的计算机可读介质传输。计算机可读介质可以包括可由计算设备702访问的各种介质。作为示例而非限制,计算机可读介质可以包括“计算机可读存储介质”和“计算机可读信号介质”。

“计算机可读存储介质”可以是指与信号传输、载波或信号本身形成对照的允许信息的持久和/或非暂时性存储的介质和/或设备。因此,计算机可读存储介质是指非信号承载介质。计算机可读存储介质包括硬件,易失性和非易失性、可移除和不可移除介质和/或存储设备,其以适于存储比如计算机可读指令、数据结构、程序模块、逻辑元件/电路、或其他数据之类的信息的方法或技术来实现。计算机可读存储介质的示例可以包括但不限于ram、rom、eeprom、闪速存储器或其它存储器技术、cd-rom、数字通用盘(dvd)或其它光学存储器、硬盘、磁盒、磁带、磁盘存储装置或其他磁存储设备、或适于存储所需信息并且可由计算机访问的其他存储设备、有形介质或制品。

“计算机可读信号介质”可以是指被配置以比如经由网络将指令传送到计算设备702的硬件的信号承载介质。信号介质典型地可以在诸如载波、数据信号或其它传输机制之类的经调制的数据信号中具体体现计算机可读指令、数据结构、程序模块或其他数据。信号介质还包括任何信息递送介质。术语“经调制的数据信号”是指以在信号中对信息进行编码的方式设置或改变其特征中的一个或多个的信号。作为示例而非限制,通信介质包括比如有线网络或直接有线连接之类的有线介质,以及比如声学、rf、红外和其它无线介质之类的无线介质。

如前所述,硬件元件710和计算机可读介质706代表以硬件形式实现的模块、可编程设备逻辑和/或固定设备逻辑,其可以在一些实施例中用于实现本文所描述的技术的至少一些方面,比如执行一个或多个指令。硬件可以包括以下各项的组件:集成电路或片上系统、专用集成电路(asic)、现场可编程门阵列(fpga)、复杂可编程逻辑器件(cpld)以及硅中的其他实现或其他硬件。在该上下文下,硬件可以操作为执行由硬件所体现的逻辑和/或指令所定义的程序任务的处理设备,以及用于存储用于执行的指令的硬件,例如先前描述的计算机可读存储介质。

前述内容的组合也可以用于实现本文所述的各种技术。因此,软件、硬件或可执行模块可以被实现为具体体现在某种形式的计算机可读存储介质上和/或由一个或多个硬件元件710具体体现的一个或多个指令和/或逻辑。计算设备702可以被配置为实现与软件和/或硬件模块相对应的特定指令和/或功能。因此,可以至少部分地以硬件(例如通过使用处理系统704的计算机可读存储介质和/或硬件元件710)来实现可由计算设备702作为软件执行的模块的实现。指令和/或功能可能可由一个或多个制品(例如,一个或多个计算设备702和/或处理系统704)执行/操作以实现本文所述的技术、模块和示例。

如图7中进一步所图示,示例系统700在个人计算机(pc)、电视设备和/或移动设备上运行应用时,能够实现用于无缝的用户体验的普遍存在的环境。服务和应用在所有三个环境中基本相似地运行,以便在利用应用、玩视频游戏、观看视频等的同时从一个设备转移到下一个设备时获得共同的用户体验。

在示例系统700中,多个设备通过中央计算设备互连。中央计算设备可以是多个设备本地的,或者可以远离多个设备定位。在一个实施例中,中央计算设备可以是通过网络、因特网或其他数据通信链路连接到多个设备的一个或多个服务器计算机的云。

在一个实施例中,该互连架构使得能够跨多个设备递送功能以向多个设备的用户提供共同的无缝体验。多个设备中的每一个可以具有不同的物理需求和能力,并且中央计算设备使用平台来使得能够将针对设备定制并且仍然对于所有设备而言是共同的体验递送到设备。在一个实施例中,创建目标设备类,并且针对通用设备类来定制体验。设备类可以由设备的物理特征、使用类型或其他常见特征来定义。

在各种实现中,计算设备702可以采取各种不同的配置,比如用于计算机714、移动装置716和电视718用途。这些配置中的每一个包括可以具有一般不同的构造和能力的设备,因此可以根据不同设备类中的一个或多个来配置计算设备702。例如,计算设备702可以被实现为计算机714设备类,其包括个人计算机、台式计算机、多屏幕计算机、膝上型计算机、上网本等。

计算设备702还可以被实现为移动装置716设备类,其包括移动设备,比如移动电话、便携式音乐播放器、便携式游戏设备、平板计算机、多屏幕计算机等。计算设备702还可以被实现为电视机718设备类,其包括具有或连接到在休闲观看环境中的一般更大的屏幕的设备。这些设备包括电视机、机顶盒、游戏控制台等。

本文描述的技术可以由计算设备702的这些各种配置来支持,并且不限于本文所描述的技术的具体示例。该功能还可以全部或部分地通过使用分布式系统实现,比如通过如下所述的平台722在“云”720上实现。

云720包括和/或代表用于资源724的平台722。平台722抽象化云720的硬件(例如,服务器)和软件资源的底层功能。资源724可以包括在远离计算设备702的服务器上执行计算机处理时可以利用的应用和/或数据。资源724还可以包括通过因特网和/或通过比如蜂窝或wi-fi网络之类的订户网络提供的服务。

平台722可以抽象用于将计算设备702与其他计算设备相连的资源和功能。平台722还可以用于抽象资源的规模以针对所遇到的对于经由平台722实现的资源724的需求提供对应层次的规模。因此,在互连设备实施例中,本文描述的功能的实现可以分布在整个系统700中。例如,功能可以部分地实现在计算设备702上,以及经由抽象云720的功能的平台722实现。

结论和示例实现

本文描述的示例实现包括但不限于以下示例中的一个或多个示例的一个或任一组合:

在一个或多个示例中,一种方法被配置为提高计算设备的管道内的缓冲器使用的效率。该方法包括,通过执行探测、锁定和映射操作来在计算设备的存储器中创建缓冲器,并且由计算设备高速缓存存储器描述符列表,该存储器描述符列表在缓冲器信息高速缓存器中描述缓冲器,并且与用作对存储器描述符列表的查找的句柄相关联。该方法还包括,传递句柄以通过计算设备的管道,从而由管道的一个或多个阶段对缓冲器内的数据进行处理,使得由一个或多个阶段通过作为调用的一部分将句柄用作查找来从缓冲器信息高速缓存器获得针对缓冲器的存储器描述符列表,以获得对数据的访问。

如单独地或与本文任何其它叙述的示例组合地描述的示例,其中存储器描述符列表被高速缓存在设备驱动器的缓冲器信息高速缓存器中,该缓冲器信息高速缓存器被配置为在计算设备的操作系统的内核模式中执行。

如单独地或与本文任何其它叙述的示例组合地描述的示例,其中该句柄支持从操作系统的用户模式查找在内核模式中的存储器描述符列表。

如单独地或与本文任何其它叙述的示例组合地描述的示例,其中设备驱动器对应于照相机,并且缓冲器中的数据是图像。

如单独地或与本文任何其它叙述的示例组合地描述的示例,其中缓冲器是循环分配器的一部分。

如单独地或与本文任何其它叙述的示例组合地描述的示例,其中循环分配器在计算设备的操作系统的用户模式内执行。

如单独地或与本文任何其它叙述的示例组合地描述的示例,还包括将所述句柄从所述管道传递到所述计算设备的信宿,使得由一个或多个阶段通过作为调用的一部分将句柄用作索引以从浏览器信息高速缓存器获得针对缓冲器的存储器描述符列表而不重复探测、锁定和映射操作,来获得对数据的访问。

如单独地或与本文任何其它叙述的示例组合地描述的示例,还包括由信宿再现、传送或存储缓冲器内的数据。

如单独地或与本文任何其它叙述的示例组合地描述的示例,还包括,检测存储器中的可用空间量已经降到阈值以下并且作为响应,恢复使用探测、锁定和映射操作并停止使用缓冲器信息高速缓存器。

如单独地或与本文任何其它叙述的示例组合地描述的示例,其中,由一个或多个阶段通过作为调用的一部分将句柄用作查找以从缓冲器信息高速缓存器获得针对缓冲器的存储器描述符列表而不重复探测、锁定和映射操作,来获得对数据的访问。

在一个或多个示例中,描述了一种提高由计算设备的管道对缓冲器内的数据的访问的效率的方法。该方法包括:由要访问缓冲器内的数据的计算设备的管道的至少一个阶段接收句柄,由所述至少一个阶段调用该句柄的源以通过将句柄用作在缓冲器信息高速缓存器中的查找来由所述计算设备获得描述缓冲器的存储器描述符列表,以及由所述至少一个阶段使用所获得的存储器描述符列表来访问所述缓冲器内的数据。

如单独地或与本文任何其它叙述的示例组合地描述的示例,其中通过探测、锁定和映射操作创建缓冲器,以及由所述至少一个阶段使用存储器描述符列表来访问缓冲器内的数据在不使用探测、锁定和映射操作的情况下执行。

如单独地或与本文任何其它叙述的示例组合地描述的示例,其中存储器描述符列表被高速缓存在设备驱动器的缓冲器信息高速缓存其中,该缓冲器信息高速缓存器被配置为在计算设备的操作系统的内核模式中执行。

如单独地或与本文任何其它叙述的示例组合地描述的示例,其中该句柄支持从操作系统的用户模式查找在内核模式中的存储器描述符列表。

如单独地或与本文任何其它叙述的示例组合地描述的示例,其中缓冲器是循环分配器的一部分。

在一个或多个示例中,计算设备被配置为提高在计算设备的管道内的缓冲器使用的效率。计算设备包括被配置为执行一个或多个操作的处理系统和被配置为维护可由处理系统执行以执行操作系统的指令的存储器。操作系统被配置为,通过执行探测、锁定和映射操作在存储器中创建缓冲器;高速缓存存储器描述符列表,其在缓冲器信息高速缓存器中描述缓冲器并且与支持对存储器描述符列表的查找的句柄相关联;由要访问缓冲器内的数据的管道的至少一个阶段接收句柄;由所述至少一个阶段调用所述句柄的源以获得所述存储器描述符列表;以及由所述至少一个阶段使用存储器描述符列表来访问缓冲器内的数据。

如单独地或与本文任何其它叙述的示例组合地描述的示例,其中通过探测、锁定和映射操作创建缓冲器,以及由所述至少一个阶段使用存储器描述符列表来访问缓冲器内的数据在不使用探测、锁定和映射操作的情况下执行。

如单独地或与本文任何其它叙述的示例组合地描述的示例,其中存储器描述符列表被高速缓存在设备驱动器的缓冲器信息高速缓存器中,缓冲器信息高速缓存器被配置为在计算设备的操作系统的内核模式中执行。

如单独地或与本文任何其它叙述的示例组合地描述的示例,其中该句柄支持从操作系统的用户模式查找在内核模式中的存储器描述符列表。

如单独地或与本文任何其它叙述的示例组合地描述的示例,其中缓冲器是循环分配器的一部分。

虽然已经以特定于结构特征和/或方法动作的语言描述了示例实现,但是应当理解,在所附权利要求中限定的实现不一定限于所描述的特定特征或动作。相反,特定特征和动作被公开为实现所要求保护的特征的示例形式。

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