公开/公告号CN101183317A
专利类型发明专利
公开/公告日2008-05-21
原文格式PDF
申请/专利权人 中兴通讯股份有限公司;
申请/专利号CN200610138732.2
申请日2006-11-14
分类号G06F9/48(20060101);G06F9/46(20060101);
代理机构11274 北京中博世达专利商标代理有限公司;
代理人申健
地址 518057 广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦6层法律部
入库时间 2023-12-17 20:11:07
法律状态公告日
法律状态信息
法律状态
2017-01-11
未缴年费专利权终止 IPC(主分类):G06F9/48 授权公告日:20100120 终止日期:20151114 申请日:20061114
专利权的终止
2010-01-20
授权
授权
2008-07-16
实质审查的生效
实质审查的生效
2008-05-21
公开
公开
技术领域
本发明涉及计算机操作系统中实时中断与多个进程状态同步的方法。
背景技术
资源共享和状态同步是计算机操作系统的重要研究课题。各个进程之间共享的各种资源和状态,必须保持同步,以保证数据的完整性。操作系统通过必要的手段为各个进程提供一致和可靠的状态。进程的并发产生竞态,使各个进程可见的资源状态可能由于执行顺序不同而有所不同。未能对竞态进行正确的处理将导致系统状态错乱。一些进程间通信(IPC)机制被引入操作系统,以解决并发请求所引起的竞态所产生的编程问题,如信号量、互斥、管道、锁机制等。
在驱动程序的设计中,可能有多个进程共享同一硬件资源,即各进程需根据硬件的某个特定状态对这些共享的硬件资源进行适当的配置。将在共享的硬件资源上进行的一组操作定义为一个工作单元(Unit)。这些并发的工作单元必须保证其设置与硬件状态所规定的工作状态一致。各个进程之间可以用传统IPC机制进行处理。
中断的产生使竞态的处理更为复杂。如果中断的产生正好代表着工作单元所依据的硬件状态发生了变化,对于一个没有执行完毕的工作单元,当程序从中断返回时,工作单元就会依据已经过时的状态继续操作,显然,如果不对这种情况进行处理,系统就会工作在错误的状态。
由于中断处理程序的特殊性,中断处理程序有一些特别的限制。首先,中断必须尽快得到响应,;其次:中断处理程序必须尽可能短;最后,中断不能阻塞,不可在中断处理程序中睡眠,中断中也不能发生调度。普通的IPC机制一般以睡眠的方式等待所需的资源。由于中断处理程序的限制,普通的IPC机制大多不适于中断处理程序和进程之间的同步。中断和进程之间一般通过事件通知模型来进行通信。进程在某一个信号量或者等待队列中睡眠,直到中断将这一资源可用的消息通知给进程。事件通知模型适于基于状态的变化而不是状态本身进行工作的进程和中断处理程序之间的通信和同步,在后一种情况下,进程可在任何状态下工作,所以不会等待某个状态发生变化。还有一种可选的方式是:在工作单元执行前后关闭和打开中断,并用定时器查询的方式获得与硬件状态的同步的方式。但是较低的系统执行效率和较高的开销也使这种模型不太适合。目前,使用事件通知模型进行资源共享和同步的技术已经得到广泛的运用,但是对基于硬件状态而不是状态变化的进程和中断处理程序之间的同步还没有有效的模式,急需发展新的模型来解决。
发明内容
为克服现有技术中的缺陷和不足,本发明的目的在于提供一种实时中断与多个进程状态同步的方法。
为达到上述目的,本发明采用以下技术方案:
实时中断与多个进程状态同步的方法,包括
(1)设置进程中任务的启动和终止函数、启动标志,并定义中断计数变量;
(2)进入中断处理程序,将中断计数变量值加1,获得需要处理的任务的启动标志,并对已启动的任务进行状态切换操作,完成对已启动任务的设置;
(3)执行任务启动函数,获得当前的中断计数变量值、任务写锁,启动任务后,再次获得中断的计数变量值;比较前后两次获得的计数变量值的奇偶性是否相同,若相同,则任务启动完成,进入步骤(4);若不同,则对该任务进行状态切换操作,重复步骤(3);
(4)由任务终止函数完成任务的终止,释放设备资源。
其中,步骤(2)中的切换操作包括:
(A)关闭在前一状态下打开的设备,释放相关的设备资源;
(B)为新的状态设置打开新的设备,获得相关资源,完成设备设置。
其中,步骤(3)具体为:
(31)获得当前的中断计数变量值并保存,并根据获得的当前任务写锁,执行任务的工作单元;
(32)重新获得中断计数变量值,比较前后两次获得中断计数变量值的奇偶性是否相同,若相同,设置任务启动完成标志后释放任务写锁;若不相同,则对该任务进行状态切换操作,调整设备设置后释放任务写锁。
其中,步骤(3)具体为:
(311)获得当前的中断计数变量值并保存,并根据获得的当前任务写锁,执行任务的工作单元;
(312)重新获得中断计数变量值;
(313)比较前后两次获得中断计数变量值的奇偶性是否相同,若相同,设置任务启动完成标志后释放任务写锁;若不相同,则将重新获得的中断计数变量值设置为当前的中断计数变量值后对该任务进行状态切换操作,返回步骤(312)。
与现有技术相比,本发明充分利用了操作系统提供的IPC机制,不需要自定义附加的数据结构,算法简单;使用前后两次中断计数值的奇偶性作为工作单元执行结果有效性的判据,代价低。任务启动标志使中断处理程序不需做多余的切换操作,启动函数工作单元执行之后的善后处理保证了软件设置与硬件状态一致。
附图说明
图1是硬件的状态变迁图;
图2是引起状态变化的中断对处理线程(或进程)的正确性的影响;
图3是中断处理流程图;
图4是最多需要一次调整设备设置时的任务启动函数流程图;
图5是需要多次调整设备设置的情况下任务启动函数的流程图;
图6是任务终止函数流程图;
图7是应用了本发明之后任务的工作状态图。
具体实施方式
下面结合附图和具体实施方式对本发明做进一步的说明。
图1说明了硬件的两种状态,进程在状态0和状态1之间进行切换。
图2描述了在单处理器,多任务操作系统中,与图1中所定义的硬件状态存在着关联的处理进程和中断处理程序的一种可能的调度时序。
线程P1、P2和P3先后进入系统,系统按照设定的调度策略对其进行调度。进程间的资源共享和状态同步采用传统的IPC机制,硬件中断可终止正在运行的工作单元。
图2说明了在未采用本发明所述的算法的情况下可能产生的三种情况。进程P1开始和终止于两次中断之间,正常结束。进程P3的工作单元开始和结束于不同的硬件状态,最终的设置与当前的硬件状态相反。进程P2虽然也被中断,但是由于其经历了两次中断,所以最终的设置与当前的硬件状态相符。
本发明的思路如下:
(1)设置进程中任务的启动和终止函数、启动标志,并定义中断计数变量。每个进程完成不同的任务,因此每个任务都有其启动函数和终止函数。任务中有若干需要严格互斥和保持与硬件的状态一致的工作单元,该硬件状态可以有N个状态值。
(2)进入中断处理程序,将中断计数变量值加1,获得需要处理的任务的启动标志,并对已启动的任务进行状态切换操作,完成对已启动任务的设置。
中断处理程序检查任务启动的状态,只有在任务启动完成之后,任务停止之前才需要触发相应的与硬件状态重新同步的操作。
(3)执行任务启动函数,获得当前的中断计数变量值、任务写锁,启动任务后,再次获得中断的计数变量值;比较前后两次获得的计数变量值的奇偶性是否相同,若相同,则任务启动完成,进入步骤(4);若不同,则对该任务进行状态切换操作,重复步骤(3)。
启动函数的执行流程如下:
(a)首先获得当前的中断次数并保存,目的是与当前的中断计数值取得同步。
通过获得的硬件状态完成相关设置。即执行任务相关的工作单元。在工作单元执行之前,获得当前任务的写锁,表示将要改变任务的启动状态,并作相应的设置。
(b)由于设置过程有可能被中断,刚才所作的设置可能无效。所以执行完一遍所需的操作之后,并不立即修改任务启动标志和释放写锁,在程序结束之前需要做以下善后处理。
(c)重新获得当前的中断计数。如果前后两次的计数值的奇偶性相同,则说明在处理过程中没有发生中断(计数值相等的情况),或者虽然发生了中断,但是硬件经过若干次中断处理,其最终状态与软件设置相同的状态下,这两者情况下,已有的设置都是有效的。
如果两次计数值的奇偶性不同,则说明在软件设置所依据的硬件状态已经发生变化,已有的设置不再有效了,需要对其做出调整。所需的调整与中断处理程序时所作的操作一致。
特别的,对于某一个时段中断频率特别高如发生了抖动,调整之后还需要比较前后两次中断计数值的奇偶性。但实际上,由于中断发生的时刻是随机的,所以,在初次设置时被中断的概率比较大,但是两次中断发生的最小时间间隔是有限制的,相对于处理器的运行速度来说,一次任务启动操作被多次中断的可能性极小。所以,一般只需要进行一次调整就可以达到与硬件状态的一致。
本发明引入了任务启动标志,该标志由各个任务维护。中断处理程序不能改变任务的启动状态,任务启动标志代表任务是否处于启动状态,任务启动和终止过程的状态一致性由本发明所述方法保证与硬件状态的一致性,因此,中断可以直接获得任务启动标志而不需要附加的同步措施,并根据任务启动的状态决定是否触发相应的切换操作。由于程序的运行场景可能比较复杂,通过共享硬件资源联系起来的任务需要知道其他任务的启动状态,所以各个任务的启动标志也需要保护,本发明采用读写锁,当某个任务正在修改其启动标志时,其它任务必须等待,多个任务可以同时读这个标志。
图4和图5分别为最多需要一次调整设备设置时和需要多次调整设备设置的流程图。对于图4所示的情况,其处理过程为:
(41)获得当前的中断计数变量值并保存,并根据获得的当前任务写锁,执行任务的工作单元;
(42)重新获得中断计数变量值,比较前后两次获得中断计数变量值的奇偶性是否相同,若相同,设置任务启动完成标志后释放任务写锁;若不相同,则对该任务进行状态切换操作,调整设备设置后释放任务写锁。
对于图5所示的情况,其处理过程为:
(511)获得当前的中断计数变量值并保存,并根据获得的当前任务写锁,执行任务的工作单元;
(512)重新获得中断计数变量值;
(513)比较前后两次获得中断计数变量值的奇偶性是否相同,若相同,设置任务启动完成标志后释放任务写锁;若不相同,则将重新获得的中断计数变量值设置为当前的中断计数变量值后对该任务进行状态切换操作,返回步骤(512)。
完成上述操作之后,软件的设置与硬件的状态完全一致,最后,设置任务启动完成标志,释放写锁后返回。
(4)由任务终止函数完成任务的终止,释放设备资源。
图6是任务的终止函数流程。处理线程在写锁的保护下设置任务停止标志,并完成相应的设备关闭和其他需要互斥的操作。
在终止函数中,不再需要获得中断计数值来完成与硬件状态的同步,因为在任务终止函数一开始就设置任务终止标志阻止了中断处理程序进行切换操作,即使处理线程从中断返回到一个不同的硬件状态,也可正确释放任务已获取的资源。
图7描述了应用了本发明所述的方法之后的程序运行状态,从图中可以看出线程P3通过调整保证了其最终的设置与当前的硬件状态一致。
本发明可以扩展到多处理器,也就是共享资源的进程可以分布在不同的处理器上,进程内部的处理仍然可以按照上述模式进行处理:即工作单元执行前后中断计数的奇偶性相反的线程进行调整,但是需要对IPC机制采用多处理器版本。总之,本发明的所述方法具有适用范围广、可靠性高和实现简单的特点,可广泛应用于驱动程序开发。
机译: 能够对多个用户进行实时同步的VR VR VR系统及其使用的VR系统的实时同步方法
机译: 用于控制系统自动化的用于程序的同步执行的方法包括:如果子系统有问题,则通过一个或多个循环过程序列在系统的至少两个执行单元上对程序进行操作,以实现无中断操作
机译: 同步触发的方法,尤其是具有多个中断的高压开关