[发明专利]一种软件实时事务内存的实现方法有效
申请号: | 201210358174.6 | 申请日: | 2012-09-24 |
公开(公告)号: | CN102929711A | 公开(公告)日: | 2013-02-13 |
发明(设计)人: | 顾宗华;李红;王铸;张劲超;章明;吴朝晖 | 申请(专利权)人: | 浙江大学 |
主分类号: | G06F9/48 | 分类号: | G06F9/48 |
代理公司: | 杭州裕阳专利事务所(普通合伙) 33221 | 代理人: | 江助菊 |
地址: | 310027 浙*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 软件 实时 事务 内存 实现 方法 | ||
技术领域
本发明涉及计算机领域的嵌入式实时操作系统,特别涉及一种用于嵌入式实时操作系统软件实时事务内存的一种实现方法。
技术背景
嵌入式实时系统是指对于任务处理时间有着严格限制的操作系统。如果任务的处理时间超过截止期(deadline),可能会产生严重的后果。实时性分为硬实时和软实时,在硬实时系统中,如果任务的运行时间超时会产生很严重的后果,在软实时系统中,则会有影响,但不会很严重。
事务内存(Transactional Memory)是操作系统中多任务互斥访问共享数据的一种方式。在传统的操作系统中,实现共享数据互斥访问的方法一般是使用自旋锁(Spinlock)来保证的。在这种实现方式下,一个任务在获取到共享资源之前首先需要得到一个锁,如果它检测到该锁已经被其他任务获取到了,那么就进行循环等待,直到该锁被释放为止。这种方式的缺点在于,如果存在多个任务同时访问共享数据,那么它们的访问是串行进行的。在数据竞争比较激烈的环境下,这种方式是比较低效的。而事务内存的实现方式则不同,任务并不会在进入到临界区以前检测其他任务的存在,而是在进入临界区以前记录一下处理器的状态,然后在执行临界区或者执行完临界区的时候进行冲突检测。如果发生冲突,那么就将各种状态(寄存器的值和共享数据的值等等)恢复到进入到临界区以前,然后重新执行,这个操作叫做回滚。如果没有冲突,那么就将修改的内容写入到共享数据中,这个操作叫做提交。这种方式与自旋锁的区别在于,当多个任务访问共享数据时,多个任务可以一起执行临界区,是一种并行的方式。在竞争比较激烈的环境中(也就是会有很多任务同时访问临界区),事务内存相比自旋锁有更大的优势。事务内存的工作原理可以参考图1。事务的实现方式可以分为硬件事务内存和软件事务内存,本文只考虑软件事务内存,还有,本文所提出的方法能够在单处理器上实现,也可以在多处理器的环境下实现。如果是在处理器的环境下实现,任务只能在它所属的处理器上运行,不能迁移到其他处理器上。
事务内存主要由两个过程组成:冲突检测和管理(conflict detection and management)和版本管理(version management)。冲突检测是负责检测在事物内存运行的时候是否与其他的事物内存发生冲突,冲突管理是负责在冲突发生了以后处理冲突的部分,如果两个事务内存发生了冲突,由这个部分判断由哪个事务内存继续运行。事物内存的运行原理其实是上将修改的内容保存在日志中,如果成功提交了那么再将修改的内容写入共享数据中,如果发生冲突了并且被冲突管理决策判断需要回滚,那么放弃日志中的内容,然后恢复处理器环境,或者反过来,将共享数据原来的内容保存在日志中,回滚的时候将日志中的内容恢复到共享数据中去。这些都是版本管理需要负责的部分。
上面已经说过,在实时系统中,任务的运行时间超时可能会产生比较严重的后果。所以通常在实时系统的实现中,必须要保证任务时间的可预测性。但是在平常的事务内存的实现中,任务在执行临界区的时候可能会回滚很多次,甚至无限回滚。这种情况在实时系统中是不能接受的。
发明内容
针对上述技术缺陷,本发明提出软件实时事务内存的实现方法。
为了解决上述技术问题,本发明的技术方案如下:
软件实时事务内存的实现方法,包括如下步骤:
11)根据任务之间是否会产生冲突,产生任务之间的冲突关系图,并且依据这个冲突关系图将所有任务划分为几个队列,每个任务属于且只能属于一个队列;12)增加了一个常量,所述常量规定了任务的最大回滚次数,如果某任务回滚次数超出该常量,则将该任务加入到其所属于的队列中去,在该队列的队尾进行排队,并且任务会进入到休眠状态,只有当该任务排列到队首的时候,该任务才会被唤醒,然后重新执行事务内存的代码;
如果一旦有两个任务发生冲突,则依据以下两种情况处理:
13)当其中一个任务是排列在队首,另外一个任务没有在队列中,那么这时候就优先让不在队列中的任务回滚,这样确保队首的任务能够提交,如果该任务回滚的次数达到了所述常量规定的次数时,那么它就会进入到它所属的队列中进行排队,并且进入到休眠状态,等待唤醒;
14)如果两个任务都没有在队列中,那么根据哪个任务的优先级高,让优先级高的任务执行,另一个任务则回滚,并且如果有任务的回滚次数达到了所述常量规定的次数时,那么这个任务就加入到它所属的队列。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浙江大学,未经浙江大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210358174.6/2.html,转载请声明来源钻瓜专利网。