CN102203737B - 多线程访问多副本的方法和装置 - Google Patents
多线程访问多副本的方法和装置 Download PDFInfo
- Publication number
- CN102203737B CN102203737B CN2011800005531A CN201180000553A CN102203737B CN 102203737 B CN102203737 B CN 102203737B CN 2011800005531 A CN2011800005531 A CN 2011800005531A CN 201180000553 A CN201180000553 A CN 201180000553A CN 102203737 B CN102203737 B CN 102203737B
- Authority
- CN
- China
- Prior art keywords
- thread
- page directory
- directory tables
- list item
- tables
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/25—Using a specific main memory architecture
- G06F2212/254—Distributed memory
- G06F2212/2542—Non-uniform memory access [NUMA] architecture
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供了多线程访问多副本的方法和装置。该方法包括:当进程的多个线程被分布到不同节点时,创建与进程的进程页目录表的内容相同的线程页目录表,每份线程页目录表包括用于指向特定数据的特殊表项和特殊表项之外的普通表项,其中每个线程对应一份线程页目录表,每个线程的执行基于相对应的线程页目录表,特定数据是在不同节点具有多副本的数据;对于每个线程在被调度时,当该线程的线程页目录表中的特殊表项未指向在该线程所在节点中存储的特定数据时,基于该特定数据的物理地址,修改该特殊表项以指向该特定数据。基于上述技术方案,可以使分布到不同节点的线程访问所在节点处存储的数据副本,从而提高系统性能。
Description
技术领域
本发明涉及计算机领域,并且更具体地,涉及计算机领域中多线程访问多副本的方法和装置。
背景技术
NUMA(Non-uniform Memory Access,非一致内存访问)是一种分布式结构,每个处理器都会挂载内存、外设等。由于每组处理器和内存都连接到同一系统,NUMA显示了其扩展性的优势,加上其高可靠性、高应用性和高服务性的特征,已广泛应用到中高端服务器领域。
由于NUMA节点中的任一处理器都可以访问任意的内存,使得每个处理器访问不同的内存存在着不同的延迟。随着系统的扩展,NUMA节点逐渐增加,处理器访问远端节点的延迟也相应大幅提升,从而影响系统的整体性能。特别是对于系统中被频繁访问的数据(例如内核代码和内核只读数据),如果这些数据只存在于一个节点中,那么其他节点的处理器访问这些数据将具有较大的延迟,并且如果这些数据在短时间内被多个节点的处理器访问,互联硬件的传输带宽就成为了另一影响性能的因素。
在相关技术中,可以将系统中被频繁访问的数据复制到每个节点的内存中,这样每个节点都有一个本地副本,运行在各个节点上的进程都可以访问本地副本,从而避免因为不得不在其他节点访问这些被频繁访问的数据而引发的延迟影响,同时还可以减少互联硬件的传输带宽消耗。
以内核代码和内核只读数据为例,为了实现内核多副本,可以在每个节点上申请足够的内存,将内核代码和内核只读数据复制到该新区域;通过计算获取各个节点的内核多副本和对应线性地址的映射关系;当进程被调度到某个节点上时,基于保存在该节点上的内核副本的映射关系,修改进程页目录表的某些表项,使得该进程通过其进程页目录表的内容可以访问本节点的内核代码副本。
虽然通过内核多副本技术,可以使进程访问本节点上的内核代码和内核只读数据,但是如果进程创建了多个线程,并且这些线程被分布到不同的节点上执行,那么这些线程仍将基于进程页目录表的内容运行。这样,由于进程页目录表指向的内核副本位于一个节点中,所以多线程并不能访问所在节点中保存的内核副本,仍将产生较大的延迟并受互联硬件传输带宽的限制。
发明内容
本发明实施例提供了多线程访问多副本的方法和装置,使得分布到不同节点的线程能够访问所在节点处保存的具有多副本的数据,从而可以改善系统性能。
一方面,本发明实施例提供了多线程访问多副本的方法,包括:当进程的多个线程被分布到不同节点时,创建与所述进程的进程页目录表的内容相同的线程页目录表,每份线程页目录表包括用于指向特定数据的特殊表项和所述特殊表项之外的普通表项,其中每个线程对应一份线程页目录表,每个线程的执行基于相对应的线程页目录表,所述特定数据是在不同节点具有多副本的数据;对于每个线程在被调度时,当该线程的线程页目录表中的特殊表项未指向在该线程所在节点中存储的所述特定数据时,基于该特定数据的物理地址,修改该特殊表项以指向该特定数据。
另一方面,本发明实施例提供了用于多线程访问多副本的装置,包括:第一创建模块,用于当进程的多个线程被分布到不同节点时,创建与所述进程的进程页目录表的内容相同的线程页目录表,每份线程页目录表包括用于指向特定数据的特殊表项和所述特殊表项之外的普通表项,其中每个线程对应一份线程页目录表,每个线程的执行基于相对应的线程页目录表,所述特定数据是在不同节点具有多副本的数据;修改模块,用于对于每个线程在被调度时,当该线程的线程页目录表中的特殊表项未指向在该线程所在节点中存储的所述特定数据时,基于该特定数据的物理地址,修改该特殊表项以指向该特定数据。
基于上述技术方案,通过创建线程页目录表,并使线程目录表中的特殊表项指向线程所在节点处的具有多副本的数据,这样在线程执行过程中可以使得分布到不同节点的线程访问所在节点处存储的数据副本,从而避免线程访问远端数据产生的延迟并避免受到互联硬件传输带宽的限制,使得系统性能得以提高。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据本发明实施例的多线程访问多副本的方法的流程图。
图2是根据本发明实施例的实现多线程访问多副本的逻辑结构的示意图。
图3是根据本发明实施例的多线程访问多副本的另一方法的流程图。
图4是根据本发明实施例的在实现多线程访问多副本的情况下完整执行进程的总过程的流程图。
图5是根据本发明实施例的多线程访问多副本的再一方法的流程图。
图6是根据本发明实施例的创建图5中的进程页目录表的方法的流程图。
图7是根据本发明实施例的用于多线程访问多副本的装置的结构框图。
图8是根据本发明实施例的用于多线程访问多副本的另一装置的结构框图。
图9是根据本发明实施例的用于多线程访问多副本的再一装置的结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部实施例。基于本发明中的所述实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都应属于本发明保护的范围。
首先,结合图1描述根据本发明实施例的多线程访问多副本的方法100。
如图1所示,方法100包括:在S110中,当进程的多个线程被分布到不同节点时,创建与进程的进程页目录表的内容相同的线程页目录表,每份线程页目录表包括用于指向特定数据的特殊表项和特殊表项之外的普通表项,其中每个线程对应一份线程页目录表,每个线程的执行基于相对应的线程页目录表,特定数据是在不同节点具有多副本的数据;在S120中,对于每个线程在被调度时,当该线程的线程页目录表中的特殊表项未指向在该线程所在节点中存储的特定数据时,基于该特定数据的物理地址,修改该特殊表项以指向该特定数据。
这样,通过创建线程页目录表,并使线程目录表中的特殊表项指向线程所在节点处存储的在不同节点具有多副本的特定数据,可以使分布到不同节点的线程访问所在节点中的特定数据,从而避免线程访问远端数据产生的延迟并避免受到互联硬件传输带宽的限制,使得系统性能得以提高。
在S110中,进程可以被划分为多个线程,线程可以被分布到不同的节点来执行。节点可以是NUMA架构中的节点,也可以是其他具有扩展性的系统结构中支持多处理器并发操作的节点,还可以是需要实现多线程频繁访问只读数据的任何装置中的节点等。
可以为线程创建线程页目录表,使得线程基于它所对应的线程页目录表来执行。
例如,每个线程可以对应只属于自己的一份线程页目录表。这样,如果进程被划分为20个线程,那么需要为20个线程创建20份线程页目录表,线程与线程页目录表一一对应。
再例如,每个线程对应由与该线程处于同一节点的至少两个线程共享的一份线程页目录表。这样,如果进程被划分为20个线程,20个线程被平均分配到4个节点,那么每个节点中可以只有一份线程页目录表,由该节点上的线程所共享。从而,相比于线程与线程页目录表一一对应的情形,可以减小需要维护的线程页目录表数量,从而减小系统开销。当然,本领域技术人员也可以想到,在该例子中,在一个节点也可以存在两份线程页目录表,其中一份由位于该节点的5个线程中的两个共享,另一份由剩余的3个线程共享。
还例如,多个线程中的部分线程中的每个线程对应只属于自己的一份线程页目录表,其他线程中的每个线程对应由与该线程处于同一节点的至少两个线程共享的一份线程页目录表。该情形即是上述两种情形的组合。例如,进程包含的20个线程被平均分配到4个节点之后,对于某节点上的5个线程,其中的2个线程可以分别具有只属于自己的线程页目录表,另外3个线程可以共享一份线程页目录表,此时在该节点共具有3份线程页目录表。
当然,本领域技术人员还可以想到其他设置线程页目录表的方式。不管一份线程页目录表对应一个还是多个线程,一个线程对应一份线程页目录表,并基于它所对应的线程页目录表运行。
线程页目录表中表项的初始值可以与进程页目录表中的表项相同。在线程页目录表中,表项可以被分为特殊表项和普通表项这两部分。特殊表项指向特定数据,该特定数据是在不同节点具有多副本的数据。例如,特定数据可以是内核代码和内核只读数据,也可以是内存中的所有只读数据,还可以是内存中的部分只读数据,当然还可以是上述内容的组合。通常,在不同节点具有多副本的数据是需要频繁访问的数据,所以特定数据也可以是这些频繁访问的数据。
所创建的线程页目录表可以都是新创建的线程页目录表,也可以共享进程页目录表来得到线程页目录表。例如,可以将进程页目录表设置为主线程的线程页目录表;对于其它线程,生成与进程页目录表的内容相同的线程页目录表。此时,所创建的主线程的线程页目录表就是进程页目录表,将主线程的线程页目录表指针指向进程页目录表即可,也可以置为空而默认指向进程页目录表;而针对主线程之外的其他线程,则需要新生成线程页目录表。
在S120中,当调度线程时,将线程对应的线程页目录表的地址加载到硬件寄存器中以执行线程。例如,硬件寄存器可以是X86平台下的CR3寄存器。如果某线程的线程页目录表中的特殊表项没有指向该线程所在节点中的特定数据,则修改该特殊表项,使其指向本节点中的特定数据。修改时需要参考特定数据在本节点中存储的物理地址,基于物理地址来进行特殊表项的修改。
这样,在修改了线程页目录表的特殊表项以指向线程所在节点中诸如内核代码、只读数据之类的特定数据之后,在执行线程的过程中,线程可以基于相对应的线程页目录表中的特殊表项来访问所在节点中的特定数据,从而实现多线程访问多副本,避免访问远端数据造成的延迟和对传输带宽的高要求,并且可以提高对频繁访问的数据的访问效率,从而提高系统性能。
以图2为例来描述通过线程页目录表实现多线程访问多副本的逻辑结构的示意图。在图2中只示出了与本发明实施例有关的逻辑结构而不是全部的逻辑结构。
在图2中,进程被划分线程1、线程2和线程3这三个线程,并且这三个进程处于不同的节点。线程1、2、3的地址空间指针分别指向进程地址空间。
线程1是主线程,可以将进程页目录表作为线程1的线程页目录表,所以线程1的线程页目录表指针为空指针,默认与进程页目录表指针相同。当然,也可以将线程1的线程页目录表指针设置为指向进程页目录表的值。线程2和线程3的线程页目录表指针分别指向线程2和线程3各自的线程页目录表。
线程页目录表被划分为两部分,分别是特殊表项和普通表项。特殊表项用于指向在不同节点具有多副本的数据。在图2中,假设多副本的数据是包括内核代码和内核只读数据的内核副本,所以线程1的线程页目录表中的特殊表项指向线程1所在节点的内核副本,线程2的线程页目录表中的特殊表项指向线程2所在节点的内核副本,线程3的线程页目录表中的特殊表项指向线程3所在节点的内核副本。为了使特殊表项指向所在节点的多副本的数据,可以根据多副本的数据在节点中存储的物理地址,来修改特殊表项中的值以指向这些区域。
图3是根据本发明实施例的多数据访问多副本的方法300的流程图。方法300在方法100的基础上增加了同步普通表项的步骤,以在实现多线程访问多副本的过程中进一步保证线程的正常执行。
方法300的S310和S320与方法100的S110和S120基本相同。
在S330中,在基于各线程的线程页目录表执行各线程的过程中,更新需要同步的线程页目录表中的普通表项以使各线程正常执行。
将线程页目录表的地址加载到硬件寄存器之后,可以开始执行线程。在线程执行过程中,某个或某些线程可能由于新申请内存空间或释放内存空间等而使得所对应的线程页目录表中的普通表项发生改变。该改变只会体现在相对应的线程页目录表中,从而其他线程的线程页目录表中的普通表项并不会因此改变,那么其他线程在基于它们的线程页目录表进行执行的过程中可能出现错误,例如无法访问新开辟的内存空间或某内存空间无效了但仍然以为有效等。因此,需要同步线程页目录表中的普通表项。
根据本发明的一个实施例,当特定线程页目录表中的普通表项改变时,基于该普通表项,更新其它所有线程页目录表中的普通表项。
当某一线程页目录表中的普通表项发生改变时,将其他所有线程页目录表中的普通表项都进行更新,例如将发生改变的线程页目录表的普通表项的内容拷贝到其他所有线程页目录表中的普通表项中。
可以将一个进程的所有线程页目录表由链表组织。当任一线程中硬件寄存器对应的线程页目录表修改时,更新其他线程页目录表。例如,当主线程的线程页目录表是进程页目录表时,当在执行过程中有线程页目录表发生改变时,可以判断是否是主线程的线程页目录表发生改变,如果是,则修改其他所有线程页目录表,否则,则告知修改进程页目录表即主线程的线程页目录表,再修改其他线程页目录表。
根据本发明的一个实施例,当特定线程发生缺页异常时,寻找发生了变化的线程页目录表;基于该线程页目录表中的普通表项,更新所述特定线程的线程页目录表中的普通表项。
例如,在图2中假设线程2在申请释放内存后修改了自己的线程页目录表,此时不立即更新其他所有线程页目录表中的普通表项,而只是记录线程2的线程页目录表发生了修改。例如通过设置掩码标志位来记录哪个线程页目录表发生了修改,每个标志位对应一份线程页目录表。当其他线程例如线程3在运行过程中访问此区域时,会触发缺页异常。此时,线程3寻找系统中发生修改的线程页目录表,例如通过掩码标志位来寻找哪些线程页目录表有改变。当找到线程2的线程页目录表发生修改时,线程3将自己的线程页目录表的普通表项更新为线程2的线程页目录表的普通表项,从而解决缺页异常而正常执行。
通过在线程运行过程中,实时同步所有线程页目录表的普通表项,或者在出现缺页异常时更新相应线程页目录表的普通表项,可以使每个线程在可以访问具有多副本的数据的同时得以正常执行,从而保证进程功能的完整实现。并且,在线程运行过程中进行的同步无需额外耗费内容空间,在线程个数较少的情况下同步开销也很小。
下面以图4为例来描述既能实现多线程访问多副本、又能使线程得以正常执行的总过程的流程图。在该例子中具有多副本的特定数据是内核副本,本领域技术人员也可以想到特定数据也可以是内存中的只读数据等,其实现过程与之相似。
在S410中,过程开始。
在S420中,建立内核副本。在各个节点申请内容,并将主节点的内核代码和内核只读数据拷贝到新申请的内存中,并在各个节点记录本节点内核副本的映射关系。
在S430中,进程创建。将进程划分为多个线程,并将线程分布到不同的节点来执行。
在S440中,创建线程页目录表。为新创建的线程建立线程页目录表。
在S450中,进程调度。由于进程被划分为了多个线程,所以进程调度也是线程调度。
在S460中,进程运行。
在S470中,过程结束。
在S440的创建线程页目录表的过程中,使线程页目录表的内容与进程页目录表的内容相一致。
在S441中,判断创建线程页目录表所针对的线程是否是主线程。
如果在S441中判断是主线程,则在S442中,将该线程的线程页目录表指针置为空,将进程页目录表作为其线程页目录表。
如果在S441中判断不是主线程,则在S443中,将进程页目录表的内容复制到为该线程生成的线程页目录表中。
在S450的进程调度过程中,加载线程页目录表。
在S451中,当一个线程被调度时,判断该线程是否是主线程。如果确定该线程是主线程,则前进到S452,否则前进到S455。
在S452中,判断该线程基于相应的线程页目录表中的特殊表项,是否可以对内核副本进行本地访问。如果在S452中确定不能本地访问内核副本,则前进到S453中,否则前进到S454中。
在S453中,修改主线程的线程页目录表即进程页目录表中的特殊表项,使其可以访问主线程所在节点中存储的内核副本。
在S454中,将主线程的线程页目录表即进程页目录表的地址装载到执行主线程的处理器对应的硬件寄存器中。
在S455中,判断该线程基于相应的线程页目录表中的特殊表项,是否可以对内核副本进行本地访问。如果在S455中确定不能本地访问内核副本,则前进到S456中,否则前进到S457中。
在S456中,修改该线程的线程页目录表中的特殊表项,使其可以访问该线程所在节点中存储的内核副本。
在S457中,将该线程的线程页目录表的地址装载到执行该线程的处理器对应的硬件寄存器中。
这样,基于S450中的操作,可以装载所有线程对应的线程页目录表,并使线程页目录表的特殊表项指向线程所在节点中存储的内核副本,从而进行本地访问。
在S460的进程运行过程中,对需要同步的线程页目录表的普通表项进行修改。该处以同步所有线程页目录表中的普通表项为例进行描述。
在S461中,某线程对应的线程页目录表被修改。由于在线程运行过程中普通表项会被修改,所以此处修改的是普通表项。
在S462中,判断该线程是否为主线程。如果是主线程,则前进到S464,否则前进到S463。
在S463中,由于主线程的线程页目录表是进程页目录表,则更新进程页目录表中的普通表项。
在S464中,更新除主线程之外的其他线程的线程页目录表中的普通表项。
这样,当特定线程的线程页目录表发生改变时,利用该特定线程的线程页目录表中的普通表项来更新其他所有线程的线程页目录表中的普通表项,使得所有线程可以正常执行。
接下来,参考图5描述根据本发明实施例的多线程访问多副本的方法500的流程图。方法500也可以使所有线程正常执行,但相比方法300而言,不是在运行线程的过程中同步线程页目录表的普通表项,而是在创建线程页目录表时就保证了线程可以正常执行。方法500的S510和S520与方法100的S110和S120基本相同。
在S502中,确定进程将使用的所有地址空间。
针对将被执行的进程,可以提前确定进程将使用的所有地址空间。例如,提前预留进程将使用的所有用户空间。
在S504中,基于所有地址空间,创建进程页目录表以指向所有地址空间。
为进程预留好将使用的所有地址空间之后,就可以基于这些空间的物理地址来创建进程页目录表。例如,在进程创建主线程时,可以为该进程的所有用户空间申请页上级表,并将该表的地址生成对应的页目录表项填入进程页目录表中。
这样,在进程运行过程中,进程页目录表的普通表项不会由于内存单元的新申请或释放等而改变,从而普通表项在运行过程中可以保持不变。因此,当线程页目录表的普通表项与进程页目录表的普通表项一致时,线程页目录表的普通表项在运行过程中无需改变就可以使得线程得以正常执行。此外,利用预先保留好所有地址空间来创建进程页目录表进而创建线程页目录表,可以节省方法300中需要在运行过程中同步线程页目录表的效率开销,以耗费一些内存空间来换取各线程正常执行的简便性。
例如,可以利用图6所示的方式来创建图5的S504中的进程页目录表。
在S610中,进程创建。
在S620中,读取进程页目录表的普通表项中的下一项表项。
在S630中,判断该下一项表项是否为空。如果为空,则前进到S640,否则退回S620。
在S640中,预留进程将使用的用户空间,并分配页上级表。
在S650中,基于所分配的页上级表,填充进程页目录表的表项以指向该页上级表。
在S660中,进程页目录表填充是否结束。如果结束,则前进到S670,否则退回S630。
在S670中,进程页目录表的普通表项填充完成。这样,进程页目录表的普通表项指向了进程将使用到的所有用户地址空间。
上面描述了根据本发明实施例的多线程访问多副本的方法,下面结合图7至图10描述与之相对应的装置的结构框图。
图7是根据本发明实施例的用于多线程访问多副本的装置700的结构框图。
装置700包括第一创建模块710和修改模块720。第一创建模块710可用于当进程的多个线程被分布到不同节点时,创建与进程的进程页目录表的内容相同的线程页目录表,每份线程页目录表包括用于指向特定数据的特殊表项和特殊表项之外的普通表项,其中每个线程对应一份线程页目录表,每个线程的执行基于相对应的线程页目录表,特定数据是在不同节点具有多副本的数据。修改模块720可用于对于每个线程在被调度时,当该线程的线程页目录表中的特殊表项未指向在该线程所在节点中存储的特定数据时,基于该特定数据的物理地址,修改该特殊表项以指向该特定数据。
根据本发明的实施例,特定数据可以包括如下至少一个:内核代码和内核只读数据;内存中的只读数据。
根据本发明的实施例,每个线程可以对应只属于自己的一份线程页目录表。每个线程也可以对应由与该线程处于同一节点的至少两个线程共享的一份线程页目录表。另外,多个线程中的部分线程中的每个线程可以对应只属于自己的一份线程页目录表,其他线程中的每个线程可以对应由与该线程处于同一节点的至少两个线程共享的一份线程页目录表。
第一创建模块710和修改模块720的上述和其他操作和/或功能可以参考上述方法100中的S110和S120,为了避免重复,在此不再赘述。
根据本发明实施例提供的装置,在修改了线程页目录表的特殊表项以指向线程所在节点中诸如内核代码、只读数据之类的特定数据之后,在执行线程的过程中,线程可以基于相对应的线程页目录表中的特殊表项来访问所在节点中的特定数据,从而实现多线程访问多副本,避免访问远端数据造成的延迟和对传输带宽的高要求,并且可以提高对频繁访问的数据的访问效率,从而提高系统性能。
图8是根据本发明实施例的用于多线程访问多副本的装置800的结构框图。装置800的第一创建模块810和修改模块820与装置700的第一创建模块710和修改模块720基本相同。
根据本发明的一个实施例,装置800可以包括更新模块830。更新模块830可用于在基于各线程的线程页目录表执行各线程的过程中,更新需要同步的线程页目录表中的普通表项以使各线程正常执行。
根据本发明的一个实施例,更新模块830可用于当特定线程页目录表中的普通表项改变时,基于该普通表项,更新其它所有线程页目录表中的普通表项。
根据本发明的一个实施例,更新模块830可以包括寻找单元832和更新单元834。寻找单元832可用于当特定线程发生缺页异常时,寻找发生了变化的线程页目录表。更新单元834可用于基于该线程页目录表中的普通表项,更新特定线程的线程页目录表中的普通表项。
根据本发明的一个实施例,第一创建模块810可以包括设置单元812和生成单元814。设置单元812可用于将进程页目录表设置为主线程的线程页目录表。生成单元814可用于对于其它线程,生成与进程页目录表的内容相同的线程页目录表。
更新模块830、寻找单元832、更新单元834、设置单元812、生成单元814的上述和其他操作和/或功能可以参考上述方法300的S330和上述方法100的S110,为了避免重复,在此不再赘述。
根据本发明实施例提供的装置,通过在线程运行过程中,实时同步所有线程页目录表的普通表项,或者在出现缺页异常时更新相应线程页目录表的普通表项,可以使每个线程在可以访问具有多副本的数据的同时得以正常执行,从而保证进程功能的完整实现。并且,在线程运行过程中进行的同步无需额外耗费内容空间,在线程个数较少的情况下同步开销也很小。
图9是根据本发明实施例的用于多线程访问多副本的装置900的结构框图。装置900的第一创建模块910和修改模块920与装置700的第一创建模块710和修改模块720基本相同。
根据本发明的一个实施例,装置900还可以包括确定模块902和第二创建模块904。确定模块902可用于确定进程将使用的所有地址空间。第二创建模块904可用于基于所有地址空间,创建进程页目录表以指向所有地址空间。此时,第一创建模块910创建的线程页目录表是基于第二创建模块904创建的进程页目录表来创建的。
确定模块902和第二创建模块904的上述和其他操作和/或功能可以参考上述方法500的S502和S504,为了避免重复,在此不再赘述。
根据本发明实施例提供的装置,在进程运行过程中,进程页目录表的普通表项不会由于内存单元的新申请或释放等而改变,从而普通表项在运行过程中可以保持不变。因此,当线程页目录表的普通表项与进程页目录表的普通表项一致时,线程页目录表的普通表项在运行过程中无需改变就可以使得线程得以正常执行。此外,利用预先保留好所有地址空间来创建进程页目录表进而创建线程页目录表,可以节省方法300中需要在运行过程中同步线程页目录表的效率开销,以耗费一些内存空间来换取各线程正常执行的简便性。
本领域技术人员可以意识到,结合本文中所公开的实施例中描述的各方法步骤和单元,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各实施例的步骤及组成。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。本领域技术人员可以对每个特定的应用使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法步骤可以用硬件、处理器执行的软件程序、或者二者的结合来实施。软件程序可以置于随机存取存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM或技术领域内所公知的任意其它形式的存储介质中。
尽管已示出和描述了本发明的一些实施例,但本领域技术人员应该理解,在不脱离本发明的原理和精神的情况下,可对这些实施例进行各种修改,这样的修改应落入本发明的范围内。
Claims (16)
1.一种多线程访问多副本的方法,其特征在于,包括:
当进程的多个线程被分布到不同节点时,创建与所述进程的进程页目录表的内容相同的线程页目录表,每份线程页目录表包括用于指向特定数据的特殊表项和所述特殊表项之外的普通表项,其中每个线程对应一份线程页目录表,每个线程的执行基于相对应的线程页目录表,所述特定数据是在不同节点具有多副本的数据;
对于每个线程在被调度时,当该线程的线程页目录表中的特殊表项未指向在该线程所在节点中存储的所述特定数据时,基于该特定数据的物理地址,修改该特殊表项以指向该特定数据。
2.根据权利要求1所述的方法,其特征在于,还包括:
在基于各线程的线程页目录表执行各线程的过程中,更新需要同步的线程页目录表中的普通表项以使各线程正常执行。
3.根据权利要求2所述的方法,其特征在于,所述更新需要同步的线程页目录表中的普通表项包括:
当特定线程页目录表中的普通表项改变时,基于该普通表项,更新其它所有线程页目录表中的普通表项。
4.根据权利要求2所述的方法,其特征在于,所述更新需要同步的线程页目录表中的普通表项包括:
当特定线程发生缺页异常时,寻找发生了变化的线程页目录表;
基于该线程页目录表中的普通表项,更新所述特定线程的线程页目录表中的普通表项。
5.根据权利要求1所述的方法,其特征在于,所述创建与所述进程的进程页目录表的内容相同的线程页目录表之前,还包括:
确定所述进程将使用的所有地址空间;
基于所述所有地址空间,创建进程页目录表以指向所述所有地址空间。
6.根据权利要求1所述的方法,所述特定数据包括如下至少一个:
内核代码和内核只读数据;
内存中的只读数据。
7.根据权利要求1所述的方法,其特征在于,所述创建与所述进程的进程页目录表的内容相同的线程页目录表包括:
将所述进程页目录表设置为主线程的线程页目录表;
对于其它线程,生成与所述进程页目录表的内容相同的线程页目录表。
8.根据权利要求1所述的方法,其特征在于,所述每个线程对应一份线程页目录表包括如下之一:
每个线程对应只属于自己的一份线程页目录表;
每个线程对应由与该线程处于同一节点的至少两个线程共享的一份线程页目录表;
所述多个线程中的部分线程中的每个线程对应只属于自己的一份线程页目录表,其他线程中的每个线程对应由与该线程处于同一节点的至少两个线程共享的一份线程页目录表。
9.一种用于多线程访问多副本的装置,其特征在于,包括:
第一创建模块,用于当进程的多个线程被分布到不同节点时,创建与所述进程的进程页目录表的内容相同的线程页目录表,每份线程页目录表包括用于指向特定数据的特殊表项和所述特殊表项之外的普通表项,其中每个线程对应一份线程页目录表,每个线程的执行基于相对应的线程页目录表,所述特定数据是在不同节点具有多副本的数据;
修改模块,用于对于每个线程在被调度时,当该线程的线程页目录表中的特殊表项未指向在该线程所在节点中存储的所述特定数据时,基于该特定数据的物理地址,修改该特殊表项以指向该特定数据。
10.根据权利要求9所述的装置,其特征在于,还包括:
更新模块,用于在基于各线程的线程页目录表执行各线程的过程中,更新需要同步的线程页目录表中的普通表项以使各线程正常执行。
11.根据权利要求10所述的装置,其特征在于,所述更新模块用于当特定线程页目录表中的普通表项改变时,基于该普通表项,更新其它所有线程页目录表中的普通表项。
12.根据权利要求10所述的装置,其特征在于,所述更新模块包括:
寻找单元,用于当特定线程发生缺页异常时,寻找发生了变化的线程页目录表;
更新单元,用于基于该线程页目录表中的普通表项,更新所述特定线程的线程页目录表中的普通表项。
13.根据权利要求9所述的装置,其特征在于,还包括:
确定模块,用于确定所述进程将使用的所有地址空间;
第二创建模块,用于基于所述所有地址空间,创建进程页目录表以指向所述所有地址空间。
14.根据权利要求9所述的装置,所述特定数据包括如下至少一个:
内核代码和内核只读数据;
内存中的只读数据。
15.根据权利要求9所述的装置,其特征在于,所述第一创建模块包括:
设置单元,用于将所述进程页目录表设置为主线程的线程页目录表;
生成单元,用于对于其它线程,生成与所述进程页目录表的内容相同的线程页目录表。
16.根据权利要求9所述的装置,其特征在于,所述每个线程对应一份线程页目录表包括如下之一:
每个线程对应只属于自己的一份线程页目录表;
每个线程对应由与该线程处于同一节点的至少两个线程共享的一份线程页目录表;
所述多个线程中的部分线程中的每个线程对应只属于自己的一份线程页目录表,其他线程中的每个线程对应由与该线程处于同一节点的至少两个线程共享的一份线程页目录表。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2011/074384 WO2011127862A2 (zh) | 2011-05-20 | 2011-05-20 | 多线程访问多副本的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102203737A CN102203737A (zh) | 2011-09-28 |
CN102203737B true CN102203737B (zh) | 2013-09-11 |
Family
ID=44662779
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011800005531A Active CN102203737B (zh) | 2011-05-20 | 2011-05-20 | 多线程访问多副本的方法和装置 |
Country Status (4)
Country | Link |
---|---|
US (1) | US8880813B2 (zh) |
EP (1) | EP2434402A4 (zh) |
CN (1) | CN102203737B (zh) |
WO (1) | WO2011127862A2 (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104252419B (zh) | 2014-09-16 | 2017-09-19 | 华为技术有限公司 | 一种内存分配的方法及装置 |
CN104536764A (zh) * | 2015-01-09 | 2015-04-22 | 浪潮(北京)电子信息产业有限公司 | 程序运行方法和装置 |
CN109766131B (zh) * | 2017-11-06 | 2022-04-01 | 上海宝信软件股份有限公司 | 基于多线程技术实现软件智能化自动升级的系统及方法 |
CN113821157A (zh) * | 2020-06-18 | 2021-12-21 | 中移(苏州)软件技术有限公司 | 一种本地磁盘挂载方法、装置、设备及存储介质 |
CN116841751B (zh) * | 2023-08-31 | 2023-11-10 | 中国兵器装备集团兵器装备研究所 | 一种多任务线程池的策略配置方法、装置和存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101464900A (zh) * | 2009-01-15 | 2009-06-24 | 上海交通大学 | Ntfs文件系统下轻量级文件隐藏方法 |
CN101563674A (zh) * | 2006-12-21 | 2009-10-21 | 国际商业机器公司 | 对来自多处理器系统上的多线程程序的存储器访问进行管理的方法和系统 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6269391B1 (en) * | 1997-02-24 | 2001-07-31 | Novell, Inc. | Multi-processor scheduling kernel |
US6785888B1 (en) * | 1997-08-29 | 2004-08-31 | International Business Machines Corporation | Memory allocator for a multiprocessor computer system |
US20030066056A1 (en) * | 2001-09-28 | 2003-04-03 | Petersen Paul M. | Method and apparatus for accessing thread-privatized global storage objects |
US7334230B2 (en) * | 2003-03-31 | 2008-02-19 | International Business Machines Corporation | Resource allocation in a NUMA architecture based on separate application specified resource and strength preferences for processor and memory resources |
CN1842770A (zh) * | 2003-08-28 | 2006-10-04 | 美普思科技有限公司 | 一种在处理器中挂起和释放执行过程中计算线程的整体机制 |
US7370156B1 (en) * | 2004-11-04 | 2008-05-06 | Panta Systems, Inc. | Unity parallel processing system and method |
US9164812B2 (en) * | 2009-06-16 | 2015-10-20 | International Business Machines Corporation | Method and system to manage memory accesses from multithread programs on multiprocessor systems |
US8832388B2 (en) * | 2011-03-11 | 2014-09-09 | Microsoft Corporation | Managing shared memory used by compute nodes |
WO2011107040A2 (zh) * | 2011-04-19 | 2011-09-09 | 华为技术有限公司 | 数据访问处理方法和设备 |
-
2011
- 2011-05-20 WO PCT/CN2011/074384 patent/WO2011127862A2/zh active Application Filing
- 2011-05-20 EP EP11768473A patent/EP2434402A4/en not_active Ceased
- 2011-05-20 CN CN2011800005531A patent/CN102203737B/zh active Active
- 2011-12-28 US US13/339,230 patent/US8880813B2/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101563674A (zh) * | 2006-12-21 | 2009-10-21 | 国际商业机器公司 | 对来自多处理器系统上的多线程程序的存储器访问进行管理的方法和系统 |
CN101464900A (zh) * | 2009-01-15 | 2009-06-24 | 上海交通大学 | Ntfs文件系统下轻量级文件隐藏方法 |
Also Published As
Publication number | Publication date |
---|---|
US20120297149A1 (en) | 2012-11-22 |
WO2011127862A3 (zh) | 2012-04-26 |
WO2011127862A2 (zh) | 2011-10-20 |
CN102203737A (zh) | 2011-09-28 |
EP2434402A4 (en) | 2012-08-01 |
EP2434402A2 (en) | 2012-03-28 |
US8880813B2 (en) | 2014-11-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10552337B2 (en) | Memory management and device | |
CN102819497B (zh) | 一种内存分配方法、装置及系统 | |
US8095772B2 (en) | Large memory pages for shared libraries | |
CN102436420B (zh) | 使用辅助存储器的低ram空间、高吞吐量的持久键值存储 | |
JP5571691B2 (ja) | 記憶装置におけるマッピングアドレステーブルの維持 | |
KR102137761B1 (ko) | 이종 통합 메모리부 및 그것의 확장 통합 메모리 스페이스 관리 방법 | |
CN102541983B (zh) | 一种分布式文件系统中多客户端缓存同步的方法 | |
CN101387987B (zh) | 存储器装置、存储器控制方法和程序 | |
CN102073533B (zh) | 支持动态二进制翻译的多核体系结构 | |
CN102203737B (zh) | 多线程访问多副本的方法和装置 | |
EP3267308B1 (en) | Application loading method and device | |
CN104216837A (zh) | 一种内存系统、内存访问请求的处理方法和计算机系统 | |
CN104111897A (zh) | 一种数据处理方法、装置及计算机系统 | |
EP3033680B1 (en) | Memory migration in presence of live memory traffic | |
US20110161298A1 (en) | System and method for opportunistic re-imaging using cannibalistic storage techniques on sparse storage devices | |
CN101872306B (zh) | 一种实现软件更新和软件备份的嵌入式系统及其实现方法 | |
US8510533B2 (en) | Method of managing data on a non-volatile memory | |
CN102024051B (zh) | 分布式内存数据库数据更新方法 | |
CN109062823A (zh) | 使用大页内存提升基于申威架构的设备性能的方法及装置 | |
US20190324868A1 (en) | Backup portion of persistent memory | |
CN102023845B (zh) | 一种基于状态机的Cache并发访问管理方法 | |
US9535796B2 (en) | Method, apparatus and computer for data operation | |
US10083135B2 (en) | Cooperative overlay | |
CN106775501A (zh) | 基于非易失内存设备的数据去冗余方法及系统 | |
EP1622034B1 (en) | Apparatus and method for controlling address conversion buffer |
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 |