实时中断与多个进程状态同步的方法

文档序号:6562195阅读:207来源:国知局
专利名称:实时中断与多个进程状态同步的方法
技术领域
本发明涉及计算机操作系统中实时中断与多个进程状态同步的方法。
背景技术
资源共享和状态同步是计算机操作系统的重要研究课题。各个进程之间共享的各种资源 和状态,必须保持同步,以保证数据的完整性。操作系统通过必要的手段为各个进程提供一 致和可靠的状态。进程的并发产生竞态,使各个进程可见的资源状态可能由于执行顺序不同
而有所不同。未能对竞态进行正确的处理将导致系统状态错乱。 一些进程间通信(IPC)机制
被引入操作系统,以解决并发请求所引起的竞态所产生的编程问题,如信号量、互斥、管道、 锁机制等。
在驱动程序的设计中,可能有多个进程共享同一硬件资源,即各进程需根据硬件的某个 特定状态对这些共享的硬件资源进行适当的配置。将在共享的硬件资源上进行的一组操作定
义为一个工作单元(Unit)。这些并发的工作单元必须保证其设置与硬件状态所规定的工作状 态一致。各个进程之间可以用传统IPC机制进行处理。
中断的产生使竞态的处理更为复杂。如果中断的产生正好代表着工作单元所依据的硬件 状态发生了变化,对于一个没有执行完毕的工作单元,当程序从中断返回时,工作单元就会 依据已经过时的状态继续操作,显然,如果不对这种情况进行处理,系统就会工作在错误的 状态。
由于中断处理程序的特殊性,中断处理程序有一些特别的限制。首先,中断必须尽快得 到响应,;其次中断处理程序必须尽可能短;最后,中断不能阻塞,不可在中断处理程序中 睡眠,中断中也不能发生调度。普通的IPC机制一般以睡眠的方式等待所需的资源。由于中 断处理程序的限制,普通的IPC机制大多不适于中断处理程序和进程之间的同步。中断和进 程之间一般通过事件通知模型来进行通信。进程在某一个信号量或者等待队列中睡眠,直到 中断将这一资源可用的消息通知给进程。事件通知模型适于基于状态的变化而不是状态本身 进行工作的进程和中断处理程序之间的通信和同步,在后一种情况下,进程可在任何状态下
工作,所以不会等待某个状态发生变化。还有一种可选的方式是在工作单元执行前后关闭
和打开中断,并用定时器査询的方式获得与硬件状态的同步的方式。但是较低的系统执行效 率和较高的开销也使这种模型不太适合。目前,使用事件通知模型进行资源共享和同步的技 术已经得到广泛的运用,但是对基于硬件状态而不是状态变化的进程和中断处理程序之间的 同步还没有有效的模式,急需发展新的模型来解决。

发明内容
为克服现有技术中的缺陷和不足,本发明的目的在于提供一种实时中断与多个进程状态 同步的方法。
为达到上述目的,本发明采用以下技术方案
实时中断与多个进程状态同步的方法,包括
(1) 设置进程中任务的启动和终止函数、启动标志,并定义中断计数变量;
(2) 进入中断处理程序,将中断计数变量值加l,获得需要处理的任务的启动标志,并 对已启动的任务进行状态切换操作,完成对己启动任务的设置;
(3) 执行任务启动函数,获得当前的中断计数变量值、任务写锁,启动任务后,再次获 得中断的计数变量值;比较前后两次获得的计数变量值的奇偶性是否相同,若相同,则任务 启动完成,进入步骤(4);若不同,则对该任务进行状态切换操作,重复步骤(3);
(4) 由任务终止函数完成任务的终止,释放设备资源。 其中,步骤(2)中的切换操作包括
(A) 关闭在前一状态下打开的设备,释放相关的设备资源;
(B) 为新的状态设置打开新的设备,获得相关资源,完成设备设置。 其中,步骤(3)具体为
(31) 获得当前的中断计数变量值并保存,并根据获得的当前任务写锁,执行任务的工 作单元;
(32) 重新获得中断计数变量值,比较前后两次获得中断计数变量值的奇偶性是否相同, 若相同,设置任务启动完成标志后释放任务写锁;若不相同,则对该任务进行状态切换操作, 调整设备设置后释放任务写锁。 其中,步骤(3)具体为
(311) 获得当前的中断计数变量值并保存,并根据获得的当前任务写锁,执行任务的工 作单元;
(312) 重新获得中断计数变量值;
(313) 比较前后两次获得中断计数变量值的奇偶性是否相同,若相同,设置任务启动完 成标志后释放任务写锁;若不相同,则将重新获得的中断计数变量值设置为当前的中断计数 变量值后对该任务进行状态切换操作,返回步骤(312)。
与现有技术相比,本发明充分利用了操作系统提供的IPC机制,不需要自定义附加的数 据结构,算法简单;使用前后两次中断计数值的奇偶性作为工作单元执行结果有效性的判据, 代价低。任务启动标志使中断处理程序不需做多余的切换操作,启动函数工作单元执行之后 的善后处理保证了软件设置与硬件状态一致。


图l是硬件的状态变迁图2是引起状态变化的中断对处理线程(或进程)的正确性的影响; 图3是中断处理流程图4是最多需要一次调整设备设置时的任务启动函数流程图; 图5是需要多次调整设备设置的情况下任务启动函数的流程图; 图6是任务终止函数流程图; 图7是应用了本发明之后任务的工作状态图。
具体实施例方式
下面结合附图和具体实施方式
对本发明做进一步的说明。
图1说明了硬件的两种状态,进程在状态0和状态1之间进行切换。 图2描述了在单处理器,多任务操作系统中,与图1中所定义的硬件状态存在着关联的
处理进程和中断处理程序的一种可能的调度时序。
线程P1、 P2和P3先后进入系统,系统按照设定的调度策略对其进行调度。进程间的资 源共享和状态同步采用传统的IPC机制,硬件中断可终止正在运行的工作单元。
图2说明了在未采用本发明所述的算法的情况下可能产生的三种情况。进程Pl开始和终 止于两次中断之间,正常结束。进程P3的工作单元开始和结束于不同的硬件状态,最终的设 置与当前的硬件状态相反。进程P2虽然也被中断,但是由于其经历了两次中断,所以最终的 设置与当前的硬件状态相符。
本发明的思路如下
(1) 设置进程中任务的启动和终止函数、启动标志,并定义中断计数变量。每个进程完 成不同的任务,因此每个任务都有其启动函数和终止函数。任务中有若干需要严格互斥和保
持与硬件的状态一致的工作单元,该硬件状态可以有N个状态值。
(2) 进入中断处理程序,将中断计数变量值加l,获得需要处理的任务的启动标志,并 对已启动的任务进行状态切换操作,完成对已启动任务的设置。
中断处理程序检査任务启动的状态,只有在任务启动完成之后,任务停止之前才需要触 发相应的与硬件状态重新同步的操作。
(3) 执行任务启动函数,获得当前的中断计数变量值、任务写锁,启动任务后,再次获 得中断的计数变量值;比较前后两次获得的计数变量值的奇偶性是否相同,若相同,则任务 启动完成,进入步骤(4);若不同,则对该任务进行状态切换操作,重复步骤(3)。
启动函数的执行流程如下-
(a) 首先获得当前的中断次数并保存,目的是与当前的中断计数值取得同步。
通过获得的硬件状态完成相关设置。即执行任务相关的工作单元。在工作单元执行之前, 获得当前任务的写锁,表示将要改变任务的启动状态,并作相应的设置。
(b) 由于设置过程有可能被中断,刚才所作的设置可能无效。所以执行完一遍所需的操 作之后,并不立即修改任务启动标志和释放写锁,在程序结束之前需要做以下善后处理。
(c) 重新获得当前的中断计数。如果前后两次的计数值的奇偶性相同,则说明在处理过
程中没有发生中断(计数值相等的情况),或者虽然发生了中断,但是硬件经过若干次中断处 理,其最终状态与软件设置相同的状态下,这两者情况下,已有的设置都是有效的。
如果两次计数值的奇偶性不同,则说明在软件设置所依据的硬件状态已经发生变化,已 有的设置不再有效了,需要对其做出调整。所需的调整与中断处理程序时所作的操作一致。
特别的,对于某一个时段中断频率特别高如发生了抖动,调整之后还需要比较前后两次 中断计数值的奇偶性。但实际上,由于中断发生的时刻是随机的,所以,在初次设置时被中 断的概率比较大,但是两次中断发生的最小时间间隔是有限制的,相对于处理器的运行速度 来说, 一次任务启动操作被多次中断的可能性极小。所以, 一般只需要进行一次调整就可以 达到与硬件状态的一致。
本发明引入了任务启动标志,该标志由各个任务维护。中断处理程序不能改变任务的启 动状态,任务启动标志代表任务是否处于启动状态,任务启动和终止过程的状态一致性由本 发明所述方法保证与硬件状态的一致性,因此,中断可以直接获得任务启动标志而不需要附 加的同步措施,并根据任务启动的状态决定是否触发相应的切换操作。由于程序的运行场景 可能比较复杂,通过共享硬件资源联系起来的任务需要知道其他任务的启动状态,所以各个 任务的启动标志也需要保护,本发明采用读写锁,当某个任务正在修改其启动标志时,其它 任务必须等待,多个任务可以同时读这个标志。
图4和图5分别为最多需要一次调整设备设置时和需要多次调整设备设置的流程图。对 于图4所示的情况,其处理过程为-
(41) 获得当前的中断计数变量值并保存,并根据获得的当前任务写锁,执行任务的工 作单元;
(42) 重新获得中断计数变量值,比较前后两次获得中断计数变量值的奇偶性是否相同, 若相同,设置任务启动完成标志后释放任务写锁;若不相同,则对该任务进行状态切换操作, 调整设备设置后释放任务写锁。
对于图5所示的情况,其处理过程为-
(511)获得当前的中断计数变量值并保存,并根据获得的当前任务写锁,执行任务的工 作单元;
(512) 重新获得中断计数变量值;
(513) 比较前后两次获得中断计数变量值的奇偶性是否相同,若相同,设置任务启动完 成标志后释放任务写锁;若不相同,则将重新获得的中断计数变量值设置为当前的中断计数 变量值后对该任务进行状态切换操作,返回步骤(512)。
完成上述操作之后,软件的设置与硬件的状态完全一致,最后,设置任务启动完成标志, 释放写锁后返回。
(4)由任务终止函数完成任务的终止,释放设备资源。
图6是任务的终止函数流程。处理线程在写锁的保护下设置任务停止标志,并完成相应 的设备关闭和其他需要互斥的操作。
在终止函数中,不再需要获得中断计数值来完成与硬件状态的同步,因为在任务终止函 数一开始就设置任务终止标志阻止了中断处理程序进行切换操作,即使处理线程从中断返回 到一个不同的硬件状态,也可正确释放任务己获取的资源。
图7描述了应用了本发明所述的方法之后的程序运行状态,从图中可以看出线程P3通过 调整保证了其最终的设置与当前的硬件状态一致。
本发明可以扩展到多处理器,也就是共享资源的进程可以分布在不同的处理器上,进程 内部的处理仍然可以按照上述模式进行处理即工作单元执行前后中断计数的奇偶性相反的 线程进行调整,但是需要对IPC机制采用多处理器版本。总之,本发明的所述方法具有适用 范围广、可靠性高和实现简单的特点,可广泛应用于驱动程序开发。
权利要求
1、实时中断与多个进程状态同步的方法,其特征在于包括(1)设置进程中任务的启动和终止函数、启动标志,并定义中断计数变量;(2)进入中断处理程序,将中断计数变量值加1,获得需要处理的任务的启动标志,并对已启动的任务进行状态切换操作,完成对已启动任务的设置;(3)执行任务启动函数,获得当前的中断计数变量值、任务写锁,启动任务后,再次获得中断的计数变量值;比较前后两次获得的计数变量值的奇偶性是否相同,若相同,则任务启动完成,进入步骤(4);若不同,则对该任务进行状态切换操作,重复步骤(3);(4)由任务终止函数完成任务的终止,释放设备资源。
2、 根据权利要求l所述的实时中断与多个进程状态同步的方法,其特征在于步骤(2) 中的切换操作包括(A) 关闭在前一状态下打开的设备,释放相关的设备资源;(B) 为新的状态设置打开新的设备,获得相关资源,完成设备设置。
3、 根据权利要求l所述的实时中断与多个进程状态同步的方法,其特征在于步骤(3) 具体为(31) 获得当前的中断计数变量值并保存,并根据获得的当前任务写锁,执行任务的工 作单元;(32) 重新获得中断计数变量值,比较前后两次获得中断计数变量值的奇偶性是否相同, 若相同,设置任务启动完成标志后释放任务写锁;若不相同,则对该任务进行状态切换操作, 调整设备设置后释放任务写锁。
4、 根据权利要求1所述的实时中断与多个进程状态同步的方法,其特征在于步骤(3) 具体为(311) 获得当前的中断计数变量值并保存,并根据获得的当前任务写锁,执行任务的工 作单元;(312) 重新获得中断计数变量值; (313)比较前后两次获得中断计数变量值的奇偶性是否相同,若相同,设置任务启动完 成标志后释放任务写锁;若不相同,则将重新获得的中断计数变量值设置为当前的中断计数 变量值后对该任务进行状态切换操作,返回步骤(312)。
全文摘要
本发明公开了一种实时中断与多个进程状态同步的方法,为实现实时中断与多个进程状态同步而发明。包括(1)设置任务的启动和终止函数、启动标志,定义中断计数变量;(2)中断计数变量值加1,获得需要处理的任务的启动标志,并对已启动的任务进行状态切换操作,完成任务设置;(3)获得当前的中断计数变量值、任务写锁,启动任务后,再次获得中断的计数变量值;比较前后两次获得的计数变量值的奇偶性是否相同,若相同,则进入步骤(4);若不同,则对该任务进行状态切换操作,重复步骤(3);(4)完成任务终止,释放设备资源。本发明使用前后两次中断计数值的奇偶性作为工作单元执行结果有效性的判据,保证了软件设置与硬件状态一致。
文档编号G06F9/48GK101183317SQ20061013873
公开日2008年5月21日 申请日期2006年11月14日 优先权日2006年11月14日
发明者瀛 肖, 蒋鲲鹏 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1