CN1087451C - 用于在高速缓冲存储器中设置一项目的方法和装置 - Google Patents

用于在高速缓冲存储器中设置一项目的方法和装置 Download PDF

Info

Publication number
CN1087451C
CN1087451C CN96121911A CN96121911A CN1087451C CN 1087451 C CN1087451 C CN 1087451C CN 96121911 A CN96121911 A CN 96121911A CN 96121911 A CN96121911 A CN 96121911A CN 1087451 C CN1087451 C CN 1087451C
Authority
CN
China
Prior art keywords
inlet
cache memory
slogan
key word
searching
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN96121911A
Other languages
English (en)
Other versions
CN1155121A (zh
Inventor
T·K·黄
T·D·托克
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of CN1155121A publication Critical patent/CN1155121A/zh
Application granted granted Critical
Publication of CN1087451C publication Critical patent/CN1087451C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0842Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking

Abstract

一种具有通常能够存取每个线索一高速缓冲存储器的多线索处理系统。该高速缓冲存储器具有多个用来存储项目的入口,每个入口由一入口号来识别。一包括有第一关键字的一项目在该高速缓冲存储器中的位置是通过将该第一关键字提供给一无锁定查找推理机来确定的,该无锁定查找推理机随后提供一为查找入口号或表明该项目在该高速缓冲存储器中没有被存储的指示的查找输出。

Description

用于在高速缓冲存储器中设置一项目的方法和装置
本发明涉及在具有多线索环境的处理系统中共享的高速缓冲存储器,特别是涉及用于一多线索环境的高速缓冲存储器,其中该高速缓冲存储器允许随着一高速缓冲存储器的插入或删除操作而并行地发生查找操作。
在本说明书中通篇使用的术语“高速缓冲存储器”是在容纳有大量数据集合的一子集的计算机存储器中的一个区域。如果在一高速缓冲存储器中存储了一项信息,在该高速缓冲存储器中对该项信息的搜索将会成功(称之为“高速缓冲存储器命中”)并只要付出少量的努力。但是,对于不在该高速缓冲存储器中的一信息项进行搜索(称之为“高速缓冲存储器未命中”)通常为了从该大的数据集合中检回该信息项需付出昂贵的代价并消费较多的时间。为了把高速缓冲存储器命中数提高到最大值,在该高速缓冲存储器中存储了近期可能作为参考的数据。用于将高速缓冲存储器命中数提高到最大值的两种通常的策略是:存储最新近的参考数据和存储最一般的参考数据。
高速缓冲存储器通常用来改善计算机操作系统(OSs)的性能。例如,Sun“SOLARISTM”OS(Sun和Solaris是Sun Microsystems公司在美国和其它国家的商标或注册商标)使用一用来存储最新近存取文件名的目录名查找高速缓冲存储器、一用来存储最新近存取文件属性的文件属性高速缓冲存储器和一用来存储最新存取磁盘信息块的磁盘缓冲高速缓冲存储器。
执行若干并行操作线索共享一高速缓冲存储器是可能的,这在后面的整个说明书中称之为“线索”。在一多处理器环境中这种并行操作起因于每个线索被赋予多个处理器中的相应的一个。另一方面,逻辑并行可通过仅在一单个处理器上使用“时间片”技术的一操作系统来完成。通常,这两种策略被组合,因而在一多处理器系统中每个处理器可使用时间分片。
在提供了一多线索环境的一计算机处理系统中(即,一具有多重处理单元的系统中),常规技术采用了一互斥锁定以无论是执行插入、删除还是查找操作都允许高速缓冲存储器在一时间仅存取一线索。这就确保在一高速缓冲存储器中存储的信息被全力以赴地存取或更新,因而防止了在更新操作、从导致查找操作到返回错误结果期间所出现的短暂的不一致性。互斥锁定在现有技术中是已知技术,这里不再详述。某些锁定无需任何硬件支持完全可由软件来实施。用于互斥的大多数一般特定硬件支持是Test(检验)和Set(置位)操作。但是,这两种解决办法(即全部软件和硬件支持锁定)具有这样一个缺点,即忙等待循环的使用难以设计并且不允许使用一队列规定。诸如信号和监视器之类的专门语言特性可应用于解决诸如厂家—用户和读者一作用问题之类需要互斥的一般并行编程问题。更为详细的信息请参见这里所参考的如下出版物:A.Burns和G.Gavis,并行编程(Concurrent Programming),pp.64-68,175-184,Addison Wesley,1993。
为确保在一具有多线索环境系统中的高速缓冲存储器的一致性的软件锁定之应用的一种包括越来越多的线索被恶化的方式负面地影响着此系统的性能。例如,该多线索环境是具有多处理单元(CPUs)的环境,为获得一高速缓冲存储器的软件锁定所需的空闲处理等待将不使用重要的处理器时间。但是,即使在一单一的处理器中借助于时间分片来提供多重处理的系统中,一等待线索也是一由该操作系统调动或按页调出的候选。为了按页/调动这些线索的进和出而将附加工作重强加在操作系统上,进一步降低了计算系统的可量测性。
上面的讨论涉及一般的高速缓冲存储器。但是一高速缓冲存储器可根据下面三个示例中的任何一个示例来安排:
(1)一“直接映象”高速缓冲存储器,在其中被存储的每一项仅具有可被存入其内的一个高速缓冲存储器位置。这种映象是这样一种方式,即每个高速缓冲存储器位置可容纳多个不同项中的任何项。例如,高速缓冲存储器入口1可被指定用来存储由字母“a”开头的所有项。如果试图将项“aa”插入到一其内已经具有“ab”项的高速缓冲存储器中,则项“ab”将被投出。
(2)一“充分相联”高速缓冲存储器,其中一被存储的数据项可被置入任何高速缓冲存储器位置。
(3)一“组相联”高速缓冲存储器,其中一被存储的数据项可被置入的高速缓冲存储器的予置组中的任何一个位置。
为了一高速缓冲存储器的正确运行,许多应用需要在该高速缓冲存储器中所存储的每一项是唯一的:在该高速缓冲存储器中不允许存储重复的项。为确保高速缓冲存储器的一致性最简单的解决办法是在整个高速缓冲存储中使用一互斥锁定,从而在一时间上只允许一插入、一删除或一查找操作。
对于直接映象和组相关高速缓冲存储器,可使用大量的细粒状互斥锁定以允许对该高速缓冲存储器更多的并行存取。因此,对于整个高速缓冲存储器,不是仅仅使用一个互斥锁定。对于高速缓冲存储器中的每个位置(直接映象)或一组位置(位相关)都具有一个互斥锁定。如果对该高速缓冲存储器的存取呈现无规则状态,因为它减小了在获得需应用一给定的高速缓冲存储器操作的特定锁定中的冲突的概率所以具有多个互斥锁定提高并行存取。
通常,高速缓冲存储器查找远比插入和删除要频繁。为了得到这种存取模式的优点,可由一个读—写锁定来取代用来使—高速缓冲存储器保持一致性的互斥锁定。该读—写锁定允许多个并行高速缓冲存储器查找。因为这并不改变该高速缓冲存储器的内容。但是,如果一线索正在执行一插入或一删除,则不管任何原因,所有其它的线索不允许对整个高速缓冲存储器进行存取,即不允许进行一项另外的插入、删除或查找。因此,一个线索的插入或删除会导致许多其它的线索处于空闲状态。
总之,一个或多个软件查找的使用确保了在一多线索系统中一高速缓冲存储器的一致性,减少了对该高速缓冲存储器的并行存取并且不影响该系统的可伸缩性。
一多线索处理系统具有一通常可对每个线索进行存取的高速缓冲存储器。该高速缓冲存储器具有多个用来存储若干项的入口,每一个入口由一入口编号来识别。一入口在该高速缓冲器中的位置包括第一关键字,第一关键字由向一无锁定一查找推理和提供该第一关键字来确定,无锁定一查找推理和提供一为查找入口号的查找输出。该查找入口号可以是第一或第二入口号,其中第一入口号指向其中存储有项目的第一入口而第二入口号指向其中未存储有项目的第二入口。在这方面,该查找入口号可考虑为在所希望的入口号上只不过提供了一“提示”。然后它证实该查找入口号是该第一入口号。该检验包括获取一允许至少对由查找入口号所指定的入口独占存取的互斥锁定、使用查找入口号从由该查找入口号所指定的入口中读取一被存储的关键字、和将第一关键字与所存储的关键字进行比较。如果两个关键字相匹配,则该项目被安置。
在本发明的一实施例中,该互斥锁定仅对由查找入口号所指定的入口获取独占存取。
在本发明的另一方面,如果第一关键字与所存储的关键字不相匹配,则免除该互斥锁定。随后,该无锁定查找推理机再次存取该项目的搜索。
在本发明的另一方面,查找输出是查找入口号或者是一表明在该高速缓冲存储器中没有存储该项目的指示。如果该查找输出是表明在该高速缓冲存储器中未存储有该项目的指示,则执行第二检验。这包括在该高速缓冲存储器中获取一互斥锁定以不允许对该高速缓冲存储器的插入和删除,并使用一个无锁定查找推理机以提供该第一入口号或表明在该高速缓冲存储器中未存储有该项目的指示的第二查找输出,其中如果第二查找输出是第一入口号则该项目被安置。
在本发明的另一方面中,如果第二查找输出是表明在该高速缓冲存储器中未存储有该项目的指示,则第一关键字被存储在一新的高速缓冲存储器中并且一新的要素被存储到一个无锁定查找推理机中,其中该新元素包括有第一关键字和识别新的高速缓冲存储器入口的一新的入口号。
在本发明的另一方面中,该无锁定查找推理机是一无锁定查找混列表。
通过结合附图对下面详细说明书的阅读将会对本发明有所了解,附图中相同的标号表明类以的部件。
图1是用于本发明的一典型多线索系统的一方框图;
图2是根据本发明一实施例的一高速缓冲存储器的一方框图;
图3的图示出了根据本发明的一个方面的高速缓冲存储器的入口和混列表的入口之间的关系;
图4是根据本发明的一实施例的get_cache_entry程序的流程图;
图5是根据本发明的一实施例的find_cache_entry程序的一流程图;
图6是根据本发明的一实施例的一insert_cache_item程序的一流程图;
图7是根据本发明的一方面的一get_next_available_entry程序的流程图;
图8是根据本发明的一方面的一find_cache_entry_least_recently_used程序的流程图;
图9是根据本发明的一方面的reclaim_cache_entry程序的流程图;
图10是根据本发明的一方面的insert_cache_entry程序的流程图;
图11是根据本发明的一方面的delete_cache_entry程序的流程图。
本发明的一实施例提供了一可在一多线索环境中使用的完全相关的高速缓冲存储器。借助于一高速缓冲存储器宽的锁定(后面称之为“高速缓冲存储器锁定”)使得插入到本发明的高速缓冲存储器的操作和从本发明的高速缓冲存储器中删除的操作串行化。但是通过该高速缓冲存储器锁定未阻止为了得到在该高速缓冲存储器中已被存储的各项目的并行查找操作。因此,本发明的高速缓冲存储器实现了在多线索环境中显著吞吐量的改善。本发明的高速缓冲存储器的这些和其它的特征从下面更为详细的说明中将会变得更为显而易见。
在一最佳实施例中,在Sun工作站和/或服务器中实施的该高速缓冲存储器具有多个“SPARCTM”处理单元(Sun和SPARC是Sun Microsystems公司在美国和其它国家的商标或注册商标)。参见图1,图1示出了使用本发明技术的一典型的计算机系统。该系统包括有两个相同的处理器101,每一个通过一硬件高速缓冲存储器129(不要与这里所描述的本发明的高速缓冲存储器相混淆)而被连接到一公共双端口存储器(DPM)。每个处理器101包括有一中央处理单元(CPU)105、一随机存取存储器(RAM)115、一只读存储器(ROM)117和一与上述部件的每一个相连接的公共系统总线119。每一个处理器101通过总线119还被连接到一共享的输入/输出(I/O)控制器109。该I/OO控制器109允许该处理器连接到磁盘107、输入装置111和123和输出装置113和121。这些部件的每一个都是在现存技术中已公知的,在这里不再进一步详述。
每一处理器101包括若干可由CPU 105执行的软件部分。这些软件部分之一是一操作系统,该操作系统可选择地执行ROM 117或RAM 115的输出,“SOLARISTM”是最佳操作系统(Sun和Solaris是Sun Microsystems公司在美国和其它国家的商标或注册商标)在现有技术中操作系统是公知的,有关该操作系统的说明不在本说明书的范围之内。在另一个实施例中,该系统可仅有一个处理器101和一个具有多任务能力的操作系统这样这些线索可以并行地运行。在这另一个实施例中,多个线索被允许共同和并行的存取在一存储器中所存储的高速缓冲存储器。在再一个实施例中,在一系统中提供有多个处理器,其中每个处理器运行一具有多任务能力的操作系统。
返回到在图1中所描述的实施例,通过执行在RAM 115或ROM 117中所存储的程序,处理器101的每一个彼此相互独立地工作。在这个例子中,每个处理器101包括有一高速缓冲存储器控制程序125,它控制处理器对在DPM 103中存储的高速缓冲存储器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的表中的一现行的(即使是错误的)入口,则上述的系统失效可被避免。
根据一最佳实施例,该查找推理机是一要求仅仅插入和删除操作的串行化的无锁定-查找散列表,同时容许并行查找操作以产生保证事先没有通过系统中的一线索而被写入该散列表将没有被返回的值。申请这种散列表在1995年10月13日提交的编号为08/543,215的美国专利申请的Tock等人题为“用于在多线索环境中的有效散列表”专利申请中有详细描述,该申请被转让给本发明的同一转让人,这里引入该部分作为参考。
现在结合图3说明作为用于高速缓冲存储器127的查找推理机的无锁定-查找散列表的使用。在这个例子中,入口301(它是图2的入口201的表的其中一个的特定的实施例)的高速缓冲存储器表是一目录名查找高速缓冲存储器,每个关键字203是一文件名,而每个值205是一文件号。这样一种高速缓冲存储器的用途是用来存储名子和最接近的被存取文件的相应的文件号。为了说明起见,关键字是“SYS”的高速缓冲存储器项被存储在高速缓冲存储器入口0;关键字是“filel”的高速缓冲存储器项被存储在高速缓冲存储器入口102;关键字是“myfile”的高速缓冲存储器项被存储在高速缓冲存储器入口102;而关键字是“mydir”的高速缓冲存储器项被存储在高速缓冲存储器入口N。
为了能够设置用于任何高速缓冲存储器项的入口号,给定它的相关的关键字作为一输入,该无锁定-查找散列表303(它是由无锁定查找推理机使用的表217的其中一个的特定的实施例)具有存储在其内的若干关键字和入口号对,在那里用于一给定对,该入口号指向在存储有关键字和它的相关值的该高速缓冲存储器中的那个入口。在该无锁定-查找散列表中被安置到关键字/入口号对的每一对的位置是由在该关键字上操作以产生一进入该散列表的一初始索引的散列作用以及如果该初始索引指向一已被占有的位置时则是由一用于安置一有效入口的碰撞策略来确定的。因此,在我们的例子中,关键字“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来说明该高速缓冲存储器控制器(即该CPU 105运行该高速缓冲存储器控制程序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的可能性。当呈现这种情况时,该Insert_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_Entry 607返回到Insert_Cache_Entry 405时,该返回代码被检验(步骤609)以查看高速缓冲存储器入口N的关键字是否作为一新的元素而被成功地插入该无锁定查找散列表217中。如果插入是成功的,则该高速缓冲存储器锁定215被解除,以便允许其它插入或删除操作被处理(步骤611)。接着,一指向新建的高速缓冲存储器入口(即,高速缓冲器入口N)的指针被返回到Get_Cahche_Entry程序400(步骤613)。该高速缓冲存储器入口N仍被锁定,并且标记为“忙”。另外,来自这个子程序的返回代码通知该Get_Cahche_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_Next_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_Item 405)已经获得该高速缓冲存储器锁定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++程序语言的方式而得到最好的实施。从下面所提供的说明中本技术领域的普通技术人员将能容易地建立这些程序。
宽的高速缓冲存储器操作:
-creat_cache:这个程序建立该高速缓冲存储器127。它的输入参量
				<dp n="d21"/>
是:

    -number_of_cache_entries;

  -size_of_cache_item;

  -pointer_to_equal_function;

  -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_euqal_function:指向equal_function

       (pointer_to_key1,pointer_to_key2),这是一如果关

       键字1等于关键字2时返回一“正确”值的功能;

      -pointer_to_hash_function:指向hash_function

       (pointer_to_key),这是向输入关键字加上一散列动能

       并返回其结果的一功能;

      -pointer_to_get_key_function:指向get_key_function

       (pointer_to_cache_entry),这是一向属于该cache_item

       的关键字返回一指针的功能;

      -pointer_write_back_function:指向write_back

       function(pointer_to_locked_cache_entry),这是一

       如上面更详细描述齐平一高速缓冲存储器项的功能。它需

       要执行可由特定应用所要求的任何写回或清除操作。

  -get_cache_entry(cache_id key.bool &amp; new_cache_entry):给

   出一指向一高速缓冲存储项的关键字的指针,这个程序向包括有一具

   有相同匹配关键字高速缓冲存储器项的高速缓冲存储器入口返回一指

   针。该布尔值new_cache_entry表明该高速缓冲存储器项是否是一新
				
				<dp n="d22"/>
   的或以前存在的项。

  -delete_cache_entry(cache_entry*cp):这个程序移除来自该高速
缓冲存储器的包含在该高速缓冲存储器入口(指针)中的该高速缓冲存储器
项。在调用这个程序之前为了独占使用必须首先锁定该高速缓冲存储器入口。

  高速缓冲存储器入口操作:

  -mutex_lock(pointer_to_cache_entry):这个程序获取用来表明

   cache_entry的入口锁定207。该入口锁定207是一互付锁定。

  -mutex_unlock(pointer_to_cache_entry):这个程序解除用来表明

   cache_entry的该入口锁定207。

  -hold(pointer_to_cache_entry):这个功能递增用来表明高速缓冲

   存储器入口的参考计数211。递增该参考计数211使得该高速缓冲存

   储器入口标记为“忙”。虽然该get_cache_entry程序对它返回的该

   高速缓冲存储器入口的参考计数211递增,它还可以用于一线索以解

   除该入口(即,递减该参考计数211)并且随后改变关于这方面的它

   的愿望并再次将入口标记为“忙”。为此目的而提供该特有功能。在

   调用该特有功能之前必须获取用来表明该高缓冲存储器入口的入口锁

   定207。

  -release(pointer_to_cache_entry):这个功能递减用于该高速缓

   冲存储器入口的参考计数211。在调用该解除功能之前必须获取用来

   表明高速缓冲存储器入口的入口锁定207。

  -get_key( ):这个功能将一指针返回到该高速缓冲存储器关键字203。

  -get_value( ):这个功能将一指针返回到值205。
本发明参考一特定的实施例作了说明。但是,对于本技术领域的普通技术人员来说除了上述最佳实施例之外,还可以特殊的形式来使本发明具体化,这是显而易见的。在不违背本发明的精神的前提下可以这样做。该最佳实施例只是用来进行说明而不认为是以任何方式所做的限制。本发明的范围由所附的权利要求给出而不是由前面的说明所限定。并且所有落入本权利要求范围之内的各种改型和等效变换均应包括在其内。

Claims (18)

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.一种在一具有通常能够存取每个线索的高速缓冲存储器的多线索处理系统中所使用的装置,其中所述高速缓冲存储器具有多个用来存储项目的入口,每个入口由一个入口号来识别,并且其中所述项目包括有第一关键字,所述装置使一项目在高速缓冲存储器中被设置并且包括:
a)用于将所述第一关键字提供给一无锁定查找推理机的装置;
b)用于使用所述无锁定查找推理机提供一个是一查找入口号的装置;和
c)用于确定所述项目是否存储在与所述查找入口号相关的入口中的装置,其中所述确定装置还包括:
用于获取一个对至少由所述查找入口号所指定的入口授予独占存取的互斥锁定的装置;
用于使用所述查找入口号从由所述查找入口号所指定的入口读取一存储的关键字的装置;和
用于将所述第一关键字与所存储的关键字相比较的装置,其中如果所述第一关键字与所存储的关键字相匹配,则所述项目被存储在与所述查找入口号相关的入口中。
CN96121911A 1995-10-13 1996-10-12 用于在高速缓冲存储器中设置一项目的方法和装置 Expired - Fee Related CN1087451C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US543105 1995-10-13
US08/543,105 US5701432A (en) 1995-10-13 1995-10-13 Multi-threaded processing system having a cache that is commonly accessible to each thread

Publications (2)

Publication Number Publication Date
CN1155121A CN1155121A (zh) 1997-07-23
CN1087451C true CN1087451C (zh) 2002-07-10

Family

ID=24166597

Family Applications (1)

Application Number Title Priority Date Filing Date
CN96121911A Expired - Fee Related CN1087451C (zh) 1995-10-13 1996-10-12 用于在高速缓冲存储器中设置一项目的方法和装置

Country Status (7)

Country Link
US (2) US5701432A (zh)
EP (1) EP0768608B1 (zh)
JP (1) JPH09204357A (zh)
KR (1) KR970022764A (zh)
CN (1) CN1087451C (zh)
DE (1) DE69625768T2 (zh)
TW (1) TW324081B (zh)

Families Citing this family (119)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5832525A (en) * 1996-06-24 1998-11-03 Sun Microsystems, Inc. Disk fragmentation reduction using file allocation tables
US5819298A (en) * 1996-06-24 1998-10-06 Sun Microsystems, Inc. File allocation tables with holes
US5937187A (en) * 1996-07-01 1999-08-10 Sun Microsystems, Inc. Method and apparatus for execution and preemption control of computer process entities
US5974438A (en) * 1996-12-31 1999-10-26 Compaq Computer Corporation Scoreboard for cached multi-thread processes
US6014667A (en) * 1997-10-01 2000-01-11 Novell, Inc. System and method for caching identification and location information in a computer network
US6216218B1 (en) 1997-11-03 2001-04-10 Donald L. Sollars Processor having a datapath and control logic constituted with basis execution blocks
US6067601A (en) * 1997-11-03 2000-05-23 Brecis Communications Cache memory based instruction execution
US6161166A (en) * 1997-11-10 2000-12-12 International Business Machines Corporation Instruction cache for multithreaded processor
US5995998A (en) * 1998-01-23 1999-11-30 Sun Microsystems, Inc. Method, apparatus and computer program product for locking interrelated data structures in a multi-threaded computing environment
US6289358B1 (en) 1998-04-15 2001-09-11 Inktomi Corporation Delivering alternate versions of objects from an object cache
US6128623A (en) 1998-04-15 2000-10-03 Inktomi Corporation High performance object cache
US6205519B1 (en) 1998-05-27 2001-03-20 Hewlett Packard Company Cache management for a multi-threaded processor
US6490654B2 (en) * 1998-07-31 2002-12-03 Hewlett-Packard Company Method and apparatus for replacing cache lines in a cache memory
US6594701B1 (en) 1998-08-04 2003-07-15 Microsoft Corporation Credit-based methods and systems for controlling data flow between a sender and a receiver with reduced copying of data
US6321276B1 (en) 1998-08-04 2001-11-20 Microsoft Corporation Recoverable methods and systems for processing input/output requests including virtual memory addresses
US6360220B1 (en) * 1998-08-04 2002-03-19 Microsoft Corporation Lock-free methods and systems for accessing and storing information in an indexed computer data structure having modifiable entries
US6269425B1 (en) * 1998-08-20 2001-07-31 International Business Machines Corporation Accessing data from a multiple entry fully associative cache buffer in a multithread data processing system
US6253274B1 (en) * 1998-08-28 2001-06-26 International Business Machines Corporation Apparatus for a high performance locking facility
US6189007B1 (en) 1998-08-28 2001-02-13 International Business Machines Corporation Method and apparatus for conducting a high performance locking facility in a loosely coupled environment
US6185650B1 (en) 1998-08-28 2001-02-06 International Business Machines Corporation High performance locking facility
US6349363B2 (en) * 1998-12-08 2002-02-19 Intel Corporation Multi-section cache with different attributes for each section
US7035997B1 (en) 1998-12-16 2006-04-25 Mips Technologies, Inc. Methods and apparatus for improving fetching and dispatch of instructions in multithreaded processors
US7529907B2 (en) 1998-12-16 2009-05-05 Mips Technologies, Inc. Method and apparatus for improved computer load and store operations
US7257814B1 (en) * 1998-12-16 2007-08-14 Mips Technologies, Inc. Method and apparatus for implementing atomicity of memory operations in dynamic multi-streaming processors
US7237093B1 (en) 1998-12-16 2007-06-26 Mips Technologies, Inc. Instruction fetching system in a multithreaded processor utilizing cache miss predictions to fetch instructions from multiple hardware streams
US6389449B1 (en) 1998-12-16 2002-05-14 Clearwater Networks, Inc. Interstream control and communications for multi-streaming digital processors
US7020879B1 (en) * 1998-12-16 2006-03-28 Mips Technologies, Inc. Interrupt and exception handling for multi-streaming digital processors
US6460122B1 (en) * 1999-03-31 2002-10-01 International Business Machine Corporation System, apparatus and method for multi-level cache in a multi-processor/multi-controller environment
US6535905B1 (en) 1999-04-29 2003-03-18 Intel Corporation Method and apparatus for thread switching within a multithreaded processor
US6507862B1 (en) * 1999-05-11 2003-01-14 Sun Microsystems, Inc. Switching method in a multi-threaded processor
US6938147B1 (en) * 1999-05-11 2005-08-30 Sun Microsystems, Inc. Processor with multiple-thread, vertically-threaded pipeline
US6542921B1 (en) 1999-07-08 2003-04-01 Intel Corporation Method and apparatus for controlling the processing priority between multiple threads in a multithreaded processor
AU7728300A (en) * 1999-11-22 2001-06-04 Ericsson Inc. Buffer memories, methods and systems for buffering having seperate buffer memories for each of a plurality of tasks
US6889319B1 (en) 1999-12-09 2005-05-03 Intel Corporation Method and apparatus for entering and exiting multiple threads within a multithreaded processor
US6496925B1 (en) 1999-12-09 2002-12-17 Intel Corporation Method and apparatus for processing an event occurrence within a multithreaded processor
US7188344B1 (en) 1999-12-21 2007-03-06 Unisys Corporation Architecture for a read/write thread lock
US7590644B2 (en) * 1999-12-21 2009-09-15 International Business Machine Corporation Method and apparatus of streaming data transformation using code generator and translator
US7051329B1 (en) 1999-12-28 2006-05-23 Intel Corporation Method and apparatus for managing resources in a multithreaded processor
US7856633B1 (en) * 2000-03-24 2010-12-21 Intel Corporation LRU cache replacement for a partitioned set associative cache
US6622168B1 (en) * 2000-04-10 2003-09-16 Chutney Technologies, Inc. Dynamic page generation acceleration using component-level caching
US7111156B1 (en) * 2000-04-21 2006-09-19 Ati Technologies, Inc. Method and apparatus for multi-thread accumulation buffering in a computation engine
JP2004518183A (ja) 2000-07-14 2004-06-17 クリアウオーター・ネツトワークス・インコーポレイテツド マルチスレッド・システムにおける命令のフェッチとディスパッチ
US7185196B1 (en) * 2000-09-15 2007-02-27 Atheros Communications, Inc. Key caching system
US6785714B1 (en) * 2000-09-28 2004-08-31 Microsoft Corporation System and method for employing slot level locking of a cache
SE0004736D0 (sv) * 2000-12-20 2000-12-20 Ericsson Telefon Ab L M Mapping system and method
JP3990115B2 (ja) * 2001-03-12 2007-10-10 株式会社東芝 サーバ側プロキシ装置及びプログラム
US6732238B1 (en) * 2001-06-08 2004-05-04 Tensilica, Inc. Set-associative cache memory having variable time decay rewriting algorithm
US6976155B2 (en) * 2001-06-12 2005-12-13 Intel Corporation Method and apparatus for communicating between processing entities in a multi-processor
GB0116497D0 (en) * 2001-07-06 2001-08-29 Koninkl Philips Electronics Nv Receiver apparatus and method
US6944717B2 (en) * 2001-07-27 2005-09-13 Fujitsu Limited Cache buffer control apparatus and method using counters to determine status of cache buffer memory cells for writing and reading data therefrom
US8024735B2 (en) 2002-06-14 2011-09-20 Intel Corporation Method and apparatus for ensuring fairness and forward progress when executing multiple threads of execution
JP3900025B2 (ja) * 2002-06-24 2007-04-04 日本電気株式会社 共有キャッシュメモリのヒット判定制御方法及び共有キャッシュメモリのヒット判定制御方式
US6915296B2 (en) * 2002-10-29 2005-07-05 Agere Systems Inc. Incremental reorganization for hash tables
US7831974B2 (en) * 2002-11-12 2010-11-09 Intel Corporation Method and apparatus for serialized mutual exclusion
US7415540B2 (en) * 2002-12-31 2008-08-19 Intel Corporation Scheduling processing threads
US7089374B2 (en) * 2003-02-13 2006-08-08 Sun Microsystems, Inc. Selectively unmarking load-marked cache lines during transactional program execution
US7269717B2 (en) * 2003-02-13 2007-09-11 Sun Microsystems, Inc. Method for reducing lock manipulation overhead during access to critical code sections
US7269694B2 (en) 2003-02-13 2007-09-11 Sun Microsystems, Inc. Selectively monitoring loads to support transactional program execution
US7269693B2 (en) * 2003-02-13 2007-09-11 Sun Microsystems, Inc. Selectively monitoring stores to support transactional program execution
US6938130B2 (en) * 2003-02-13 2005-08-30 Sun Microsystems Inc. Method and apparatus for delaying interfering accesses from other threads during transactional program execution
US7398355B1 (en) 2003-02-13 2008-07-08 Sun Microsystems, Inc. Avoiding locks by transactionally executing critical sections
US7418577B2 (en) 2003-02-13 2008-08-26 Sun Microsystems, Inc. Fail instruction to support transactional program execution
US7152170B2 (en) 2003-02-20 2006-12-19 Samsung Electronics Co., Ltd. Simultaneous multi-threading processor circuits and computer program products configured to operate at different performance levels based on a number of operating threads and methods of operating
GB2410584B (en) * 2003-02-20 2006-02-01 Samsung Electronics Co Ltd Simultaneous multi-threading processor circuits and computer program products configured to operate at different performance levels
US20040190506A1 (en) * 2003-03-24 2004-09-30 International Business Machines Corp. Method and apparatus for performing complex pattern matching in a data stream within a computer network
US20040199727A1 (en) * 2003-04-02 2004-10-07 Narad Charles E. Cache allocation
US7225299B1 (en) 2003-07-16 2007-05-29 Transmeta Corporation Supporting speculative modification in a data cache
US20050120195A1 (en) * 2003-11-13 2005-06-02 Alok Kumar Allocating memory
US7536377B1 (en) 2003-12-18 2009-05-19 Xilinx, Inc. Component naming
US7703098B1 (en) 2004-07-20 2010-04-20 Sun Microsystems, Inc. Technique to allow a first transaction to wait on condition that affects its working set
US8074030B1 (en) 2004-07-20 2011-12-06 Oracle America, Inc. Using transactional memory with early release to implement non-blocking dynamic-sized data structure
US7809888B1 (en) * 2004-09-29 2010-10-05 Emc Corporation Content-aware caching techniques
US7376798B1 (en) * 2005-04-07 2008-05-20 Transmeta Corporation Memory management methods and systems that support cache consistency
KR100850712B1 (ko) * 2005-06-20 2008-08-06 삼성전자주식회사 화상 형성 장치의 전사 전압 제어 방법 및 장치
US8161005B1 (en) 2005-06-30 2012-04-17 Emc Corporation Efficient index processing
US7966292B1 (en) 2005-06-30 2011-06-21 Emc Corporation Index processing
US8156079B1 (en) 2005-06-30 2012-04-10 Emc Corporation System and method for index processing
US20070022250A1 (en) * 2005-07-19 2007-01-25 International Business Machines Corporation System and method of responding to a cache read error with a temporary cache directory column delete
US8099556B2 (en) * 2005-09-13 2012-01-17 Arm Limited Cache miss detection in a data processing apparatus
CA2621523C (en) * 2005-09-27 2010-07-13 Nathan Provo System for transforming application data using xslt extensions to render templates from cache and related methods
EP1938206A1 (en) * 2005-09-27 2008-07-02 Teamon Systems, Inc. System for obtaining image using xslt extension and related method
US7752211B1 (en) 2005-09-30 2010-07-06 Emc Corporation Adaptive index processing
US7627609B1 (en) 2005-09-30 2009-12-01 Emc Corporation Index processing using transformed values
US7698325B1 (en) * 2005-09-30 2010-04-13 Emc Corporation Index processing for legacy systems
US7886068B1 (en) * 2005-10-27 2011-02-08 Network Appliance, Inc. Management of streaming media playlists
US8185724B2 (en) * 2006-03-03 2012-05-22 Arm Limited Monitoring values of signals within an integrated circuit
US20090031082A1 (en) * 2006-03-06 2009-01-29 Simon Andrew Ford Accessing a Cache in a Data Processing Apparatus
US7930695B2 (en) * 2006-04-06 2011-04-19 Oracle America, Inc. Method and apparatus for synchronizing threads on a processor that supports transactional memory
US7685368B1 (en) * 2006-06-28 2010-03-23 Emc Corporation Methods and apparatus for removing data from a cache
US7668851B2 (en) * 2006-11-29 2010-02-23 International Business Machines Corporation Lockless hash table lookups while performing key update on hash table element
US20080183963A1 (en) * 2007-01-31 2008-07-31 International Business Machines Corporation System, Method, And Service For Providing A Generic RAID Engine And Optimizer
US8095750B2 (en) * 2007-05-14 2012-01-10 International Business Machines Corporation Transactional memory system with fast processing of common conflicts
US8117403B2 (en) * 2007-05-14 2012-02-14 International Business Machines Corporation Transactional memory system which employs thread assists using address history tables
US8095741B2 (en) * 2007-05-14 2012-01-10 International Business Machines Corporation Transactional memory computing system with support for chained transactions
US8688920B2 (en) 2007-05-14 2014-04-01 International Business Machines Corporation Computing system with guest code support of transactional memory
US9009452B2 (en) 2007-05-14 2015-04-14 International Business Machines Corporation Computing system with transactional memory using millicode assists
US8321637B2 (en) * 2007-05-14 2012-11-27 International Business Machines Corporation Computing system with optimized support for transactional memory
US8200917B2 (en) * 2007-09-26 2012-06-12 Qualcomm Incorporated Multi-media processor cache with cache line locking and unlocking
US8032706B2 (en) * 2008-08-05 2011-10-04 Intel Corporation Method and apparatus for detecting a data access violation
US8949582B2 (en) 2009-04-27 2015-02-03 Lsi Corporation Changing a flow identifier of a packet in a multi-thread, multi-flow network processor
US8515965B2 (en) 2010-05-18 2013-08-20 Lsi Corporation Concurrent linked-list traversal for real-time hash processing in multi-core, multi-thread network processors
US9727508B2 (en) 2009-04-27 2017-08-08 Intel Corporation Address learning and aging for network bridging in a network processor
US8910168B2 (en) 2009-04-27 2014-12-09 Lsi Corporation Task backpressure and deletion in a multi-flow network processor architecture
US9152564B2 (en) 2010-05-18 2015-10-06 Intel Corporation Early cache eviction in a multi-flow network processor architecture
US8949838B2 (en) 2009-04-27 2015-02-03 Lsi Corporation Multi-threaded processing with hardware accelerators
US9461930B2 (en) 2009-04-27 2016-10-04 Intel Corporation Modifying data streams without reordering in a multi-thread, multi-flow network processor
US8874878B2 (en) 2010-05-18 2014-10-28 Lsi Corporation Thread synchronization in a multi-thread, multi-flow network communications processor architecture
US8873550B2 (en) 2010-05-18 2014-10-28 Lsi Corporation Task queuing in a multi-flow network processor architecture
US8949578B2 (en) 2009-04-27 2015-02-03 Lsi Corporation Sharing of internal pipeline resources of a network processor with external devices
US8321385B2 (en) * 2010-03-12 2012-11-27 Lsi Corporation Hash processing in a network communications processor architecture
US8566524B2 (en) * 2009-08-31 2013-10-22 International Business Machines Corporation Transactional memory system with efficient cache support
US9075720B2 (en) 2010-10-04 2015-07-07 International Business Machines Corporation Locking a cache line for write operations on a bus
US9104678B1 (en) 2011-12-31 2015-08-11 Richard Michael Nemes Methods and apparatus for information storage and retrieval using a caching technique with probe-limited open-address hashing
US9268596B2 (en) 2012-02-02 2016-02-23 Intel Corparation Instruction and logic to test transactional execution status
US8938428B1 (en) 2012-04-16 2015-01-20 Emc Corporation Systems and methods for efficiently locating object names in a large index of records containing object names
US9047194B2 (en) 2012-07-18 2015-06-02 Empire Technology Development Llc Virtual cache directory in multi-processor architectures
US9081672B1 (en) 2013-05-30 2015-07-14 Richard Michael Nemes Methods and apparatus for information storage and retrieval using a caching technique with external-chain hashing and dynamic resource-dependent data shedding
US9830275B2 (en) * 2015-05-18 2017-11-28 Imagination Technologies Limited Translation lookaside buffer
US11593167B2 (en) * 2019-05-09 2023-02-28 International Business Machines Corporation Thread embedded cache management

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0061570A2 (en) * 1981-03-23 1982-10-06 International Business Machines Corporation Store-in-cache multiprocessor system with checkpoint feature
EP0568221A1 (en) * 1992-04-29 1993-11-03 Sun Microsystems, Inc. Methods and apparatus for implementing a pseudo-LRU cache memory replacement scheme with a locking feature
WO1994003856A1 (en) * 1992-08-07 1994-02-17 Massachusetts Institute Of Technology Column-associative cache

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4736293A (en) * 1984-04-11 1988-04-05 American Telephone And Telegraph Company, At&T Bell Laboratories Interleaved set-associative memory
US4926323A (en) * 1988-03-03 1990-05-15 Advanced Micro Devices, Inc. Streamlined instruction processor
NL8901626A (nl) * 1989-06-27 1991-01-16 Thomassen & Drijver Inrichting voor het uitstoten van verkeerd geoerienteerde deksels uit een continue stroom.
US5491806A (en) * 1990-06-26 1996-02-13 Lsi Logic Corporation Optimized translation lookaside buffer slice having stored mask bits
US5325504A (en) * 1991-08-30 1994-06-28 Compaq Computer Corporation Method and apparatus for incorporating cache line replacement and cache write policy information into tag directories in a cache system
GB2276961B (en) * 1993-03-30 1997-03-26 Int Computers Ltd Set-associative memory
US5535365A (en) * 1993-10-22 1996-07-09 Cray Research, Inc. Method and apparatus for locking shared memory locations in multiprocessing systems
US5727212A (en) * 1995-04-12 1998-03-10 International Business Machines Corporation Object oriented device driver system for procedural device drivers
US6281893B1 (en) * 1996-04-04 2001-08-28 Sun Microsystems, Inc. Method and apparatus for providing an object oriented approach to a device independent graphics control system

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0061570A2 (en) * 1981-03-23 1982-10-06 International Business Machines Corporation Store-in-cache multiprocessor system with checkpoint feature
EP0568221A1 (en) * 1992-04-29 1993-11-03 Sun Microsystems, Inc. Methods and apparatus for implementing a pseudo-LRU cache memory replacement scheme with a locking feature
WO1994003856A1 (en) * 1992-08-07 1994-02-17 Massachusetts Institute Of Technology Column-associative cache

Also Published As

Publication number Publication date
EP0768608A2 (en) 1997-04-16
EP0768608B1 (en) 2003-01-15
CN1155121A (zh) 1997-07-23
EP0768608A3 (en) 1998-08-12
JPH09204357A (ja) 1997-08-05
US5909695A (en) 1999-06-01
US5701432A (en) 1997-12-23
KR970022764A (ko) 1997-05-30
DE69625768D1 (de) 2003-02-20
DE69625768T2 (de) 2003-09-18
TW324081B (en) 1998-01-01

Similar Documents

Publication Publication Date Title
CN1087451C (zh) 用于在高速缓冲存储器中设置一项目的方法和装置
Binna et al. HOT: A height optimized trie index for main-memory database systems
US7962693B1 (en) Cache management system providing improved page latching methodology
Levandoski et al. The Bw-Tree: A B-tree for new hardware platforms
US7085911B2 (en) Resizable cache sensitive hash table
US5530832A (en) System and method for practicing essential inclusion in a multiprocessor and cache hierarchy
US5134696A (en) Virtual lookaside facility
TW201030609A (en) Metaphysical address space for holding lossy metadata in hardware
US20090132563A1 (en) Simple optimistic skiplist
US7493464B2 (en) Sparse matrix
CN1829978A (zh) 提供高速缓存状态信息的方法及装置
CN1509436A (zh) 以推测方式使高速缓存中的缓存行失效的方法及系统
US8041918B2 (en) Method and apparatus for improving parallel marking garbage collectors that use external bitmaps
US5247647A (en) Detection of deletion of stored data by concurrently executing processes in a multiprocessing data processing system
CN1196997C (zh) 不按序执行指令的装置和检测不按序指令的方法
Helman et al. Designing practical efficient algorithms for symmetric multiprocessors
CN100514311C (zh) 用于实现组合式数据/相关性高速缓存的方法和装置
US20130159315A1 (en) Methods for prefix indexing
CA2419900A1 (en) Relocating pages that are pinned in a buffer pool in a database system
JP3360933B2 (ja) 情報処理システムにおける記憶制御方法および記憶制御装置
US7953721B1 (en) Integrated search engine devices that support database key dumping and methods of operating same
US8732442B2 (en) Method and system for hardware-based security of object references
US20100228771A1 (en) Query result iteration
US11625386B2 (en) Fast skip list purge
US10417209B1 (en) Concurrent index using copy on write

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C19 Lapse of patent right due to non-payment of the annual fee
CF01 Termination of patent right due to non-payment of annual fee