用于具有多线索环境的计算系统的最大并行查找高速缓冲存贮器的制作方法

文档序号:6410825阅读:143来源:国知局
专利名称:用于具有多线索环境的计算系统的最大并行查找高速缓冲存贮器的制作方法
技术领域
本发明涉及在具有多线索环境的处理系统中共享的高速缓冲存贮器,特别是涉及用于一多线索环境的高速缓冲存贮器,其中该高速缓冲存贮器允许随着一高速缓冲存储器的插入或删除操作而并行地发生查找操作。
在本说明书中通篇使用的术语“高速缓冲存贮器”是在容纳有大量数据集合的一子集的计算机存贮器中的一个区域。如果在一高速缓冲存贮器中存贮了一项信息,在该高速缓冲存贮器中对该项信息的搜索将会成功(称之为“高速缓冲存贮器命中”)并只要付出少量的努力。但是,对于不在该高速缓冲存贮器中的一信息项进行搜索(称之为“高速缓冲存贮器未命中”)通常为了从该大的数据集合中检回该信息项需付出昂贵的代价并消费较多的时间。为了把高速缓冲存贮器命中数提高到最大值,在该高速缓冲存贮器中存贮了近期可能作为参考的数据。用于将高速缓冲存贮器命中数提高到最大值的两种通常的策略是存贮最新近的参考数据和存贮最一般的参考数据。
高速缓冲存贮器通常用来改善计算机操作系统(OSs)的性能。例如,Sun“SOLARISTM”OS(Sun和Solaris是Sun Microsystems公司在美国和其它国家的商标或注册商标)使用一用来存贮最新近存取文件名的目录名查找高速缓冲存贮器、一用来存贮最新近存取文件属性的文件属性高速缓冲存贮器和一用来存贮最新存取磁盘信息块的磁盘缓冲高速缓冲存贮器。
执行若干并行操作线索共享一高速缓冲存贮器是可能的,这在后面的整个说明书中称之为“线索”。在一多处理器环境中这种并行操作起因于每个线索被赋予多个处理器中的相应的一个。另一方面,逻辑并行可通过仅在一单个处理器上使用“时间片”技术的一操作系统来完成。通常,这两种策略被组合,因而在一多处理器系统中每个处理器可使用时间分片。
在提供了一多线索环境的一计算机处理系统中(即,一具有多重处理单元的系统中),常规技术采用了一互斥锁定以无论是执行插入、删除还是查找操作都允许高速缓冲存贮器在一时间仅存取一线索。这就确保在一高速缓冲存贮器中存贮的信息被全力以赴地存取或更新,因而防止了在更新操作、从导致查找操作到返回错误结果期间所出现的短暂的不一致性。互斥锁定在现有技术中是已知技术,这里不再详述。某些锁定无需任何硬件支持完全可由软件来实施。用于互斥的大多数一般特定硬件支持是Test(检验)和Set(置位)操作。但是,这两种解决办法(即全部软件和硬件支持锁定)具有这样一个缺点,即忙等待循环的使用难以设计并且不允许使用一队列规定。诸如信号和监视器之类的专门语言特性可应用于解决诸如厂家一用户和读者一作用问题之类需要互斥的一般并行编程问题。更为详细的信息请参见这里所参考的如下出版物A.Burns和G.Gavis,并行编程(Concurrent Programming),pp.64-68,175-184,AddisonWesley,1993。
为确保在一具有多线索环境系统中的高速缓冲存贮器的一致性的软件锁定之应用的一种包括越来越多的线索被恶化的方式负面地影响着此系统的性能。例如,该多线索环境是具有多处理单元(CPUs)的环境,为获得一高速缓冲存贮器的软件锁定所需的空闲处理等待将不使用重要的处理器时间。但是,即使在一单一的处理器中借助于时间分片来提供多重处理的系统中,一等待线索也是一由该操作系统调动或按页调出的候选。为了按页/调动这些线索的进和出而将附加工作量强加在操作系统上,进一步降低了计算系统的可量测性。
上面的讨论涉及一般的高速缓冲存贮器。但是一高速缓冲存贮器可根据下面三个示例中的任何一个示例来安排(1)一“直接映象”高速缓冲存贮器,在其中被存贮的每一项仅具有可被存入其内的一个高速缓冲存贮器位置。这种映象是这样一种方式,即每个高速缓冲存贮器位置可容纳多个不同项中的任何项。例如,高速缓冲存贮器入口1可被指定用来存贮由字母“a”开头的所有项。如果试图将项“aa”插入到一其内已经具有“ab”项的高速缓冲存贮器中,则项“ab”将被投出。
(2)一“充分相联”高速缓冲存贮器,其中一被存贮的数据项可被置入任何高速缓冲存贮器位置。
(3)一“组相联”高速缓冲存贮器,其中一被存贮的数据项可被置入的高速缓冲存贮器的予置组中的任何一个位置。
为了一高速缓冲存贮器的正确运行,许多应用需要在该高速缓冲存贮器中所存贮的每一项是唯一的在该高速缓冲存贮器中不允许存贮重复的项。为确保高速缓冲存贮器的一致性最简单的解决办法是在整个高速缓冲存贮中使用一互斥锁定,从而在一时间上只允许一插入、一删除或一查找操作。
对于直接映象和组相关高速缓冲存贮器,可使用大量的细粒状互斥锁定以允许对该高速缓冲存贮器更多的并行存取。因此,对于整个高速缓冲存贮器,不是仅仅使用一个互斥锁定。对于高速缓冲存贮器中的每个位置(直接映象)或一组位置(位相关)都具有一个互斥锁定。如果对该高速缓冲存贮器的存取呈现无规则状态,因为它减小了在获得需应用一给定的高速缓冲存贮器操作的特定锁定中的冲突的概率所以具有多个互斥锁定提高并行存取。
通常,高速缓冲存贮器查找远比插入和删除要频繁。为了得到这种存取模式的优点,可由一个读—写锁定来取代用来使—高速缓冲存贮器保持一致性的互斥锁定。该读—写锁定允许多个并行高速缓冲存贮器查找,因为这并不改变该高速缓冲存贮器的内容。但是,如果一线索正在执行一插入或一删除,则不管任何原因,所有其它的线索不允许对整个高速缓冲存贮器进行存取,即不允许进行一项另外的插入、删除或查找。因此,一个线索的插入或删除会导致许多其它的线索处于空闲状态。
总之,一个或多个软件查找的使用确保了在一多线索系统中一高速缓冲存贮器的一致性,减少了对该高速缓冲存贮器的并行存取并且不影响该系统的可伸缩性。
一多线索处理系统具有一通常可对每个线索进行存取的高速缓冲存贮器。该高速缓冲存贮器具有多个用来存贮若干项的入口,每一个入口由一入口编号来识别。一入口在该高速缓冲器中的位置包括第一关键字,第一关键字由向一无锁定一查找推理和提供该第一关键字来确定,无锁定一查找推理和提供一为查找入口号的查找输出。该查找入口号可以是第一或第二入口号,其中第一入口号指向其中存贮有项目的第一入口而第二入口号指向其中未存贮有项目的第二入口。在这方面,该查找入口号可考虑为在所希望的入口号上只不过提供了一“提示”。然后它证实该查找入口号是该第一入口号。该检验包括获取一允许至少对由查找入口号所指定的入口独占存取的互斥锁定、使用查找入口号从由该查找入口号所指定的入口中读取一被存贮的关键字、和将第一关键字与所存贮的关键字进行比较。如果两个关键字相匹配,则该项目被安置。
在本发明的一实施例中,该互斥锁定仅对由查找入口号所指定的入口获取独占存取。
在本发明的另一方面,如果第一关键字与所存贮的关键字不相匹配,则免除该互斥锁定。随后,该无锁定查找推理机再次存取该项目的搜索。
在本发明的另一方面,查找输出是查找入口号或者是一表明在该高速缓冲存贮器中没有存贮该项目的指示。如果该查找输出是表明在该高速缓冲存贮器中未存贮有该项目的指示,则执行第二检验。这包括在该高速缓冲存贮器中获取一互斥锁定以不允许对该高速缓冲存贮器的插入和删除,并使用一个无锁定查找推理机以提供该第一入口号或表明在该高速缓冲存贮器中未存贮有该项目的指示的第二查找输出,其中如果第二查找输出是第一入口号则该项目被安置。
在本发明的另一方面中,如果第二查找输出是表明在该高速缓冲存贮器中未存贮有该项目的指示,则第一关键字被存贮在一新的高速缓冲存贮器中并且一新的要素被存贮到一个无锁定查找推理机中,其中该新元素包括有第一关键字和识别新的高速缓冲存贮器入口的一新的入口号。
在本发明的另一方面中,该无锁定查找推理机是一无锁定查找混列表。
通过结合附图对下面详细说明书的阅读将会对本发明有所了解,附图中相同的标号表明类似的部件。


图1是用于本发明的一典型多线索系统的一方框图;图2是根据本发明一实施例的一高速缓冲存贮器的一方框图;图3的图示出了根据本发明的一个方面的高速缓冲存贮器的入口和混列表的入口之间的关系;图4是根据本发明的一实施例的get-Cache-entry程序的流程图;图5是根据本发明的一实施例的find-Cache-entry程序的一流程图;图6是根据本发明的一实施例的一insert-Cache-ifem程序的一流程图;图7是根据本发明的一方面的一get-next-avaliable-entry程序的流程图8是根据本发明的一方面的一find-Cache-entry-least-recently-used程序的流程图;图9是根据本发明的一方面的reclaim-Cache-entry程序的流程图;图10是根据本发明的一方面的insert-Cache-entry程序的流程图;图11是根据本发明的一方面的delete-Cache-entry程序的流程图。
本发明的一实施例提供了一可在一多线索环境中使用的完全相关的高速缓冲存贮器。借助于一高速缓冲存贮器宽的锁定(后面称之为“高速缓冲存贮器锁定”)使得插入到本发明的高速缓冲存贮器的操作和从本发明的高速缓冲存贮器中删除的操作串行化。但是通过该高速缓冲存贮器锁定未阻止为了得到在该高速缓冲存贮器中已被存贮的各项目的并行查找操作。因此,本发明的高速缓冲存贮器实现了在多线索环境中显著吞吐量的改善。本发明的高速缓冲存贮器的这些和其它的特征从下面更为详细的说明中将会变得更为显而易见。
在一最佳实施例中,在Sun工作站和/或服务器中实施的该高速缓冲存贮器具有多个“SPARCTM”处理单元(Sun和SPARC是SunMicrosystems公司在美国和其它国家的商标或注册商标)。参见图1,图1示出了使用本发明技术的一典型的计算机系统。该系统包括有两个相同的处理器101,每一个通过一硬件高速缓冲存贮器129(不要与这里所描述的本发明的高速缓冲存贮器相混淆)而被连接到一公共双端口存贮器(DPM)。每个处理器101包括有一中央处理单元(CPU)105、一随机存取存贮器(RAM)115、一只读存贮器(ROM)117和一与上述部件的每一个相连接的公共系统总线119。每一个处理器101通过总线119还被连接到一共享的输入/输出(I/O)控制器109。该I/O控制器109允许该处理器连接到磁盘107、输入装置111和123和输出装置113和121。这些部件的每一个都是在现有技术中已公知的,在这里不再进一步详述。
每一处理器101包括若干可由CPU105执行的软件部分。这些软件部分之一是一操作系统,该操作系统可选择地执行ROM117或RAM115的输出,“SOLARISTM”是最佳操作系统(Sun和Solaris是Sun Microsystem公司在美国和其它国家的商标或注册商标)。在现有技术中操作系统是公知的,有关该操作系统的说明不在本说明书的范围之内。在另一个实施例中,该系统可仅有一个处理器101和一个具有多任务能力的操作系统,这样这些线索可以并行地运行。在这另一个实施例中,多个线索被允许共同和并行的存取在一存贮器中所存贮的高速缓冲存贮器。在再一个实施例中,在一系统中提供有多个处理器,其中每个处理器运行一具有多任务能力的操作系统。
返回到在图1中所描述的实施例,通过执行在RAM115或ROM117中所存贮的程序,处理器101的每一个彼此相互独立地工作。在这个例子中,每个处理器101包括有一高速缓冲存贮器控制程序125,它控制处理器对在DPM103中存贮的高速缓冲存贮器127进行存取。
现在参考图2对本发明的高速缓冲存贮器127作较为详细的说明。这些入口的一个表被提供用来存贮在该高速缓冲存贮器中的项目信息(以后称之为“高速缓冲存贮器项”)。一高速缓冲存贮器项可存贮在N位置的任何位置上或入口201的该表的入口(以后称之为“入口”)。在入口201的该表中的每个入口唯一地与一入口号相关,这入口号被用作在入口201的该表中的该入口的指针。每一入口具有用来存贮如下信息的区段关键字203、数据值205、入口锁定207、最后存取次数209、和参考计数211。该关键字203和值205共同构成了该高速缓冲存贮器用户所希望存贮和取回的信息项。该值205可以是该高速缓冲存贮器用户所规定的任何结构类型(即,直接的数据操作数,或指向另外的存贮器位置的指针)。在一最佳实施例中,该高速缓冲存贮器的用户必须遵守这样一个限制,即如果一指针指向在一被称为“慢)的高速缓冲存贮器的入口中存贮关键字203和值205的位置,则没有存贮器的存贮单元可以总是被重新定位。为此,可从该高速缓冲存贮器的指针得到其它的线索,并且无需存贮器的存贮单元被重新分配的知识就可利用它。在这种事件之后的结果是不可予料的。
入口锁定207、最后存取时间209和参考计数211内务处理是由该高速缓冲存贮器控制程序125所利用的项目。简言之,该高速缓冲存贮器207允许该锁定的一持有者防止相关的高速缓冲存贮器通过另一线索而被变化和迁移。
最终存取时间209从一高速缓冲存贮器时钟213得到,无论在什么时候对任何高速缓冲存贮器入口进行存取时最好最终存取时间都是单调地增加。每次对一高速缓冲存贮器的存取(即,插入该入口201的高速缓冲存贮表或从入口201的高速缓冲存贮器表取回),最终存取时间209被置为该高速缓冲存贮器时钟213的当前值。一不包含一高速缓冲存贮器项目的高速缓冲存贮器入口将具有等于零的一最终存取时间。如象在下面将要更详细说明的那样,可使用一高速缓冲存贮器置换程序来确定这个信息,除了别的之外,近来很少使用若干高速缓冲器入口(近来常用它的最终存取次数值较大的一高速缓冲存贮器入口)。
参考计数211是一初始置为零的数,并且随后由一线索得到相关高速缓冲存贮器项的每次的增重。如果一线索决定不再使用该高速缓冲存贮四项,则它造成了该参考计数211的递减。由于一参考计数大于零表明该高速缓冲存贮器项是在使用,所以在它得到该高速缓冲存贮器项之后任何线索希望确保该高速缓冲存贮器项将决不简单地被重新要求和重新使用而不必对该参考计数211做任何事情。
与该高速缓冲存贮器127进一步相关的是用来使高速缓冲存贮器四项的插入和删除串行化的一高速缓冲存贮器锁定215,它允许在一时间上仅处理一种这样的操作。正当一高速缓冲存贮器删除或插入操作在进行时可发生高速缓冲存贮器查找。这种特征这里称之为“无锁定—查找”。除了该查找的入口号与被插入的入口号是相同入口号之外,通过并发插入该查找操作将不被延迟。查找操作很可能通过一并发删除操作偶然地被延迟。形成这些偶然延迟的原因将在下面讨论。
如象前面所提及的,该高速缓冲存贮器127是完全相联的,因而一高速缓冲存贮器可被存贮在任何高速缓冲存贮器入口。根据本发明,为了帮助在该入口201的表中的高速缓冲存贮器项的搜索的迅速处理而提供了一无锁存查找推理机。该无锁定查找推理机包括有两部分表217和查找推理机控制程序(未示出)。用于该查找推理机的表217最好包括在高速缓冲存贮器217中。相应的查找推理机控制程序最好编入到该高速缓冲器存贮器控制程序215中。
该查找推理机的作用是接收一输入关键字219,并从那里产生一表明在入口表201中的一入口的入口号221。因此,除了刚刚描述的查找功能之外,对应于各自的高速缓冲存贮器插入和删除操作该查找推理机将独自地进行插入和删除操作。也就是,当一高速缓冲存贮器项被插入到一可利用的入口时,与该高速缓冲存贮器项相关的关键字203和在入口表201中的这一项的入口号将被作为输入219和223而提供给查找推理机表217,这样后者可记录用于未来使用的联系。相类似地,如果该高速缓冲存贮器127允许来自入口201的表的一相应高速缓冲器项的删除,则该查找推理机将独自维持一关键字和来自它的查找机构的它的相关入口号的删除。
为了把高速缓冲存贮器127的效率增加到最大值,该查找推理机将不具有任何它自己的软件锁定,而是依靠通过该高速缓冲存贮器整体上为使用创造条件。因此,该查找推理机期望在它自已的插入和删除操作是串行化的条件下进行操作,但是在其中查找操作将被容许在任何时间出现。在多线索环境中,因此它可予料查找操作并不总是可给出准确结果的。例如,当在该所希望的元素由另一线索并发地写入的情况下,一查找推理机可以错误地返回“元素未发现”的结果(“元素”由一关键字加上它的相关入口号所组成)。该查找推理机还可能错误地返回到一刚刚被删除的一元素的入口号221。另外,如果这个元素是通过另一线索而被并发地改变则该查找推理机可能返回一用于元素的不正确的入口号221。
只要该查找推理机至少提供没有查找操作返回在某时刻由该系统中的一线索决不插入作为一有效元素的部分的入口号221的保证,则通过查找推理机所提供的根据本发明的这些“暗示”(与所保证的准确应答相反)是可接受的。换句话说,该查找推理机必须决不容许返回一末初始化的值作为入口号221。为此要求该入口值作为对于入口201的高速缓冲存贮器的表寻址的一指针。因此,一随机值可寻到一系统失效。在最坏的情况下,通过保证一入口号221仅指向在入口201的表中的一现行的(即使是错误的)入口,则上述的系统失效可被避免。
根据一最佳实施例,该查找推理机是一要求仅仅插入和删除操作的串行化的无锁定—查找散列表,同时容许并行查找操作以产生保证事先没有通过系统中的一线索而被写入该散列表将没有被返回的值。申请这种散列表在美国专利申请号为--(律师备审案目录No.026414-001)的TOCK等人题为“用于在多线索环境中的有效散列表”专利申请中有详细描述,该申请被转让给本发明的同一转让人,这里引入该部分作为参考。
现在结合图3说明作为用于高速缓冲存贮器127的查找推理机的无锁定—查找散列表的使用。在这个例子中,入口301的高速缓冲存贮器表是一目录名查找高速缓冲存贮器,每个关键字203是一文件名,而每个值205是一文件号。这样一种高速缓冲存贮器的用途是用来存贮名子和最接近的被存取文件的相应的文件号。为了说明起见,关键字是“SYS”的高速缓冲存贮器项被存贮在高速缓冲存贮器入口0;关键字是“file1”的高速缓冲存贮器项被存贮在高速缓冲存贮器入口102;关键字是“myfile”的高速缓冲存贮器项被存贮在高速缓冲存贮器入口102;而关键字是“mydir”的高速缓冲存贮器项被存贮在高速缓冲存贮器入口N。
为了能够设置用于任何高速缓冲存贮器项的入口号,给定它的相关的关键字作为一输入,该无锁定—查找散列表303具有存贮在其内的若干关键字和入口号对,在那里用于一给定对,该入口号指向在存贮有关键字和它的相关值的该高速缓冲存贮器中的那个入口。在该无锁定一查找散列表中被安置到关键字/入口号对的每一对的位置是由在该关键字上操作以产生一进入该散列表的一初始索引的散列作用以及如果该初始索引指向一已被占有的位置时则是由一用于安置一有效入口的碰撞策略来确定的。因此,在我们的例子中,关键字“SYS”具有N-1的一散列值,这样该对“(SYS,0)”被存贮在无锁定一查找散列表303中的N-1位置上。如由箭头305所指的那样,“0”表示一高速缓冲存贮器项被存贮在高速缓冲存贮器入口0中。
在上面例子中,假定这些关键字可被存贮在入口201的表中的用于关键字的保存区域内。但是,在实线中一文件名的长度可变化很大并且可以很长(如,达到255字节)。对于每个高速缓冲存贮器入口,它将耗费保存等于文件名的最大尺寸的一关键字字段。对于这种情况的一较好的解决办法是允许关键字203本身作为一指向一存贮器区域的指针,该存贮器区域可作为用于每个单独的文件名所必须的动态分配区域。但是必须采用一种策略以确保对于一关键字用户不重新分配该存贮,除非确实没有另外线索对它查寻。
在一最佳实施例中,不容许两个高速缓冲存贮器项具有相同的关键字。为此该高速缓冲存贮器项通过它们的关键字203与一输入键值相匹配来安置。如果两个高速缓冲存贮器项被容许具有相同的关键字203,则仅仅它们中的一项被安置。例如,该查找推理机是如上所述的一无锁定—查找散列表,在它与其关键字被匹配的第一元素相碰撞之后任何散列表查找操作将总是停止其查寻搜索时序。
为了使用可依靠其返回上述“提示”而不是总是准确应答的一查找推理机,使用了根据本发明的下面的策略。如果在该查找推理机表217中一项目的查找失败(即,该表告知未发现有具有一匹配关键字的元素,这样明显地出现“高速缓冲存贮器未命中”),则必须获取该互斥高速缓冲存贮器锁定215并且为了验证该项确实未在该高速缓冲存贮器之中而执行对于该项的第二次查找。它将再调用该高速缓冲存贮器215的锁定以防止来自删除或插入一项目的其它线索进入该高速缓冲存贮器的任何入门。因为在没有首先获取该高速缓冲存贮器锁定215的情况下没有线索将被更新,并且查找理机插入和删降也被禁止,从而保证了该查找推理机表217将产生用于该检验操作的精确的输出。如果发现查找之后元素实际是在该查找推理机表217中,则所获取的入口数221可被使用来安置所希望的高速缓冲存贮器项。不管在该查找推理机表217中是否发现了查找后的项,在该检验操作之后该高速缓冲存贮器锁定215将被放弃,以便其余线索不被进一步延迟。
类似地,如果在该查找推理机表217中对一项目的查找成功(即告知发现了关键字/入口号对,明显出现一“高速缓冲存贮器命中”),则表明需要对该高速缓冲存贮器项目的同一性进行检验。根据本发明的一个方面,无须对整个高速缓冲存贮器锁定,而仅仅获取所表明的高速缓冲存贮器项目的入口锁定207,这就提供了保证在所安置在表明的高速缓冲存贮器入口的关键字203将不被删除或作其它的变化。直至获得该入口锁定207时,该输入关键字219可与关键字203进行比较以证实已被找还的高速缓冲存贮器项目确实被发现了。
现在来说明本发明的另一方面,当呈现一“高速缓冲存贮器未命中”时,通常出现这样的情况,即接收这个通知的线索将需要进行附加的步骤以便从诸如一主存贮器或磁盘存贮装置之类的其它来源处获得查找之后的信息。直至获得了该信息时,该线索进行将这种信息存入该高速缓冲存贮器的步骤,这样下次它就可更快地被取回。因为向该高速缓冲存贮器中中存贮一项目需要互斥高速缓冲存贮器贮定215的搜索,所以本发明的高速缓冲存贮器的查寻功能中最好包括这样一种特征,即当确定出现了一高速缓存贮器未命中时,通过仅从在可得到的入口写上关键字203标志这个入口很忙,即可继续保留一个高速缓冲存贮器入口,并且向无锁定查找推理机217插入该关键字203。用于这个入口的入口锁定207也被获取,并且指向这个入口的指针随后被返回到具有指明“新高速缓冲存贮器项”的的一返回码的调用线索。该用户线索随后得到来自另一源的信息并且随后无需等待获得该高速缓冲存贮器锁定215而将这个信息存贮进该高速缓冲存贮器入口中。另一方面,该用户线索可不需获得来自一另外源的查找后信息,在这种情况中它将从入口201的表中删除该新建立的高速缓冲存贮器入口。下面还将详细说明一高速缓冲存贮器入口的删除。
本发明的另一方面涉及一种高速缓冲存贮器置换策略,这样一种策略规定了如果该高速缓冲存贮器已满的情况下确定那个高速缓冲存贮器项将从该高速缓冲存贮器移出的条件。在一最佳实施例中,仅仅不被任何线索所使用的这些高速缓冲存贮器项才是用于置换的候选。参考计数211用来表明一项目是否目前被采用。如果该参考项211是零,则该项是空闲的;一非零参考计数211意味着高速缓冲存贮器项已被使用。
该高速缓冲存贮器置换方针的策略是一最近最少使用的(LRU)图表的一变型。实质上,入口201的整个高速缓冲存贮器表被逻辑地分为16个高速缓冲存贮器入口组。每当需要一可利用的高速缓冲存贮器入口时这些组总是以一种圆形Robin方式被登记。如象通过参考计数211被置为零所表明的那样,如果它不被使用一高速缓冲存贮器项将是作为置换候选。如果在该16组中一个以上的高速缓冲存贮器入口目前不被使用则正向最终有取次数209的数值所指出的那样,最新采用的将代替之,如果在一组中每一个高速缓冲存贮器项都正被使用则当前组被跳越,并且下一组被检验。这个过程一直延续到一用于置换的可满意的候选被选择为止。当需要另一个可利用的高速缓冲存贮器入口时,下一候选通过将相同策略加到16个高速缓冲存贮器项的下一组而被选择。该变型的LRU高速缓冲存贮器替代策略避免了在该高速缓冲存贮器中获得的任何类型的锁定的需要,另外需按照常规的LRU技术对高速缓冲存贮器项进行排序。通过确定该LRU顺序而不需包含任何锁定,就可使由变型LRU策略所选择的入口通过在它的选择项和它被锁定(虽然这是不大可能的)项之间的另一线索而被使用成为可能。但是,在一最佳实施例中,绝对LRU排列并非必需,而接近也就足够好了。
在本发明的再一个方面中,该高速缓冲存贮器127包括一用来将该高速缓冲存贮器入口的内容直接写回到另一存贮介质的一回调功能,无论这个入口作为一插入或删除的结果都将从该高速缓冲存贮器中被抛弃。利用该回调程序执行的特定步骤是特定的应用对于一名称高速缓冲存贮器,该回调功能不做任何工作;对于一缓冲器高速缓冲存贮器,在该缓冲器可被重新使用之前一被回收的缓冲器的内容必须被写入磁盘中。执行该插入或删除的线索从该回调信息225中得到该回调程序的地址。通过建立该入口201的高速缓冲存贮器表的线索(以后称之为“创建者线索”)而将该回调程序的地址置入该回调信息中。这就使该创建者线索能够规定无论何时一高速缓冲存贮器入口被置换总是产生该动作。
现在将结合图4-11来说明该高速缓冲存贮器控制器(即该CPU105运行该高速缓冲存贮器控制程序125)的一个实施例。将会了解到虽然下面的讨论涉及不同数值,但这只不过是为了方便而已,并且下面的实际处理描述了一个用来产生控制典型计算机系统的操作的控制信号的装置的实施例。本领域的普通技术人员将会理解到下面的例子只不过是举例说明本发明的一个实施例,可以做出该典型实施例的多种变型,这些变型也仍要满足在本说明书中所描述的所有要求。
利用二个程序对提供给一用户线索的高速缓冲存贮器的存取Get-Cache-Entry和Delete-Cache-Entry。现在对其进行说明。
首先返回到该Get-Cache-Entry程序,该程序的用户向该程序提供一关键字。相应地,该Get-Cache-Entry程序在包括有一具有被匹配的关键字的高速缓冲存贮器项的入口201表中设置并锁定该高速缓冲存贮器入口。该高速缓冲存贮器入口的参考计数211随后被递增1。随后该和用户在入口201表中,获得一指向特定入口的指针。如果在该高速缓冲存贮器127中事先没有被存贮这种高速缓冲存贮器项,则该Get-Cache-Entry程序将该关键字203加到一新获得的高速缓冲存贮器入口,将该高速缓冲存贮器入口设置为“慢”,对它锁定(不是对整个高速缓冲存贮器,仅对该入口),并向该被锁定的入口返入一指针。这就防止了另一线条将另一具有相同名称的入口加入入口201表,并且允许被称为Get-Cache-Entry的线索从另一源中获得相关信息并且随后将这个信息作为值205而存贮。另外,该用户可以不做任何多于删除新建立的高速缓冲存贮器入口的工作,这样另一个线索将具有一插入这个信息的机会。
现在参见图4,图4示出了该Get-Cache-Entry程序的一流程。该程序的一概述如下所述在入口201表中寻找所需要的入口的一企图(在步骤401中称为“Find-Cache-Entry”子程序)。如果它被找到(在步骤403中高速缓冲存贮器命中二“是”),则该高速缓冲存贮器时钟213被递增(步骤407),并且用于该入口的最终存取次数209被置为等于该高速缓冲存贮器时钟213的值(步骤409)。最后,指向该高速缓冲存贮器入口的一指针被返回到调用该Get-Cache-Entry程序400的线索(步骤411)。
另外,如果初始企图未发现安置的所需入口(在步骤411中高速缓冲存贮器命中=“否”),则将该关键字插入一新获得的高速缓冲存贮器入口,将该入口标记为忙,并在该入口中获得一锁定(在步骤405中称为子程序“Insert-Cache-Item”)。为什么在前面句子中使用词“企图”的原因是因为在告知该项未被发现的Find-Cache-Entry程序(步骤401)之后所需项被插入该高速缓冲存贮器127的可能性。当呈现这种情况时,该Inset-Cache-Item程序405将不插入一新项,而是给出一指向具有该匹配关键字的以前被插入的入口的指针。该项将被锁定并标为忙。
现在参见图5,图5示出了该Find-Cache-Entry程序401的一流程图。该流程由一企图获得与该用户的关键字相关的一入口号而访问该无锁定查找散列表开始。如果该散列表返回一表明该元素未发现的指示(在步骤503高速缓冲存贮器命中=“否”),则该Find-Cache-Entry程序401返回到具有一表明“未发现”的返回代码的Get-Cache-Entry程序400。
另一方面,如果该散列表返回一入口号(在步骤503中高速缓冲存贮器命中=“是”),则必须执行下面的步骤,以校验这个“提示”是准确的。首先获得用于这个入口的入口锁定207(即,一由入口号表示的指示)。应注意的是这要求等待另一线索以解除它。
当该入口锁定207被获得时,则该Find-Cache-Entry程序401确信在该入口通常存贮的该关键字203将不变化。因此,它可通过该这个关键字203而被处理,并且为了验证它们匹配而将它与所需项的关键字相比较(步骤509)。如果发现匹配(在步骤511中名称匹配=“是”),则用于这个入口的参考计数211被递增并将该入口标记为“慢”(步骤513),并且将指向该高速缓冲存贮器入口的指针返回到该Get-Cache-Entry程序400(步骤517)。应注意的是用于这个高速缓冲存贮器入口的该入口锁定207被保留。
另一方面,如果在该入口中所存贮的关键字203未与所需项的关键字相匹配(在步骤511中的关键字=“否”),则从该无锁定查找散列表中返回的“指示”必定有错误。但是,应注意,该Find-Cache-Entry程序401无危险地访问该入口201的表的范围之外的存贮器位置,这是因为该无锁定查找散列表保证仅仅前面所存贮的入口号将被返回,即使未获得锁定仍执行查找操作。下面确定所发现入口的关键字203未与所需项的关键字匹配,用于这个入口的入口锁定207被解除(步骤515),并且该处理重复在步骤501开始的流程。
现在参见图6,图6示出了该Insert-Cache-Entry程序的一流程图。该程序由调用名为Get-Next-Available-Entry的一子程序开始(步骤601),根据上面所讨论的变化的LRU策略而寻找一有用的高速缓冲存贮器入口(称之为“高速缓冲存贮器入口N”),并且向该入口返回一指针。用于高速缓冲存贮器入口N的入口锁定207被获取,并且使它的参考计数211被递增到表明“忙”。
紧接着,该高速缓冲存贮器锁定215被获取下不允许任何其它的高速缓冲存贮器插入或删除操作(步骤603)。一旦获得了该高速缓冲存贮器锁定215,则一名为Reclaim-Cache-Entry的子程序被调用(步骤605)。该Reclaim-Cache-Entry程序605的一输入参数是指向高速缓冲存贮器入口N的指针。该Reclaim-Cache-Entry程序605将除去来自该无锁定查找散列表的高速缓冲存贮器入口N的旧的关键字的副本,并且随后将高速缓冲存贮器N的最终存取次数设置为等于零(以表明它是一空的高速缓冲存贮器入口)。
当这些操作均被完成时,通过调用一名为Insert-Cache-Entry的子程序而将被存贮到该入口201的高速缓冲存贮器表中的该项的关键字插入到该无锁定查找散列表217中(步骤607)。这个子程序包括为查明一所匹配的关键字还未被包含在该无锁定查找散列表中为目的的检验,因止,当Insert-Cache-Entry607返回到Insert-Cache-Entry405时,该返回代码被检验(步骤609)以查看高速缓冲存贮器入口N的关键字是否作为一新的元素而被成功地插入该无锁定查找散列表217中。如果插入是成功的,则该高速缓冲存贮器锁定215被解除,以便允许其它插入或删除操作被处理(步骤611)。接着,一指向新建的高速缓冲存贮器入口(即,高速缓冲器入口N)的指针被返回到Get-Cache-Entry程序400(步骤613)。该高速缓冲存贮器入口N仍被锁定,并且标记为“忙”。另外,来自这个子程序的返回代码通知该Get-Cache-Entry程序400这是一指向新的高速缓冲存贮器入口的指针。该调用的线索将使用这个信息的确定该相关值205是否需要从另外源获得并写入这个高速缓冲存贮器入口。
如果该无锁定查找散列表217告知另一个具有如像高速缓冲存贮器入口N相同关键字的高速缓冲存贮器入口(称之为“Cache Entry F”)在该无没定查找散列表217中已存贮有它的关键字时(在步骤609中插入成功=“否”),则该高速缓冲存贮器锁定215被解除以便允许处理其它的插入或删除操作(步骤615)。在这一为上,另外的线索可改变和删除在该高速缓冲存贮器217中的项,这样不再存在有任何必然的事情,即指向高速缓冲存贮器F的该指针仍然指向与被存贮在入口201的高速缓冲存贮器表中的该项的关键字相匹配的关键字203的一项(即从无锁定查找散列表中获得的指针现已成为“提示”)。为了检验这个“提示”是否是错误的,获取用于高速缓冲存贮器入口F的入口锁定207(步骤617),并且所需项的关键字与高速缓冲存贮器入口F的关键字进行比较(步骤619)。如果该关键字相匹配(在步骤621中关键字匹配=“是”),则由无锁定查找散列表217所告知的该“提示”是准确的,并所需项实际上已被存贮在入口201的该高速缓冲存贮器表中。因而,高速缓冲存贮器入口F的参考计数211被递增以表明这项是“慢”(步骤623),并且由于此时这个高速缓冲存贮器入口不再使用所以前面所得到的高速缓冲存贮器入口N的入口锁定207被解除,并且高速缓冲存贮器入口N的参考计数211被递减。另外,随着告知这是一已存在的高速缓冲存贮器入口,指向高速缓冲器入口F的指针被返回到该Get-Cache-Entry程序400。对于调用线索来说这个信息的字符串是重要的,这是因为它将确定该数值205是否需要从另一源获得并存贮到该高速缓冲存贮器入口中。
另外,通过在所需项的关键字和高速缓冲存贮器入口F的关键字之间的比较确定了该关键字没有匹配(在步骤621中关键字匹配=“否”),则由无锁定查找散列表217告知的该“提示”是不准确的,并且用于高速缓冲存贮器入口F的入口锁定207被解除。随后该处理自步骤603开始重复,再次确定是否高速缓冲存贮器入口N可成功地插入到无锁定查找散列表217中。最后,该循环将退出步骤613或步骤627。
现在参照图7来较详细的说明该Get-Next-Available-Entry程序601。该程序通过调用Find-Cache-Entry-LRU子程序开始(步骤701)。该子程序将一指针返回到确信为不慢的一高速缓冲存贮器入口(称之为高速缓冲器入口N),因而可用作为由Insert-Cache-Item程序405插入的新的高速缓冲存贮器入口。但是,作为“不忙”的高速缓冲存贮器入口N的状况不是一必然的事情,这是因为没有使用锁定来进行这种确定。因此,这种状况必须要核实。首先,要进行获取高速缓冲存贮器入口锁定207的一个试图(步骤703)(仅仅与高速缓冲存贮器入口N未被锁定时该试图才将成功)。
如果对于锁定高速缓冲存贮器入口N的试图未成功(在步骤705中锁定成功=“否”),则高速缓冲存贮器入口N不可能被使用,并且将查寻另一高速缓冲存贮器入口。这是因为通常发现一个未被锁定的高速缓冲存贮器入口比在一个已经被锁定的入口上去选择获得一锁定要来得快。通过在步骤701开始再次的循环可实现对另一高速缓冲存贮器入口的查寻。
但是,如果对于锁定高速缓冲存贮器入口N的试图成功(在步骤705中锁定成功=“是”),则高速缓冲存贮器入口N的参考计数211被检测以查看是否高缓冲存储器入口N是忙。由于对于“已得到”的高速缓冲存贮器N的一个先前的线素并且无须减少该参考计数211即随后解除该入口锁定207是可行的,所以这是可出现的。这样做就确保了该高速缓冲存贮器入口N不被删除或由另外的线索回收。
如果参考计数211不等于零(在步骤707中高速缓冲存贮器入口N慢=“是”),则高速缓冲存贮器入口N不可使用,并且必须查寻另一高速缓冲存贮器入口。通过解除用于高速缓冲存贮器入口N的入口锁定207(步骤709)而实现目的,并且随后在步骤701再次开始该循环。
但是,如果该参考计数211等于零(在步骤707中高速缓冲存贮器入口N忙=“否”),则该高速缓冲存贮器入口N可作为一空的高速缓冲存贮器入口使用。因此,高速缓冲存贮器入口N的参考计数211被递增(以表示它是“忙”)(步骤711)。如果高速缓冲存贮器入口N包括一由它的最终存取次数209表明是大于零的高速缓冲存贮器项(在步骤713中高速缓冲存贮器入口N包括一高速缓冲存贮器项=“是”)时,则前面在高速缓冲存贮器入口N中存贮的该项是“齐平”,这意味着在该高速缓冲存贮器项的内容被从入口201表移出之前由该回调信息225所规定的该回调程序为了执行查找和/或将该高速缓冲存贮器项的内容写回到主位置的目的而被调用(步骤715)。另外,如果高速缓冲存贮器入口N从未被使用(在步骤713中高速缓冲存贮器入口N包含一高速缓冲存贮器项=“否”)时,则该回调功能不被调用。
最后,将指向高速缓冲存贮器入口N的一指针返回到该Insert-Cache-Entry程序(步骤717)。应注意此时该高速缓冲存贮器入口N被锁定并标记为“忙”)。
现在将参照图8来较详细的说明该Find-Cache-Entry-LRU程序。该程序通过将所选择的16个高速缓冲存贮器入口组中的一组送入被逻辑分隔的入口201的高速缓冲存贮器表中而开始(步骤801)。选择最好是在一循环基础上进行。
接着,分析16个高速缓冲存贮器入口的每个入口的最终存取次数209,这样可按从最少接近使用到新近使用的上升顺序建立高速缓冲存贮器的一表(步骤803)。具有大于零的参考计数的高速缓冲存贮器入口从该表中除去(步骤805),仅留下呈现不慢的高速缓冲存贮器入口。由于没有获取锁定以防止改变高速缓冲存贮器项,因而这些为高速缓冲存贮器入口的实际状态都不可被保证。如果该表是空的(步骤807的“是”通路输出),则来自这组的高速缓冲存贮器入口将不被使用。通过重复在步骤801所开始的循环而进行另外的查寻一高速缓冲存贮器入口的试图。
但是,如果该表不是空的(步骤807之外的“否”通路,则指向在该表中第一高速缓冲存贮器入口的一指针返回到该Get-Nest-Available-Entry程序601(步骤809),这就存在有明显地不慢高速缓冲存贮器入口的最近最少使用。
在另一实施例中,如上所述的一表的实际构造是通过仅对在该组中的高速缓冲存贮器入口的扫描来避免的,并且跟踪到目前为止被遇到的最不忙入口的轨道。
现在参照图9来较详细的说明该Reclaim-Cache-Entry程序605。将会了解到该Reclaim-Cache-Entry程序605的调用程序负责获取高速缓冲存贮器锁定215。这样确保了被执行的各种高速缓冲存贮器和散列表入口产生准确的结果。
到该Reclaim-Cache-Entry程序605的一输入是一指向高速缓冲存贮器一入口的指针。该程序是由确定该高速缓冲存贮器入口是否已经为空而开始,这里空入口由该最终存取次数209放置为零来表示。如果该高速缓冲存贮器已经是空的(步骤901的“是”通道输出),则没有需进一步去做的事情并且程序简单地返回到该Insert-Cache-Item程序405。通过一线索可获得前面已提出的每次该参考计数被递增的该相关的高速缓冲存贮器项。为了避免将一参考时间209错误地设置为零,因为无论何时高速缓冲存贮器213的记数值从最大时钟值“卷绕”返回到零,所以它立即设置一等于“1”的值。随后,该高速缓冲存贮器锁定215被获取并且所有具有非零最终存取次数209的高速缓冲存贮器入口的最终存贮次数209被复位为“1”。这就暂时地干扰了变型的LRU高速缓冲存贮器置换策略,但具有便于高速缓冲存贮器入口的最终存取次数之间比较的优点。
如果该高速缓冲存贮器入口还未空出(步骤901的“否”通道输出),则获取高速缓冲存贮器项的关键字203(步骤903)并将一输入用作无锁定查找散列表删除操作(步骤905),其目的是从该无锁定查找散列表217中移除这个元素。
接着,该高速缓冲存贮器入口的最终存取次数209被置为等于零作为一表明这个高速缓冲存贮器的入口目前为空的指示符(步骤907)。随后通过简单地返回到Insert-Cache-Item程序405而结束该程序(步骤909)。
现在参照图10将更为详细的说明Insert-Cache-Entry程序607。应注意的是,该调用程序(Insert-Cache-Item405)已经获得该高速缓冲存贮器锁定215,这样对无锁定查找散列表217的存取将返回准确的结果,并且不只是“指示”。该Insert-Cache-Entry程序607通过对该无锁定查找散列表217执行一查找操作而开始,该操作确定在该散列表中是否已有该新的高速缓冲存贮器项的关键字203的副本,因而表明被插入的高速缓冲存贮器四项已被存贮在该入口201的高速缓冲存贮器表中(步骤1001)。如果该关键字203的一副本被告知已发现(在步骤1003中高速缓冲存贮器命中=“是”),则具有相同关键字的一高速缓冲存贮器项不能被插入该入口201的高速缓冲存贮器表中。因而,随着指明该操作未成功的返回代码该Insert-Cache-Entry程序607返回到调用程序(步骤1005)。
但是,如果通过该无锁定查找散列表217被靠知未发现该关键字203的一副本(在步骤1003中高速缓冲存贮器命中=“否”),则使用关键字219作为在该散列表中的关键字并使用指向新的高速缓冲存贮器入口(高速缓冲存贮器入口N)的指针作为被存贮的相关值来执行对该无锁定查找散列表217的一插入(步骤1007)。随后,该输入键219被考贝到该高速缓冲存贮器入口N的关键字203上(步骤1009)。当这个操作完成时,随着一表明该成功的一返回代码而将Insert-Cache-Entry程序607返回到调用程序(步骤1011)。
现在将参照图11来讨论Delete-Cache-Entry程序1100。当入该程序时,调用程序已调用了该Get-Cache-Entry程序400,并获取了用来删除该高速缓冲存贮器项的入口锁定207。首先,执行一测试的查看是否该调用程序获取了用来删除该高速缓冲存贮器入口的入口锁定207(在步骤1011中高速缓冲存贮器入口锁定=“否”)。如果这个高速缓冲存贮器入口未被锁定,则不能处理该Delete-Cache-Entry程序1100,并且随着一表明其失败的返回代码返回调用程序(步骤1103)。
另外,如果用户获得用来删除该高速缓冲存贮器入口的入口锁定207时,在步骤1101中,高速缓冲存贮器入口锁定=“是”),则下一步是检验以查看是否用于这个高速缓冲存贮器入口的参考计数211是否等于1(步骤1105),这表明仅仅用一个线索已经标记出这个高速缓冲存贮器入口为“忙”。因为,通过限定,该参考计数211将通过希望做删除操作的该线索而递增,它可从该参考计数211等于1而被导出,希望执行删除操作的线索是这个高速缓冲存贮器入口的唯一用户。因此,如果其它线索也以“忙”标记这个高速缓冲存贮器项(在步骤1105中的高速缓冲存贮器入口参考计数等于1=“否”),则不能处理该Delete-Cache-Entry程序1100,并且随着表示失败的返回代码而返回到调用程序(步骤1107)。
但是,如果希望删除这个高速缓冲存贮器入口的线索是这个高速缓冲存贮器入口唯一的用户(在步骤1105中高速缓冲存贮器入口参考计数等于1=“是”),则该删除可成功地被处理。这最好是通过给定包含在该高速缓冲存贮器入口中的该高速缓冲存贮器项(即关键字203和值205)(步骤1109),及调用在该回调信息225中指定的回调特性,以便齐平被删除的该高速缓冲存贮器项(即在该高速缓冲存贮器项的内容从入口201的表中移除之前将该高速缓冲存贮器项的内容查找和/或写回到一主存贮位置来完成。
接着,获得该高速缓冲存贮器锁定215(步骤1113),并对该无锁定查找散列表执行一删除操作,以便移除由被删除的该高速缓冲存贮器元素的关键字所指出的元素(步骤1115)。
随后,该高速缓冲存贮器锁定215被解除(步骤1117),并且最终有取次数和这个高速缓冲存贮器入口的参考计数211被置为零,以表明这个高速缓冲存贮器可作为可利用的高速缓冲存贮器入口而被选择(步骤1119)。最后,随着表明成功地完成的一返回代码该Delete-Cache-Entry程序1100返回到该用户(步骤1121)。
因为一线索不具有了解一高速缓冲存贮器项是否被存贮在高速缓冲存贮器入口201表中的手段,所以本发明高速缓冲存贮器127的使用是直接的,通过上述的Get-Cache-Item程序400而存取该查找和插入功能。这个程序总是将一指针返回到标记为“忙”的一被锁定的高速缓冲存贮器入口。为了告诉用户该高速缓冲存贮器入口是否是新的还提供了一返回代码,这返回代码意指对于这个关键字203通常没有值205被存贮。
如果一指针返回到一新的高速缓冲存贮器入口,则该用户线索可占用多个步骤以从另一源中获得该相关信息。这些操作是特定的应用,对它们更细致的讨论已超出了本发明的范围。
如果该用户线索获得与该关键字相关的信息,由于对这个高速缓冲存贮器入口它保持该入口锁定207气以它可随后直接将这个信息存贮到该高速缓冲存贮器入口中。所有高速缓冲存贮器127的用户应遵循如下规则,即除了对于具有首先被获得的特殊高速缓冲存贮器入口的入口锁定之外禁止向入口201的高速缓冲存贮器表写入任何东西。
当一用户线索不再希望向该入口201的高速缓冲存贮器表中存贮一项目时,它就解除该入口锁定207。如果该用户线索还不注意是否该信息还保留在该高速缓冲存贮器中或者是否它被调出用于另一高速缓冲存贮器项构成的空间,则在解除该入口锁定207之前将还递减该参考计数211。但是,如果该用户线索想要确保具有该关键字203的高速缓冲存贮器项保留在入口201的高速缓冲存贮器表中时,则它无须递减该参考计数211就能解除该入口锁定207。这意味着该高速缓冲存贮器置换功能将总是将这个的高速缓冲存贮器入口视为“忙”,并且为了置换将决不选择它。还要注意的是,虽然该用户线索可确保一具有这个关键字203的高速缓冲存贮器项将保留在入口201的高速缓冲存贮器表中,但并不能确保没有另外的线索将改变该高速缓冲存贮器项的值205。
当一用户线索希望删除一高速缓冲存贮器项时,它通过该Get-Cache-Entry程序400由首先给出的该高速缓冲存贮器入口来进行。随后它只不过调用该Delete-Cache-Entry程序1100即可。如果该用户线线索是这个特定入口的唯一用户,则将返回一表明“成功”的返回代码。
一最佳实施例提供了若干程序,这些程序被分为宽的高速缓冲存贮器操作和高速缓冲存贮器入口操作。包括有上述的所有程序的这些程序通过在一具有多个CPU的Sun SPARC机器上的该C++程序语言的方式而得到最好的实施。从下面所提供的说明中本技术领域的普通技术人员将能容易地建立这些程序。
宽的高速缓冲存贮器操作-Create-Cache这个程序建立该高速缓冲存贮器127。它的输入参量是--number-of-Cache-entries;--Size-of-Cache-iterm;--pointer-to-equal-fumction;--pointer-to-hash-function;--pointer-to-get-key-function;和--pointer-to-write-back-function。
对于该Create-Cache程序的输入参量描述如下--number-of-Cache-entries规定在该高速缓冲存贮器中的入口号;-Size-of-each-item规定在该高速缓冲存贮器中每一项所分配的存贮器的尺寸;-pointer-to-eqtual-function指向equal-function(pointer-to-Keyl,pointer-to-Key2),这是一如果关键字1等于关键字2时返回一“正确”值的功能;--Pointer-to-hash-function指向hash-function(poiter-to-key),这是向输入关键字加上一散列功能并返回其结果的一功能;--Pointer-to-get-key-function指向get-key-function(pointer-to-Cache-entry),这是一向属于该Cacheitem的关键字返回一指针的功能;--Pointer-to-write-back-function指句Write-back-function(pointer-to-locked-Cache-entry),这是一如上面更详细描述齐平一高速缓冲存贮器项的功能。它需要执行可由特定应用所要求的任何写回或清除操作。
-get-Cache-entry(Cache-idkey,bool&new-Cache-entry)给出一指向一高速缓冲存贮项的关键字的指针,这个程序向包括有一具有相同匹配关键字高速缓冲存贮器项的高速缓冲存贮器入口返回一指针。
该布尔值new-Cache-Entry表明该高速缓冲存贮器项是否是一新的或以前存在的项。
-delete-Cache-Entry(Cache-entry*CP)这个程序移除来自该高速缓冲存贮器的包含在该高速缓冲存贮器入口(指针)中的该高速缓存贮器项。在调用这个程序之前为了独占使用必须首先锁定该高速缓冲存贮器入口。高速缓冲存贮器入口操作-mutex-lock(pointer-to-cache-entry)这个程序获取用来表明Cache-entry的入口锁定207。该入口锁定207是一互付锁定。
-mutex-unlick(pointer-to-Cache-entry)这个程序解除用来表明Cache-entry的该入口锁定207。
-hold(pointer-to-Cache-entry)这个功能递增用来表明高速缓冲存贮器入口的参考计数211。递增该参考计数211使得该高速缓冲存贮器入口标记为“忙”。虽然该get-Cahce-entry程序对它返回的该高速缓冲存贮器入口的参考计数211递增,它还可以用于一线索以解除该入口(即,递减该参考计数211)并且随后改变关于这方面的它的愿望并再次将入口标记为“忙”。为此目的而提供该特有功能。在调用该特有功能之前必须获取用来表明该高缓冲存贮器入口的入口锁定207。
--release(pointer-to-Cache-entry)这个功能递减用于该高速缓冲存贮器入口的参考计数211。在调用该解除功能之前必须获取用来表明高速缓冲存贮器入口的入口锁定207。
-get-key()这个功能将一指针返回到该高速缓冲存贮器关键字203。
-get-value()这个功能将一指针返回到值205。
本发明参考一特定的实施例作了说明。但是,对于本技术领域的普通技术人员来说除了上述最佳实施例之外,还可以特殊的形式来使本发明具体化,这是显而易见的。在不违背本发明的精神的前提下可以这样做。该最佳实施例只是用来进行说明而不认为是以任何方式所做的限制。本发明的范围由所附的权利要求给出而不是由前面的说明所限定。并且所有落入本权利要求范围之内的各种改型和等效变换均应包括在其内。
权利要求
1.在一具有通常能够存取每个线索的高速缓冲存贮器的多线索处理系统中一种在该高速缓冲存贮器中设置一项目的方法,其中该高速缓冲存贮器具有多个用于存贮项目的入口,每个入口由一入口号来识别,并且其中该项目包括有第一关键字,该方法包括有步骤a)向一无锁定查找推理机提供第一关键字;b)使用该无锁定查找推理机和提供一个是查找入口号的查找输出;c)确定该项目是否存贮在与该查找入口号相关的该入口中,其中该确定步骤包括有步骤获取在至少由该查找入口号所指定的入口处授予独占存取的一互斥锁定;使用该查找入口号去读取来自由该查找入口号所指定的入口的所存贮的关键字;和将第一关键字与所存贮的关键字进行比较,其中如果该第一关键字与被存贮的关键字匹配,则在与该查找入口号相关的该入口处存贮有该项目。
2.在一具有通常能够存取每个线索的高速缓冲存贮器及一种在该高速缓冲存贮器中设置一项目的方法的多线索处理系统中,其中该高速缓冲存贮器具有多个用于存贮项目的入口,每个入口由一入口号来识别,并且其中该项目包括有一第一关键字,该方法包括有步骤a)将该第一关键字提供给一无锁定查找推理机;b)使用该无锁定查找推理机提供一是一查找入口号的查找输出,其中该查找入口号是第一或第二入口号,其中第一入口是指向在其中存贮该项的第一入口和第二入口号指向在其中未存贮有该项的第二入口;和c)检验该查找入口号是第一入口号,其中该检验步骤包括有步骤在至少由该查找入口号指定的该入口上获取一授予独占存取的互斥锁定;使用该查找入口号从由该查找入口号所指定的入口读取一存贮的关键字;将该第一关键字与所存贮的关键字进行比较;和仅仅当该第一关键字与该存贮的关键字相匹配时提供该查找入口号作为第一入口号。
3.如权利要求2的方法,其中互斥锁定授予的独占存取仅用于由该查找入口号指定的入口。
4.如权利要求2的方法,进一步包括有步骤如果第一关键字未与所存贮的关键字相匹配,则解除该互斥锁定,并重复步骤a)到c)。
5.如权利要求2的方法,其中查找输出是查找入口号或一在该高速缓冲存贮器中未存贮该项目的指示,并且进一步包括有步骤d)如果该查找输出是在该高速缓冲存贮器中未存贮在该项目的指示,则执行包括如下步骤的第二检验在该高速缓冲存贮器中获取一互斥锁定以禁止对该高速缓冲存贮器插入和删除;和使用该无锁定查找推理机以提供为第一入口号或在表示该高速缓冲存贮器中未存贮在该项目的指示的第二查找输出,其中如果该第二查找输出是第一入口号则该项目已被安置。
6.如权利要求5的方法,进一步包括如果第二查找输出是表示在该高速缓冲存贮器中未存贮有该项目的指示,则在一新的高速缓冲存贮器入口上存贮该第一关键字并且将一新元素插入该无锁定查找推理机,其中该新元素包括第一关键字和识别该新的高速缓冲存贮器入口的一新的入口号。
7.如权利要求6的方法,其中根据一改进最近最少使用策略获得的新的高速缓冲存贮器入口包括有步骤d)将多个入口逻辑地分隔为多个入口组;e)选择这些入口组中的一组;f)对于所选择的入口组,确定哪些入口是不忙的入口;g)如果在所选择的入口组中至少一个入口不忙,则从在该组中不忙的入口中选择最近最少使用的入口作为新的高速缓冲存贮器入口;和h)如果在所选择的入口组中没有不忙的入口,则选择入口组中的另外一个入口组并且重复步骤f)到h)。
8.如权利要求7的方法,进一步包括有调用一回调功能以将该新的高速缓冲存贮器入口的现有内容存贮到一主存贮位置的步骤。
9.如权利要求2的方法,其中该无锁定查找推理机是一用在该多线索处理系统中的一无锁定查找散列表。
10.在一具有通常能够有取每个线索的高速缓冲存贮器的多线索处理系统中一种用来在该高速缓冲存贮器中设置一项目的装置,其中该高速缓冲存贮器具有多个用于存贮项目的入口,每个入口由一入口号来识别,并且其中该项目包括有第一关键字,该装置包括有a)用来将第一关键字提供给一无锁定查找推理机的装置;b)用来使用该无锁定查找推理机提供一是一查找入口号的查找输出的装置,其中该查找入口号是第一或第二入口号,其中第一入口号指向在其中存贮有该项的第一入口和第二入口号指向在其中未存贮有该项的第二入口;和c)用来检验该查找入口号是第一入口号的装置,其中该检验装置包括有用来在至少由该查找入口号指定的该入口上获取一授予独占存取的互斥锁定的装置;用来使用该查找入口号从由该查找入口号所指定的入口读取一存贮的关键字的装置;用来将该第一关键字与所存贮的关键字进行比较的装置;和用来仅当该第一关键字与该所存贮的关键字相匹配时才提供该查找入口号作为第一入口号的装置。
11.如权利要求10的装置,其中授予独占存取的互斥锁定仅用于由该查找入口号所指定的入口。
12.如权利要求10的装置,进一步包括响应于该第一关键字未与第二关键字相匹配而用来解除该互斥锁定并再次触发装置a)到c)的装置。
13.根据权利要求10的装置,其中该查找输出是该查找入口号或一表示在该高速缓冲存贮器中未存贮该项的指示,并且进一步包括d)如果该查找输出是表示在该高速缓冲存贮器中未存贮该项的指示则用来执行一第二核实的装置,其中该用来执行第二检验的装置包括有用来在该高速缓冲存贮器上获取一互斥锁定以禁止至该高速缓冲存贮器插入和删除的装置;和利用该无锁定查找推理机以提供第一入口号或表示在该高速缓冲存贮器中未存贮有该项目的指示的第二查找输出的装置,其中如果该第二查找输出是第一入口号则该项目已被安置。
14.如权利要求13的装置,进一步包括响应于该第二查找输出当其指示在该高速缓冲存贮器中未存贮有该项目时以便在一新的高速缓冲存贮器入口上存贮该第一关键字并且随后将一新元素插入该无锁定查找推理机中的装置,其中该新元素包括第一关键字和识别新的高速缓冲存贮器入口的一新的入口号。
15.如权利要求14的装置,进一步包括有根据一改进的最近最少使用策略获得该新的高速缓冲存贮器入口的装置,该新的高速缓冲存贮器入口获取装置包括d)用来将多个入口逻辑地分成多个入口组的装置;e)用来选择这些入口组中的一组的装置;f)用来确定所选择的入口组中的那些入口是不忙入口的装置;g)响应于在所选择的入口组中至少一个入口不是忙入口而用来从在该组中不忙的入口中选择最近最少使用入口作为新的高速缓冲存贮器入口的装置;和h)响应于在所选择的入口组中没有不忙的入口而用来选择这些入口组中的另一入口组并且调用装置f)到h)的装置。
16.如权利要求15的装置,其中该新的高速缓冲存贮器入口获取装置进一步包括有用来调用一回调功能以将该新的高速缓冲存贮器入口的当前内容齐平到一主存贮位置的装置。
17.如权利要求10的装置,其中该无锁定查找推理机是一用于该多线索处理系统中的一无锁定查找散列表。
18.一种在一具有通常能够存取每个线索的高速缓冲存贮器的多线索处理系统中所使用的制品,其中该高速缓冲存贮器具有多个用来存贮项目的入口,每个入口由一个入口号来识别,并且其中该项目包括有第一关键字,该制品包括在其内一具有使和一项目被安置在该高速缓冲存贮器中而构成的计算机可读程序码的计算机可用介质,在该制品中的该计算机可读程序码包括为使在该多线索处理系统中的计算机实现将该第一关键字提供给一无锁定查找推理机而构成的计算机可读程序码;使得该计算机有效地使用该无锁定查找推理机提供一是一查找入口号的查找输出而构成的计算机可读程序码;使得该计算机有效地确定该项目是否存贮在与该查找入口号相关的入口中而构成的计算机可读程序码,导致一计算机有效地确定而构成的该计算机可读程序码包括使得该计算机有效地获取一个对至少由该查找入口号所指定的入口授予独占存取的互斥锁定而构成的计算机可读程序码;使得该计算机有效地使用该查找入口号从由该查找入口号所指定的入口读取一存贮的关键字而构成的计算机可读程序码;和使得该计算机有效地将第一关键字与所存贮的关键字相比较而构成的计算机可读程序码,其中如果第一关键字与所存贮的关键字相匹配,则该项目被存贮在与该查找入口号相关的入口中。
19.一种在一具有通常能够存取每个线索的高速缓冲存贮器的多线索处理系统中所使用的制品,其中该高速缓冲存贮器具有多个用来存贮项目的入口,每个入口由一入口号来识别,并且其中该项目包括有一第一关键字,该制品包括有一在其内具有使得一项目被安置在该高速缓冲存贮器中而构成的计算机可读程序码的计算机可用介质,在该制品中的该计算机可读程序码包括a)使得在该多线索处理系统中一计算机有效地向一无锁定查找推理机提供第一关键字而构成的计算机可读程序码;b)使得该计算机有效地使用该无锁定查找推理机以提供一是查找入口号的一查找输出而构成的计算机可读程序码,其中该查找入口号是第一或第二入口号,其中第一入口号指向在其中存贮该项目的第一入口而第二入口号指向在其中未存贮该项目的第二入口;和c)使得该计算机有效地验证该查找入口号是第一入口号而构成的计算机可读程序码,其中使得该计算机有效地验证的计算机可读程序码包括使得该计算机有效地至少获取由该查找入口号所指定的授予独占存取的一入口的一互斥锁定而构成的计算机可读程序码;使得该计算机有效地使用该查找入口号读取从由该查找入口号所指定的入口所存贮的关键字而构成的计算机可读程序码;使得该计算机有效地的对第一关键字与所存贮的关键字相比较而构成的计算机可读程序码;和仅在该第一关键字与所存贮的关键字相匹配时使得计算机有效地提供该查找入口作为第一入口号而构成的计算机可读程序码。
20.如权利要求19的制品,其中该互斥锁定仅对由查找入口号所指定的入口授予独占存取。
21.如权利要求19的制品,进一步包括响应于该第一关键字未与所存贮的关键字相匹配,使得计算机有效地解除该互斥锁定,并再次调用计算机可读程序码a)至c)而构成的计算机可读程序码。
22.如权利要求19的制品,其中该查找输出是查找入口号或一表示该项目未在该高速缓冲存贮器中存贮的指示,并且进一步包括d)响应于该查找输出是表示该项目未被存贮在该高速缓冲存贮器中的指示,使得该计算机有效地执行一个第二验证而构成的计算机可读程序码,其中使得该计算机有效地执行第二验证而构成的计算机可读程序码包括使得该计算机有效地在该高速缓冲存贮器中获取一互斥锁定以禁止对该高速缓冲存贮器插入和删除而构成的计算机可读程序码;和使得该计算机有效地使用该无锁定查找推理机以提供其为第一入口号或表示该项目未被存贮在该高速缓冲存贮器中的第二查找输出而构成的计算机可读程序码,其中如果第二查找输出是第一入口号时则该项目被安置。
23.如权利要求22的制品,进一步包括响应于该第二查找输出是表示该项目未被存贮在该高速缓冲存贮器中的指示,使得该计算机有效地第一关键字存贮在一新的高速缓冲存贮器中并且随后将一新元素插入该无锁定查找推理机中而构成的计算机可读程序码,其中该新元素包括第一关键字和识别该新的高速缓冲存贮器入口的一新的入口号。
24.如权利要求23的制品,进一步包括有使得该计算机根据一改进的最近最少使用策略有效地获取该新的高速缓冲存贮器入口而构成的计算机可读程序码,其中使得该计算机有效地获取该新的高速缓冲存贮器入口而构成的该计算机可读程序码包括d)使得该计算机有效地将多个入口有效地逻辑地分成入口组而构成的计算机可读程序码;e)使得该计算机有效地选择这些组中的一组而构成的计算机可读程序码;f)对于所选择的入口组,使得该计算机有效地确定这些入口是不忙入口而构成的计算机可读程序码;g)响应于在选择的入口组中至少一个入口不是忙入口,使得该计算机实现从该组中的不忙的入口中选择最近最少使用入口作为新的高速缓冲存贮器入口;和h)如果在所选择的入口组中没有不忙的入口,使得该计算机有效地选择这些入口组中的另一组并且再次调用计算机可读程序码f)到h)而构成的计算机可读程序码。
25.如权利要求24的制品,进一步包括使得该计算有效的调用一回调功能以齐平目前的该新的高速缓冲存贮器入口的内容到一主存贮位置而构成的计算机可读程序码。
26.如权利要求19的制品,其中该无锁定查找推理机是一用于该多线索处理系统中的一无锁定查找散列表。
27.在一具有通常能够存取每个线索高速缓冲存贮器的多线索处理系统中,其中该高速缓冲存贮器具有多个用来存贮项目的入口,一种获取用来存贮一新项目的一新的高速缓冲存贮器入口的方法,该方法包括有步骤a)将多个入口逻辑地分成入口组;b)选择这些入口组中的一组;c)对于所选择的入口组,确定哪些入口是不忙入口;d)如果在所选择的入口中至少一个入口是不忙入口,则从在该组中的不忙的入口中选择该最近最少使用的入口作为该新的高速缓冲存贮器入口;和e)如果在所选择的入口中没有不忙的入口,则选择这些入口组中的另一组并且重复步骤c)到e)。
28.在一具有通常能够存取每个线索的高速缓冲存贮器的多线索处理系统中,其中该高速缓冲存贮器具有多个用来存贮项目的入口,一种获取用来存贮一新项目的一新的高速缓冲存贮器入口的装置,该装置包括a)用来将多个入口逻辑地分成入口组的装置;b)用来选择这些入口组中的一组的装置;c)对于所选择的入口组,用来确定哪些组是不忙组的装置;d)响应于在该所选择的组中至少一入口是不忙入口,用来从在该组中不忙的入口中选择最近最少使用的入口作为新的高速缓冲存贮器入口的装置;和e)响应于在所选择的入口组中没有不忙的入口,用来选择这些入口组中的另一组并且再次调用装置c)到e)的装置。
29.一种在一具有通常能够存取每个线索的高速缓冲存贮器的多线索处理系统中所使用的制品,其中该高速缓冲存贮器具有多个用来存贮项目的入口,该制品包括有一具有在其内用来使得为了存贮一新的项目而获取一新的高速缓冲存贮器入口而构成的计算机可读程序码的一计算机可用介质,在该制品中的计算机可读程序码包括a)使得一计算机在该多线索处理系统中有效地将多个入口逻辑地分成入口组而构成的计算机可读程序码;b)使得该计算机有效地选择这些入口组中的一组而构成的计算机可读程序码;c)对于所选择的入口组,使得该计算机有效地确定哪些入口是不忙而构成的计算机可读程序码;d)响应于在该所选择的入口组中至少一个入口是不忙入口,使得该计算机有效地从在该组中不忙的入口中选择最近最少使用入口作为新的高速缓冲存贮器入口而构成的计算机可读程序码;和e)响应于在所选择的入口组中不存在有不忙的入口,使得该计算机有效地选择这些入口组中的另一组并且再次调用计算机可读程序码c)到e)而构成的计算机可读程序码。
全文摘要
一种具有通常能够存取每个线索一高速缓冲存贮器的多线索处理系统。该高速缓冲存贮器具有多个用来存贮项目的入口,每个入口由一入口号来识别。一包括有第一关键字的一项目在该高速缓冲存贮器中的位置是通过将该第一关键字提供给一无锁定查找推理机来确定的,该无锁定查找推理机随后提供一为查找入口号或表明该项目在该高速缓冲存贮器中没有被存贮的指示的查找输出。
文档编号G06F12/08GK1155121SQ9612191
公开日1997年7月23日 申请日期1996年10月12日 优先权日1995年10月13日
发明者T·K·黄, T·D·托克 申请人:太阳微系统有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1