当前位置: 首页 > 专利查询>清华大学专利>正文

大临界区保护方法技术

技术编号:6701936 阅读:262 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种大临界区保护方法,包括步骤:S1:将要申请占用临界区的申请进程放入全局锁队列的队尾,全局锁队列的每个锁节点包括两个元素:申请进程的进程号和指向下一个申请进程的指针;S2:当占用临界区的当前进程释放锁时,若当前进程的后续锁节点不为空,则唤醒后续的锁节点代表的进程占用临界区,否则,修改全局锁队列的尾指针L。本发明专利技术实现了对大临界区的高效地保护,并且具有总线资源占用少、保证公平性、时间和空间开销小等优点。

【技术实现步骤摘要】

本专利技术涉及计算机操作系统
,特别涉及一种。
技术介绍
共享内存式多核计算机通过共享内存数据来进行进程间通信。为保证共享数据的 一致性,必须对其进行互斥访问。所谓互斥是指多个进程要访问同一共享数据时,任何时刻 最多只允许一个进程去访问,其它要访问该数据的进程必须等待,直到访问该数据的进程 访问完毕为止。操作系统中用于保证互斥的方法主要有自旋锁机制和信号量机制。自旋锁机制的锁有两个状态“锁定”和“解锁”。如果锁可用,则“锁定”位被设 置,进程继续进入临界区;相反,如果锁被其他进程占用,则循环重复检查这个锁,直到锁可 用为止。信号量机制用于互斥时和自旋锁机制的不同之处在于如果当前进程不能访问临 界区,则进程休眠直至临界区可访问时被唤醒。当循环重复检查的开销小于进程切换的开 销时使用自旋锁机制对临界区进行保护,此时将该临界区称为小临界区;当循环重复检查 的开销大于进程切换的开销时使用信号量机制对临界区进行保护,此时将该临界区称为大 临界区。为了提高操作系统的性能,很多研究者对临界区保护机制进行研究。到目前已经 有很多种锁机制对小临界区进行保护,并根据不同平台和不同需求对这些锁机制进行改进 来提高操作系统整体的性能。但对于大临界区保护的研究却很少,目前主要运用信号量机 制进行大临界区的保护。信号量机制在一个进程试图访问一个正在被访问的临界区时将其放入等待队列, 并使其休眠。这时处理器可以去执行其它的进程。当持有信号量的进程将信号量释放后, 在等待队列中位于队首的进程将被唤醒,从而便可以获得这个信号量并进入临界区。其中 等待队列也是一个临界区,需要用自旋锁来实现互斥访问。这种信号量机制实现复杂,用自 旋锁来实现对队列的互斥访问会额外占用总线资源,还会导致其它时间、空间上的开销,而 且难以保证严格的公平性(即先来先服务)。MCS 队列锁(Mellor-Crummey 和 Scott 专利技术的,所以被称为 MCSQueue Lock)是一 种针对小临界区保护的锁机制。这种锁机制具有总线资源占用少、保证公平性、时间和空间 开销小等优点,但只适合对小临界区的保护。
技术实现思路
(一)要解决的技术问题本专利技术要解决的技术问题是如何实现在总线资源占用少、保证公平性、时间和空 间开销小的情况下对大临界区进行高效地保护。( 二 )技术方案为解决上述技术问题,本专利技术一种,包括以下步骤Sl 将要申请占用临界区的申请进程放入全局锁队列的队尾,全局锁队列的每个锁节点包括两个元素申请进程的进程号和指向下一个申请进程的指针;S2:当占用临界区的当前进程释放锁时,若当前进程的后续锁节点不为空,则唤醒 后续的锁节点代表的进程占用临界区,否则,修改全局锁队列的尾指针L。其中,所述步骤Sl具体包括所述申请进程申请锁时,将临时指针P赋值为所述尾指针L,并使L赋值为申请进 程的锁节点指针I ;若P为空,则所述申请进程申请锁成功,否则,将I的进程号赋值为申请 进程的进程号,把P的后继设为I,申请进程休眠,等待唤醒。其中,所述步骤S2具体包括当占用临界区的进程释放锁时,如果该进程的锁节点指针K有后继,则直接唤醒 后继锁节点代表的进程,释放锁成功,否则,判断L和K指向的锁节点是否相同,若二者相 同,则将L赋值为空,直接返回,释放锁成功;若二者不同,则循环等待直到K的后继不为空, 然后唤醒K的后继节点代表的进程,释放锁成功。其中,所述步骤Sl中采用fetCh_and_St0re原子指令将全局锁队列尾指针指向当 前进程锁节点;步骤S2中利用COmpare_and_SWap原子指令判断L和K指向的锁节点是否 相同。其中,所述位于同一全局锁队列中的元素表示申请同一锁资源的锁节点,申请不 同的锁资源位于不同的全局锁队列。(三)有益效果本专利技术通过将MCS队列锁和信号量机制相结合,提出了 MCS休眠锁的设计,实现了 对大临界区的高效地保护,并且具有总线资源占用少、保证公平性、时间和空间开销小等优点ο附图说明图1是本专利技术实施例的一种中采用的全局锁队列结构示意图;图2是本专利技术实施例的一种中申请临界区的流程图;图3是本专利技术实施例的一种中是释放临界区的流程图;图4是利用本专利技术方法进行实验时测试一的测试结果。具体实施例方式下面结合附图和实施例,对本专利技术的具体实施方式作进一步详细描述。以下实施 例用于说明本专利技术,但不用来限制本专利技术的范围。本专利技术通过将MCS队列锁和信号量机制相结合,提出了 MCS休眠锁的机制。该机 制采用全局锁队列来管理大临界区的申请和释放。如图1所示为本专利技术所设计的全局锁队 列结构图。每个锁节点都是MCSSle印ingLockNode类型的结构,包括两个成员,一个是申请 锁进程的进程号,另一个是MCSSle印ingLockNode类型的指针,指向后继节点。L表示指向 全局锁队列结构的尾指针。如图2所示,为申请进程申请锁(即要申请占用大临界区)时的流程图,申请锁 时,要同时提供全局锁队列尾指针和指向申请进程锁节点的指针。在申请进程申请锁时,将 临时指针P赋值为尾指针L,采用fetCh_and_St0re原子指令将全局锁队列尾指针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休眠锁, 在清华大学计算机系操作系统实验室自主开发的操作系统上进行了实现和测试。通过测 试,这种机制在性能方面要优于信号量机制。临界区保护机制的性能体现在一个进程释放临界区到另一个进程获得临界区所 需时间,时间开销越小说明该保护机制的性能越高。设计实验环境如下在操作系统中实现 一个系统调用syscallO,该系统调用伪代码如表1所示。表1测试系统调用void syscall() {reoutput_CPU_timeC);for C i = 0;~i <~N; i++) {IockO ;large critical section code unlock ¢);non critical section code;}readioutput_CPU_time ¢);其中read&outp本文档来自技高网
...

【技术保护点】
1.一种大临界区保护方法,其特征在于,包括以下步骤:S1:将要申请占用临界区的申请进程放入全局锁队列的队尾,全局锁队列的每个锁节点包括两个元素:申请进程的进程号和指向下一个申请进程的指针;S2:当占用临界区的当前进程释放锁时,若当前进程的后续锁节点不为空,则唤醒后续的锁节点代表的进程占用临界区,否则,修改全局锁队列的尾指针L。

【技术特征摘要】

【专利技术属性】
技术研发人员:胡事民马超郭旭峰
申请(专利权)人:清华大学
类型:发明
国别省市:11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1