一种基于细粒度读写锁的安全高效STM同步方法

文档序号:36132909发布日期:2023-11-22 20:42阅读:67来源:国知局
一种基于细粒度读写锁的安全高效

本发明属于计算机领域,特别涉及一种计算机实时系统的任务调度与共享资源同步技术。


背景技术:

1、在实时系统中,任务可能并发地访问共享资源。为了防止对共享资源的并发访问的竞态危害,实时系统通常使用锁来确保可能存在资源冲突的临界区的同步互斥执行,并通过实时锁协议来提高系统的时间可预测性,避免长时间的优先级翻转现象。

2、然而,锁的使用可能导致系统中发生死锁。避免发生死锁的方法主要有两种。第一种是使用粗粒度锁,粗粒度锁使用一个锁来保证对若干个共享资源的同步互斥访问,通过避免对相关资源的嵌套访问,从而防止死锁。如linux早期版本所采用的大内核锁。第二种则考虑对细粒度锁的上锁顺序进行约束,从而避免可能形成的交叉等待。相对于粗粒度锁,细粒度锁则尽可能地区分不同的共享资源,并通过不同的锁进行保护,从而减少共享资源冲突。因此,粗粒度锁在实现和验证上更为简单,而细粒度锁则具有更高的并发效率。

3、软件事务内存(software transactional memory,stm)是一种无锁机制。与现在多线程应用程序广泛使用的锁机制不同,stm是一种乐观的并发控制机制:一个线程独立完成对共享内存的修改,完全忽略可能会有其它的线程存在,但是线程在日志中记录对共享内容的每一个读写动作。其他的并发控制一般是在进行写操作时来保证与其他事务的一致性(不能修改已经被别的事务修改过的共享数据),stm在完成一个事务之后,再验证其它线程有没有并发的对共享内存进行或修改,从而保证事务是完整的。因此,stm事务的最后一个操作是验证,如果验证通过,则提交,否则取消,导致所有以前进行的修改动作回滚。如果一个事务不能够提交,一般的,事务将回滚,并且从入口开始重新执行。关于软件事务内存在共享资源访问情形下的优势,以下通过图2的例子进行阐述。如图2所示,t1、t2、t3需要访问资源+1,任务t2、t3、t4需要访问资源r2,其中任务t2与t3对资源r1与r2的访问存在嵌套。在使用粗粒度锁时,由于资源访问不可嵌套,资源r1与r2将被视为是一个共享资源,并通过一个锁进行保护,任意对资源r1或r2的访问都需要请求相同的锁。因此在粗粒度锁的资源模型下,任务t1与t4之间也存在资源冲突。而在细粒度锁的资源模型下,资源r1与r2分别由不同的锁保护,任务t1与t4之间不存在资源冲突,因此系统可以获得更高的并发效率,但任务t2与t3对资源r1与r2的嵌套访问需要满足特定的顺序,否则将导致死锁。在stm模型下,资源r1与r2也分别由不同的锁保护,但任务t2与t3对资源r1与r2的嵌套访问需要“同时”获得对应的锁,即满足原子性,而任务t1与t4之间则不存在资源冲突。换言之,对于任务t2与t3来说,其资源同步与使用粗粒度锁的资源模型类似,而对于任务t1与t4来说,其资源同步则与使用细粒度锁的资源模型类似。对于细粒度共享资源访问的情况,软件事务内存,相对于粗粒度锁,任务之间减少了资源冲突,提升了并发效率;相对于细粒度锁,其消除了“占有且等待”这一必要条件,取消了对资源访问的顺序限制,更是有着无死锁这一优势。

4、现有的共享资源访问方案,分为粗粒度锁、细粒度锁以及经典的stm。其中使用粗粒度锁的方案,在单处理器平台下,最为广泛的是sha等人所提出的优先级继承协议(priority inheritance protocol,pip)与优先级天花板协议(priority ceilingprotocol,pcp)。pip可以有效避免不可控的优先级反转现象,而pcp则确保了一个任务最多受到一个低优先级任务的临界区的阻塞,并且可以避免死锁的产生。在多处理器平台下,经典的实时锁协议有分布式优先级天花板协议(distributed priority ceiling protocol,dpcp)与面向共享内存的多处理器优先级天花板协议(multiprocessor priority ceilingprotocol,mpcp)。对于自旋锁,经典的协议有面向分组调度的多处理器栈资源策略(multiprocessor stack resource policy,msrp)。使用细粒度锁的方案,代表是及能够有效控制资源嵌套传递阻塞的实时嵌套锁协议(real-time nested locking protocol,rnlp)。使用stm的方案,包括经典的stm实现(original stm),事务性锁ⅱ(transactionallockingⅱ),以及取消了回滚的免回滚实时软件事务性内存(retry-free real-time stm,from rtss21)。

5、实时锁协议普遍考虑通过粗粒度锁来避免死锁,但是粗粒度锁的使用可能加剧共享资源的竞争,降低系统并发效率。另一方面,细粒度锁虽然能够有效地缓解共享资源的竞争,但是对共享资源的嵌套访问可能导致死锁,因此给系统的实现与验证带来了很大的挑战。

6、软件事务性内存是一种简单高效的细粒度资源同步框架,主流的软件事务性内存实现方法主要通过事务的回滚来解决共享资源的冲突访问,是一种无锁同步机制。该方式虽然在一般情况下具有更高的并发效率,但由于缺乏事务的排队与推进机制,一个事务可能在极端情况下经历次数无法预测的回滚,从而导致任务在长时间内无法推进。因此,基于无锁实现的软件事务性内存具有较差的时间可预测性。

7、对时间可预测性的苛刻要求导致软件事务性内存在实时系统中的应用受到阻碍。尽管存在少数基于锁实现的软件事务性内存方案,但是目前已知的基于锁实现的软件事务性内存方案尚未采用细粒度的读写锁来实现,同时也并不能保证事务的有效推进,因此仍然无法直接应用于具有强实时性需求的场景,此外其实现需要编译器级别的支持,限制了其移植性。


技术实现思路

1、为解决上述技术问题,本发明提出一种基于细粒度读写锁的安全高效软件事务性内存同步方法,通过细粒度读写锁避免了传统软件事务性内存在资源访问冲突时的回滚,从而保证事务的有效推进。同时,本发明所涉及的同步框架能够保证事务在开始执行前原子性地对所需访问的共享资源上锁,从而可有效避免细粒度锁的随机嵌套而导致的死锁问题。

2、本发明采用的技术方案为:一种基于细粒度读写锁的安全高效软件事务性内存同步方法,包括:

3、s1、对任务中的共享资源请求进行封装,具体的:将包括有写操作的请求封装为写事务,将只包括读操作的请求封装为读事务;

4、s2、写事务的执行需要获得对应共享资源的写锁,读事务的执行需要获得对应共享资源的读锁,所有事务的执行不能抢占;

5、共享资源的读锁、写锁采用基于优先级队列的自旋锁实现;

6、s3、一个事务执行完毕后,释放所有的锁。

7、共享资源的写锁采用基于优先级队列的自旋锁实现,具体为:

8、当写事务对于所有共享资源的中的请求均位于优先级队列的队首,且这些共享资源不存在被写锁或读锁保护,则写事务获得这些共享资源的写锁;否则写事务忙等。

9、共享资源的读锁采用基于优先级队列的自旋锁实现,具体为:

10、当读事务对于所有共享资源的中的请求位于优先级队列的队首,且这些共享资源不存在被写锁保护,则读事务获得这些共享资源的读锁;否则读事务忙等。

11、本发明的有益效果:本发明的方法通过细粒度读写锁避免了传统软件事务性内存在资源访问冲突时的回滚,从而保证事务的有效推进;同时,本发明所涉及的同步框架能够保证事务在开始执行前原子性地对所需访问的共享资源上锁,从而可有效避免细粒度锁的随机嵌套而导致的死锁问题。本发明与现有技术相比具有以下优点及有益效果:

12、1.安全性/可靠性:借助stm模型,任务对多个细粒度资源的访问顺序没有限制,同时通过消除“占有且等待”这一必要条件避免了死锁问题。

13、2.实时性:将经典stm中的回滚机制由基于优先级队列的自旋锁代替,有效地保证了事务的推进,提高了系统的实时性。

14、3.并发效率/吞吐量:使用细粒度锁缓解了资源的竞争。

15、4.兼容性:无需硬件及特殊的编译器支持,分析上也可使用传统的支持粗粒度锁的分析方法进行实时系统的可调度性分析。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1