用于使用高速缓存需求监视在异构处理器簇架构中调度任务的系统和方法与流程

文档序号:14033641阅读:198来源:国知局
用于使用高速缓存需求监视在异构处理器簇架构中调度任务的系统和方法与流程



背景技术:

便携式计算设备(例如,蜂窝电话、智能电话、平板计算机、便携式数字助理(pda)和便携式游戏控制台)继续提供不断扩大的功能和服务阵列,并向用户提供对于信息、资源和通信的前所未有的访问水平。为了跟上这些服务提升的步伐,这些设备变得更加强大和更加复杂。便携式计算设备现在通常包括具有嵌入在单一基底上的一个或多个芯片组件(例如,一个或多个中央处理单元(cpu)、图形处理单元(gpu)、数字信号处理器等等)的片上系统(soc)。

这种便携式计算设备或者其它计算机系统或设备可以包括异构处理器簇架构,其示例称为“big.little”异构架构。这种“big.little”和其它异构架构通常包括一组处理器内核,在该组处理器内核中,一组相对较慢、较低功率的处理器内核与一组相对更强大的处理器内核相耦合。例如,具有较高性能的一组处理器或处理器内核通常被称为“big(大型)簇”,而具有最小的功耗但能够提供适当的性能(但与big簇相比具有相对更少的性能)的另一组处理器或处理器内核称为“little(小型)簇”。高速缓存控制器可以根据性能和/或功率要求(其可以根据各种使用情况而变化),来调度任务由big簇或者little簇来执行。big簇可以用于期望更高性能(例如,图形、游戏等等)的情形,而little簇可以用于相对较低功率的用例(例如,文本应用)。

现有的异构处理器簇架构可以基于cpu利用率或者cpu负载,在big簇和little簇之间迁移任务。例如,高速缓存控制器可以监测cpu处理延迟、指令执行时间等等,当任务在little簇上运行时,如果认为cpu利用率较高,则可以将任务迁移到big簇。但是,现有的任务迁移方案无法判断高cpu利用率是由cpu负载还是例如高速缓存未命中所引起的。此外,现有的任务迁移方案并不能够迁移各种类型的任务。

因此,本领域需要基于cpu负载和高速缓存需求来迁移异构处理器簇中的任务的改进的系统和方法。



技术实现要素:

公开了用于在便携式计算设备中的异构处理器簇架构里调度任务的方法、系统和计算机程序的各种实施例。一个实施例是一种包括第一处理器簇和第二处理器簇的系统。第一处理器簇包括第一共享高速缓存,第二处理器簇包括第二共享高速缓存。此外,该系统还包括与第一和第二处理器簇进行通信的控制器,以执行第一和第二处理器簇之间的任务迁移。该控制器发起任务在第一处理器簇中的第一处理器上的执行。当任务在第一处理器簇中的第一处理器上运行时,控制器对第一处理器的处理器工作负荷和与第一共享高速缓存相关联的高速缓存需求进行监测。控制器基于处理器工作负荷和高速缓存需求,将任务迁移到第二处理器簇。

另一个实施例是一种用于在便携式计算设备中的异构处理器簇架构中调度任务的方法。该方法包括:在异构处理器簇架构中的第一处理器簇中的第一处理器上运行任务,其中该异构处理器簇架构包括具有第一共享高速缓存的第一处理器簇和具有第二共享高速缓存的第二处理器簇。当任务在第一处理器簇中的第一处理器上运行时,对第一处理器的处理器工作负荷和与第一共享高速缓存相关联的高速缓存需求进行监测。基于处理器工作负荷和高速缓存需求,将任务迁移到第二处理器簇。

附图说明

在附图中,除非另外指出,否则贯穿各个视图的相同附图标记指代类似的部件。对于利用诸如“102a”或“102b”之类的字母字符进行命名的附图标记而言,这些字母字符命名可以区分在同一附图中出现的两个类似部件或者组成部分。当一个附图标记旨在涵盖所有附图之中利用该相同附图进行标记的所有部件时,可以省略用于附图标记的字母字符命名。

图1是用于在异构处理器簇架构中调度任务的系统的实施例的框图。

图2是示出图1的系统中的调度器的实施例的数据输入和输出的框图。

图3是示出图2中的调度器的示例性数据输入和所获得的数据输出的数据表。

图4是示出处理器簇的实施例的框图,其中每个处理器内核包括专用的高速缓存未命中计数器。

图5是基于多种任务类型的图1的系统中的任务迁移的图形表示。

图6是示出用于基于每任务cpu工作负荷和高速缓存需求,在异构处理器簇架构中迁移任务的方法的实施例的流程图。

图7示出了基于每任务高速缓存未命中简档,四个示例性内核之间的任务迁移的另一个实施例。

图8示出了并入在示例性便携式计算设备(pcd)中的图1-7的系统和方法。

具体实施方式

本文所使用的“示例性的”一词意味着“用作例子、例证或说明”。本文中描述为“示例性”的任何方面不应被解释为比其它方面更优选或更具优势。

在本说明书中,术语“应用”或“图像”还可以包括具有可执行内容的文件,例如:目标代码、脚本、字节码、标记语言文件和补丁。此外,本文所引用的“应用”还可以包括:在本质上不可执行的文件,例如,需要被打开的文档或者需要进行访问的其它数据文件。

此外,术语“内容”也可以包括具有可执行内容的文件,例如:目标代码、脚本、字节代码、标记语言文件和补丁。此外,本文所引用的“内容”还可以包括:在本质上不可执行的文件,例如,需要被打开的文档或者需要进行访问的其它数据文件。

如本说明书中所使用的,术语“组件”、“数据库”、“模块”、“系统”等等旨在指代与计算机相关的实体,无论其是硬件、固件、硬件和软件的结合、软件或运行中的软件。例如,组件可以是,但不限于是:在处理器上运行的处理、处理器、对象、可执行文件、执行的线程、程序和/或计算机。举例而言,在计算设备上运行的应用和该计算设备都可以是组件。一个或多个组件可以存在于处理和/或执行线程中,组件可以位于一个计算机中和/或分布在两个或更多计算机之间。此外,这些组件能够从其上存储有各种数据结构的各种计算机可读介质中执行。这些组件可以通过诸如根据具有一个或多个数据分组的信号(例如,来自一个组件的数据,该组件与本地系统、分布式系统中的另一个组件进行交互和/或以信号的方式通过诸如互联网之类的网络与其它系统进行交互),以本地和/或远程处理的方式进行通信。

图1是包括异构处理器簇架构的系统100的实施例的框图。系统100可以实现在包括以下的任何计算设备中:个人计算机、工作站、服务器、诸如蜂窝电话、便携式数字助理(pda)、便携式游戏控制台、掌上型计算机或平板计算机之类的便携式计算设备(pcd)。异构处理器簇架构包括耦合到高速缓存控制器101的多个处理器簇。如本领域所已知的,每个处理器簇可以包括具有相应的共享高速缓存的一个或多个处理器或者处理器内核(例如,中央处理单元(cpu)、图形处理单元(gpu)、数字信号处理器(dsp)等等)。

在图1的实施例中,处理器簇102和104可以包括如上所述的“big.little”异构架构,在该“big.little”异构架构中,处理器簇102包括little簇,处理器簇104包括big簇。little处理器簇102包括多个中央处理单元(cpu)内核108和110,与big处理器簇104中的cpu内核114和116相比,cpu内核108和110相对地更慢和消耗更少的功率。应当理解的是,big簇cpu内核114和116可以通过例如以下各个方面与little簇cpu内核108和110区分:相对更高的每周期指令(ipc)、更高的操作频率和/或具有实现相对更高的性能但以额外的功率为成本的微架构特征。此外,可以在系统100中包括另外的处理器簇,例如,处理器簇106包括gpu内核120和122。

处理器簇102、104和106可以具有由该簇中的相应处理器进行使用的独立的共享高速缓冲存储器,以减少从主存储器144中访问数据的平均时间。在一个实施例中,可以将共享高速缓冲存储器和主存储器144组织成高速缓存级别的层次结构(例如,级别一(l1)、级别二(l2)、级别三(l3))。在图1所示出的实施例中,处理器簇102包括专用于cpu108和110的共享高速缓存112。处理器簇104包括专用于cpu114和116的共享高速缓存118,处理器簇106包括专用于gpu120和122的共享高速缓存124。应当理解的是,可以在具有或者不具有高速缓存级别的层次结构的情况下,实现共享高速缓存。

如图1中所示,高速缓存控制器101可以包括调度器140、高速缓存互连111、以及分别用于监测共享高速缓存112、118和124的性能的多个高速缓存监测器126、128和130。高速缓存互连111包括具有维持主存储器144和共享高速缓存之间的一致性的相关联逻辑的互连或者总线。调度器140包括用于执行处理器簇102、104和106之间的任务迁移的任务迁移组件150。如下面所进一步详细描述的,任务迁移组件150被配置为通过监测簇处理器的工作负荷(处理器工作负荷分析器(profiler)152)和每个共享高速缓存的高速缓存需求(高速缓存需求分析器154)来确定任务迁移。处理器工作负荷分析器152可以确定处理器或cpu利用率、负荷状态、处理延迟、指令执行时间等等。高速缓存需求分析器(profiler)154可以监测针对共享高速缓存112、118和124的存储器访问(读和/或写访问),确定由于例如高速缓存未命中造成的延迟(其可能影响在簇处理器或者内核上运行的当前任务的性能)。

图2是示出调度器140的实施例的数据输入和输出的框图。调度器140可以将来自每个处理器的处理器工作负荷数据202和与每个共享高速缓存相关联的高速缓存数据204接收成数据输入。应当理解的是,处理器工作负荷数据202可以包括任何可用的使用数据,其包括下面参数或者从处理器内核接收的其它参数中的一个或多个:每周期指令(ipc)、每秒百万指令数(mips)、频率、cpu活动持续时间百分比。例如,高速缓存需求数据204可以包括基于下面参数或者经由高速缓存监测器126、128和130接收的其它参数中的一个或多个的高速缓存工作负荷或性能信息:每1000条指令的高速缓存未命中(mpki),每1000条指令的高速缓存访问(apki)、高速缓存未命中率(mpki/apki)、由于高速缓存未命中导致的cpu停滞时间/比率或停滞时钟、以及指示由于高速缓存未命中导致的cpu停滞数量的每秒百万次循环(mcps)。基于输入数据202和204,调度器140准确地调度任务,基于每任务cpu负荷和高速缓存需求,判断是否可以通过将任务迁移到另一个处理器内核或者簇来提升性能。在一个实施例中,可以将当前任务迁移到littlecpu(方框208)或者bigcpu(方框210)。

如图3中所示,调度器140可以访问和管理表300,其中表300规定了用于控制每任务迁移的多个预先规定的或者可配置的门限。应当理解的是,表300中包含的数据可以包括针对每个任务(即,每任务)的输入数据202和204以及输出数据302。在图3的实施例中,第一门限(门限#1)可以规定与处理器工作负荷数据202相关的门限,并且第二门限(门限#2)可以规定与高速缓存需求数据204相关的门限。在一个实施例中,可以根据高速缓存未命中率、cpu停滞率(例如,时间%)、或者表示高速缓存需求的其它数据和/或计数来计算高速缓存需求数据204。列302规定了根据针对在系统100上运行的当前任务所监测的和/或估计的处理器工作负荷数据202和高速缓存需求数据204,在每任务基础上的调度器输出。表300规定了基于门限#1和#2的使用场景。在场景1中,如果处理器工作负荷超过门限#1并且高速缓存需求超过门限#2,则调度器140可以确定应当将当前任务迁移到big簇中的处理器或内核上,分配“高”的优先级值。在场景2中,如果处理器工作负荷超过门限#1并且高速缓存需求没有超过门限#2,则调度器140可以确定应当将当前任务迁移到big簇中的处理器或内核上,分配“中等”的优先级值。在场景3中,如果处理器工作负荷没有超过门限#1但高速缓存需求超过门限#2,则调度器140可以确定应当将当前任务迁移到big簇中的处理器或内核上,分配“中等”的优先级值。在场景3中,调度器140可以计算处理器工作负荷数据202和高速缓存需求数据204的加权和。在场景4中,如果处理器工作负荷没有超过门限#1并且高速缓存需求没有超过门限#2,则调度器140可以确定应当将当前任务迁移到little簇中的处理器或内核上。本领域普通技术人员应当理解,可以在具有或不具有优先级方案的情况下实现向big簇的任务迁移,表300可以被配置为管理一个或多个门限,以确定little簇和big簇之间的任务迁移。

图4示出了使用各个处理器内核的高速缓存未命中计数器来实现任务迁移的实施例。如图4中所示,处理器簇102可以包括具有共享高速缓存112的多个处理器内核402和404。处理器内核402包括cpu108、独立高速缓存406和用于该cpu108的专用高速缓存未命中计数器408。处理器内核404包括cpu110、独立高速缓存410和用于该cpu110的专用高速缓存未命中计数器410。应当理解的是,当使用高速缓存级别的层次结构时,可以实现独立高速缓存406和410。专用高速缓存未命中计数器408和412可以包括硬件计数器,或者可以利用软件来实现。在操作时,当内核访问共享高速缓存112来进行读或写操作时,可以向相应的专用高速缓存未命中计数器发送高速缓存未命中信号。可以将与运行在cpu108上的任务相关联的高速缓存未命中信号414,从位于共享高速缓存112中的全局共享高速缓存未命中计数器401提供给专用高速缓存未命中计数器408。可以将与运行在cpu110上的任务相关联的高速缓存未命中信号416提供给专用高速缓存未命中计数器412。用此方式,处理器簇102中的每个处理器可以维持一个高速缓存未命中简档,后者可以用于基于cpu负荷和高速缓存需求来准确地控制任务迁移。

如图4中所进一步示出和上面所讨论的,处理器簇102中的每个cpu还可以包括cpu停滞计数器。在图4的实施例中,cpu108包括cpu停滞计数器418,cpu110包括cpu停滞计数器420。cpu停滞计数器418和420可以测量和指示由于高速缓存未命中而导致的cpu停滞持续时间。例如,如果高速缓存命中,则相应的cpu可以立即读或者写,在该情况下,存在最小的或者不存在cpu停滞时间。但是,当发生高速缓存未命中时,相应的cpu可能要等待来自外部主存储器的数据,在该情况下,存在着在其期间cpu不执行指令的cpu停滞时间。应当理解的是,可以将来自高速缓存未命中计数器408、412和401以及cpu停滞计数器418和420的数据,使用成针对调度器140的输入信息。

图5示出了用于基于cpu工作负荷和高速缓存需求的组合,实现增强型负荷跟踪与任务迁移的实施例。增强型负荷跟踪可以合并cpu工作负荷和高速缓存需求二者,使用针对如上所述的每一个的门限。在其它实施例中,增强型负荷跟踪计算cpu工作负荷和高速缓存需求的和,或者计算(cpu工作负荷)x(系数a)+(高速缓存需求)x(系数b)的加权和。可以对第一几何系列进行计算(式1),以估计cpu工作负荷的跟踪的负荷。

s=u0+u1*y+u2*y2+u3*y3+u4*y4+…+u(n-1)*y(n-1)

y:0和1之间的系数

ui:在0或1之间,指示在时间i时的cpu活动(或者利用率),其中,

时间0=最近/最新,并且时间(n-1)=最早时间

n=簇中的#处理器内核

式1:cpu工作负荷

可以对第二几何系列进行计算(式2),以估计高速缓存工作负荷的跟踪的负荷。

x=v0+v1*z+v2*z2+v3*z3+v4*z4+…+v(n-1)*z(n-1)

z:0和1之间的系数

vi:在0或1之间,指示在时间i时的高速缓存未命中率,其中时间0=最

近/最新,并且时间(n-1)=最早时间

n=簇中的#处理器内核

式2:高速缓存工作负荷

如果s(式1)和x(式2)的和或者加权和超过门限,则任务迁移组件150可以确定当前任务要迁移到big簇。

增强型负荷跟踪可以被配置为支持各种不同类型的任务。在图5的例子中,示出了用于四种不同类型的任务的任务运行时间。任务类型1(方框508a)包括预先规定的cpu工作负荷。任务类型2(方框506a)包括具有“低”值的高速缓存未命中率。任务类型3(方框504a)包括具有“中等”值的高速缓存未命中率。任务类型4(方框502a)包括具有“高”值的高速缓存未命中率。图500示出了用于每种任务类型的示例性跟踪负荷。线502b对应于任务类型4(方框502a)。线504b对应于任务类型3(方框504a)。线506b对应于任务类型2(方框506a)。线508b对应于任务类型1(方框508a)。

如图5中所进一步示出的,“向上迁移”门限规定会将运行在littlecpu上的不同任务类型迁移到bigcpu的水平。参见线502b,首先对任务类型4进行迁移(附图标记510),这是因为其具有最高高速缓存未命中率。其次对任务类型3进行迁移(附图标记512)。第三对任务类型2进行迁移(附图标记514)。最后对任务类型1进行迁移(附图标记516)。应当理解的是,现有的解决方案不能够区分不同的任务类型1、2、3和4。通过比较,在现有的解决方案中(不同于系统100),针对所有四种任务类型的任务迁移可以类似于线516,其不是高效的调度结果。

图6是示出用于基于cpu工作负荷和高速缓存需求,在系统100的异构处理器簇架构中迁移任务的方法600的实施例的流程图。应当理解的是,方法600的一个或多个方面可以通过调度器140、任务迁移组件150和/或操作系统来实现。在方框602处,任务运行在第一处理器簇中的处理器中的一个(例如,处理器簇102中的cpu108)上。在方框604处,当任务在cpu108上运行时,可以对用于cpu108的处理器工作负荷以及与共享高速缓存112相关联的高速缓存需求进行监测。在方框606处,调度器140可以将处理器工作负荷和高速缓存需求与一个或多个相关联的门限进行比较。在一个实施例中,可以如表300中所示地配置这些门限(图3)。如果超过了一个或多个门限(判断框606),则系统100可以确定要将该任务从处理器簇102迁移(方框608)到第二处理器簇(例如,簇104-图1)。如果没有超过任何门限,则流程可以返回到方框604以进一步监测处理器工作负荷和高速缓存需求。

参见图7,在另一个实施例中,操作系统(o/s)内核可以被配置为实现每任务高速缓存未命中简档。o/s可以针对每个运行的任务来规定专门配置的变量,基于逐个任务来跟踪高速缓存未命中。在一个实施例中,这些变量可以包括任务运行时间、高速缓存未命中计数器、以及每秒的高速缓存比率(即,高速缓存未命中计数器/任务运行时间)。该任务运行时间变量包括给定的任务的运行时间的总和。高速缓存未命中计数器包括给定的任务的高速缓存未命中的总和。图7示出了用于基于来自每cpu高速缓存未命中计数器(例如,计数器408和412(图4))的读数,确定每任务高速缓存未命中比率的示例性方法。

沿着x轴时间轴,任务j开始运行在cpu1上(方框702),而任务i(方框706)和任务k(方框710)开始分别运行在cpu2和cpu4上。随着任务i、j和k运行,对用于每个相应的内核的任务运行时间和高速缓存未命中进行跟踪。方框704示出了用于任务j的高速缓存未命中计数器,例如,其可以通过在时间701和703,读取用于cpu1的共享未命中计数器(例如,图4中的计数器408和412而不是共享的未命中计数器401)来计算。在时间703,由于调度器中的任何原因(例如,cpu1承受更高的温度),可以将任务j重新分配(迁移)到cpu2。当任务j运行在cpu2中时,可以基于来自用于cpu2(而不是用于cpu1)的共享高速缓存未命中计数器的读数,来计算针对任务j的高速缓存未命中率。用类似的方式,可以基于cpu1(从701到703的持续时间)、cpu2(从705到707的持续时间)、cpu3(从709到711的持续时间)和cpu4(从730到732的持续时间)的计数器读数,对整体高速缓存未命中趋势进行累积。可以将针对任务j所计算的整体高速缓存未命中比率使用成调度决策的输入(例如,图2中的高速缓存需求数据204、图6中的方框604、图5中的任务类型2、3和4)。

系统100可以并入到任何期望的计算系统中。图8示出了并入在示例性便携式计算设备(pcd)800中的系统100。片上系统(soc)103可以包括调度器140和具有异构处理器簇架构的处理器簇102、104和106。显示器控制器328和触摸屏控制器330可以耦合到这些处理器簇中的一个或多个。转而,触摸屏显示器806可以位于片上系统103之外,可以耦合到显示器控制器328和触摸屏控制器330。

此外,图8还示出了耦合到处理器簇102、104和106中的一个或多个的视频编码器334(例如,逐行倒相(pal)编码器、顺序彩电制式(secam)编码器、或者国家电视系统委员会(ntsc)编码器)。此外,视频放大器336耦合到视频编码器334和触摸屏显示器806。另外,视频端口338耦合到视频放大器336。如图8中所示,通用串行总线(usb)控制器340耦合到这些处理器簇中的一个或多个。此外,usb端口342耦合到usb控制器340。存储器144和用户识别模块(sim)卡346还可以耦合到这些处理器簇。

此外,如图8中所示,数码相机348可以耦合到这些处理器簇。在一个示例性方面,数码相机348是电荷耦合器件(ccd)相机或者互补金属氧化半导体(cmos)相机。

如图8中所进一步示出的,立体声音频编码器-解码器(codec)350可以耦合到这些处理器簇。此外,音频放大器352可以耦合到立体声音频codec350。在一个示例性方面,第一立体声扬声器354和第二立体声扬声器356耦合到音频放大器352。麦克风放大器358也可以耦合到立体声音频codec350。另外,麦克风360可以耦合到麦克风放大器358。在一个特定的方面,调频(fm)无线调谐器362可以耦合到立体声音频codec350。此外,fm天线364耦合到fm无线调谐器362。此外,立体声耳机366可以耦合到立体声音频codec350。

此外,图8还示出射频(rf)收发机368可以耦合到这些处理器簇。rf开关370可以耦合到rf收发机368和rf天线372。键盘204、具有麦克风的单声道耳机176和振动器设备378可以耦合到这些处理器簇。

此外,图8还示出了可以耦合到片上系统103的电源380。在一个特定的方面,该电源380是向需要能量的pcd800的各个部件供电的直流(dc)电源。此外,在特定的方面,该电源是可充电dc电池或者dc电源,后者是从提供给dc变换器的交流电(ac)来得到的,其中该dc变换器连接到ac电源。

此外,图8还示出了pcd800还可以包括网络卡388,后者可以用于访问数据网络(例如,局域网、个域网或者任何其它网络)。网络卡388可以是蓝牙网络卡、wifi网络卡、个域网(pan)卡、个域网超低功率技术(peanut)网络卡、电视/电缆/卫星调谐器、或者本领域公知的任何其它网络卡。此外,网络卡388可以并入到芯片中(即,网络卡388可以是芯片中的完整解决方案,其可以不是单独的网络卡388)。

参见图8,应当理解的是,存储器144、ram卡105、触摸屏显示器806、视频端口338、usb端口342、照相机348、第一立体声扬声器354、第二立体声扬声器356、麦克风360、fm天线364、立体声耳机366、rf开关370、rf天线372、键盘374、单声道耳机376、振动器378和电源188,可以在片上系统103之外。

本说明书所描述的处理或者处理流程中的某些步骤,自然地在本发明的其它步骤之前来实现如上所述的功能。但是,本发明并不限于这些所描述的步骤的顺序,如果这种顺序或者序列并不改变本发明的功能的话。也就是说,应当认识到,在不脱离本发明的保护范围或者精神的基础上,一些步骤可以在其它步骤之前执行、之后执行或者并行地执行(基本同时地执行)。在一些实例中,在不脱离本发明的基础上,可以省略或者不执行某些步骤。此外,诸如“其后”、“转而”、“接着”等等之类的词语,并不旨在限制这些步骤的顺序。这些词语仅仅只是用于引导读者遍历该示例性方法的描述。

另外,编程领域的普通技术人员能够编写计算机代码或者识别适当的硬件和/或电路,以便例如基于本说明书中的流程图和相关联的描述,没有困难地实现所公开的发明内容。

因此,对于充分地理解如何利用和使用本发明来说,并不认为是必需要公开特定的程序代码指令集或者详细的硬件设备。在上面的描述中,结合描绘各个处理流程的附图,来更详细地解释所主张的计算机实现的处理的创新型功能。

在一个或多个示例性方面,本文所描述功能可以用硬件、软件、固件或它们任意组合的方式来实现。当在软件中实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括有助于将计算机程序从一个地方传送到另一个地方的任何介质。存储介质可以是计算机能够存取的任何可用介质。举例而言但非做出限制,这种计算机可读介质可以包括ram、rom、eeprom、nandflash、norflash、m-ram、p-ram、r-ram、cd-rom或者其它光盘存储器、磁盘存储器或其它磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机进行存取的任何其它介质。

此外,可以将任何连接适当地称作计算机可读介质。举例而言,如果软件是使用同轴电缆、光纤电缆、双绞线、数字用户线路(“dsl”)或者诸如红外线、无线和微波之类的无线技术从网站、服务器或其它远程源传输的,那么同轴电缆、光纤光缆、双绞线、dsl或者诸如红外线、无线和微波之类的无线技术包括在所述介质的定义中。

如本文所使用的,磁盘(disk)和光盘(disc)包括压缩光盘(“cd”)、激光光盘、光盘、数字通用光盘(“dvd”)、软盘和蓝光光盘,其中磁盘通常磁性地复制数据,而光盘则用激光来光学地复制数据。上述的组合也应当包括在计算机可读介质的保护范围之内。

对于本发明相关领域的任何普通技术人员来说,替代实施例将变得显而易见,而不脱离其精神和保护范围。因此,虽然本文详细地描绘和描述了选定的方面,但应当理解的是,可以在不脱离本发明的精神和保护范围的基础上,对其做出各种替代和改变,如所附权利要求书所规定的。

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