CN101563674A - 对来自多处理器系统上的多线程程序的存储器访问进行管理的方法和系统 - Google Patents
对来自多处理器系统上的多线程程序的存储器访问进行管理的方法和系统 Download PDFInfo
- Publication number
- CN101563674A CN101563674A CNA2007800471525A CN200780047152A CN101563674A CN 101563674 A CN101563674 A CN 101563674A CN A2007800471525 A CNA2007800471525 A CN A2007800471525A CN 200780047152 A CN200780047152 A CN 200780047152A CN 101563674 A CN101563674 A CN 101563674A
- Authority
- CN
- China
- Prior art keywords
- page
- thread
- write
- storer
- page table
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
提供了一种用于控制由多处理器计算机上执行的进程所创建的线程对存储器的访问的方法、计算机程序和系统。为每个新的线程分配页表结构,并且从已有线程复制该分配页表结构。通过存在位和可写位来控制页面访问。当页面错误时,向一个线程提供访问权。内核处理新页面条目创建进程并且将页面存在位设置为零,从而创建页面错误。在第二实施方式中,创建两页表结构,一个页表结构用于一个有权访问地址空间的线程,另一个页表结构由无权访问地址空间的所有其他线程所共享。
Description
技术领域
本发明总体上涉及在多处理器系统上执行的多线程应用程序之间的共享存储器访问;更具体地,本发明涉及使共享存储器访问成为确定性事件,以用于例如促进虚拟化的多线程应用的复制。
背景技术
对线程之间的共享存储器访问进行虚拟化的一种安全而简单的方式是:登记对存储器的每个访问以及在复制机器中重放(replay)这些访问。这在性能方面尤其低效。
因此,需要使多线程程序的共享存储器访问具有确定性,例如以便能够通过简单地在复制机器上重新执行应用程序的代码而在备份机器上对在主机器上虚拟化的应用进行复制。
一个主要的用途可能是在容错系统中。在容错系统中,应用运行在主机器上,并且其执行被完全复制在第二机器上(以便在主机器失效时进行恢复)。通过记录和重放产生非确定性结果的事件或者重新执行用于复制产生确定性结果的事件的代码来实现复制。使得多线程程序进行的共享存储器访问具有确定性的另一种用途是调试虚拟化程序,该调试通过将代码(此情况下在同一机器上)重新执行所需的次数来进行。
进程针对可写共享存储器区域的交替执行是一种潜在的非确定性资源。为了能够使得共享存储器访问具有确定性,需要记录并发进程访问共享存储器的顺序。在单处理器机器的情况下,可以仅仅通过每个调度周期登记一条记录来优化记录操作。代替登记对共享存储器区域的每个访问,如果记录指定进程标识符,连同在调度周期内所访问的第一条指令的位置以及在该调度周期结束以前该进程所执行的用户指令的数目,则在访问共享存储器区域的每个调度周期登记一条记录是足够的。因此,对于一个调度周期,共享存储器访问已变为确定性事件。为了在备份机器中重现此事件,恢复调度周期的记录以及重新执行此周期的代码就已足够。
为了将此优化法扩展至多处理器机器,需要将单处理器互斥属性强制为对共享存储器区域的串行访问。转让给国际商业机器公司的法国专利申请WO2006/077261描述了如何实现多处理器系统上的多进程应用的确定性重放。其中描述了共享存储器访问控制机制;该机制使用处理器的存储器管理单元(MMU)。对访问共享存储器的控制是通过对一个处理器的MMU(存储器管理单元)硬件设备进行编程以允许授权访问存储器页面来实现的,其他处理器的MMU被编程为拒绝对同一页面的任何访问。
在调度周期内,在多处理器机器上,给予每个单独的进程对共享存储器的排他性访问权。利用进程的页表在每个调度周期内将访问权选择性地授予单个进程。然而,在多线程程序的情况下,参与的进程共享它们的地址空间;通过利用共享页表来应用单处理器解决方案会影响整个线程组。进一步地,与单处理器环境中的进程相比,整个地址空间会在线程之间共享,并且为了监视和控制这些地址,必须跟踪对共享地址空间的可写部分的任何访问。这意味着,即使存储器页面是共享的,每个任务也可以具有其自己的私有存储器描述符集合。对于多线程程序却不是这种情况,在多线程程序中,所有的存储器描述符是共享的。此专利申请建议:为了跟踪创建不止一个线程的一个任务的共享存储器访问,页表条目的结构需要扩展为在每个任务内克隆的每个线程,其中每个任务按照本发明所描述地进行监视。该发明的原理可以应用到每个任务或者一个任务内的每个线程,对共享存储器页面的访问在调度器所定义的激活周期的整个持续时间内是排他的。在此周期期间,共享存储器页面保持一致。
因此,需要扩展内核的虚拟存储器管理模块以使得现有技术的共享存储器访问串行化机制能够应用于完全共享其整个存储器空间的多线程程序(而不是只共享其存储器空间的子集的进程)。
美国专利号6854108描述了一种用于确定性地重放在多处理器上的分布式多线程程序的可观察运行时间行为的方法。该方法依赖于对JVM中锁定例程的使用。此方案意味着改动JVM并且受限于运行在JVM顶层的纯Java应用,还受限于所有存储器访问必须由JVM将进行的锁定来保护的事实。
需要提供一种应用于多处理器计算机上的多线程进程的共享存储器访问控制,该共享存储器访问控制是通用的并且可透明地应用于任何类型的应用。
发明内容
因此,本发明的一个目的是使得多线程程序的共享存储器访问可监视且可控制,以便串行化这些访问并将其变成确定性事件。
本发明的另一目的是提供一种透明地实施于应用的方法。
本发明的又一目的是使用已有方法来管理对多处理器环境中的共享资源的访问,该方法以更有效的方式为任何任务或线程提供了排他性访问。
如权利要求1中所要求的,这些目的通过一种用于控制由多处理器计算机上执行的进程所创建的线程对存储器的访问的方法来实现,所述方法包括:
-进程请求创建新线程;
-在存储器描述符中分配新页表目录,以及创建已有线程的页表的副本;
-等待事件;
-当发生页面错误时,对指示页面存在于存储器中并且可写的两个位进行测试;
-如果页面存在并且可写,并且如果测试到线程将要退出,则
-授权导致页面错误的线程访问页面,以及设置指示页面存在于存储器中并且可写的位;
-执行等待事件的步骤;
-如果页面存在并且可写,如果另一线程具有对该页面的访问权并且等待其他线程释放该页面,则等待其他线程释放;
-当线程已经释放访问权时,
-授权导致页面错误的所述线程访问所述页面,以及设置指示页面存在于存储器中并且可写的位;
-执行等待事件的步骤。
根据权利要求2,上述目的还可以如此实现,权利要求1的方法还包括:
-在对指示所述页面存在于存储器中并且可写的两个位进行测试的步骤之后,如果页面不存在或者不可写,则让内核来处理所述页面错误;
-通过测试相应的位来测试所述新页面在由内核进程创建之后是否可写;
-如果所述新页面可写,则重置所述新页面的存在位;
-将所述内核创建的页表条目传播到所有线程的其他页表;
-执行等待事件的步骤。
这些目的也可以通过针对优选实施方式的解决方案的权利要求3-4的方法来实现,以及针对第二实施方式的两页表结构的权利要求5-7的方法来实现。
这些目的也可以通过根据权利要求8的计算机程序和根据权利要求9的系统来实现。
本发明的解决方案允许针对在多处理器系统上执行的每个多线程应用管理引用共享存储器页面的独立的存储器描述符。
使得多线程程序的共享存储器访问可监视和可控制,除了获得本发明的主要目的之外,还具有其他优势如下:
-性能:当粒度变化时,共享存储器访问控制可以改善应用性能(时间:从指令持续时间到调度周期持续时间,空间:从4字节的字到4K字节的页面),因为其减少了共享对象的竞争比率。
-根据本发明第三目的所描述的解决方案非常有效,足以优化处理器中已有硬件功能的使用。如在优选实施方式的详细描述中所提到的,本发明的解决方案不仅通过避免处理器中的硬件改动而且通过避免操作系统的内核中的某些重大软件变化,限制了对已有计算机的重大改动。
-非虚拟化任务不受改动的影响。原始的存储器管理系统保持用于非虚拟化任务。对于可能具有不可预知结果的所有任务,其他解决方案可能使所述改动全局化。此解决方案则可以选择性地实施。例如,对于所有任务来说,额外使用存储器可能是不可接受的。同样,某些任务可能不支持粒度变化:正常的访问控制(硬件准许的)是针对一条指令以及存储器中一个存储器字的大小,即使没有观察或控制其的空间。不利影响的一个例子是乒乓效应,在此效应中,两个任务交替访问共享页面:本发明的解决方案阻止了此情况的出现,因为利用时间片来分配排他性存储器字,下一任务必须等待大约数千条指令。对此存在一种解决方案:修改应用以允许通过特定指令明确释放页面。
附图说明
图1示出了未实施本发明时多线程应用中的存储器描述符的结构;
图2示出了根据本发明的优选实施方式的每个任务一个表的存储器描述符的结构;
图3示出了根据第二实施方式的存储器描述符的简化结构;
图4是根据优选实施方式的方法的流程图;
图5是根据第二实施方式的方法的流程图。
具体实施方式
在非多线程应用中,为了有效地重现共享存储器访问的顺序,在调度周期内对单独的进程给予对共享存储器的排他性访问权。利用进程的页表在每个调度周期内选择性地授予单个进程访问权。然而,在多线程程序的情况下,参与的进程共享它们的地址空间,利用共享页表会影响整个线程组。进一步地,与非多线程应用中的进程相比,整个地址空间会在线程之间共享,并且为了监视和控制这些地址,必须跟踪对共享地址空间的可写部分的任何访问。继而,在容错系统中用于复制多线程程序对共享地址空间访问的访问信息被登记,并且将会用于通过在备份机器中重新执行程序代码来重放这些访问。
为了跟踪进程访问共享存储器区域的顺序,通过改变跟踪访问的空间和时间粒度,涌现了各种设计选择。空间粒度可以从单个存储器位置改变至页面、整个地址空间,而时间粒度可以从单条指令访问共享区域改变至整个调度周期。通过在指令级别粒度跟踪对单个存储器位置的访问,可以准确地重现主机器上的应用的执行。然而,这么做既不是所希望的也不可行。
内核线程的传统实现为整个线程组提供了单页表。为了跟踪存储器访问的顺序,可以采用以下技术。修改共享页表以拒绝对地址空间的所有可写部分的访问。这么做会迫使任何线程尝试访问此区域从而导致页面错误。在页面错误处理机中,登记该访问,并且在临时激活对该存储器位置的访问权的情况下重新执行当前指令。这确保登记了每个线程对共享存储器的每个访问。然而,此方法也强加了由于拦截每个存储器访问而导致的高开销。
为了提高前述方法的效率,可以将粒度从指令级别的粒度改变到调度周期的粒度。这要求在调度周期期间的访问互斥性,并且通过维持同步的页表集合,线程组中每个线程一个表,有可能选择性地给予单独的进程整个调度周期的访问权。当调度线程运行时,相应的页表加载到MMU上下文中。
用于每个线程组的页表集合必须完全同步。只允许在跨集合中的两个页表的相应条目之间的存在标记有所差别。无论何时修改任一页表的条目,此变化必须传播到其余页表。很多内核子系统(例如aio、swap等)修改页表,并且在每个实例中,此修改必须传播到该组中的每个页表。
存储器粒度是要考虑的另一维度。字节(或者存储器字)级别粒度将提供用于跟踪共享存储器访问的顺序所需的串行化的最佳程度。如果存储器的单位是页面,则将会拒绝竞争的进程对整个页面的访问,而不是仅仅拒绝对竞争位置的访问。当同一页面中放置了对多个资源的锁时,这尤其将是个问题。串行化对页面的访问将会串行化对整个资源集合的访问。尽管希望字级别的粒度,但是其取决于底层架构所使用的存储器的单位。典型的MMU架构为了最优化页表大小,以页面级别粒度来管理存储器。
对于另一极端,如果使用地址空间级别粒度,在调度周期期间提供排他性访问所需的页表的数目可以压缩为2个,而不管线程组中线程的数目。为了向一个线程提供对可写地址空间的排他性访问,该线程的页表中的相应条目会被标记为存在,而其余页表中的可写条目会被标记为不存在。由于已被拒绝访问地址空间的线程的页表是一样的,因此可以使用一个页表(称为反页表)。事实上,反页表的实际条目是不相关的,因为它们从没有在页面转换中使用。反页表仅用于当从被拒绝访问的线程的上下文进行存储器访问时,强制出错。当线程应当被拒绝访问地址空间时,其页表被切换到反页表,反之亦然。
以下描述针对Linux内核上下文中的线程的共享存储器排他性访问机制的实现以及Linux分页模型。尽管此描述使用Linux特定的术语,但是本方法非常通用,足以应用于其他操作系统和架构。
为了提供对共享存储器的排他性访问,将本发明应用于现有技术的专利申请,实施应当提供无缝授予单个进程访问权以及在任何其他线程尝试访问该区域时引起错误的能力。为此目的,使用在大部分现代架构中可用的分页机制。“page_present(页面_存在)”位指示在物理存储器中是否分配了特定页面,当向另一进程指派对页面的排他性访问时,该位会被人工重置以触发页面错误。这么做可能潜在地干扰常规分页机制。通过增加页面的使用计数器来捕获页面上的锁,避免了上述情况,使得内核交换器永远不会交换该页面。
图1示出了未实施本发明时多线程应用中的存储器描述符的结构。其示出了页表如何被常规线程共享的示意图。在图1中,示出了在包括虚拟存储器管理的大部分操作系统中可以找到的页表层级的一个例子。存储器描述符(110)由需要访问存储器的进程的所有线程(100)访问。存储器描述符是页表层级的最高级别。存储器描述符包括指向作为树根的页面全局目录PGD(130)的指针(120)。PGD指向页面中间目录(PMD)(140),该页面中间目录对页面条目(150)的列表编制索引,页面条目是指向物理存储器中的页帧(160,165)的指针。PGD、PMD和PTE形成了页表结构(170),其允许线程访问它们的公共地址空间的页面。如所描述的,三个线程(100)通过页表结构(170)访问(155,157)相同的页帧(160和165)。
图2示出了根据本发明优选实施方式的存储器描述符的结构,其中每个任务一个表。
在将本发明应用于现有技术的专利申请所包括的第一方法中,为每个线程复制PTE从而为每个单个线程保证排他性访问就足够了。这是这样实现的:对于给定的页表条目,选择性启用相应页表中的存在标记。不过由于地址转换是硬线连接到CPU的MMU中,因此需要复制整个页表层级。事实上,可以在存储器描述符(200)的更高级别来进行隔离(segregation),其包括页表层级和与进程地址空间有关的其他参数。在此方法中,将为每个线程提供单独的存储器描述符。也有可能使用fork(分叉)系统调用的实现,该fork系统调用利用Linux创建新的进程并且复制页表。使用fork意味着实施困难的同步。存储器描述符是广泛应用的、架构独立的数据结构,改变其用于线程的语义要求大量的内核修改。此外,需要集中的锁来同步跨越线程组中不同存储器描述符的页表,这使实现进一步复杂化。
如图2所示,在优选实施方式中,为组中的每个线程指派私有页表(210)。在线程组共享的存储器描述符200中维护这些私有页表的哈希表,通过线程id对其进行索引。进一步地,指向页面目录的指针(220)位于相应线程的进程描述符中,从而可以在上下文切换操作期间快速访问页面目录。当在内核的虚拟存储器管理子系统中操作时,在只有进程的存储器描述符可用的情况下,使用哈希表来获取特定线程的页面目录。一旦每个线程有其自己的私有页表(210),则按照与根据现有技术的专利申请解决方案、针对常规进程的共享存储器访问控制的情况下完全相同的方式,来控制对存储器可写区域的访问。在线程的情况下,地址空间中的每个页面是共享的,而在进程的情况下,共享的页面明确地标记为共享。使用结合图5所描述的进程,两个线程(线程1和线程2)被授予(255,257)对存储器的某些访问,而对于所有线程拒绝其他访问(263,265,267,269)。
一旦每个线程有其自己的私有页表(210),则按如下方式来授予组中的一个线程对存储器可写部分的访问,即针对授权线程设置所访问页面的PTE中的page_present位,以及重置所有其他线程的位,使得当其他线程尝试访问该页面时将会产生页面错误。
图3示出了在给予一个线程对整个地址空间的访问权时这一多线程应用的特定情况下的存储器描述符的简化结构。本发明的此第二实施方式采用本文上面描述的地址空间级别粒度。在此情况下,在调度周期期间提供排他性访问所需的页表的数目可以压缩为2个。每个线程组将具有与其相关联的一对页表,正页表(370)和反页表(375)。正页表(370)用于地址转换,并且被指派给授权在调度周期内访问地址空间的线程(图3中的线程1)。将反页表(375)指派给被拒绝在此调度周期内访问的其余线程(线程2和线程3)。所示页表结构包括由线程组共享的唯一的存储器描述符(300)。存储器描述符包含指向各个页表(370和375)的两个页面目录(330,335)。每个页表结构包括一个页面中间目录(340,345),每个页面中间目录对条目(350,355)的列表编制索引。在图3中,如结合图6所描述的那样使用进程,向线程1授予(365,367)访问两个页帧(160,165)的访问权;对于组内的其他线程(线程2和线程3),拒绝访问那两个页帧(160,165)的访问权。
图4是根据优选实施方式的用于从线程组的线程访问存储器的方法流程图。
将私有页表创建为克隆系统调用的一部分。如果虚拟化进程没有调用设置了VM_CLONE标记的克隆系统调用,则不使用用于线程的访问控制系统,并且不执行当前的方法。当虚拟化进程调用设置了VM_CLONE标记的调用克隆系统调用时,修改已有copy_mm函数以分配新的页面目录,从而为正在创建的线程保持私有页表,并将其添加到哈希表中。继而调用新的函数rr_dup_vmas来有系统地复制整个页表层级。在称为dup_vmas的已有函数被fork调用之后,对此函数进行建模以创建用于新创建的子进程的新的页表。这两个函数之间的关键差别在于:在rr_dup_vmas的情况下,所有页表条目无一例外地被复制,而dup_vmas跳过设置了称为VM_DONT_COPY的已有标记被置位的页面。进一步地,dup_vmas函数对于父(进程)和子(进程)二者都将把地址空间的可写部分标记成只读,以实现写入时复制,而rr_dup_vmas使得所有可写条目缺失。组内的线程所使用的页表集合保持同步,以便维持线程的存储器共享语义。对任一页表的任何修改被传播到其余部分,从而这些变化反映在其他对等进程的上下文中。
针对线程的共享存储器访问控制的实现需要解决在进程情况下不存在的特定问题。内核经常直接访问进程的地址空间。例如,当用户级线程或进程将存储器缓存传递给读取系统调用时,内核的文件系统组件直接写到由用户空间程序提供的缓存中。这种对共享存储器的访问通常由访问控制机制来仲裁。然而,在线程的情况下,当线程将要退出时,内核直接将线程标识符的值写到进程地址空间中用户提供的存储器指针。通过检查进程描述符中称为PF_EXITING的已有标记来检测这种访问,如果标记被置位,则将特定访问从常规访问控制中排除,并且给予内核无条件访问。
一般说来,当相应的线程退出时,每个线程的页表或者是通过显式地调用退出系统调用来释放,或者在被内核杀死时隐式地释放。特别地,当进程中的一个线程调用exec系统调用时,其解映射进程的当前地址空间,并且创建和杀死进程中除了已经调用exec系统调用的线程之外的所有其他线程。修改内核的线程退出操作以释放页面目录以及与退出线程相关联的页表层级。在exec系统调用末尾,只留下一个具有新的页表集合的进程。此进程随后创建的任何线程将继承其页表的副本,并且再次强制排他性访问控制。
在图4的流程图中,示出了相应的步骤:
-利用VM_CLONE请求创建新线程(405);
-在存储器描述符中分配新页表目录,并创建已有线程的页表的副本(410);
-等待事件(420);
-当发生页面错误时(430),对指示页面存在于存储器中并且可写的两个位进行测试(435);
-如果页面存在并且可写(测试435为是),并且如果测试到线程将要退出(测试到Linux PF位455:是),则
-授权导致页面错误的线程访问该页面(465),并设置指示页面存在于存储器中并且可写的位;
-执行等待事件的步骤(420);
-如果页面存在并且可写,如果另一线程具有对该页面的访问权并且等待(470)其他线程释放该页面(460),则等待其他线程释放;
-当线程已经释放访问权时,
-授予导致页面错误的线程对该页面的访问权,并设置指示页面存在于存储器中并且可写的位;
-执行等待事件的步骤。
-在对指示页面存在于存储器中并且可写的两个位进行测试的步骤(435)之后,如果页面不存在或者不可写,则让内核处理所述页面错误(440);
-通过测试相应的位来测试(445)新页面在由内核进程创建之后是否可写;
-如果该新页面可写,则重置新页面的存在位(450);
-将内核创建的页表条目传播(425)到所有线程的其他页表;
-执行等待事件的步骤(420)。
在等待事件的步骤之后:
-当调度线程时(475),将存储器的硬件上下文切换(480)到将要被调度的线程的页表;
-执行等待事件的步骤(420)。
在等待事件的步骤之后还包括:
-当线程退出时(485),释放(490)用于该线程的页面目录;
-结束用于该线程的存储器访问控制。
图5是根据两页表实施方式的用于从线程组的线程访问存储器的方法流程图。
反页表是正页表的复本,通过重置存在标志来禁用其地址空间的所有可写部分。当反页表分出第二线程并且线程计数超过1时,其首先由组内的第一线程创建。父线程和子线程二者初始地都被指派了反页表。随后创建的线程在其创建时被指派反页表。在从分叉返回之前,父(线程)的硬件上下文被切换为使用反页表。当调度子(线程)首次运行时,上下文切换例程可以指派反页表。
当组内任一线程尝试访问地址空间的可写部分时,生成页面错误中断。页面错误中断是处理器提供的中断,其用于帮助内核实现诸如请求分页和写入时复制的便利。提供此中断的中断处理机通过检查正页表中相应条目的存在和写标记,将作为内核正常功能一部分的页面错误中断与由于访问控制导致的错误区分开。如果页面存在并且可写,则错误一定是由于访问控制导致的,若另一线程已不再持有访问权,则给予线程对地址空间的访问权。如果页面不存在或者如果是对只读页面的写访问,则页面错误是真的,其将通过内核提供的常规渠道来处理。如果页面在正页表和反页表二者中都不存在,则在仲裁对地址空间的访问权之前,首先将页面错误作为正常页面错误来处理。
在任何给定时间,线程组中只有一个线程有权访问地址空间。持有访问权的线程的线程标识符(tid)存储在存储器描述符中,由锁来保护。当线程在调度周期中首次尝试访问共享存储器并且共享存储器未被任何其他进程占据时,将该线程的tid存储在存储器描述符中,并且改变任务的硬件上下文以反映新页表,而旧页表的TLB条目是无效的。有可能对任务进行调度,使其在不同于发生页面错误的处理器的处理器上运行。不过这不会导致问题,因为在从页面错误处理机返回之前加载了新页表。
如果不能立即授予访问权,则调度其他任务运行。当地址空间由所有者线程释放时,等待的线程最终会得到访问权。当暂停任务时或者当任务调用退出时,通过移除其存储在存储器描述符中的tid来释放访问权。
在图5的流程图中,示出了相应的步骤:
利用此第二实施方式,在存储器描述符中分配(410)新页表目录,并创建作为已有线程的页表的副本的新页面目录的步骤仅在其是第一线程时才执行;并且,还包括:
-重置已经设置了可读位的所有页面的页面存在标记。
将存储器的硬件上下文切换(480)到将要被调度的线程的页表的步骤由以下步骤(500)代替:
-如果线程有权访问地址空间,则将存储器的硬件上下文切换到已有页表(正PGD);
-如果线程没有权利访问地址空间,则将存储器的硬件上下文切换到新创建的页面目录(反PGD)。
当线程退出时释放(490)页面目录的步骤由以下步骤(510)代替:
-当进程中仅剩下一个其他线程时,释放新创建的页面目录。
优选实施方式的解决方案的缺点在于:有可能增加存储器管理的复杂性,因为页表是针对每个线程而实例化的。在一个线程中映射的改变必须传播到组内的其他线程。利用两页表的实现,访问控制的实现变得更加简单。
Claims (9)
1.一种用于控制由多处理器计算机上执行的进程所创建的线程对存储器的访问的方法,所述方法包括:
-所述进程请求创建新线程;
-在存储器描述符中分配新页表目录,并创建已有线程的页表的副本;
-等待事件;
-当发生页面错误时,对指示所述页面存在于存储器中并且可写的两个位进行测试;
-如果所述页面存在并且可写,并且如果测试到所述线程将要退出,则
-授予导致所述页面错误的所述线程对所述页面的访问权,并且设置指示所述页面存在于存储器中并且可写的位;
-进行所述等待事件的步骤;
-如果所述页面存在并且可写,如果其他线程拥有对所述页面的访问权并且等待所述其他线程释放所述页面,则等待所述其他线程释放;
-当所述线程已经释放访问权时,
-授予导致所述页面错误的所述线程对所述页面的访问权,并且设置指示所述页面存在于存储器中并且可写的位;
-执行所述等待事件的步骤。
2.如权利要求1的方法,还包括:
-在对指示所述页面存在于存储器中并且可写的两个位进行测试的步骤之后,如果所述页面不存在或者不可写,则让内核来处理所述页面错误;
-通过测试相应的位,来测试所述新页面在由内核进程创建之后是否可写;
-如果所述新页面可写,则重置所述新页面的存在位;
-将所述内核创建的所述页表条目传播到所有线程的其他页表;
-执行所述等待事件的步骤。
3.如权利要求1或2的方法,在所述等待事件的步骤之后还包括:
-在调度线程时,将存储器的硬件上下文切换到将要被调度的所述线程的页表;
-执行所述等待事件的步骤。
4.如权利要求1或2的方法,在所述等待事件的步骤之后还包括:
-当线程退出时,释放用于所述线程的页面目录;
-结束用于所述线程的存储器访问控制。
5.如权利要求1-4中任一的方法,其中在存储器描述符中分配新页表目录并创建作为已有线程的页表的副本的新页面目录的步骤仅在其是第一线程时才执行;并且,还包括:
-重置已经设置了可读位的所有页面的页面存在标记。
6.如权利要求5的方法,其中将存储器的硬件上下文切换到将要被调度的线程的页表的步骤由以下步骤代替:
-如果所述线程有权访问地址空间,则将存储器的硬件上下文切换到已有页表;
-如果所述线程无权访问地址空间,则将存储器的硬件上下文切换到新创建的页面目录。
7.如权利要求5或6的方法,其中当线程退出时释放所述页面目录的步骤由以下步骤代替:
-当所述进程中仅剩下一个其他线程时,释放所述新创建的页面目录。
8.一种包括程序代码指令的计算机程序产品,当所述程序在计算机上执行时,所述指令用于执行根据权利要求1-7中任一方法的步骤。
9.一种系统,包括适合于执行根据权利要求1-7中任一方法的装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP06301287.6 | 2006-12-21 | ||
EP06301287A EP1936498A1 (en) | 2006-12-21 | 2006-12-21 | A method and system to manage memory accesses from multithread programs on multiprocessor systems |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101563674A true CN101563674A (zh) | 2009-10-21 |
Family
ID=38436963
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2007800471525A Pending CN101563674A (zh) | 2006-12-21 | 2007-06-15 | 对来自多处理器系统上的多线程程序的存储器访问进行管理的方法和系统 |
Country Status (6)
Country | Link |
---|---|
EP (1) | EP1936498A1 (zh) |
JP (1) | JP5137966B2 (zh) |
KR (1) | KR101063604B1 (zh) |
CN (1) | CN101563674A (zh) |
CA (1) | CA2672481A1 (zh) |
WO (1) | WO2008074520A1 (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102203737A (zh) * | 2011-05-20 | 2011-09-28 | 华为技术有限公司 | 多线程访问多副本的方法和装置 |
CN101840312B (zh) * | 2009-12-31 | 2012-01-11 | 创新科存储技术有限公司 | 一种用于多核处理器的raid5写数据方法及装置 |
CN106033368A (zh) * | 2015-03-09 | 2016-10-19 | 北京大学 | 一种多核虚拟机确定性重演的方法 |
CN106104502A (zh) * | 2014-03-20 | 2016-11-09 | 慧与发展有限责任合伙企业 | 存储系统事务 |
CN107346253A (zh) * | 2016-05-06 | 2017-11-14 | 中兴通讯股份有限公司 | 应用同步方法及装置 |
CN111045476A (zh) * | 2019-12-18 | 2020-04-21 | 湖南国科微电子股份有限公司 | 多核cpu系统下时序波形控制方法、系统、设备及介质 |
CN111563066A (zh) * | 2020-04-24 | 2020-08-21 | 深圳震有科技股份有限公司 | 基于文件锁实现应用程序单例处理方法、装置 |
CN116431315A (zh) * | 2023-06-07 | 2023-07-14 | 成都登临科技有限公司 | 批处理任务的处理方法、装置、电子设备及存储介质 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101604259B (zh) * | 2009-06-10 | 2011-12-21 | 深圳市共进电子有限公司 | 一种基于嵌入式系统的多进程同步调度的方法 |
KR101252188B1 (ko) * | 2011-05-31 | 2013-04-05 | 주식회사 잉카인터넷 | 가상 메모리 데이터 접근 제어방법 |
US9652289B2 (en) * | 2012-04-27 | 2017-05-16 | Microsoft Technology Licensing, Llc | Systems and methods for S-list partitioning |
KR102377726B1 (ko) * | 2015-04-17 | 2022-03-24 | 한국전자통신연구원 | 분산 파일 시스템에서의 파일 복제 제어 장치 및 방법 |
CN116737086B (zh) * | 2023-08-14 | 2023-11-17 | 江苏云途半导体有限公司 | 一种嵌入式非易失性存储器读写方法 |
CN118152153B (zh) * | 2024-05-09 | 2024-07-16 | 北京麟卓信息科技有限公司 | 基于合并访存的片上共享存储器访存事务大小测算方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5175837A (en) * | 1989-02-03 | 1992-12-29 | Digital Equipment Corporation | Synchronizing and processing of memory access operations in multiprocessor systems using a directory of lock bits |
FR2881239B1 (fr) * | 2005-01-24 | 2007-03-23 | Meiosys Soc Par Actions Simpli | Procede de gestion d'acces a des ressources partagees dans un environnement multi-processeurs |
-
2006
- 2006-12-21 EP EP06301287A patent/EP1936498A1/en not_active Withdrawn
-
2007
- 2007-06-15 WO PCT/EP2007/055977 patent/WO2008074520A1/en active Application Filing
- 2007-06-15 CA CA002672481A patent/CA2672481A1/en not_active Abandoned
- 2007-06-15 JP JP2009541925A patent/JP5137966B2/ja not_active Expired - Fee Related
- 2007-06-15 CN CNA2007800471525A patent/CN101563674A/zh active Pending
- 2007-06-15 KR KR1020097010498A patent/KR101063604B1/ko not_active IP Right Cessation
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101840312B (zh) * | 2009-12-31 | 2012-01-11 | 创新科存储技术有限公司 | 一种用于多核处理器的raid5写数据方法及装置 |
CN102203737A (zh) * | 2011-05-20 | 2011-09-28 | 华为技术有限公司 | 多线程访问多副本的方法和装置 |
WO2011127862A3 (zh) * | 2011-05-20 | 2012-04-26 | 华为技术有限公司 | 多线程访问多副本的方法和装置 |
CN102203737B (zh) * | 2011-05-20 | 2013-09-11 | 华为技术有限公司 | 多线程访问多副本的方法和装置 |
US8880813B2 (en) | 2011-05-20 | 2014-11-04 | Huawei Technologies Co., Ltd. | Method and device for multithread to access multiple copies |
US10140194B2 (en) | 2014-03-20 | 2018-11-27 | Hewlett Packard Enterprise Development Lp | Storage system transactions |
CN106104502A (zh) * | 2014-03-20 | 2016-11-09 | 慧与发展有限责任合伙企业 | 存储系统事务 |
CN106104502B (zh) * | 2014-03-20 | 2019-03-22 | 慧与发展有限责任合伙企业 | 用于存储系统事务的系统、方法和介质 |
CN106033368A (zh) * | 2015-03-09 | 2016-10-19 | 北京大学 | 一种多核虚拟机确定性重演的方法 |
CN106033368B (zh) * | 2015-03-09 | 2019-02-22 | 北京大学 | 一种多核虚拟机确定性重演的方法 |
CN107346253A (zh) * | 2016-05-06 | 2017-11-14 | 中兴通讯股份有限公司 | 应用同步方法及装置 |
CN111045476A (zh) * | 2019-12-18 | 2020-04-21 | 湖南国科微电子股份有限公司 | 多核cpu系统下时序波形控制方法、系统、设备及介质 |
CN111045476B (zh) * | 2019-12-18 | 2021-07-27 | 湖南国科微电子股份有限公司 | 多核cpu系统下时序波形控制方法、系统、设备及介质 |
CN111563066A (zh) * | 2020-04-24 | 2020-08-21 | 深圳震有科技股份有限公司 | 基于文件锁实现应用程序单例处理方法、装置 |
CN111563066B (zh) * | 2020-04-24 | 2023-08-11 | 深圳震有科技股份有限公司 | 基于文件锁实现应用程序单例处理方法、装置 |
CN116431315A (zh) * | 2023-06-07 | 2023-07-14 | 成都登临科技有限公司 | 批处理任务的处理方法、装置、电子设备及存储介质 |
CN116431315B (zh) * | 2023-06-07 | 2023-08-29 | 成都登临科技有限公司 | 批处理任务的处理方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
KR101063604B1 (ko) | 2011-09-07 |
JP5137966B2 (ja) | 2013-02-06 |
KR20090084881A (ko) | 2009-08-05 |
EP1936498A1 (en) | 2008-06-25 |
CA2672481A1 (en) | 2008-06-26 |
JP2010514030A (ja) | 2010-04-30 |
WO2008074520A1 (en) | 2008-06-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101563674A (zh) | 对来自多处理器系统上的多线程程序的存储器访问进行管理的方法和系统 | |
JP4448784B2 (ja) | 並列計算機の同期方法及びプログラム | |
Joshi et al. | Efficient persist barriers for multicores | |
US8832415B2 (en) | Mapping virtual addresses to different physical addresses for value disambiguation for thread memory access requests | |
Bobba et al. | Tokentm: Efficient execution of large transactions with hardware transactional memory | |
JP5551269B2 (ja) | 無制限トランザクショナル・メモリ(utm)モードでのオペレーティング・システム(os)トランザクションの処理 | |
US5251308A (en) | Shared memory multiprocessor with data hiding and post-store | |
US8739163B2 (en) | Critical path deterministic execution of multithreaded applications in a transactional memory system | |
Chen et al. | Deterministic replay: A survey | |
US7523344B2 (en) | Method and apparatus for facilitating process migration | |
Muzahid et al. | SigRace: Signature-based data race detection | |
RU2501071C2 (ru) | Механизм запроса поздней блокировки для пропуска аппаратной блокировки (hle) | |
CN101833475B (zh) | 用于执行指令原子块的方法和装置 | |
CN101313285B (zh) | 高速缓存包含性的按组放宽 | |
US9164812B2 (en) | Method and system to manage memory accesses from multithread programs on multiprocessor systems | |
KR20090025295A (ko) | 가상 트랜잭션 메모리를 위한 글로벌 오버플로우 방법 | |
Itzkovitz et al. | Toward integration of data race detection in dsm systems | |
CN101452423A (zh) | 控制硬件加速器内数据值的清除 | |
CN102693188A (zh) | 用于在可控运行时环境中进行基于硬件的动态逸出检测的方法和装置 | |
Boroumand et al. | LazyPIM: Efficient support for cache coherence in processing-in-memory architectures | |
CN110633049A (zh) | 非易失性存储器感知的高速缓存策略 | |
Maass et al. | Ecotlb: Eventually consistent tlbs | |
EP0404560B1 (en) | multiprocessor system and method | |
Yui et al. | Nb-GCLOCK: A non-blocking buffer management based on the generalized CLOCK | |
Hwang et al. | Hyperdealer: Reference-pattern-aware instant memory balancing for consolidated virtual machines |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20091021 |