用于应用程序的漏洞驱动混合测试系统的制作方法

文档序号:23350131发布日期:2020-12-18 16:54阅读:101来源:国知局
用于应用程序的漏洞驱动混合测试系统的制作方法

本发明的实施例一般涉及安全多方计算。更具体地,本发明的实施例涉及一种用于应用程序的漏洞驱动测试系统。



背景技术:

混合模糊测试利用模糊测试(或模糊)和concolic执行两者以改进单独方法中的任一个的代码覆盖,然而,以代码覆盖为中心的设计在漏洞检测方面是低效的,因为它可能盲目地探索可以不包括任何漏洞的代码空间。此外,以覆盖为中心的混合测试在达到代码段之后快速继续前进,而不是检查代码段中的隐藏缺陷。尽管以覆盖为中心的混合模糊测试已经探索了漏洞周围的代码路径,但它可能错过可利用的漏洞。

当前以覆盖为中心的混合测试方法包括driller(一种模糊测试工具:通过选择性的符号执行增强模糊),qsym(为混合模糊定做的实际concolic执行引擎),以及用于混合模糊的概率路径优先化。这些以覆盖为中心的混合模糊方法都遭受上述问题。



技术实现要素:

在第一方面中,本公开实施例提供一种用于评估程序代码的漏洞的计算机实现的方法,所述方法包括:

接收由编译器基于源代码生成的中间结果,其中所述中间结果包括指示所述源代码的一行或多行潜在地易受攻击的一个或多个漏洞指示;

对从所述中间结果生成的第一可执行代码进行灰盒模糊处理,以生成第一组种子输入;

基于可达到的但尚未被所述灰盒模糊处理探索的所述源代码的所述行的漏洞指示,计算所述第一组的所述种子输入的每一个的漏洞分数;

选择所述第一组中的所述种子输入中的具有最高漏洞分数的一个;以及使用所选择的种子输入作为优先级进行concolic执行,所述concolic执行是对从所述中间结果生成的第二可执行代码进行的。

在第二方面中,本公开实施例提供一种非暂时性机器可读介质,其中存储有指令,当由处理器执行时,所述指令使得所述处理器执行如第一方面所述的方法的操作。

在第三方面中,本公开实施例提供一种数据处理系统,包括:

处理器;以及

存储器,耦合到所述处理器以存储指令,当由所述处理器执行时,所述指令使得处理器执行如第一方面所述的方法的操作。

根据本公开实施例提供的方法和系统,可以更高效地进行漏洞检测。

附图说明

本发明的实施例通过示例的方式示出并且不限于附图中的图,在附图中相同的附图标记表示相似的元件。

图1是示出根据一个实施例的主机系统的框图。

图2是示出根据一个实施例的漏洞驱动混合模糊测试方法的流程图的示例的框图。

图3是示出根据一个实施例的用于潜在漏洞的编译器注入的代码的框图。

图4是根据一个实施例的用于应用程序的控制流图和对应的映射元组的示例。

图5是根据一个实施例的具有可达到的漏洞的基本块映射的示例。

图6是根据一个实施例的用于场景的漏洞分数计算的示例。

图7是示出根据一个实施例的方法的流程图。

图8是示出根据一个实施例的数据处理系统的框图。

具体实施方式

将参考以下讨论的细节描述本公开的各个实施例和方面,并且附图将示出各个实施例。以下描述和附图是本公开的说明并且不应被解释为限制本公开。描述了许多具体细节以提供对本公开的各种实施例的全面理解。然而,在某些情况下,为了提供对本公开的实施例的简要讨论,没有描述公知或常规的细节。

说明书中对“一个实施例”或“实施例”的引用意味着结合该实施例描述的特定特征、结构或特性可包括在本公开的至少一个实施例中。在说明书中的各个地方出现的短语“在一个实施例中”不一定都指同一实施例。

本公开的实施例公开了评估程序代码的漏洞的方法和系统。根据一个实施例,系统接收由编译器基于源代码生成的中间结果,其中中间结果包括指示源代码的一行或多行是潜在地易受攻击的一个或多个漏洞指示。系统对从中间结果生成的第一可执行代码进行灰盒模糊处理以生成第一组种子输入。系统基于可达到但尚未被灰盒模糊处理探索的源代码区域的漏洞指示的数量计算用于第一组的种子输入的每一个的漏洞分数。系统选择第一组中的种子输入中的具有最高漏洞分数的一个。系统使用选择的种子输入作为优先级进行concolic执行,其中concolic执行是对从中间结果生成的第二可执行代码进行的。

图1是示出根据一个实施例的数据处理系统的框图。参考图1,数据处理系统(例如,主机)100可以是任何类型的计算系统,包括服务器或服务器集群,诸如web或云服务器、应用服务器、后端服务器或其组合。在另一实施例中,系统100可以是任何类型的设备,诸如个人电脑(例如,台式机、膝上型电脑和平板电脑)、“薄”客户端、个人数字助理(pda)、具有web功能的设备、智能手表或移动电话(例如,智能电话)等。系统100可以包括允许客户端访问由系统100提供的资源或服务的接口。服务的示例可包括用于软件程序应用源代码的缺陷/漏洞分析、模糊测试、concolic执行、以及优先化的混合模糊测试服务。可以使用漏洞驱动优先化模块110进行这些服务。系统100可以被配置为云上的软件即服务(saas)或平台即服务(paas)系统的一部分,所述云可以是私有云、公共云或混合云。接口可以包括web接口、应用编程接口(api)和/或命令行接口(cli)。

漏洞驱动优先化模块110可包括漏洞/净化器(谷歌发起的一种开源工具集)模块101、基本块(bb)映射模块105、控制流图模块103、协调器模块107、模糊模块109和concolic执行模块111。漏洞/净化器模块101可以是识别软件程序的源代码内的潜在漏洞的工具。这些漏洞可包括存储器损坏、数据失配、线程有关的缺陷/漏洞等。在一个实施例中,模块101通过编译器的前端或后端,诸如用于编译器clang的未定义行为净化器(ubsan),进行漏洞标记。在另一实施例中,模块101是独立分析器,它可分析包括潜在漏洞的代码区域并识别漏洞标签的数量。在另一实施例中,源代码可被变换为中间表示(ir)作为用于代码分析的中间结果。

控制流图(cfg)模块103可以识别并映射软件程序的从一个基本块(bb)到另一个基本块的不同路径或控制流的图。此处,基本块或bb指的是包括软件程序内的一行或多行代码或代码块的代码单元。图映射可以是树图,被存储为描述将bb连接在一起的一个或多个分支的一个或多个元组。对于给定的软件应用程序,模块103为软件程序内的函数/过程中的每一个构建一个或多个过程内cfg,然后模块103通过调用者-被调用者关系将过程内(或函数级)cfg桥接到函数,以便为软件程序构建过程间cfg。为了解析对函数的间接调用(例如通过指针),模块103可以对应用程序内的指针进行andersen的指向-分析,并且如果指针指向函数调用,则扩展任何调用的函数。andersen的指向分析是静态代码分析,其分析哪些指针或堆引用指向哪些变量。指针分析可以包括对四种指令类型的分析,例如,变量的寻址、指针的解除引用、将指针从一个变量复制到另一个变量、以及通过指针进行分配。在另一实施例中,模块103还可以将andersen的指向分析应用于具有动态存储器分配的代码,例如与malloc或new存储器操作相关联的代码。

基本块(bb)映射模块105可以将软件程序内的每个bb映射到与bb相关联的多个潜在漏洞。映射可被存储为用于bb的一个或多个元组以及bb可达到的潜在漏洞的相关计数。协调器模块107可以协调一个或多个灰盒模糊和/或concolic执行。模糊模块109可对软件应用程序进行模糊(例如,黑盒、灰盒或白盒模糊)以生成一个或多个种子输入。concolic执行模块110可以基于一个或多个种子输入进行用于软件应用程序的concolic执行。注意,灰盒模糊指的是覆盖引导的模糊,因此,灰盒模糊可优先考虑对探索应用程序的新控制路径的种子输入的随机化生成。随机化生成的示例包括用于种子输入的变异,诸如交换字节、种子输入的反向比特等。注意,bb可达到的漏洞指的是bb的控制流中的潜在漏洞/缺陷。

在一个实施例中,漏洞驱动优先化模块110可从客户端接收应用程序源代码用于分析。源代码可以作为源代码151的一部分存储在存储器150中。源代码的中间表示(ir)(例如,中间结果)可由编译器生成(作为ir代码153的一部分)。cfg模块103和bb映射模块105然后分析ir以从ir代码生成bb映射和cfg,并且将它们存储为cfg/bb映射155的一部分用于漏洞分析。

图2是示出根据一个实施例的漏洞驱动混合模糊测试方法的流程图的示例的框图。流程图200示出用于具有用于软件程序的concolic执行的优先化混合模糊的操作。流程图200可以由处理逻辑执行,该处理逻辑可以包括软件、硬件或其组合。在一个实施例中,流程图由图1的系统100执行。参考图2,处理逻辑接收目标程序201。目标程序201可以是任何可编程语言(c、c++、java、python、objective-c、javascript等)的源代码。在操作1处,具有净化模块的编译器从目标程序的源代码生成具有净化标签203的中间表示(例如,ir代码)。净化模块生成对应于表示源代码中的一个或多个潜在漏洞(例如,净化/漏洞标签)的一个或多个编译器注入的净化代码的一个或多个净化标签。注意,中间表示(ir)指的是由编译器或虚拟机内部地使用以表示源代码的数据结构或代码。

参考图2,一旦生成了ir代码203,在操作2处,对ir代码203执行静态分析以对ir代码203中的每个bb内的漏洞标签的数量进行计数。处理逻辑还可以使用bb标识符(id)标记每个bb,并且生成用于bbid到bb内(或bb可达)的漏洞标签的数量的映射。注意,bb指的是除了入口之外没有分支进入并且除了在出口处之外没有分支出去的源线序列。基本块可以形成控制流图(cfg)中的顶点或节点。cfg指的是在应用程序执行期间可遍历应用程序的所有路径的使用图形符号的表示。

参考图2,在操作3处,ir203可被编译为两个可执行程序209-211,第一可执行程序209用于灰盒模糊,以及第二可执行程序211用于concolic执行。此处,仅示出两个可执行程序,然而,可以生成两个以上的可执行程序,使得可并发地执行多个模糊和/或concolic执行。在一个实施例中,可以生成bb配对信息207。bb配对信息207可以表示用于优先级分析的目标程序的cfg。bb配对信息可以包括一个或多个映射元组,其通过id以父子关系将bb映射到其边缘(或分支)。边缘对应于被映射的bb的子bb的分支。

参考图2,在一个实施例中,对第一经编译的可执行程序进行模糊迭代以生成第一组种子输入。模糊或模糊测试指的是生成无效的、意外的或随机的数据作为计算机程序的种子输入的自动化软件应用程序测试技术。在一个实施例中,模糊可以监视用于程序的抛出异常(例如,捕捉/尝试)。模糊器可以是黑盒、灰盒或白盒模糊器。黑盒模糊器将应用程序作为黑盒对待,模糊器不知道程序的内部结构。白盒模糊器可访问程序的内部结构,并且可基于访问而系统地探索程序中的不同路径,然而,由于需要花费很长时间用于分析,因此执行时间的成本很高。灰盒模糊器可以利用仪器以收集关于程序的结构的信息。例如,灰盒模糊器可以利用示踪器以跟踪用于种子输入的基本块转换/分支,因此,可以指示在正被探索的源代码中是否存在新分支。注意,仪器指的是监视或测量应用程序的性能等级、诊断错误和/或访问跟踪信息的能力。

在一个实施例中,模糊随机地生成种子输入。在另一实施例中,模糊生成使现有种子输入变异的种子输入。用于模糊的用户配置可选择是随机地生成种子输入还是修改现有的种子输入以生成额外的种子输入。

一旦模糊的迭代完成并且生成第一组种子输入,则在操作4处,协调器为第一组的种子输入的每一个计算漏洞分数。漏洞分数可以是对于种子输入通过模糊器可达到但尚未探索的分支的漏洞标签的计数。在一个实施例中,对种子输入的漏洞分数按顺序排序,具有较高漏洞分数的种子输入被优先作为concolic执行的输入。此处,可以由第二经编译可执行程序进行concolic执行。在另一实施例中,可以同时进行多于一个concolic执行。注意,concolic执行或concolic测试指的是通过经由仪器的符号执行的测试,指的是一项将程序变量作为符号变量,沿着特定执行路径的技术。注意,这里可以对用于第一组种子输入的可达到的但未探索的路径执行concolic执行。基于一个或多个concolic执行,可以以漏洞驱动(或优先化)的方式确定第二组种子输入。此处,将优先级给予在其范围内具有大量未探索的潜在漏洞的种子输入。

参照图2,在操作5出,将第二组种子输入与第一组种子输入合并,并且协调器协调要在第二迭代中执行的模糊以生成第三组种子输入(其对于第一和第二组是唯一的)。然后,将输出作为输入提供给一个或多个concolic执行,以生成第四组种子输入。重复迭代直到已经经过预定时间或者直到迭代达到漏洞百分比和/或计数。在一个实施例中,协调器保持跟踪所有种子输入。在另一实施例中,协调器丢弃不揭示新的漏洞和/或分支的种子输入,而仅保留探索唯一的分支和/或漏洞的种子输入。

图3是示出根据一个实施例的用于潜在漏洞的编译器注入的代码的框图。参考图3,示出c++源代码301,其打印用于c=a+b的操作的输出。具有净化器的编译器可以为源代码303的代码行“intc=a+b;”生成ir代码303。此处,ir代码303是捕捉用于代码“intc=a+b”的整数溢出错误,例如潜在漏洞的处理程序。当算术运算的结果在结果类型的范围内不可表示时,可以发生整数溢出错误。这可以在操作a+b的结果超出[int_min,int_max]时发生。

图4示出根据一个实施例的用于应用程序的控制流图(cfg)和对应的映射元组的示例。参考图4,cfg400可以包括具有id的三个基本块:id(a1)、id(b1)和id(b2),以及具有id的两个分支:用于分支a1到b1的id(a1->b1)和用于分支a1到b2的id(a1->b2)。基于cfg400,配对信息或映射元组可以被生成为:{<id(a1):id(a1->b1)>,<id(a1):id(a1->b2)>}。

图5是根据一个实施例的具有可达到的漏洞的基本块的示例。参考图5,cfg500示出bb可以向前达到的多个漏洞标签。此处,使用用于clang的未定义行为净化(ubsan)以生成ir潜在漏洞代码块。参照图5,bb501包括8个子bb,其中3个bb包括ubsan(或潜在的漏洞),例如bb502-504。因此,bb501具有用于bb501可达到的潜在漏洞的数量的3的计数。从bb501到漏洞标记数量的bb映射可以是:<id(bb):数量>,例如<501:3>。协调器模块可以使用bb映射以确定与bb对应的种子输入的concolic执行的优先顺序。

图6是根据一个实施例的用于场景的漏洞分数计算的示例。图6的计算可以由协调器模块,诸如图1的协调器模块107进行。参考图6,在一个实施例中,协调器可以已经启动漏洞驱动混合灰盒模糊和concolic执行的第一迭代。在这个场景下,模糊迭代可能已经由具有cfg600的应用程序的可执行文件进行并且可以已经生成种子输入601-602。此处,种子输入601-602可以分别对应于达到bbd1和bbc5的路径。种子输入生成可以通过切换字节或翻转比特而被随机化或变异。接下来,针对种子输入601和602中的每一个计算漏洞分数,以便优先考虑具有较高分数的种子用于concolic执行,以最大化漏洞/缺陷覆盖。

参考图6,cfg600可以表示用于应用程序的控制流图(如前所述)。更具体地,cfg600包括树层级中的一个或多个bb,其中每个bb指示每个bb可达到的漏洞或缺陷的数量。例如,bba1(由a1:24表示)可以指示主节点a1具有24个可达到的潜在漏洞。

在一个实施例中,基于与种子输入的bb对应的可达到的但未探索的bb的数量计算漏洞分数计算。例如,种子输入或路径601对应于从a1到d1的路径。此处,路径601的探索的bb包括a1、b1、c1和d1。到路径601的未探索的bb包括d2、c3和c4。在一个实施例中,基于未探索的bb,通过在可达到的但未探索的bb的数量的计数上对可达到的但未探索的潜在缺陷的总数求平均来计算漏洞分数,例如路径601的分数=1/4(4+5+3+4)=4。在另一实施例中,可基于用于加权平均的求解尝试计数器计算漏洞分数。

对于对应于从a1到c5的路径的种子输入或路径602,路径602的探索的bb包括a1、b2和c5。路径602的未探索的bb包括c6。基于未探索的bb,可通过在可达到的但未探索的潜在缺陷的数量的计数上对可达到的但未探索的bb的总数的求平均来计算漏洞分数,例如用于路径602的分数=3(用于bbc6的可达到的漏洞/缺陷)。基于路径601-602的计算的漏洞分数,协调器将选择具有最高漏洞分数的种子输入,例如具有分数为4的路径601,作为concolic执行的种子输入。此处,concolic执行将接收种子输入601作为种子输入。concolic执行然后重放种子输入601,并进行concolic执行以探索分支条件,以确定用于路径601的立即可达到的但未探索的bb的种子输入,例如,concolic执行确定可达到bbd2、c3和c4的种子输入。在进行用于路径601的concolic执行之后,协调器将确定具有最高漏洞分数的下一种子输入,例如种子输入602。然后,使用种子输入602执行concolic执行,因为种子输入602具有次高的漏洞分数,分数3。然后执行concolic执行以确定对应于路径602的任何立即可达到的但未探索的路径的种子输入,例如,concolic执行确定可以达到bbc6的种子输入。在一个实施例中,在对可用的模糊种子输入执行concolic执行之后,将concolic执行生成的种子输入反馈到模糊器用于重新运行。然后,模糊器可根据种子输入的每一个是否改善缺陷覆盖来保留或丢弃种子输入。在另一实施例中,可以为未被覆盖的分支增加求解尝试计数器。这样,具有更高的求解尝试值的分支将被去优先化,因为它已经被探索。在一个实施例中,协调器监视生成的种子输入,并且启动模糊和优先化concolic执行的另一迭代。在另一实施例中,可以迭代模糊和优先化的concolic执行,直到已经发生了预定时间或迭代。在另一实施例中,可以迭代模糊和优先化的concolic执行,直到实现预定百分比的缺陷覆盖。

注意,漏洞分数用于对可以导致更多未验证的缺陷的种子输入进行优先级排序,而从长远看,它不应在任何难以解决的分支条件下被捕获。

图7是示出根据一个实施例的方法的流程图。过程700可以由可以包括软件、硬件或其组合的处理逻辑执行。例如,过程700可以由图1的数据处理系统100执行。参考图7,在框701处,处理逻辑接收由编译器基于源代码生成的中间结果(例如,具有编译器注入的漏洞代码的中间表示),其中中间结果包括指示源代码的一行或多行是潜在地易受攻击的一个或多个漏洞指示。在框702处,处理逻辑对从中间结果生成的第一可执行代码进行灰盒模糊处理以生成第一组种子输入。在框703处,处理逻辑基于可达到但尚未被灰盒模糊处理探索的源代码的行的漏洞指示,计算用于第一组的种子输入的每一个的漏洞分数。在框704处,处理逻辑选择第一组中的种子输入中具有最高漏洞分数的一个。在框705处,处理逻辑使用选择的种子输入作为优先级进行concolic执行,concolic执行是在从中间结果生成的第二可执行代码上进行的。

在一个实施例中,concolic执行生成第二组种子输入,其导致concolic执行的程序流控制探索未被灰盒模糊处理探索的源代码的一个或多个分支。在另一实施例中,处理逻辑还将第二组种子输入添加到第一组种子输入,使得第二组的一个或多个种子输入在下一迭代期间被灰盒模糊处理利用。

在一个实施例中,为第一组的种子输入的每一个计算漏洞分数包括:识别已由对应于种子输入的灰盒模糊处理探索的程序控制流;以及基于程序控制流可达到的但尚未由灰盒模糊处理探索的漏洞指示的数量,为种子输入计算漏洞分数。在一个实施例中,选择第一组中的种子输入中具有最高漏洞分数的一个包括基于它们各自的漏洞分数对第一组的种子输入进行排序,以对用于第一组种子输入的concolic执行进行优先级排序。

在一个实施例中,处理逻辑还从中间结果识别代码的多个基本块。对于每个基本块,处理逻辑还确定基本块内的漏洞指示的数量,以及生成映射表,映射表将每个基本块的块标识符(id)映射到与基本块相关联的漏洞指示的数量,其中,映射表用于计算漏洞分数。在另一实施例中,计算第一组的种子输入的每一个的漏洞分数包括:基于对应于种子输入的中间结果的程序控制流,构建程序控制流图(cfg);以及将程序cfg可达到的但未探索的所有基本块的漏洞指示的数量相加,以表示用于种子输入的漏洞分数,其中相加包括在映射表中执行查找操作以确定与基本块相关联的漏洞指示的数量。在一个实施例中,漏洞指示中的至少一个包括由编译器插入的异常抛出和捕捉(抛出/捕捉)块,当源代码的相关行在执行期间违反安全规则时,异常被操作系统抛出和捕捉。

注意,如上所示和所述的一些或所有组件可以用软件、硬件或其组合实现。例如,这些组件可以被实现为安装并存储在永久存储设备中的软件,可以由处理器(未示出)加载到存储器中并在存储器中执行以实施贯穿本申请所述的过程或操作。可替换地,这些组件可被实现为编程或嵌入到专用硬件中的可执行代码,专用硬件诸如集成电路(例如,专用ic或asic)、数字信号处理器(dsp)或现场可编程门阵列(fpga),其可经由来自应用的对应的驱动器和/或操作系统访问。此外,这些组件可以被实现为处理器或处理器内核中的特定硬件逻辑,作为软件组件经由一个或多个特定指令可访问的指令集的一部分。

图8是示出可与本发明的一个实施例一起使用的数据处理系统的示例的框图。例如,系统1500可以表示执行上述过程或方法中的任一个的上述数据处理系统中的任一个,诸如,例如,上述客户端设备或服务器,诸如,例如,如上所述的系统101。

系统1500可包括许多不同的组件。这些组件可以被实现为集成电路(ic)、其部分、分立电子设备、或适用于诸如计算机系统的主板或内插式卡的电路板的其它模块、或被实现为以其它方式并入计算机系统的机箱内的组件。

还应当注意,系统1500旨在示出计算机系统的许多组件的高级视图。然而,应当理解的是,在某些实施方式中可以存在额外的组件,并且此外,在其他实施方式中可以出现所示组件的不同布置。系统1500可以表示台式机、笔记本电脑、平板计算机、服务器、移动电话、媒体播放器、个人数字助理(pda)、智能手表、个人通信器、游戏设备、网络路线器或集线器、无线接入点(ap)或中继器、机顶盒或其组合。此外,虽然仅示出单个机器或系统,但是术语“机器”或“系统”还应当被认为包括单独地或联合地执行一组(或多组)指令以执行本文所讨论的方法中的任何一个或多个的机器或系统的任何集合。

在一个实施例中,系统1500包括经由总线或互连1510连接的处理器1501、存储器1503和设备1505-1508。处理器1501可以表示单个处理器或其中包括单个处理器核或多个处理器核的多个处理器。处理器1501可表示一个或多个通用处理器,诸如微处理器、中央处理单元(cpu)等。更特别地,处理器1501可以是复杂指令集计算(cisc)微处理器、精简指令集计算(risc)微处理器、超长指令字(vliw)微处理器、或实现其它指令集的处理器、或实现指令集的组合的处理器。处理器1501还可以是一个或多个专用处理器,诸如专用集成电路(asic)、蜂窝或基带处理器、现场可编程门阵列(fpga)、数字信号处理器(dsp)、网络处理器、图形处理器、通信处理器、密码处理器、协处理器、嵌入式处理器或能够处理指令的任何其它类型的逻辑。

处理器1501可以是低功率多核处理器插槽,诸如超低电压处理器,其可以充当主处理单元和中央集线器,用于与系统的各种组件通信。这种处理器可以实现为片上系统(soc)。处理器1501被配置为执行用于执行本文所讨论的操作和步骤的指令。系统1500可进一步包括与可选图形子系统1504通信的图形接口,可选图形子系统1504可包括显示控制器、图形处理器和/或显示设备。

处理器1501可与存储器1503通信,在一个实施例中,存储器1503可经由多个存储器设备实现以提供给定量的系统存储器。存储器1503可包括一个或多个易失性存储(或存储器)设备,诸如随机存取存储器(ram)、动态ram(dram)、同步dram(sdram)、静态ram(sram)或其他类型的存储设备。存储器1503可以存储包括由处理器1501或任何其它设备执行的指令序列的信息。例如,各种操作系统、设备驱动程序、固件(例如,输入输出基本系统或bios)和/或应用程序的可执行代码和/或数据可以被加载到存储器1503中,并由处理器1501执行。操作系统可以是任何类型的操作系统诸如,例如来自操作系统、来自苹果的mac来自或诸如vxworks的其它实时或嵌入式操作系统。

系统1500还可包括io设备,诸如设备1505-1508,包括网络接口设备1505、可选输入设备1506和其它可选的io设备1507。网络接口设备1505可包括无线收发器和/或网络接口卡(nic)。无线收发器可以是wifi收发器、红外收发器、蓝牙收发器、wimax收发器、无线蜂窝电话收发器、卫星收发器(例如,全球定位系统(gps)收发器)或其它射频(rf)收发器,或其组合。nic可以是以太网卡。

输入设备1506可包括鼠标、触摸板、触敏屏(其可与显示设备1504集成)、诸如指示笔的指示器设备、和/或键盘(例如,作为触敏屏的一部分显示的物理键盘或虚拟键盘)。例如,输入设备1506可包括耦合到触摸屏的触摸屏控制器。触摸屏和触摸屏控制器可以例如使用多种触摸灵敏度技术中的任何一种检测其接触和移动或中断,多种触摸灵敏度技术包括但不限于电容性、电阻性、红外和表面声波技术,以及用于确定与触摸屏的一个或多个接触点的其它接近传感器阵列或其它元件。

io设备1507可包括音频设备。音频设备可包括扬声器和/或麦克风,以促进语音使能功能,诸如语音识别、语音复制、数字记录和/或电话功能。其它io设备1507还可包括通用串行总线(usb)端口、并行端口、串行端口、打印机、网络接口、总线桥(例如pci-pci桥)、传感器(例如,诸如加速度计、陀螺仪、磁力计、光传感器、罗盘、接近传感器等的运动传感器)或其组合。设备1507可以进一步包括成像处理子系统(例如,相机),其可包括光学传感器,诸如电荷耦合器件(ccd)或互补金属氧化物半导体(cmos)光学传感器,用于促进相机功能,诸如记录照片和视频剪辑。某些传感器可以经由传感器集线器(未示出)耦合到互连1510,而诸如键盘或热传感器的其它设备可以由嵌入式控制器(未示出)控制,这取决于系统1500的具体配置或设计。

为了提供诸如数据、应用程序、一个或多个操作系统等信息的永久存储,大容量存储器(未图示)也可耦合到处理器1501。在各种实施例中,为了使能更薄和更轻的系统设计以及改进系统响应性,该大容量存储器可经由固态装置(ssd)实现。然而,在其它实施例中,大容量存储可主要使用具有较少量ssd存储以充当ssd高速缓存的硬盘驱动器(hdd)实现,以在断电事件期间启用上下文状态和其它此类信息的非易失性存储,使得在系统活动的重新启动时可发生快速上电。此外,闪存设备可以例如经由串行外围接口(spi)耦合到处理器1501。该闪存设备可以提供系统软件的非易失性存储,包括bios以及系统的其它固件。

存储设备1508可包括计算机可访问存储介质1509(也称为机器可读存储介质或计算机可读介质),在其上存储体现本文所述的方法或功能中的任何一个或多个的一组或多组指令或软件(例如,模块、单元和/或逻辑1528)。处理模块/单元/逻辑1528可以表示上述组件中的任一个,诸如,例如规划模块305和控制模块306。在由数据处理系统1500执行处理模块/单元/逻辑1528期间,处理模块/单元/逻辑1528还可以完全或至少部分地驻留在存储器1503内和/或处理器1501内,存储器1503和处理器1501也构成机器可访问存储介质。处理模块/单元/逻辑1528还可以经由网络接口设备1505通过网络发送或接收。

计算机可读存储介质1509还可用于永久地存储上述某些软件功能。尽管在示例性实施例中将计算机可读存储介质1509示出为单个介质,但是术语“计算机可读存储介质”应当被理解为包括存储一组或多组指令的单个介质或多个介质(例如,集中式或分布式数据库,和/或相关联的高速缓存和服务器)。术语“计算机可读存储介质”还应当被理解为包括能够存储或编码用于由机器执行的指令集并且使得机器执行本公开的方法中的任何一个或多个的任何介质。术语“计算机可读存储介质”因此应被理解为包括但不限于固态存储器、光和磁介质、或任何其它非瞬态机器可读介质。

处理模块/单元/逻辑1528、组件和本文所述的其他特征可以被实现为分立硬件组件或者被集成在诸如asic、fpga、dsp或类似设备之类的硬件组件的功能中。另外,处理模块/单元/逻辑1528可以被实现为硬件设备内的固件或功能电路。此外,处理模块/单元/逻辑1528可以以硬件设备和软件组件的任何组合实现。

注意,尽管系统1500使用数据处理系统的各种组件被示出,但它不旨在表示互连组件的任何特别体系结构或方式;因为这些细节与本公开的实施例没有密切关系。还将理解的是,具有更少组件或可能更多组件的网络计算机、手持式计算机、移动电话、服务器和/或其它数据处理系统也可与本公开的实施例一起使用。

已经根据对计算机存储器内的数据位的操作的算法和符号表示呈现了前述详细描述的一些部分。这些算法描述和表示是数据处理领域的技术人员用来最有效地将他们的工作实质传达给本领域的其他技术人员的方式。算法在这里并且通常被认为是导致期望结果的自相容操作序列。这些操作是需要对物理量进行物理操作的那些操作。

然而,应当记住的是,所有这些和类似的术语都与适当的物理量相关联,并且仅仅是应用于这些量的方便的标记。除非特别声明,否则从以上讨论中显而易见的是,应当理解的是,在整个说明书中,使用诸如所附权利要求书中所阐述的术语的讨论指的是计算机系统或类似电子计算设备的动作和处理,所述计算机系统或类似电子计算设备将计算机系统的寄存器和存储器内表示为物理(电子)量的数据操纵和变换成计算机系统存储器或寄存器或其它这样的信息存储、传输或显示设备内类似地表示为物理量的其它数据。

附图中示出的技术可以使用在一个或多个电子设备上存储并执行的代码和数据实现。这种电子设备使用计算机可读介质存储和(内部地和/或通过网络与其他电子设备)传送代码和数据,计算机可读介质诸如为非暂时性计算机可读存储介质(例如,磁盘,光盘,随机存取存储器,只读存储器,闪存设备,相变存储器)和暂时性计算机可读传输介质(例如,传播信号的电子、光学、声学或其他形式—诸如载波、红外信号、数字信号)。

在前述附图中描述的过程或方法可以由包括硬件(例如,电路、专用逻辑等)、软件(例如,包括在非暂时性计算机可读介质上)或两者的组合的处理逻辑来执行。尽管以上根据一些顺序操作描述了过程或方法,但是应当理解的是,可以以不同的顺序执行所述的一些操作。此外,一些操作可以并行地而不是顺序地执行。

在前述说明书中,已经参考本公开的具体示例性实施例描述了本公开的实施例。显然,在不背离如所附权利要求书中所阐述的本公开的更宽的精神和范围的情况下,可以对其进行各种修改。因此,说明书和附图应被认为是说明性的而不是限制性的。

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