用于多级存储器早期页面降级的方法和装置与流程

文档序号:18214115发布日期:2019-07-19 22:31阅读:169来源:国知局
用于多级存储器早期页面降级的方法和装置与流程

本发明的领域一般涉及计算科学,并且更具体地,涉及用于多级存储器早期页面降级的方法和装置。



背景技术:

许多计算机系统中的相关问题是系统存储器(也称为“主存储器”)。这里,如本领域所理解的,计算系统通过执行存储在系统存储器中的程序代码和读取/写入程序代码从/向系统存储器操作的数据来进行操作。因此,系统存储器在计算系统的操作过程中被大量利用用于许多程序代码和数据读取以及许多数据写入。因此,寻找提高系统存储器访问性能的方法是计算系统工程师的动机。

附图说明

通过以下结合附图的详细描述,可以更好地理解本发明,其中:

图1示出了具有多级系统存储器的计算系统;

图2示出了具有多级系统存储器的计算系统的潜在低效率;

图3示出了用于具有早期降级逻辑电路的多级存储器的存储器控制器;

图4a、图4b、图4c、图4d、图4e、图4f和图4g示出了早期页面降级过程;

图5示出了早期页面降级方法;

图6示出了计算系统。

具体实施方式

图1示出了具有多层或多级系统存储器112的计算系统100的实施例。根据各种实施例,更小、更快的近存储器113(例如,更高带宽和/或小访问时间等等)可以用作更大、更慢的远存储器114(例如,更低的带宽和/或大的访问时间等)的高速缓存。在各种实施例中,近存储器113用于存储保存在系统存储器112中的程序代码和/或数据的更频繁访问的项目。通过将更频繁使用的项目存储在近存储器113中,观察到系统存储器112更快,因为系统将经常从/向存储在更快的近存储器113中的项目读/写。

根据各种实施例,近存储器113具有比下分层远存储器114更低的访问时间。例如,近存储器113可以通过具有比远存储器114更快的时钟速度来表现出减少的访问时间。这里,近存储器113可以是与存储器控制器116共同定位的更快的(例如,更低的访问时间的)易失性系统存储器技术(例如,高性能动态随机存取存储器(dram)和/或sram存储器单元)。相比之下,远存储器114可以是以较慢时钟速度实现的易失性存储器技术(例如,接收较慢时钟的dram组件),或者是比易失性/dram存储器或用于近存储器的任何技术更慢(例如,更长的访问时间)的非易失性存储器技术。

例如,远存储器114可以包括新兴的非易失性随机存取存储器技术,例如,仅举几个可能性,基于相变的存储器、三维交叉点存储器、“就地写入”非易失性主存储器设备、具有由硫属化物、多级闪存、多阈值级闪存、基于铁电的存储器(例如,fram)、基于磁的存储器(例如,mram)、基于自旋转移矩的存储器(例如,stt-ram)、基于电阻器的存储器(例如,reram)、基于忆阻器的存储器、通用存储器、ge2sb2te5存储器、可编程金属化单元存储器、非晶单元存储器、ovshinsky存储器等组成的存储器单元的存储器设备。任何这些技术可以是字节可寻址的,以便实现为计算系统中的系统存储器(也称为“主存储器”),而不是传统的基于块或扇区的非易失性大容量存储装置。

新兴的非易失性随机存取存储器技术通常具有以下的一些组合:1)比dram更高的存储密度(例如,通过在三维(3d)电路结构(例如,交叉点3d电路结构)中构造);2)比dram更低的功耗密度(例如,因为它们不需要刷新);和/或,3)访问延迟比dram慢,但仍然比传统的非易失性存储器技术(如flash)更快。后一特性特别允许各种新兴的非易失性存储器技术用于主系统存储器角色而不是传统的大容量存储角色(其是非易失性存储的传统架构位置)。

无论远存储器114是由易失性存储器技术还是非易失性存储器技术组成,在各种实施例中,远存储器114充当真正的系统存储器,因为它支持更细粒度的数据访问(例如,高速缓存行)而不是与传统的、非易失性大容量存储(例如,固态驱动器(ssd)、硬盘驱动器(hdd))相关联的仅更大的基于“块”或“扇区”的访问,和/或作为由cpu的处理器执行的程序代码从中操作的字节可寻址存储器。

在各种实施例中,系统存储器可以用双列直插式存储器模块(dimm)卡实现,其中单个dimm卡具有设置在其上的易失性(例如,dram)和(例如,新兴的)非易失性存储器半导体芯片。在其他配置中,仅具有dram芯片的dimm卡可以插入具有仅具有非易失性系统存储器芯片的dimm卡的相同系统存储器通道(例如,双倍数据速率(ddr)通道)中。

在另一种可能的配置中,诸如用作近存储器113的dram设备的存储器设备可以与存储器控制器116和处理核117一起组装到单个半导体设备(例如,作为嵌入式dram)或在同一半导体封装内(例如,堆叠在片上系统上,该片上系统包含例如cpu、存储器控制器、外围控制集线器等)。远存储器114可以由其他设备形成,所述其他设备例如较慢的dram或非易失性存储器,并且也可以连接到或集成在同一封装中。可替代地,远存储器可以在包含cpu核心和近存储器设备的封装外部。远存储器控制器也可以存在于主存储器控制器与远存储器设备之间。远存储器控制器可以集成在与cpu核心和主存储器控制器相同的半导体芯片封装内,或者可以位于这种封装外部(例如,通过集成在具有远存储器设备的dimm卡上)。

在各种实施例中,近存储器113的至少一些部分具有与已分配给远存储器114位置的系统地址分开的其自己的系统地址空间。在这种情况下,已经分配了其自己的系统存储器地址空间的近存储器113的部分例如作为系统存储器的较高优先级(因为它比远存储器快)。在进一步的实施例中,近存储器113的一些其他部分还可以充当存储器侧高速缓存(其缓存来自主存储器的最频繁访问的项目(其可以不仅仅服务cpu核心,诸如gpu、外围设备、网络接口等)或最后一级cpu缓存(仅服务cpu核心)。

图2涉及在2lm系统中可能发生的潜在低效率,其中系统软件负责管理哪些页面的信息保存在近存储器213中以及哪些页面的信息保存在远存储器214中。

这里,如本领域所公知的,在传统的计算机系统中,软件程序的程序代码和/或数据保存在信息的一个或多个“页面”上。当计算系统cpu核心要执行软件程序时,系统软件从非易失性大容量存储器(例如,磁盘驱动器)调用软件程序的页面中的一个或多个并写入系统存储器中。然后,cpu核心发出针对程序代码的存储器读取请求以及针对页面上的数据的存储器读取和写入请求,以便从系统存储器中物理地执行软件程序。

在图2的2lm系统的情况下,计算系统的软件程序的各个页面可以由cpu核心从近存储器213和远存储器214中执行。在各种实现方式中,操作系统、操作系统实例和/或虚拟机监视器(下文称为“系统软件”)负责确定哪些页面将存储在近存储器213中以及哪些页面将存储在远存储器214中。

理想地,由于近存储器的更快访问时间,更频繁访问的页面将被放置在近存储器213而不是远存储器214中。这样,在各种实施例中,系统软件将尽可能最好地将频繁使用和/或当前活动的页面放置在近存储器213中。

因此,当远存储器214中的页面被系统软件识别为频繁使用(例如,通过在时间窗口上的访问次数来测量)或当前活动(例如,从当前读取/写入请求的地址来测量)时,系统软件可能希望将这些页面从远存储器214移动到近存储器213。然而,这样做,特别是当近存储器213已满并且没有任何空闲空间来接受新页面而不将另一页面从存储器213降级到远存储器214时,会产生系统瓶颈。

这里,上述过程需要:1)击落cpu中的转换后备(tlb)缓冲器条目,以将降级页面的新物理地址从近存储器物理地址反映到远存储器物理地址(下面进一步详细解释);2)将大量信息从近存储器移动到远存储器(即,可以是许多千字节(kb)或甚至可能是兆字节(mb)的降级页面的信息);3)击落cpu中的tlb条目以反映从远存储器物理地址到近存储器物理地址的提升页面的新物理地址;以及4)将大量信息从远存储器移动到近存储器(即,可以是许多千字节(kb)或甚至可能是兆字节(mb)的提升页面的信息)。

这里,在必须从近存储器213降级217页面215以便在近存储器213中针对从远存储器214提升到近存储器213的页面腾出空间的情况下,系统软件必须代替执行成功的页面移动,这不仅需要发出适当的读/写请求以在两个存储器之间物理地交换这对页面的信息,而且还必须暂时停止cpu以更新它们各自的tlb。

如本领域中已知的,cpu指令执行流水线通常包括保持tlb的存储器管理单元。tlb本质上是一个表,其记录哪个虚拟地址映射到系统存储器212中的哪些实际物理地址。这里,软件程序代码通常被写入以指代存储器,好像它保持很少的其他软件/不保持其他软件。这样,例如,许多软件程序被编写为最初指向基本存储器地址0000,并且然后根据需要递增地添加地址。以这种方式编写的一个以上的软件程序不能在同一个存储器中运行(它们的“虚拟”地址会发生冲突)。

因此,tlb用于将由特定软件程序/线程指定的每个虚拟地址转换为物理存储器地址,其中由虚拟地址引用的信息实际上驻留在系统存储器212中。通过将不同软件程序的数字上相同的虚拟地址映射到不同的系统存储器物理地址,具有基本上重叠的虚拟地址空间的两个不同软件程序可以容易地在同一系统存储器212的两个不同物理地址区域中操作。

当用于特定软件程序的信息页从一个存储器位置移动到另一个存储器位置时(例如,从近存储器213移动到远存储器214或反之亦然),由cpu核心针对页面维护的tlb条目必须更新以反映存储器212内的该页面的新物理位置。更新tlb会对cpu指令执行流水线性能产生负面影响,因为例如存储器读/写指令的执行停止来等待tlb被更新。

这里,如果以瞬时、即兴和/或反应每页方式(“细粒度”)执行页面交换以实现从远存储器214到近存储器213的页面的提升,则可能导致负面性能影响。也就是说,如果系统软件频繁地决定某些远存储器页面应当在近存储器213已满时被提升到近存储器213结合系统软件被设计为仅通过立即指示相对应的页面交换和相关联的tlb击落来对每个这样的决定作出反应,则计算系统的整体性能可能明显降低,因为系统存储器212不可用于在近存储器213和远存储器214之间更定期地移动大量数据以实现页面交换,并且cpu指令执行流水线将更加定期停滞,等待tlb击落被全面处理。

图3示出了实现更粗粒度的近存储器313到远存储器314页面降级过程的改进方法。这里,如图3所示,存储器控制器316包括早期降级逻辑电路320。早期降级逻辑电路320包括近存储器状态跟踪电路321、远存储器状态跟踪电路322和早期写入重映射缓冲器323。在各种实施例中,状态跟踪电路321、322和早期写入重映射缓冲器323被集成为具有多个(例如,通用)处理核心、外围控制集线器和其他电路(例如,图形处理单元(gpu))的片上系统上的主存储器控制器的组件。

在其他实施例中,这些电路的至少一些部分是从这种芯片外实现的。例如,在远存储器314用新兴的非易失性存储器芯片实现的情况下,远存储器控制器可以本地耦合到主片上系统管芯之外的这种存储器芯片(例如,在具有新兴的非易失性存储器芯片的一个或多个dimm上)。这里,远存储器控制器可以包括远存储器状态跟踪电路322或其一些部分。替代地或组合地,近存储器状态跟踪电路322或其一些部分可以设置在这样的芯片外部(例如,在具有易失性(例如,dram)存储器芯片的一个或多个dimm上,其中这样的dimm甚至可以包括新兴的非易失性存储器芯片并且甚至是远存储器状态跟踪电路322或其某些部分)。在各种可能的封装场景中,即使这些电路如上所述位于片上系统之外,它们仍然可以存在于与片上系统相同的封装内(例如,在相同半导体芯片封装中,其中存储器芯片和来自片上系统的相关联的外部逻辑集成在堆叠芯片解决方案中)。

早期降级逻辑电路320试图通过从近存储器313对“要驱逐的下一行”的页面进行物理降级但是尚未通过系统软件从近存储器313正式驱逐来更快地开始驱逐过程,因为系统软件还没有识别出要从远存储器314升级到近存储器313的下一页(或多页)。

也就是说,早期降级逻辑320对来自近存储器313的页面进行物理降级,这些页面预期在不久的将来从近存储器313降级但实际上还没有被系统软件降级。通过在系统软件明确命令降级之前,对来自近存储器313的页面进行实际降级,底层硬件能够更机会地实现降级。也就是说,例如,如果早期降级逻辑电路320能够开始对页面315进行降级316的过程,例如,在系统软件实际决定对页面315降级之前的几秒钟,则当用于访问该位置的远存储器资源空闲时,存储器控制器316具有几秒来将页面315写入远存储器位置。通过机会性地写降级页面315,可以显着减少由瞬时、即兴和/或反应每页数据移动决策引起的上述系统瓶颈。

此外,如下面更详细描述的,早期写入重映射缓冲器323允许硬件在任何tlb更新之前正确地操作。也就是说,页面315可以降级到远存储器314并且之后在系统软件更新其相对应的tlb条目之前被成功访问。因此,正确的硬件操作不会与正确的tlb状态紧密耦合。因此,系统软件可以“批量”更新下游的cputlb,其中在单个tlb更新周期期间针对多个降级的页面更新多个tlb条目。因此,对于用于更新tlb的指令执行流水线的任何强制停滞,在tlb内同时更新多个条目,而不是针对需要更新的每个条目强加单独的停滞。在这方面,图3的改进系统的页面降级过程更具前瞻性、抽出和/或页面分组(“粗粒度”)。

图4a至图4g描绘了与上述教导一致的端到端页面交换过程。如图4a中所观察到的,最初,系统软件将系统存储器页面地址431发送到存储器控制器416,存储器控制器416理解该系统存储器页面地址431是远存储器414内的“空闲”页面。也就是说,系统软件最终负责系统的存储器管理,系统软件能够预先识别远存储器414中的哪些空间可用于存储已从近存储器413降级的页面。系统软件将用于这些空间的地址431发送到存储器控制器416,这使得保留它们以在以后用于早期写入重映射缓冲器423中。

如图4a中所观察到的,早期逐出逻辑电路420包括近存储器状态跟踪电路421。近存储器状态跟踪电路421识别当前在近存储器413中有多少页并且识别哪一页是要从近存储器413降级的下一行。在各种实施例中,下一行要降级的页面是最近最少使用(lru)页面。也就是说,已经位于近存储器413最长时间而没有针对它们的任何读或写访问的页面。替代lru或与lru组合的其他算法可用于识别哪些页面将在其他页面之前从近存储器降级(例如,一些页面可能与其他页面相比具有更高优先级的程序,并且因此不符合驱逐条件(被“固定”到近存储器处等等))。

近存储器状态跟踪电路421还跟踪近存储器413中有多少页面和/或近存储器413中存在多少空闲页面。每个空闲页面对应于近存储器413中可用于接收已从远存储器414提升到近存储器413的页面的未使用存储器容量。在各种实施例中,如果近存储器413中的页数超过某个阈值和/或如果近存储器413中的空闲页数低于某个阈值,则触发早期降级活动。截至图4a中的近存储器状态,没有超过这样的阈值。因此,没有启动早期驱逐程序。

图4b示出了将多个页面432从远存储器414到近存储器413的随后提升。因为系统软件理解近存储器413中有多少页面(因为它最终确定哪些页面被提升到近存储器),因此系统软件理解在近存储器413中存在空闲空间。因此,系统软件不会因为从远存储器414到近存储器413的提升432而命令任何页面从近存储器413降级。但是,可以是如图4b所示,页面432的提升使得近存储器被用页面填满或被用页面接近填满。这样,超过了上述近存储器阈值,并且早期降级逻辑开始其早期降级过程。为简单起见,本示例假设只有一个页面要提前降级,但是其他实施例可以设计为在超过这样的阈值时对多于一个页面进行早期降级或者基于近存储器413中剩余的空闲空间的多少来限制多于一个页面被早期降级。

参考图4c,在开始早期降级过程时,早期降级逻辑420识别用于降级的页面433并且引用远存储器状态跟踪电路422,其跟踪与先前由系统软件提供并且在早期降级映射缓冲器423中列出的远存储器空闲页面空间中的地址431相关联的存储器资源的当前活动。对于在早期降级映射缓冲器423中列出的每个空闲页面地址,远存储器状态跟踪电路422跟踪被用于在远存储器内存储所列出的空闲页面的存储器通道和/或存储器组和/或存储器芯片(例如,在堆叠存储器解决方案中)当前是否是空闲的(例如,不参与读/写访问)。

一旦缓冲器423中列出的空闲页面也被识别为当前具有空闲远存储器资源,则存储器控制器416更新缓冲器中其相对应的条目434:1)以包括被降级的页面433存储在近存储器中的近存储器地址(“addr_a”);2)将其占用位(“occ”)和其写保护位(“wp”)都设置为1。占用位的设置意味着该条目有效,并且不应删除或覆写。对写保护位的设置意味着不应该写入被降级的页面433,因为它当前正在从近存储器413传输到远存储器414。这里,只要写保护位被置位,则由存储器控制器416接收的写请求被入队(不服务)。

存储器控制器416还开始从近存储器413读取页面433并将其写入远存储器414的过程。取决于从近存储器413到远存储器414的页面迁移状态,迁移期间存储器控制器416接收的任何读取请求可以从近存储器413服务,如果它拥有页面的目标块从存储器控制器416内部服务,或从远存储器414服务。在各种实施例中,在以迁移页面433目标的第一写入请求被接收之后由存储器控制器416接收的以迁移页面为目标的读取访问也被入队,或者如果它们不与任何以迁移页面433为目标的入队的写入请求冲突(具有相同或重叠的目标地址空间),则进行服务。

参考图4d,在页面433已被成功写入远存储器414之后,写保护位被重置为0,这继而允许以页面433为目标的所有读或写访问(包括入队的请求和/或新请求)也重指向远存储器414中的页面433。这里,所有这些请求将用于该页面的旧的近存储器地址(“addr_a”)识别为请求的目标。对于这些请求,早期降级缓冲器423中的条目被用作查找表以识别页面现在所在的位置(“addr_2”)并且请求被重定向到那里。值得注意的是,占用的位仍然设置为1,因为反映页面433的降级的tlb条目尚未更新。

参考图4e,存储器控制器接收命令以将页面435从远存储器414提升到近存储器413。这里,因为由于前面提到的降级页面433而在近存储器413中存在空间,提升的页面435能够被写入近存储器413而不必等待页面被降级。因此,能够比图2的系统更快地从更快的近存储器413访问所提升的页面435。

在一个实施例中,早期降级电路420使系统软件(例如,通过系统软件可读的寄存器空间436)能够使用近存储器状态跟踪电路421已识别为驱逐的下一行的页面的地址。这样,假设系统软件在系统软件知道要将页面435提升到近存储器413之前已经读取了这些地址,则系统软件将知道空闲空间437的地址,因为它事先已经从寄存器436读取了它。这样,在各种实施例中,当系统软件/cpu发出命令以将页面从远存储器414提升到近存储器时,它还将它先前从存储器控制器416读取的近存储器413中的空闲空间的地址识别为页面的目的地。系统软件还可以更新tlb以反映提升页面435的新的近存储器地址。

图4f示出了在如上针对其他页面所描述的已经发生了附加页面降级之后的后续状态。这里,早期降级缓冲器423被示为具有多个有效条目(占用位被设置为1),这意味着它们相对应的页面降级尚未更新到cputlb中。这样,在从图4e到图4f的整个时间段内,存储器控制器416可能已经接收到多个请求,这些请求以降级的页面的旧近存储器地址为目标并且通过在早期降级缓冲器423内的查找表重定向到其新的远存储器地址。写保护位全部被重置为0,这意味着截至图4f的状态,页面降级完成(降级的页面已全部成功地写入远存储器中)。

然后,系统软件读取具有等于1的占用位的早期降级缓冲器423的内容。这里,从图4a的系统状态到图4f的系统状态发生的每个页面降级在缓冲器423中具有代表性条目,其占用位设置为1。然后系统软件利用包含在早期降级缓冲器423中的新转换信息来更新cpu中的tlb。具体地,对于在tlb中具有与缓冲器423中的页面的旧的近存储器地址相匹配的当前页面地址的每个页面,系统软件将用新的远存储器地址替换旧的近存储器地址。如上所述,缓冲区中的所有条目用于批量更新tlb,以便节省tlb更新过程。在各种实施例中,这样做可能/将导致tlb刷新其内容。

在实施例中,系统软件响应于缓冲器423具有阈值数量的条目而读取缓冲器423的内容,其中所述条目占用位设置为1并且写保护位设置为0(这意味着阈值数量的条目正在等待它们各自的tlb条目被更新)。通过在经过这样的阈值之后读取缓冲器条目,自然地遵循批量tlb更新处理。参考图4g,在更新tlb条目之后,系统软件将占用位从1清除为0,并在远存储器中提供一组新的空闲页面地址440,在这种情况下,系统状态返回到类似于图4a的系统状态。

注意,上面描述的早期降级逻辑电路320、420及其任何/所有组成部件(近存储器跟踪电路、远存储器跟踪电路和早期降级缓冲器)可以与被设计用于执行某种形式的程序代码的逻辑电路(例如,嵌入式处理器、嵌入式处理器等)、专用硬连线逻辑电路(例如,专用集成电路(asic)电路)、可编程逻辑电路(例如,现场可编程逻辑电路(fpga)、可编程逻辑器件(pld))或任何组合或执行程序代码的逻辑电路、专用硬连线逻辑电路或可编程逻辑电路集成。

图5提供了上述方法。该方法包括确定501更高级别的多级存储器具有用于接受程序代码和/或数据的一个或多个新页面的低可用空闲空间,该确定由耦合到多级存储器的存储器控制器执行,多级存储器的更高级别比多级存储器的更低级别快。该方法还包括在系统软件更新转换后备缓冲器以反映降级之前并且在系统软件将命令发送到存储器控制器以将下一页面从更低级别提升到更高级别之前将页面降级502到更低级别。

图6提供了计算系统600(例如,智能电话、平板计算机、膝上型计算机、台式计算机、服务器计算机等)的示例性描绘。如图6中所观察到的,基本计算系统600可以包括中央处理单元601(其可以包括例如多个通用处理核615_1至615_x)和设置在多核处理器或应用处理器上的主存储器控制器617、系统存储器602、显示器603(例如,触摸屏、平板)、本地有线点对点链路(例如,usb)接口604、各种网络i/o功能605(例如以太网接口和/或蜂窝调制解调器子系统)、无线局域网(例如,wifi)接口606、无线点对点链路(例如,蓝牙)接口607和全球定位系统接口608、各种传感器609_1至609_y、一个或多个摄像机电池611、功率管理控制单元612、扬声器和麦克风613以及音频编码器/解码器614。

应用处理器或多核处理器650可包括其cpu601内的一个或多个通用处理核615、一个或多个图形处理单元616、存储器管理功能617(例如,存储器控制器)和i/o控制功能618。通用处理核615通常执行计算系统的系统和应用软件。图形处理单元616通常执行图形密集型功能,以例如生成在显示器603上呈现的图形信息。

存储器控制功能617与系统存储器602接合以向/从系统存储器602写入/读取数据。系统存储器可以实现为多级系统存储器。存储器控制器可以包括特殊硬件,当更高级别保持高浓度的页面时,特殊硬件在将页面从更低级别升级到更高级别之前将页面从系统存储器的更高级别降级到更低级别,如上面详细描述的。

触摸屏显示器603、通信接口604-607、gps接口608、传感器609、相机610和扬声器/麦克风编解码器613、614中的每一个都可以被视为相对于整个计算系统的各种形式的i/o(输入和/或输出),在适当的情况下,还包括集成的外围设备(例如,一个或多个相机610)。取决于实现方式,这些i/o组件中的各种组件可以集成在应用处理器/多核处理器650上,或者可以位于管芯外或应用处理器/多核处理器650的封装外。功率管理控制单元612通常控制系统600的功率消耗。

本发明的实施方案可包括如上所述的各种过程。这些过程可以体现在机器可执行指令中。该指令可用于使通用或专用处理器执行某些过程。可替代地,这些过程可以由包含用于执行过程的硬连线逻辑电路或可编程逻辑电路(例如,fpga、pld)的特定/定制硬件组件来执行,或者由编程计算机组件和定制硬件组件的任何组合来执行。

还可以提供本发明的元件作为用于存储机器可执行指令的机器可读介质。机器可读介质可包括但不限于软盘、光盘、cd-rom和磁光盘、闪速存储器、rom、ram、eprom、eeprom、磁卡或光卡、传播介质或适用于存储电子指令的其他类型的介质/机器可读介质。例如,本发明可以作为计算机程序下载,该计算机程序可以通过载波或其他传播介质中体现的数据信号经由通信链路(例如,调制解调器或网络连接)从远程计算机(例如,服务器)传送到请求计算机(例如,客户端)。

在前述说明书中,已经参考本发明的特定示例性实施例描述了本发明。然而,显而易见的是,在不脱离所附权利要求中阐述的本发明的更广泛的精神和范围的情况下,可以对其进行各种修改和改变。因此,说明书和附图应被视为说明性的而非限制性的。

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