阴影分页

阅读:832发布:2022-10-05

专利汇可以提供阴影分页专利检索,专利查询,专利分析的服务。并且阴影分页是一种用来完成 原子 事务和耐久事务的技术,并提供了在 数据库 中操作页的能 力 。在事务中,被事务影响的页从数据库文件复制到 工作空间 中,如易失 存储器 ,并在该工作空间中进行 修改 。当事务提交,所有被事务修改的页从工作空间写入数据库文件的未使用页中。在事务的执行过程中,暴露在用户面前的数据库的状态是数据库在事务之前存在的状态,这是由于数据库文件仍包含所修改的页的原始版本,如它们在复制进工作空间之前存在的。如果用户在事务完成之前 访问 数据库,或者在失败恢复时,它会如事务从未发生一样出现。,下面是阴影分页专利的具体信息内容。

1.一种访问数据库的方法,其特征在于,所述方法包括:
将所述数据库的第一数据库存储的所选页的内容储存在第一阴影页 中,其中,所述第一阴影页包括所述第一数据库存储的未使用页;
在所述数据库的维护页中维护所述所选页和所述第一阴影页的位置
将所述第一阴影页和所述维护页第一部分的内容储存在所述数据库的 第二数据库存储中;
将所述维护页第二部分的内容储存在所述第二数据库存储中;以及
将所述第一阴影页和所述维护页第一部分的内容第二次储存在所述第 二数据库存储中。
2.如权利要求1所述的方法,其特征在于,它还包括:
指示所述所选页为已使用页;
响应将所述所选页的所述内容储存在所述第一阴影页中的所述行动, 指示所述第一阴影页为已使用页;
将所述维护页第一部分的内容储存在第二阴影页中,其中,所述第二 阴影页包括所述第一数据库存储的未使用页;
响应将所述维护页的所述第一部分的所述内容储存在所述第二阴影页 的所述行动,指示所述第二阴影页为已使用页;
将所述第一阴影页和所述第二阴影页的内容储存在所述第二数据库存 储中;以及
将所述第一阴影页和所述第二阴影页的内容第二次储存在所述第二数 据库存储中。
3.如权利要求2所述的方法,其特征在于,所述维护页包括:
至少一个映射表页,用于在所述第一数据库存储中维护数据页的位置;
目录页,用于维护每一映射表页的位置;以及
数据库头页,用于维护所述目录页的位置。
4.如权利要求3所述的方法,其特征在于:
将所述第一数据库存储的所选页的内容储存在所述第一阴影页中的所 述行动包括:
将所述数据页的内容储存在所述第一阴影页中;
将所述维护页的所述第一部分的内容储存在所述第二阴影页的所述行 动包括:
将所述映射表页和所述目录页的内容储存在所述第二阴影页中。
5.如权利要求2所述的方法,其特征在于,它还包括:
生成用于指示所述第一数据库存储中的每一页已使用还是未使用的位 图;以及
依照所述指示行动更新所述位图。
6.如权利要求1所述的方法,其特征在于,它还包括:
在将所述第一阴影页和所述维护页的所述第一部分的内容第二次储存 在所述第二数据库存储中的所述行动之后:
指示所述维护页的所述第二部分为未使用页;以及
指示所述所选页为未使用页。
7.如权利要求1所述的方法,其特征在于,它还包括:
压缩所述维护页的内容。
8.一种用计算机程序代码编码的计算机可读媒质,用于指示计算机处理 器访问数据库,所述程序代码包括:
存储所选页代码段,用于引发所述计算机处理器将所述数据库的第一 数据库存储的所选页的内容储存在第一阴影页中,其中,所述第一阴影页 包括所述第一数据库存储的未使用页;
维护位置代码段,用于引发所述计算机处理器在所述数据库的维护页 中维护所述所选页和所述第一阴影页的位置;
存储第一阴影页和第一部分代码段,用于引发所述计算机处理器将所 述第一阴影页和所述维护页的所述第一部分的内容储存在所述数据库的第 二数据库存储中;
存储第二部分代码段,用于引发所述计算机处理器将所述维护页第二 部分的内容储存在所述第二数据库存储中;以及
重复代码段,用于引发所述计算机处理器将所述第一阴影页和所述维 护页的所述第一部分的内容第二次储存在所述第二数据库存储中。
9.如权利要求8所述的计算机可读媒质,其特征在于,它还包括:
指示所选页代码段,用于引发所述计算机处理器指示所述所选页为已 使用页;
指示第一阴影代码段,用于引发所述计算机处理器响应将所述所选页 的内容储存在所述第一阴影页中的所述行动,指示所述第一阴影页为已使 用页;
存储第一部分代码段,用于引发所述计算机处理器将所述维护页第一 部分的内容储存在第二阴影页中,其中,所述第二阴影页包括所述第一数 据库存储的未使用页。
指示第二阴影代码段,用于引发所述计算机处理器响应将所述维护页 的所述第一部分的所述内容储存在所述第二阴影页中的所述行动,指示所 述第二阴影页为已使用页;
存储第一和第二阴影代码段,用于引发所述计算机处理器将所述第一 阴影页和所述第二阴影页的内容储存在所述第二数据库存储;以及
再次存储代码段,用于引发所述计算机处理器将所述第一阴影页和所 述第二阴影页的内所述容第二次储存在所述第二数据库存储中。
10.如权利要求9所述的计算机可读媒质,其特征在于,所述维护页包 括:
至少一个映射表页,用于在所述第一数据库存储中维护数据页的位置;
目录页,用于维护所述每一映射表页的位置;以及
数据库头页,用于维护所述目录页的位置。
11.如权利要求10所述的计算机可读媒质,其特征在于:
将所述第一数据库的所选页的内容储存在所述第一阴影页中的所述行 动包括:
将所述数据页的内容储存在所述第一阴影页中;
将所述维护页的所述第一部分的内容储存在所述第二阴影页中的所述 行动包括:
将所述映射表页和所述目录页的内容储存在所述第二阴影页中。
12.如权利要求9所述的计算机可读媒质,其特征在于,它还包括:
生成位图代码段,用于引发所述计算机处理器生成用于指示所述第一 数据库存储中每一页已使用还是未使用的位图;以及
更新位图代码段,用于引发所述计算机处理器依照所述指示行动更新 所述位图。
13.如权利要求8所述的计算机可读媒质,其特征在于,它还包括:
最后指示代码段,用于引发所述计算机处理器在将所述第一阴影页和 所述维护页的所述第一部分的内容第二次储存在所述第二数据库存储中的 所述行动之后:
指示所述维护页的所述第二部分为未使用页;以及
指示所述所选页为未使用页。
14.如权利要求8所述的计算机可读媒质,其特征在于,它还包括:
压缩代码段,用于引发所述计算机处理器压缩所述维护页的内容。
15.一种用于访问数据库的系统,所述系统包括:
所述数据库的第一数据库存储;
所述数据库的第二数据库存储;
控制器,用于:
生成用于维护所述第一数据库存储中页的位置的维护页;
将所述第一数据库存储的所选页的内容储存在所述第一数据库存储 的未使用页(第一阴影页)中;
更新所述维护页来反映所述第一数据库存储中所述第一阴影页的位 置,其中维持了所述所选页的位置;
将所述维护页的第一部分的内容储存在所述第一数据库存储的未使 用页(第二阴影页)中;
将所述第一阴影页和所述第二阴影页的内容储存在所述数据库的第 二数据库存储中;
将所述维护页的第二部分的内容储存在所述第二数据库存储中;以 及
重复所述将所述第一阴影页和所述第二阴影页的内容储存在所述第 二数据库存储中的行动;以及
页分配指示器,用于:
响应所述所选页被储存在所述第一阴影页中,指示所述第一阴影 页为已使用页;以及
响应所述第一部分的所述内容被储存在所述第二阴影页中,指示 所述第二阴影页为已使用页。
16.如权利要求15所述的系统,其特征在于:
在所述重复行动之后,所述页分配指示器指示所述维护页的所述第二 部分为未使用页。
17.如权利要求15所述的系统,其特征在于:
所述页分配指示器包括用于指示所述第一数据库存储中每一页已使用 还是未使用的位图;以及
所述控制器依照所述指示行动更新所述位图。
18.如权利要求15所述的系统,其特征在于,所述控制器:
生成至少一个用于维护所述第一数据库存储中的数据页的位置的映射 表页;
生成用于维护每一所述映射表页的位置的目录页;以及
生成用于维护所述目录页的位置的数据库头页。
19.如权利要求18所述的系统,其特征在于:
将所述第一数据库存储的所选页的内容储存在所述第一阴影页中包 括:
所述控制器将所述数据页的内容储存在所述第一阴影页中;
将所述维护页的所述第一部分的内容储存在所述第二阴影页中包括:
所述控制器将所述映射表页和所述目录页的内容储存在所述第二阴 影页中。
20.如权利要求15所述的系统,其特征在于,还包括:
用于压缩所述维护页的内容的数据压缩器。
21.一种用于访问数据库的方法,所述方法包括:
将所述数据库的所选页的内容储存在第一阴影页中,其中,所述第一 阴影页包括所述数据库的未使用页;
在所述数据库的映射表页中维护所述所选数据页和所述第一阴影页的 位置;
在所述数据库的目录页中维护每一映射表页的位置;
在所述数据库的数据库头页中维护所述目录页的位置;
将所述第一阴影页、所述映射表页和所述目录页的内容储存在所述数 据库的永久数据库存储中;
将所述维护页第二部分的内容储存在所述永久数据库存储中;以及
将所述第一阴影页和所述维护页的所述第一部分的内容第二次储存在 所述持久数据库存储中。

说明书全文

技术领域

发明一般涉及存储器的使用,尤其涉及数据库中提交事务。

发明背景

数据库和数据库产品今天被普遍使用。对移动数据库产品的需求不断增加。 移动数据库产品因其小尺寸和可携带性而受欢迎。然而,移动数据库产品具有有 限的存储。数据库产品的所期望的特点包括实现原子原子事务和耐久事务的能。 原子事务是从不部分提交的事务—它或者完全实现,或者完全不实现。耐久事务 是其中数据库状态的变化为永久性的事务。数据库的所期望的另一特性是从故障 中恢复的能力,如电源故障、盘崩溃等等。当前实现原子事务和耐久事务并提供 稳定数据库恢复的系统往往较复杂且需要大存储量。复杂的、存储密集型的进程 不适合具有有限存储器的那些产品,如移动数据库产品。
需要一种能够实现原子事务和耐久事务并提供可靠地从具有有限存储的设备 中的意外故障中恢复的方法的技术。
发明概述
本发明提供了一种用于访问数据库、同时减轻意外故障有害影响的技术。该 技术使用相对较少的软件代码,因此令它尤其适合于具有有限存储器或有限速度 的电子设备,如手持式设备和/或移动数据库产品(如SQL-CE)。本发明使用阴 影分页来提供一种的有效方法用于维持数据库的当前状态直到原子事务完成,使 得如果在事务提交时产生系统故障则事务能够重新运行。一旦事务完成,数据库 的新状态变为可用。
在事务处理中,受事务处理影响的页从数据库文件复制到工作空间中,如易 失存储器,并在该工作空间中被修改。当事务提交,所有被事务修改的页从工作 空间写入数据库文件中未使用的页。在执行事务的过程中,在用户面前暴露的数 据库状态是数据库在事务之前存在的状态,这是由于数据库文件仍包含被修改的 页的原始版本,如它们被复制入工作空间之前所存在的。这样,如果用户在事务 完成之前访问数据库,它将出现在用户面前犹如事务未曾发生一样。再者,如果 在事务的执行过程中出现故障,一恢复,系统就处于事务开始之前的状态。例如, 如果故障(如盘故障、掉电、机器崩溃)在向数据库写入页的中途出现,数据库 仍然处于相容状态。
在实现阴影分页的示例方法中,数据库文件的所选页的内容储存在数据库文 件的未使用页中(称为第一阴影页)。第一阴影页宣称为已使用页。更新用于维 护数据库文件中页的位置的维护页(数据库头页、目录页、映射表页),来反映 数据库文件中第一阴影页的位置,所选页的位置被维护。维护页的一部分(目录 页、映射表页)的内容储存在数据库文件的未使用页中(称为第二阴影页)。第 二阴影页宣称为已使用页。第一阴影页和第二阴影页的内容然后储存在永久存储 器中。维护页的另一部分(数据库头页)的内容储存在永久存储器中,并且第一 阴影页和第二阴影页的内容再一次储存在永久存储器中。
一种用于实现该方法的系统包括数据库文件、永久存储器、控制器、页分配 指示器。控制器产生用于维护数据库文件中的页的位置的维护页,并将数据库的 所选页的内容储存在第一阴影页中。控制器更新维护页来反映第一阴影页的位置, 同时保留所选页的位置并将维护页的第一部分的内容储存在第二阴影页中。控制 器也将第一阴影页和第二阴影页的内容储存在永久存储器中,将维护页的第二部 分的内容储存在永久存储器中,并再一次将第一阴影页和第二阴影页的内容储存 在永久存储器中。页分配指示器响应所选页被储存在内第一阴影页中,指示第一 阴影页是已使用页,并且响应第一部分的内容被储存在第二阴影页中,指示第二 阴影页是已使用页。
附图的简要描述
结合附图阅读以下描述,可以理解本发明的特征和优点,附图中:
图1是依照本发明一个示例实施例的用于实现阴影分页的存储器页结构的说 明;
图2所示是依照本发明一示例实施例的映射表页的一部分,显示了映射到用 户数据页的物理位置的逻辑ID;
图3所示是依照本发明一示例实施例的目录页的一部分,显示了映射到映射 表页的物理位置的逻辑ID;
图4所示是依照本发明一个示例实施例的数据库头页的一部分,显示了映射 到目录页的物理位置的逻辑ID;
图5到图7是依照本发明示例实施例实现阴影分页的进程的流程图
图8到图13所示是依照本发明示例实施例描述使用阴影分页的事务提交的 示例;
图14是依照本发明一个示例实施例的实现阴影分页的系统的结构图;以及
图15所示是能够实现依照本发明示例性阴影分页的方法和系统的合适计算 系统环境的示例。
说明性实施例的详细描述
这里所描述的阴影分页提供了一种用于例如在数据库中对存储进行访问和控 制,同时减轻诸如电源故障、盘崩溃和/或处理器故障等意外故障的有害影响的技 术。该技术能够相对简单地实现并使用很少的软件代码,这样使其尤其适合于具 有有限存储器的电子设备,如手持式设备和/或移动数据库产品(如SQL-CE)。 数据库产品的重要特点包括实现原子事务和耐久事务的能力。原子事务是从不部 分提交的事务—即,该事务或者完全完成,或者完全不完成。耐久事务是其中数 据库状态的变化是永久性的事务,在这一意义上,即使在事务完成之后立即出现 系统崩溃,所得到的数据库事务后状态也能够继续存在。阴影分页提供了一种用 于实现原子事务和耐久事务的机制。
图1是能够实现阴影分页的示例数据库组织的说明。在示例实施例中,在具 有图1所示结构的数据库被修改时可以利用阴影分页,并且这里本发明是在这类 数据库的背景下描述的。然而,可以理解,这里描述的阴影分页不局限于数据库 应用,而是可以在各种牵涉存储器利用的其它情况中使用。
图1描述的页是数据库文件的页,包括数据库头页12、目录页13、至少一 个映射表页16以及至少一个用户数据页18。图1描述的数据库文件的页包括内 存或存储器的页。这类内存或存储器不局限于特定类型或分类的存储器,而可以 包括半导体存储器、磁存储器(如盘)、光存储器、机械存储器、随机存储存储 器(RAM)、易失存储器以及非易失存储器、或其它任何类型能够储存数据的设备。 在以下描述中,术语“存储器页”不局限于传统“存储器”设备(如RAM或ROM), 而应该理解为包括所有类型的数据存储设备。
图1所示的页结构能够使用相对较小存储来实现。例如,如果页的尺寸是4096 字节,最大数据库文件尺寸是232字节(4千兆字节),作为结果的文件中页的最 大数量是220页。因此,映射表页16储存最多220个条目(每页一个条目)。如果 文件中页的物理位置用字节偏移来标识,则用32位来代表每页。可以通过将页的 偏移储存为页尺寸的增量来减少到每页20位。因此,映射表页16采用(220)× 20位的空间,结果是2,621,440字节。在一示例实施例中,映射表页16作为一 组页储存在数据库文件中。如果映射表页是4096字节,并使用20位来储存一页 的物理位置,则每一映射表页最多可以引用1638页。这样,可以用最多641个映 射表页来引用最多220页。典型的数据库文件远小于4千兆字节,这样可使用更少 的映射表页。如上所述,使用目录页14来跟踪数据库文件中映射表页16的物理 位置(如,当映射表页16被修改并转储到新的位置)。依照以上示例,目录页14 具有一个20位的条目,它跟踪着数据库文件中每一映射表页的物理位置。头页12、 目录页14和映射表页16与用户数据页18的数量相比消耗的盘空间(存储)相对 较小。例如,1,047,933(220减643)个用户数据页18可以由643个“维护页” 来维护。(在本发明中,所谓“维护页”是储存数据库系统使用的管理数据的页, 而不是用户数据。在图1的示例中,头页12、目录页14和映射表页16是“维护 页”。)这样一来,维护页仅消耗总数据库文件空间的0.06%。应当注意,以上 描述的4096字节页的值和20位数据类型是示例性的。可以想像,以上描述的文 件结构的实现可以使用数据压缩来将20位数据类型减少到更小尺寸的数据类型。
维护页维护图1描述的所有页的位置。数据库头页12维护目录页14的位置。 在一示例实施例中,目录页14的物理地址储存在数据库头页12的第一扇区中, 并且数据库头页12储存在数据库文件的起点。如下文所述,这能够确保事务是原 子型事务。目录页14维护映射表页16的位置。映射表页16维护用户数据页18 的位置。用户数据页18可包含数据库数据,如记录和/或索引键等。如下文更加 详细描述的,图1所示的存储器页结构用来在阴影分页过程中跟踪并维护存储器 页。
图1所示的结构使页可以由“逻辑”标识符来标识。典型的数据库产品使用 代表文件中页的物理地址的页标识符。例如,典型数据库产品可通过从数据库文 件的逻辑起点引用的偏移值来标识一个给定页。由于页可引用其它页,这些标识 符可能经常出现在贯穿数据库的各种地方。这一标识页的方法令将页从文件的一 个位置移到另一各位置变得很困难,因为只要移动一个或多个页,就必需更新所 有引用所移动的页的页标识符来反映新的位置(如新页偏移值)。然而,当使用 图1所示的结构时,可以在目录页和指向给定页的映射表页内的元素的基础上标 识一个给定页。例如,一个给定页可以由到目录页的偏移和到映射表页的偏移来 标识;然后给定页通过以下方式来定位:(1)根据在目录页的指定偏移中找到的 指针来定位特定映射表页,以及(2)通过定位的映射表页中找到的指针来找到给 定页。这样,通过简单地更新目录页和映射表中的适当条目,页可以移动到数据 库文件的另一个位置,而不需要改变其逻辑标识符。这一技术与虚拟存储器系统 中的地址变换表的使用类似。
如下文更详细的讨论,逻辑页标识符的使用方便了阴影分页的实现,这样, 在本发明的一个示例实施例中,数据库文件中的页由逻辑页标识符(ID)来标识。 在数据库中,页通过逻辑ID来访问并跟踪。页的位置也通过使用逻辑页ID来维 护。图2是表示映射到用户数据页18的物理位置15的逻辑ID 13的映射表页16 的一部分。(可以理解,数据库文件中页的“物理”位置指的是这样一个事实, 数据库文件(或任意文件)的每一页由基本文件系统来定义,从文件的开始处有 一定偏移,而这一偏移不会改变—即使文件系统重新安排盘上的页的实际位置。 然而,术语“物理”位置不表示数据库管理系统必需知道给定页储存在盘的何处。) 逻辑页ID 13映射到用户数据页18的一个物理页地址。这一映射通过映射表16 来实现。映射表16作为一组页储存在数据库文件内。每一映射表16包括将逻辑 页ID 13映射到相应用户数据页18的物理页地址15(也称位置)的条目11。当 用户数据页18的物理位置改变(如,当数据被转储到数据库),更新映射表16 中其相应的条目。对于该条目,被移动的用户数据页18的逻辑ID 13没有改变, 但是用户数据页18所移往的物理地址被输入进映射表16中条目11的物理位置部 分15中。
数据库头页12和目录页14也包含将逻辑ID映射到物理地址的条目。数据 库头页12包含将逻辑ID映射到目录页14的物理地址的条目。目录页14包含将 逻辑ID映射到映射表16的物理地址的条目。
图3是表示映射到映射表页16的物理位置21的逻辑ID 19的目录页14的 一部分。每一目录页14包括将逻辑ID 19映射到相应映射表页16的物理页地址 21的条目17。当映射表页16的物理地址改变时(如,当数据被转储到数据库), 更新目录页14中其相应的条目。对于该条目,移动的映射表页16的逻辑ID 19 没有改变,但是映射表页16所移往的物理地址被输入进目录页14中条目17的物 理位置部分21中。
图4是表示映射到目录页14的物理位置27的逻辑ID 25的数据库头页12 的一部分。数据库头页12包括将逻辑ID 25映射到目录页14的物理地址27的条 目。当目录页14的物理位置改变时(如,当数据被转储到数据库),更新数据库 头页12中其相应的条目。对于该条目,要移动的头页12的逻辑ID 25没有改变, 但是目录页14要移往的物理地址被输入进数据库头页12中条目23的物理位置部 分27中。
在一个示例实施例中,要这样来分配逻辑ID,使得逻辑ID所引用的页的类 型(如头、目录、映射表或用户数据页)能够从逻辑ID引用中推断出来。例如, 使用以上描述的页和条目大小,页ID是0的可能指的是数据库头页12,页ID是 1的可能指的是目录页14,页ID是2到643(包括643)的可能指的是映射表页 16,大于或等于644的页ID可能指用户数据页18。逻辑ID可以以任意合适的方 式来表示。在一个示例实施例中,逻辑ID用20位无符号值来表示。10个最低位 对应目录页中包含相应映射表页16的物理页地址的条目。10个最高位对应于适 当映射表页16中包含相应用户数据页18的物理页地址的条目。
逻辑ID可以以任意合适的方式映射到物理地址。表1以伪代码的形式描述 了将逻辑ID映射到物理地址的一个示例技术。表1所示的技术采用上文描述的逻 辑ID到物理地址分配。
                             表1 DWORD TranslateLogicalPageId(PAGEID idPage) {     //Iocal variables     //     DWORD              iEntry;     20bitValue         ofDirectoryPage;     20bitValue         ofMapPage;     20bitValue         ofDataPage;     DATABASEHEADERPAGE headerPage;     DIRECTORYPAGE      directoryPage;     MAPPINGTABLEPAGE   mapPage;     //if the page id refers to the database header page     //     if(0==idPage)     {         //return zero(db header page is always at offset zero)         //         return 0;     }     //read the database header page     //     ReadPage(0,&headerPage);     //save the physical address of the directory page     //     ofDirectoryPage=headerPage.DirectoryPageAddress;     //if the logical page id refers to the directory page?     //     if(1==idPage)     {         //return the physical address of the directory page         //         return ofDirectoryPage;     }     //read the directory page from the database     //     ReadPage(ofDirectoryPage * PAGESIZE,&directoryPage);     //the least significant 10 bits are an index into the directory page     //     iEntry=GetLeastSignificant10Bits(idPage);     //get the physical address of the corresponding mapping table page     //     ofMapPage=directoryPage.rgMappingTablePageAddress[iEntry];     //if the logical page id refers to this mapping table page?     //     if(idPage<=643)     {       //return the physical address of the mapping table page       //       return ofMapPage;     }     //read the mapping table page from the database     //     ReadPage(ofMapPage * PAGESIZE,&mapPage);     //the most significant 10 bits are an index into the mapping page     //     iEntry=GetMostSignifican10Bits(idPage);     //get the physical address of the corresponding data page     //     ofDataPage=mapPage.rgUserDataPageAddress [iEntry];     // return the physical address of the user data page(idPage)     //     return ofDataPage; }
如下文更详细的描述,依照本发明的一个实施例的阴影分页牵涉向可用页写 页的内容。在这一进程中,一些页会变为空闲,而另一些会变为已用。为达到这 一目标,提供了分配指示器。分配指示器指示逻辑ID和物理地址的状态(可用或 不可用)。可以使用任何使用指示状态的方法。在一个示例实施例中,使用位图 来指示逻辑ID的分配状态。逻辑ID分配位图包含对维护页(映射表页16、目录 页14和数据库头页12)中的每一条目的一位。在一个示例实施例中,位设为1, 则指示相应的条目已分配(不可用)。位设为0,则指示相应的条目是空闲的(可 用)。在阴影分页进程中,通过搜索值为零的位图可以定位一个可用的页。为指 示所找到的页现在已分配(不可用),将相应位图条目变为1。
在一个示例实施例中,逻辑ID分配位图作为一组页储存在数据库文件中。 在另一实施例中,该位图不储存在数据库文件中,并且当数据库打开时被初始化。 初始化可以通过清点映射表中所有页条目来实现(如,读数据库头页12、目录页 14和映射表页16中的每一条目)。如果一个页条目包含一个页的有效物理地址, 则与该页相应的页ID被标记为已分配。一旦扫描了所有的条目,该位图现在指示 页ID的当前分配状态。
这一分配位图可以储存在数据库文件中。例如,如果最大数据库文件容量为 232字节(4千兆字节),并且数据库页容量为4096字节,结果是最多220个逻辑 页ID。这样可以使用131,072字节来实现逻辑页ID分配位图。
使用分配位图使逻辑页ID能够被释放和/或分配,而不需要修改或读维护页。 这通过允许多重事务在同一时间分配并释放数据库中的页ID来提高并发性。使用 分配位图也为分配和释放逻辑页ID提供了一种健壮的机制,因为位图和页条目都 包含在数据库文件中。这一机制是健壮的,因为在事务被转储到磁盘以后,空闲 物理页地址被标记为空闲,并且已分配的物理页地址被标记为已分配。如果不是 这样,如果操作故障,必需重新运行整个转储,这将是非常困难的,因为含有更 新的目录页(以及映射表页等等)的新物理地址的数据库头页已经被转储了。
一旦位图被读进内存,或通过扫描页条目被计算,分配和释放页可以通过对 位图中的位进行计数直到遇到与要分配/释放的页相应的的位来实现。例如,使用 以上示例中描述的页尺寸和数据库结构,与用户数据页相应的页ID可以通过找到 第一个设定为0的大于或等于位图中的位644的位来分配。选择数字644是因为 所有低于644的页ID在以上示例中保留为维护页。要释放逻辑页ID,只要地将 位从1改为0即可。
上文描述的用于分配和释放逻辑页ID的位图型机制同样也适用于分配和释 放物理页地址。在这一情况下,位图对于数据库文件中每一物理地址都有一个位。 在一个示例实施例中,设定为1的位指示该物理页地址已分配。设定为0的位指 示该物理页地址是空闲的。
物理页地址是页在数据库中的位置。当事务提交且页在盘上被投以阴影、当 在阴影池中的脏页被替代时,分配物理页地址。脏页是已被修改的页。这里描述 的阴影分页提供了有效地找到空/未使用页的物理页地址的能力。在一个示例实施 例中,这一物理地址分配位图储存在数据库文件中。如上文所述,这一物理地址 分配位图可以在131,072字节的最大容量范围内实现。在另一实施例中,当打开 数据库时,通过扫描数据库头页12、目录页14和映射表页16来计算物理地址分 配。如果计算位图,则可以在计算逻辑页ID位图的同时对其进行计算,因为扫描 了同一组页。
释放物理页地址的计数与上文描述的释放逻辑页ID的计数相同。分配物理 页地址的计数几乎与分配逻辑页ID的计数相同。不同之处在于,如果现存的物理 页没有一个是空闲的,则增大数据库文件(即,在文件的末端添加一定数量的物 理页),并且添加到数据库文件的新物理页地址被标记为地址位图中的空闲物理 页地址。
以下表2以伪代码的形式显示了当第一次打开数据库时初始化逻辑页ID位 图和物理页地址位图的一个示例技术。
表2 //this class is used to maintain a set of bit values // class Bitmap {       // set the value of the bit at position iBit to 1 or 0       //       void SetBit(DWORD iBit,bool fValue);       //get the value of the bit at position iBit       //       bool GetBit(DWORD iBit); }; // some useful constants // const ULONG PAGEID_HEADER   =0; const ULONG PAGEID_DIRECTORY=1; DWORD ComputeBitmaps(     Bitmap& idBitmap,       //free/allocated page id bitmap     Bitmap& addressBitmap)   //free/allocated page address bitmap {     //local variables     //     ULONG             idPage;     20bitValue        ofMapPage;     20bitValue          ofDataPage;     DATABASEHEADERPAGE  headerPage;     DIRECTORYPAGE       directoryPage;     MAPPINGTABLEPAGE    mapPage;     //mark the header page id and address as allocated     //     idBitmap.SetBit(PAGEID_HEADER,1);     addressBitmap.SetBit(0,1);     //read the database header page from offset zero     //     ReadPage(0,&headerPage);     //mark the directory page id and address as allocated     //     idBitmap.SetBit(PAGEID_DIRECTORY,1);     addressBitmap.SetBit(headerPage.DirectoryPageAddress,1);     //read the directory page from the database     //     ReadPage(headerPage.DirectoryPageAddress * PAGESIZE, &directoryPage);     //enumerate through the mapping table pages referenced     //     for  (ULONG i=0;i<641;i++)     {          //get the address of the map page          //          ofMapPage=directoryPage.rgMappingTablePageAddress[i];          //if there is no mapping table page referenced here?          //          if(0==ofMapPage)          {              //go to the next mapping table page              //              continue;              }              //make a page id              //              idPage=MakePageId(i/*high 10 bits*/,j/* low 10 bits*/);              //mark the mapping table page id and address as allocated              //              idBitmap.SetBit(idPage,1) ;              addressBitmap.SetBit(ofMapPage,1);              //read the mapping table page from the database              //              ReadPage(ofMapPage * PAGESIZE,&mapPage);              //enumerate through the user data pages referenced              //              for(ULONG j=0;j<1638;j++)              {                 //get the Physical address of the corresponding data page                 //                 ofDataPage=mapPage.rgUserDataPageAddress[j];           //if there is no user data page referenced here?           //           if(0==ofDataPage)           {                //go to the next user data page in this mapping table page                //                continue;           }           //make a page id           //           idPage=MakePageId(i/*high 10 bits*/,j/*low 10 bits */);           //mark the user data page id and address as allocated           //           idBitmap.SetBit(idPage,1);           addressBitmap.SetBit(ofDataPage,1);       }    }    //at this point the page id bitmap and address bitmap represent the    //current set of allocated/free logical page ids,and the current    //set of allocated/free physical page addresses. }
图5到图7是实现阴影分页的示例进程的流程图。如上所述,当提交事务时, 所有被事务所修改的页写入数据库文件(第一数据库存储)中的未使用(空闲) 页。在事务的执行过程中,保留事务之前的存储状态和对数据库的访问。图5到 图7中所描述的进程在下文示例性参考图1到图4所描述的组件来描述。
在步骤20,在数据库文件中产生映射表页(如映射表页18)。这些映射表 页被用来维护数据库文件中用户数据页(如用户数据页18)的位置。通过映射表 页对用户数据页的位置的维护可如上文所述的来实现。在步骤22,在数据库文件 中产生目录页(如目录页14)。目录页用来维护映射表页的位置。通过目录页对 映射表页的位置的维护可如上文所述的来实现。在步骤24,在数据库文件中产生 数据库头页(如数据库头页12)。数据库头页用来维护目录页的位置。通过数据 库头页对目录页的位置的维护可如上文所述的来实现。可任选地,如上文所述, 在步骤26产生页分配位图。这一位图的产生包括指示逻辑ID的分配的位图、指 示物理地址的分配的位图或两者的组合。通常,当最初创建数据库文件并在任何 数据放入数据库文件中之前,产生维护页以及位图。
在步骤28,数据库文件中要修改的用户数据页(脏页)的内容储存在数据库 文件中的未使用页中。在一个实施例中,修改的页保留在易失存储器中直到事务 提交。当事务提交,将脏用户数据页从易失存储器写入数据库文件的未使用页中。 储存脏页的内容的未使用页称为阴影页。这样,将脏用户数据页写入工作空间的 未使用页(阴影页)中。在原用户数据页被标记为空闲之前写入阴影页,这样将 原始用户数据页保留了一段时间。如果在完成之前操作故障,数据库仍处于相容 (consistent)状态,因为仅改写未使用页,头、目录和映射表仍仅反映旧页的 存在,而不是阴影页。在一个实施例中,可以通过将原始用户数据页复制到工作 空间来实现这一目标。修改在工作空间中进行,然后将修改的工作空间页在事务 提交之前复制到空闲页(阴影页)中。
在步骤30,将用户数据阴影页标记为已分配。即,脏页已写入的页不再空闲。 这一分配状态可由任一合适的机制来指示。一种机制是分配位图。这样,在一个 示例实施例中,在步骤30,阴影页的分配状态由分配位图来指示。随着每一用户 数据页写入一个新物理页地址(被投以阴影),在步骤32更新映射表中用户数据 页的相应条目来反映用户数据页的新位置。在步骤34,将用户数据页的前一物理 地址(内容从其移出的地址)维护为“已分配”。即,用户数据页先前的物理地 址未宣称为空闲。因为用户数据也还未更新,如果发生故障,数据库系统能够恢 复到它先前的状态。这样,“保护”了(saved off)用户数据页的旧物理地址, 并如下文所述,在事务完成之后,将旧物理页地址标记为空闲(见步骤58)。
在步骤36,已修改(更新)的映射表页的内容储存在数据库文件的未使用页 中(映射表阴影页)。这样,将脏映射表页写入数据库文件的未使用页(阴影页)。 阴影页在做出任何修改之前先写入,这样将旧页保留一段时间。如果这一操作在 完成之前失败,则数据库仍处于相容状态,因为仅改写了未使用页。在一个实施 例中,通过将原始映射表页复制到工作空间来实现这一目标。修改在工作空间中 进行,然后在事务提交之前将修改的工作空间页复制到空闲页(阴影页)。在步 骤38,将映射表阴影页标记为已分配。即,脏页已写入的页不再空闲。这一分配 状态可由任何合适的机制来指示。一个这样的机制是分配位图。这样,在一个示 例实施例中,在步骤38,映射表页的分配状态由分配位图来指示。在步骤40,更 新目录页(如目录页14)来反映映射表阴影页的位置。这样,随着每一映射表页 写入一个新物理页地址,目录页中映射表页的相应条目被更新,来反映映射表的 新位置。在步骤42维护了映射表页的先前的物理地址(内容从其移出的地址)。 即,先前映射表页的物理地址未宣称为空闲。如果发生故障,这使数据库系统能 够恢复到它先前的状态。这样,“保护”了映射表页的旧物理地址,并且如下文 所述,在事务完成之后,将旧物理页地址标记为空闲(见步骤58)。
在步骤44,目录页的内容储存在数据库文件的未使用页中(目录阴影页)。 在做出任何修改之前将阴影页先写入,这样将旧页保留一段时间。在一个实施例 中,通过将原始目录页复制到工作空间来实现这一目标。修改在工作空间中进行, 然后在事务提交之前将修改的工作空间页复制到一个空闲页(阴影页)。在步骤 46,将目录阴影页标记为已分配。即,目录页已写入的页不再空闲。这一分配状 态可由任一合适的机制来指示。一个这样的机制是分配位图。这样,在一个示例 实施例中,在步骤46,目录页的分配状态由分配位图来指示。在步骤48更新数 据库头页(如数据库头页12)来反映目录阴影页的位置。这样,当目录页写入新 物理地址时,更新数据库头页中目录页的相应条目来反映目录页的新位置。在步 骤50维护目录页先前的物理地址(内容从其移出的地址)。即,先前目录页的物 理地址未宣称为空闲。当发生故障时,这使得数据库系统能够恢复到它先前的状 态。这样,“保护”了目录页的旧物理地址,并且如下文所述,在事务完成之后, 将旧物理页地址标记为空闲(见步骤58)。
在步骤52,数据库中所有阴影页(用户数据阴影页、映射表阴影页、目录阴 影页)的内容储存在数据库永久存储器(已转储)中。转储(flush)数据库文件 阴影,这样将前面的步骤中所有的变化固化到持久存储机制(如磁盘)中。在步 骤54,数据库头页储存在数据库(已转储)中。在步骤56,再一次转储阴影页。 这一双重转储技术确保数据库系统在出现故障的情况下一恢复就处于相容状态。 在写数据库头页之前,没有对数据库文件做出任何不安全的变化。其它事务可以 使用数据库头页、目录页和映射表页的旧的或当前提交的版本。当提交数据库头 页时,这激活了新目录页,从而激活了新映射表页,进而激活了用户数据页的新 版本。例如,如果仅在写数据库头页之后出现转储,可能在目录页固化到存储盘 之前将数据库头页固化到盘(保存目录页的新位置)。这可能会导致数据库系统 的状态变为不相容。步骤52、54和56的成功完成能够确保事务完全执行,这样 旧物理地址变为空闲以便使用(可用)。因此,在步骤58宣称用户数据页、映射 表页和目录页为空闲。这一分配状态可由任一合适的机制来实现,例如上述分配 位图。在步骤58,释放所有旧物理页地址,这样它们可以用于其它操作。然而, 如果在转储进程完成之前出现故障,所有新分配的物理页地址被释放,系统处于 其先前状态。
在一个示例实施例中,为确保事务是原子性的(如,一个扇区决不能部分地 写),将目录页的物理页地址储存在数据库头页的第一扇区中,数据库头页储存 在数据库文件的起点(如,第一扇区)。这样,提交一个事务是原子性的,因为 如果没有写数据库头页的第一扇区,则事务不提交,并且数据库仍然相容,因为 仅改写了未使用页。
参考图8到图13,下文提供了使用阴影分页完成事务的一个示例。图8说明 了数据库文件的页0到8。页0是数据库头页,页1是目录页,页2是映射表页, 页3到4是脏用户数据页,页5到8是空(未使用)页。实线代表头页中的条目 (逻辑ID)指向目录页,目录页中的条目指向映射表页,以及映射表页中的条目 指向用户数据页。这一示例从以下假定开始,假定事务已开始并已修改了用户数 据页1和用户数据页2并正在提交。如上文所述,用户页1和用户页2的脏副本 写入文件中的未使用位置中。
图9说明了分别将写入物理页地址5和6的用户页1和2(即,分别为物理 页3和4)。对相应的映射表页进行修改以表示出用户页1和用户页2的新位置。 将要写入页5和6的用户页1和2用从有灰条纹的映射表页出发的虚线箭头来指 示。正在修改以表示出用户页1和2的新位置的映射页2用从有灰条纹的映射表 页出发的实线箭头来指示。对映射表页的修改使其变为当前事务中的脏页。由于 该事务正在执行,其它事务使用储存在页2中的映射表页(带阴影的灰色)。下 一步,将已修改的映射表页写入未使用页。注意,参考图9,在每一步将页写入 盘,然而在参考图5到图7的描述中,是在更新所有维护页之后将页转储到盘。 依照本发明,两种技术都是合适的。这样,可以在进程中的任一合适时刻将页写 入盘。
图10说明了将要被写入未使用页7的映射表页以及将要被更新来反映映射 表页新地址的目录页。在这一示例中,仅修改了一个映射表页。同先前描述的步 骤相类似来完成这一进程。将映射表页写入数据库文件的未使用页,并更新目录 页来反映映射表页的新位置。其它事务仍使用分别位于页1和2的目录页和映射 表页的灰色阴影部分。
下一步,将目录页写入未使用页,(本示例中的页8),如图11所示。图11 也描述了将要更新以反映目录页的新位置的的数据库头页。下一步,如图12所示, 写数据库头页(使用上文描述的双重转储技术)。在写头页并完成双重转储进程 之后,事务成功地提交,并且其结果现在通过暴露在用户面前的数据库状态来反 映(即,数据库用户现在可以“看见”对用户数据页、映射表页和目录页所做出 的变化)。如图13所示,作为将四页移动到新物理页地址的结果,所释放的物理 页地址(页1-4)被解除分配(设为可用)。
图14是完成阴影分页的系统的流程图。在一个示例实施例中,系统用来访 问数据库,并在这一前提下进行描述。系统包括工作空间(第一数据库存储)78、 永久存储(第二数据库存储)80、页分配指示器72、控制器74以及可任选数据 压缩器76。工作空间78和永久存储器80可以包括任何合适类型的存储器,如半 导体存储器、磁存储器(如盘)、光存储器或其组合。通常并优选地,永久存储 器80具有永久储存数据的能力。这样,在正常操作条件下,写入永久存储器80 的数据一直可用,直到数据特别地被移出和/或改写。如这里所述,术语“转储” (flush)是指将数据传输到永久存储器80。
页分配指示器72完成如上所述的指示逻辑ID和物理地址的分配状态的功 能。在一个示例实施例中,页分配指示器72包括如上所述的位图。数据压缩器76 是可任选的。数据压缩器76压缩工作空间78和/或永久存储器80中的数据,来 减少系统中使用的存储器的容量。数据压缩器76可以采用任一合适的数据压缩技 术。
控制器74执行许多与维护页(数据库头页、目录页和映射表页)相关联的 功能,并同时控制用于实现如上文所述的阴影分页的步骤的处理。控制器74产生 用于维护数据库文件中页的位置的维护页。控制器也将所选的页的内容储存在未 使用页中(阴影页)。控制器74更新维护页来反映工作空间中阴影页的位置。控 制器74也将维护页的内容储存在工作空间的未使用页中。控制器将工作空间78 的内容储存在永久存储器80中。控制器74控制上文描述的双重转储进程。
合适计算系统环境的概述
图15说明了一个可实现阴影分页方法和系统的合适计算系统环境100的 示例。该计算系统环境100仅是合适计算环境的一个示例,并非建议对用于 动态并个别控制显示元素的方法和系统的使用范围或功能的限制。也不应将 该计算环境100解释为关于示例操作环境100中说明的任一组件或其组合具 有任何依赖或需求。
阴影分页的方法和系统可操作于许多其它通用或专用计算系统环境或配 置中。众所周知的适合与用于动态并个别控制显示元素的方法和系统使用的 计算系统、环境和/或配置的示例包括但不限于,个人计算机、服务器计算机、 手持式或膝上设备、多处理器系统、基于微处理器的系统、机顶盒、可编程 消费类电子产品、网络PC、小型机、大型机、包括以上系统或设备的分布式 计算环境等等。
阴影分页的方法和系统可能在计算机可执行指令的普通语境下描述,如 由计算机执行的程序模。通常,程序模块包括例程、程序、对象、组件、 数据结构等等,完成特定的任务或实现特定的抽象数据类型。阴影分页的方 法和系统也可以在由通过通信网络或其它数据传输媒质连接的远程处理设备 完成任务的分布式计算环境中实践。在分布式计算环境中,程序模块和其它 数据可以位于包括存储器存储设备的本地和远程计算机存储媒质中。
参考图15,用于实现阴影分页方法和系统的示例系统包括以计算机110 形式的通用计算设备。计算机110的组件可以包括但不限于,处理单元120、 系统存储器130以及将包括系统存储器130的各种系统组件耦合到处理单元 120的系统总线121。系统总线121可以是若干总线结构类型中的任一种,包 括存储器总线或存储器控制器、外围总线以及使用任一各类总线结构的本地 总线。作为示例而非局限,这类结构包括工业标准体系结构(ISA)总线、微 通道结构(MCA)总线、增强型ISA(EISA)总线、视频电子标准协会(VESA) 本地总线以及外设部件互连(PCI)总线(也称为Mezzanine总线)。
计算机110通常包括各种计算机可读媒质。计算机可读媒质可以是任意 计算机110可访问的可用媒质,包括易失和非易失媒质、可移动和不可移动 媒质。作为示例而非局限,计算机可读媒质可以包括计算机存储媒质和通信 媒质。计算机存储媒质包括在任何用于储存如计算机可读指令、数据结构、 程序模块或其它数据的信息的方法或技术中实现的易失和非易失、可移动和 不可移动媒质。计算机存储媒质包括但不限于,RAM、ROM、EEPROM、闪存或 其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁盒、磁 带、磁盘存储或其它磁存储设备、或其它任何可以用来储存所需要的信息并 可由计算机110访问的媒质。通信媒质通常包含计算机可读指令、数据结构、 程序模块或其它在如载波或其它传输机制的已调制数字信号中的数据,并包 括任意信息传送媒质。术语“已调制数字信号”指其一个或多个特性以某种 方式设定或改变来对信号中的信息进行编码的信号。作为示例但非局限,通 信媒质包括有线媒质如有线网络或直接连线连接以及无线媒质如声学、RF、 红外或其它无线媒质。可以理解,任何这些媒质的组合也包括在计算机可读 媒质的范围内。
系统存储器130包括以易失和/非易失存储器形式的计算机存储媒质,如 ROM 131和RAM 132。基本输入/输出系统133(BIOS)包括如在启动时帮助在 计算机110内的元件之间传输信息的基本例程,通常储存在ROM 131中。RAM 132 通常包含处理单元120立即可访问并且/或者当前正在操作的数据和/或程序 模块。作为示例但非局限,图15说明了操作系统134、应用程序135、其它 程序模块136以及程序数据137。
计算机110也可以包括可移动/不可移动、易失/非易失计算机存储媒质。 仅作为示例,图15说明了对不可移动、非易失磁媒质进行读写的硬盘驱动器 141、对可移动、非易失磁盘152进行读写的磁盘驱动器151以及对可移动、 非易失光盘156如CD-ROM、CDRW或其它光媒质进行读写的光盘驱动器155。 其它可用在示例操作环境的可移动/不可移动、易失/非易失计算机存储媒质 包括但不限于,磁带盒、闪存卡、数字多功能盘、数字视频带、固态RAM、固 态ROM等等。硬盘驱动器141通常通过不可移动存储器接口如接口140连接 到系统总线121,并且磁盘驱动器151和光盘驱动器155通常通过可移动存储 器接口,如接口150连接到系统总线121。
以上讨论的并在图15中说明的驱动器及其相关计算机存储媒质为计算机 110提供了计算机可读指令、数据结构、程序模块和其它数据的存储。例如, 在图15中,说明硬盘141储存操作系统144、应用程序145、其它程序模块 146以及程序数据147。注意,这些组件可以与操作系统134、应用程序135、 其它程序模块136以及程序数据137相同,也可以与它们不同。这里对操作 系统144、应用程序145、其它程序模块146以及程序数据147给予不同的数 字,来说明至少它们是不同的副本。用户可以通过输入设备如键盘162和指 向设备161,通常称为鼠标轨迹球触摸板向计算机110输入命令和信息。 其它输入设备(未示出)可以包括麦克、操纵杆、游戏板、圆盘式卫星天 线、扫描仪等等。这些和其它输入设备通常通过耦合至系统总线121的用户 输入接口160连接到处理单元120,但也可以通过其它接口和总线结构来连接, 如并行端口、游戏端口或通用串行总线(USB)。监视器191或其它类型的显 示设备也通过接口,如视频接口190连接到系统总线121。除监视器之外,计 算机也可以包括其它外围输出设备,如扬声器197和打印机196,通过输出外 围接口190连接。
计算机110可以运行在使用到一个或多个远程计算机,如远程计算机180 的逻辑连接的网络化环境中。远程计算机180可以是个人计算机、服务器、 路由器、网络PC、对等设备或其它公用网络节点,通常包括许多或所有以上 描述的与计算机110相关的元件,尽管在图15中仅说明了存储器存储设备 181。所描述的逻辑连接包括局域网(LAN)171和广域网(WAN)173,但也可 以包括其它网络。这类网络环境常见于办公室、企业范围计算机网络、企业 内部互联网以及因特网。
当用在LAN网络环境中时,计算机110通过网络接口或适配器170连接 到LAN 171。当在WAN网络环境中使用时,计算机110通常包括调制解调器172 或其它装置,用于通过WAN 173,如因特网建立通信。调制解调器172可以是 内置的或外置的,可以通过用户输入接口160或其它合适的机制连接到系统 总线121。在网络化环境中,所描述的与计算机110相关的程序模块或其部分 可以储存在远程存储器存储设备上。作为示例但非局限,图15说明了远程应 用程序185驻留在存储器设备181上。可以理解,这里示出的网络连接是示 例性的,可以使用在计算机之间建立通信链路的其它装置。
从个人计算机和因特网的集中的观点,已经发展并且正在发展各种分布 式计算框架。个人和商业用户同样地拥有用于应用和计算设备的无缝共同操 作并且web激活的接口,使得计算活动越来越面向web浏览器和网络。
例如,MICROSOFT的.NET平台包括服务器、构件服务如基于web的数据 存储以及可下载设备软件。通常来说,.NET平台提供(1)令整个范围的计算 设备共同工作并在所有设备上自动更新并同步化用户信息的能力,(2)提高 的web站点交互能力,通过大量使用XML而不是HTML来实现,(3)从用于 各种应用,如电子邮件,或软件,如Office.NET的管理的中央起点到用户的 具有产品和服务的定制访问和传送的特点的在线服务,(4)中央化数据存储, 将增加信息访问以及用户和设备间的信息同步的效率和简易性,(5)整合各 种通信媒质,如电子邮件、传真和电话的能力,(6)对开发员来说,创建可 重复使用模块的能力,借此提高生产力并降低编程错误数,以及(7)还有其 它跨平台综合特性。
这里的示例性实施例是结合驻留在计算设备上的软件描述的,也可以通 过操作系统、应用程序接口(API)或协处理器请求对象之间的“中间人” 对象来实现阴影分页的方法和系统的一个或多个部分,使服务可以由所有.NET 的语言和服务,以及在其它分布式计算框架中完成、支持或访问。
这里描述的阴影分页的方法可以以由计算机实现的进程和用于实践这些 进程的系统的形式来实施。这里描述的阴影分页方法也可以以配备在有形媒 质,如软盘只读存储器(ROM)、CD-ROM、硬盘、高密度盘或其它任何计算 机可读存储媒质中的计算机程序代码的形式来实施,其中,当计算机程序代 码装载到计算机并由其执行时,该计算机变为用于实践本发明的系统。这里 描述的阴影分页的方法也可以以计算机程序代码的形式来实施,如储存在存 储媒质中、装载到计算机并由其执行、或者通过一些传输媒质,如电线或电 缆、通过光纤或通过电磁辐射来传输的程序代码,其中,当该计算机程序代 码装载到计算机并由其执行时,该计算机变为可实践本发明的系统。当在通 用处理器上实现时,计算机程序代码段配置处理器来创建特定逻辑电路
这里描述的各种技术可以结合硬件或软件,或者,如果合适的话,两者 的组合来实现。这样,本发明的方法和装置或其特定方面或部分,可以采用 配备在有形媒质,如软盘、CD-ROM、硬盘或其它任何机器可读存储媒质中的 程序代码(即,指令)的形式,其中,当程序代码装载到机器,如计算机, 并由其执行时,该机器变为用于实践本发明的装置。在程序代码在可编程计 算机上执行的情况下,计算设备通常包括处理器、处理器可读的存储媒质(包 括易失和非易失存储器和/或存储元件)、至少一个输入设备以及至少一个输 出设备。可能使用本发明的信号处理服务,如通过使用数据处理API或其类 似物的一个或多个程序优选地在高级程序语言或面向对象编程语言中实现, 来与计算机通信。然而,如果需要,程序可以在汇编语言或机器语言中实现。 无论如何,语言可以是已编译或已解释的语言,并且与硬件实现组合。
本发明的方法和装置也可以通过以通过一些传输媒质,如通过电线或电 缆、通过光纤或通过其它任何传输形式来发送的程序代码的形式实施的通信 来实践,其中,当程序代码被机器,如EPROM、阵列、可编程逻辑设备、客 户端计算机、视频记录器或其类似物、或具有如以上示例实施例中描述的信 号处理能力的接收机器接收、装载并执行时,该机器变为可实践本发明的装 置。当在通用处理器上实现时,程序代码与处理器组合来提供可操作来调用 本发明的函数的独特装置。另外,与本发明结合使用的任一存储技术可以不 变地为硬件和软件的组合。
本发明的实施例是结合各种示图的较佳实施例来描述的,可以理解,也 可以使用其它类似的实施例,或者在不偏离本发明的情况下对所描述的实施 例作出修改或添加,来完成相同的功能。此外,必需强调,可以考虑各种计 算机平台,包括手持式操作系统或其它应用指定操作系统,尤其是在大量无 线网络化设备继续增加的情况下。因此,本发明不应局限于任一单个实施例, 而应根据后附权利要求书的宽度和范围来解释。
相关专利内容
标题 发布/更新时间 阅读量
移动呼叫修改 2020-05-12 598
多功能修改器 2020-05-12 324
业务流修改流程 2020-05-13 464
修改素材 2020-05-11 885
已修改流同步 2020-05-13 954
修改带 2020-05-11 1030
修改对话窗口 2020-05-12 7
修改设备通知 2020-05-13 653
修改液 2020-05-11 792
错字修改笔 2020-05-12 309
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈