CN102141932A - 大临界区保护方法 - Google Patents
大临界区保护方法 Download PDFInfo
- Publication number
- CN102141932A CN102141932A CN 201010602558 CN201010602558A CN102141932A CN 102141932 A CN102141932 A CN 102141932A CN 201010602558 CN201010602558 CN 201010602558 CN 201010602558 A CN201010602558 A CN 201010602558A CN 102141932 A CN102141932 A CN 102141932A
- Authority
- CN
- China
- Prior art keywords
- lock
- critical section
- node
- application
- pointer
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 98
- 230000015572 biosynthetic process Effects 0.000 claims description 16
- 238000005755 formation reaction Methods 0.000 claims description 16
- 230000005059 dormancy Effects 0.000 claims description 13
- 238000012986 modification Methods 0.000 claims description 3
- 230000004048 modification Effects 0.000 claims description 3
- 230000002618 waking effect Effects 0.000 claims description 2
- 230000007246 mechanism Effects 0.000 description 32
- 238000012360 testing method Methods 0.000 description 13
- 238000010586 diagram Methods 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 3
- 230000007717 exclusion Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000007599 discharging Methods 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
Images
Landscapes
- Multi Processors (AREA)
Abstract
本发明公开了一种大临界区保护方法,包括步骤:S1:将要申请占用临界区的申请进程放入全局锁队列的队尾,全局锁队列的每个锁节点包括两个元素:申请进程的进程号和指向下一个申请进程的指针;S2:当占用临界区的当前进程释放锁时,若当前进程的后续锁节点不为空,则唤醒后续的锁节点代表的进程占用临界区,否则,修改全局锁队列的尾指针L。本发明实现了对大临界区的高效地保护,并且具有总线资源占用少、保证公平性、时间和空间开销小等优点。
Description
技术领域
本发明涉及计算机操作***技术领域,特别涉及一种大临界区保护方法。
背景技术
共享内存式多核计算机通过共享内存数据来进行进程间通信。为保证共享数据的一致性,必须对其进行互斥访问。所谓互斥是指多个进程要访问同一共享数据时,任何时刻最多只允许一个进程去访问,其它要访问该数据的进程必须等待,直到访问该数据的进程访问完毕为止。操作***中用于保证互斥的方法主要有自旋锁机制和信号量机制。
自旋锁机制的锁有两个状态:“锁定”和“解锁”。如果锁可用,则“锁定”位被设置,进程继续进入临界区;相反,如果锁被其他进程占用,则循环重复检查这个锁,直到锁可用为止。信号量机制用于互斥时和自旋锁机制的不同之处在于:如果当前进程不能访问临界区,则进程休眠直至临界区可访问时被唤醒。当循环重复检查的开销小于进程切换的开销时使用自旋锁机制对临界区进行保护,此时将该临界区称为小临界区;当循环重复检查的开销大于进程切换的开销时使用信号量机制对临界区进行保护,此时将该临界区称为大临界区。
为了提高操作***的性能,很多研究者对临界区保护机制进行研究。到目前已经有很多种锁机制对小临界区进行保护,并根据不同平台和不同需求对这些锁机制进行改进来提高操作***整体的性能。但对于大临界区保护的研究却很少,目前主要运用信号量机制进行大临界区的保护。
信号量机制在一个进程试图访问一个正在被访问的临界区时将其放入等待队列,并使其休眠。这时处理器可以去执行其它的进程。当持有信号量的进程将信号量释放后,在等待队列中位于队首的进程将被唤醒,从而便可以获得这个信号量并进入临界区。其中等待队列也是一个临界区,需要用自旋锁来实现互斥访问。这种信号量机制实现复杂,用自旋锁来实现对队列的互斥访问会额外占用总线资源,还会导致其它时间、空间上的开销,而且难以保证严格的公平性(即先来先服务)。
MCS队列锁(Mellor-Crummey和Scott发明的,所以被称为MCSQueue Lock)是一种针对小临界区保护的锁机制。这种锁机制具有总线资源占用少、保证公平性、时间和空间开销小等优点,但只适合对小临界区的保护。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是:如何实现在总线资源占用少、保证公平性、时间和空间开销小的情况下对大临界区进行高效地保护。
(二)技术方案
为解决上述技术问题,本发明一种大临界区保护方法,包括以下步骤:
S1:将要申请占用临界区的申请进程放入全局锁队列的队尾,全局锁队列的每个锁节点包括两个元素:申请进程的进程号和指向下一个申请进程的指针;
S2:当占用临界区的当前进程释放锁时,若当前进程的后续锁节点不为空,则唤醒后续的锁节点代表的进程占用临界区,否则,修改全局锁队列的尾指针L。
其中,所述步骤S1具体包括:
所述申请进程申请锁时,将临时指针P赋值为所述尾指针L,并使L赋值为申请进程的锁节点指针I;若P为空,则所述申请进程申请锁成功,否则,将I的进程号赋值为申请进程的进程号,把P的后继设为I,申请进程休眠,等待唤醒。
其中,所述步骤S2具体包括:
当占用临界区的进程释放锁时,如果该进程的锁节点指针K有后继,则直接唤醒后继锁节点代表的进程,释放锁成功,否则,判断L和K指向的锁节点是否相同,若二者相同,则将L赋值为空,直接返回,释放锁成功;若二者不同,则循环等待直到K的后继不为空,然后唤醒K的后继节点代表的进程,释放锁成功。
其中,所述步骤S1中采用fetch_and_store原子指令将全局锁队列尾指针指向当前进程锁节点;步骤S2中利用compare_and_swap原子指令判断L和K指向的锁节点是否相同。
其中,所述位于同一全局锁队列中的元素表示申请同一锁资源的锁节点,申请不同的锁资源位于不同的全局锁队列。
(三)有益效果
本发明通过将MCS队列锁和信号量机制相结合,提出了MCS休眠锁的设计,实现了对大临界区的高效地保护,并且具有总线资源占用少、保证公平性、时间和空间开销小等优点。
附图说明
图1是本发明实施例的一种大临界区保护方法中采用的全局锁队列结构示意图;
图2是本发明实施例的一种大临界区保护方法中申请临界区的流程图;
图3是本发明实施例的一种大临界区保护方法中是释放临界区的流程图;
图4是利用本发明方法进行实验时测试一的测试结果。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
本发明通过将MCS队列锁和信号量机制相结合,提出了MCS休眠锁的机制。该机制采用全局锁队列来管理大临界区的申请和释放。如图1所示为本发明所设计的全局锁队列结构图。每个锁节点都是MCSSleepingLockNode类型的结构,包括两个成员,一个是申请锁进程的进程号,另一个是MCSSleepingLockNode类型的指针,指向后继节点。L表示指向全局锁队列结构的尾指针。
如图2所示,为申请进程申请锁(即要申请占用大临界区)时的流程图,申请锁时,要同时提供全局锁队列尾指针和指向申请进程锁节点的指针。在申请进程申请锁时,将临时指针P赋值为尾指针L,采用fetch_and_store原子指令将全局锁队列尾指针L赋值为当前进程锁节点指针I。若P为空,则申请锁成功;否则,将I的进程号赋值为申请进程的进程号,把P的后继设为I,申请进程便放入了全局锁队列的队尾,申请进程进入休眠状态,只有当其它进程唤醒该进程时,申请锁才会成功。
如图3所示为本发明所提供的锁资源释放流程示意图。释放锁时,要同时提供全局锁队列尾指针和指向占用临界区的进程锁节点的指针;当占用临界区的进程释放锁时,如果该占用临界区的进程的锁节点指针K有后继,则直接唤醒后继锁节点代表的进程,释放锁成功;否则,利用compare_and_swap原子指令判断L和K指向的锁节点是否相同。若二者相同,则将L赋值为空,直接返回,释放锁成功;若二者不同(由于判断K的后继是否为空不是原子指令,因此在判断完K的后继为空之后、执行compare_and_swap之前的这个时刻,可能有其他进程在申请锁,导致K的后继不为空(L变成了K的后继),使得K和L不同,这时就不能直接将L赋值为空了。除了这种情况外,K和L是相同的),则循环等待直到K的后继不为空(即让其他申请进程将锁申请完毕),然后唤醒K的后继节点代表的进程,释放锁成功。
本发明基于这种锁机制进行改进,设计的新型的大临界区保护机制:MCS休眠锁,在清华大学计算机系操作***实验室自主开发的操作***上进行了实现和测试。通过测试,这种机制在性能方面要优于信号量机制。
临界区保护机制的性能体现在一个进程释放临界区到另一个进程获得临界区所需时间,时间开销越小说明该保护机制的性能越高。设计实验环境如下:在操作***中实现一个***调用syscall(),该***调用伪代码如表1所示。
表1测试***调用
其中read&output_CPU_time为运用rdtsc指令读取从开机开始计数的CPU指令周期数,N为要进入临界区的次数,lock()和unlock()在测试时分别用MCS休眠锁机制的acquire_lock()、release_lock()和信号量机制的semaphore_lock()、semaphore_unlock()替换。
测试一:创建两个要访问同一临界区的进程,分别设置N为不同的值(700~1500)分别运用MCS休眠锁机制和信号量机制对临界区进行保护并测试执行syscall()所需要的时间,时间用CPU周期数进行计量,测试结果如图4所示,从图4中可以看出,MCS休眠锁比信号量机制的时间开销小。
测试二:设置N值为1000,创建多个要访问同一临界区的进程(3~10个)分别运用MCS休眠锁和信号量机制对临界区进行保护并测试执行syscall()所需要的时间,测试结果如表2所示,时间用CPU周期数进行计量,从表2中可以看出,MCS休眠锁比信号量机制的时间开销小。
表2测试二结果(时间的单位是CPU的时钟周期数)
进程数 | 信号量 | MCS休眠锁 |
3 | 1253620549 | 1080681025 |
4 | 1702579925 | 1695254600 |
5 | 2143713087 | 1854351850 |
6 | 2557475337 | 2146517861 |
7 | 3641943512 | 3091227124 |
8 | 4157212974 | 3374336986 |
9 | 4774751049 | 4751896136 |
10 | 5877025649 | 5796621148 |
以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。
Claims (5)
1.一种大临界区保护方法,其特征在于,包括以下步骤:
S1:将要申请占用临界区的申请进程放入全局锁队列的队尾,全局锁队列的每个锁节点包括两个元素:申请进程的进程号和指向下一个申请进程的指针;
S2:当占用临界区的当前进程释放锁时,若当前进程的后续锁节点不为空,则唤醒后续的锁节点代表的进程占用临界区,否则,修改全局锁队列的尾指针L。
2.如权利要求1所述的大临界区保护方法,其特征在于,所述步骤S1具体包括:
所述申请进程申请锁时,将临时指针P赋值为所述尾指针L,并使L赋值为申请进程的锁节点指针I;若P为空,则所述申请进程申请锁成功,否则,将I的进程号赋值为申请进程的进程号,把P的后继设为I,申请进程休眠,等待唤醒。
3.如权利要求2所述的大临界区保护方法,其特征在于,所述步骤S2具体包括:
当占用临界区的进程释放锁时,如果该进程的锁节点指针K有后继,则直接唤醒后继锁节点代表的进程,释放锁成功,否则,判断L和K指向的锁节点是否相同,若二者相同,则将L赋值为空,直接返回,释放锁成功;若二者不同,则循环等待直到K的后继不为空,然后唤醒K的后继节点代表的进程,释放锁成功。
4.如权利要求3所述的大临界区保护方法,其特征在于,所述步骤S1中采用fetch_and_store原子指令将全局锁队列尾指针指向当前进程锁节点;步骤S2中利用compare_and_swap原子指令判断L和K指向的锁节点是否相同。
5.如权利要求1~4中任一项所述的大临界区保护方法,其特征在于,所述位于同一全局锁队列中的元素表示申请同一锁资源的锁节点,申请不同的锁资源位于不同的全局锁队列。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010106025589A CN102141932B (zh) | 2010-12-14 | 2010-12-14 | 大临界区保护方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010106025589A CN102141932B (zh) | 2010-12-14 | 2010-12-14 | 大临界区保护方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102141932A true CN102141932A (zh) | 2011-08-03 |
CN102141932B CN102141932B (zh) | 2012-11-14 |
Family
ID=44409471
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010106025589A Active CN102141932B (zh) | 2010-12-14 | 2010-12-14 | 大临界区保护方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102141932B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102662747A (zh) * | 2012-04-23 | 2012-09-12 | 深圳市融创天下科技股份有限公司 | 一种线程访问临界区的方法、***和终端设备 |
CN103731328B (zh) * | 2014-01-02 | 2016-09-07 | 烽火通信科技股份有限公司 | 基于Linux共享内存实现家庭网关数据通信的***及方法 |
CN110569131A (zh) * | 2019-08-22 | 2019-12-13 | 北京华捷艾米科技有限公司 | 一种信号量管理***及信号量管理方法 |
CN112306703A (zh) * | 2019-07-29 | 2021-02-02 | 华为技术有限公司 | 一种numa***中的临界区执行方法及装置 |
CN117539650A (zh) * | 2023-10-10 | 2024-02-09 | 本原数据(北京)信息技术有限公司 | 数据管理***的去中心化记录锁管理方法以及相关设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050289546A1 (en) * | 2004-06-28 | 2005-12-29 | Intel Corporation | Thread synchronization with lock inflation methods and apparatus for managed run-time environments |
US20060277551A1 (en) * | 2005-06-06 | 2006-12-07 | Accapadi Jos M | Administration of locks for critical sections of computer programs in a computer that supports a multiplicity of logical partitions |
WO2007078571A1 (en) * | 2005-12-16 | 2007-07-12 | Intel Corporation | Protecting shared variables in a software transactional memory system |
CN101253482A (zh) * | 2005-08-30 | 2008-08-27 | 英特尔公司 | 公平可缩放的读者写者互斥 |
CN101403979A (zh) * | 2008-10-27 | 2009-04-08 | 成都市华为赛门铁克科技有限公司 | 一种自旋锁的加锁方法及计算机*** |
CN101631328A (zh) * | 2009-08-14 | 2010-01-20 | 北京星网锐捷网络技术有限公司 | 一种对共享资源互斥访问的同步方法、装置和网络设备 |
-
2010
- 2010-12-14 CN CN2010106025589A patent/CN102141932B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050289546A1 (en) * | 2004-06-28 | 2005-12-29 | Intel Corporation | Thread synchronization with lock inflation methods and apparatus for managed run-time environments |
US20060277551A1 (en) * | 2005-06-06 | 2006-12-07 | Accapadi Jos M | Administration of locks for critical sections of computer programs in a computer that supports a multiplicity of logical partitions |
CN101253482A (zh) * | 2005-08-30 | 2008-08-27 | 英特尔公司 | 公平可缩放的读者写者互斥 |
WO2007078571A1 (en) * | 2005-12-16 | 2007-07-12 | Intel Corporation | Protecting shared variables in a software transactional memory system |
CN101403979A (zh) * | 2008-10-27 | 2009-04-08 | 成都市华为赛门铁克科技有限公司 | 一种自旋锁的加锁方法及计算机*** |
CN101631328A (zh) * | 2009-08-14 | 2010-01-20 | 北京星网锐捷网络技术有限公司 | 一种对共享资源互斥访问的同步方法、装置和网络设备 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102662747A (zh) * | 2012-04-23 | 2012-09-12 | 深圳市融创天下科技股份有限公司 | 一种线程访问临界区的方法、***和终端设备 |
CN103731328B (zh) * | 2014-01-02 | 2016-09-07 | 烽火通信科技股份有限公司 | 基于Linux共享内存实现家庭网关数据通信的***及方法 |
CN112306703A (zh) * | 2019-07-29 | 2021-02-02 | 华为技术有限公司 | 一种numa***中的临界区执行方法及装置 |
CN110569131A (zh) * | 2019-08-22 | 2019-12-13 | 北京华捷艾米科技有限公司 | 一种信号量管理***及信号量管理方法 |
CN110569131B (zh) * | 2019-08-22 | 2022-03-15 | 北京华捷艾米科技有限公司 | 一种信号量管理***及信号量管理方法 |
CN117539650A (zh) * | 2023-10-10 | 2024-02-09 | 本原数据(北京)信息技术有限公司 | 数据管理***的去中心化记录锁管理方法以及相关设备 |
Also Published As
Publication number | Publication date |
---|---|
CN102141932B (zh) | 2012-11-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20220214930A1 (en) | Systems and Methods for Performing Concurrency Restriction and Throttling over Contended Locks | |
CN102141932B (zh) | 大临界区保护方法 | |
CN102163072B (zh) | 用于节能的基于软件的线程重映射 | |
US8161481B2 (en) | Operating system providing a mutual exclusion mechanism | |
CN102566979B (zh) | 实现自适应锁的方法和装置以及多核处理器*** | |
Stoif et al. | Hardware synchronization for embedded multi-core processors | |
EP2362953B1 (en) | Multiprocessor computing device | |
CN103761182A (zh) | 一种死锁检测方法及装置 | |
CN101833475A (zh) | 用于增强线程级推测的原语 | |
CN102262559A (zh) | 一种资源共享的方法及*** | |
CN1877533A (zh) | 管理计算机内的计算机程序的临界区锁的***和方法 | |
US20220147404A1 (en) | Method And Apparatus For Accessing Critical Resource, Computer Device, And Readable Storage Medium | |
CN103473135B (zh) | 虚拟化环境下自旋锁lhp现象的处理方法 | |
CN109213576B (zh) | 程序死锁检测方法、存储介质、设备及*** | |
US8769546B2 (en) | Busy-wait time for threads | |
EP3211525A1 (en) | Cpu/gpu synchronization mechanism | |
US10642644B2 (en) | Memory management method and apparatus | |
US11269693B2 (en) | Method, apparatus, and electronic device for improving CPU performance | |
CN105404555A (zh) | 医疗多线程共享资源分配处理方法及*** | |
CN110083445B (zh) | 一种基于弱内存一致性的多线程确定性执行方法 | |
US9122610B2 (en) | OS friendly microprocessor architecture | |
CN112346879B (zh) | 进程管理方法、装置、计算机设备及存储介质 | |
CN104461729B (zh) | 一种资源共享保护方法及装置 | |
Reif et al. | Earl: energy-aware reconfigurable locks | |
Harnisch | Predictable hardware: The aurix microcontroller family |
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 |