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

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

Info

Publication number
CN100583047C
CN100583047C CN200610138732A CN200610138732A CN100583047C CN 100583047 C CN100583047 C CN 100583047C CN 200610138732 A CN200610138732 A CN 200610138732A CN 200610138732 A CN200610138732 A CN 200610138732A CN 100583047 C CN100583047 C CN 100583047C
Authority
CN
China
Prior art keywords
task
variable value
count variable
interrupt
state
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN200610138732A
Other languages
English (en)
Other versions
CN101183317A (zh
Inventor
肖瀛
蒋鲲鹏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ZTE Corp
Original Assignee
ZTE Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ZTE Corp filed Critical ZTE Corp
Priority to CN200610138732A priority Critical patent/CN100583047C/zh
Publication of CN101183317A publication Critical patent/CN101183317A/zh
Application granted granted Critical
Publication of CN100583047C publication Critical patent/CN100583047C/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种实时中断与多个进程状态同步的方法,为实现实时中断与多个进程状态同步而发明。包括:(1)设置任务的启动和终止函数、启动标志,定义中断计数变量;(2)中断计数变量值加1,获得需要处理的任务的启动标志,并对已启动的任务进行状态切换操作,完成任务设置;(3)获得当前的中断计数变量值、任务写锁,启动任务后,再次获得中断的计数变量值;比较前后两次获得的计数变量值的奇偶性是否相同,若相同,则进入步骤(4);若不同,则对该任务进行状态切换操作,重复步骤(3);(4)完成任务终止,释放设备资源。本发明使用前后两次中断计数值的奇偶性作为工作单元执行结果有效性的判据,保证了软件设置与硬件状态一致。

Description

实时中断与多个进程状态同步的方法
技术领域
本发明涉及计算机操作***中实时中断与多个进程状态同步的方法。
背景技术
资源共享和状态同步是计算机操作***的重要研究课题。各个进程之间共享的各种资源和状态,必须保持同步,以保证数据的完整性。操作***通过必要的手段为各个进程提供一致和可靠的状态。进程的并发产生竞态,使各个进程可见的资源状态可能由于执行顺序不同而有所不同。未能对竞态进行正确的处理将导致***状态错乱。一些进程间通信(IPC)机制被引入操作***,以解决并发请求所引起的竞态所产生的编程问题,如信号量、互斥、管道、锁机制等。
在驱动程序的设计中,可能有多个进程共享同一硬件资源,即各进程需根据硬件的某个特定状态对这些共享的硬件资源进行适当的配置。将在共享的硬件资源上进行的一组操作定义为一个工作单元(Unit)。这些并发的工作单元必须保证其设置与硬件状态所规定的工作状态一致。各个进程之间可以用传统IPC机制进行处理。
中断的产生使竞态的处理更为复杂。如果中断的产生正好代表着工作单元所依据的硬件状态发生了变化,对于一个没有执行完毕的工作单元,当程序从中断返回时,工作单元就会依据已经过时的状态继续操作,显然,如果不对这种情况进行处理,***就会工作在错误的状态。
由于中断处理程序的特殊性,中断处理程序有一些特别的限制。首先,中断必须尽快得到响应,;其次:中断处理程序必须尽可能短;最后,中断不能阻塞,不可在中断处理程序中睡眠,中断中也不能发生调度。普通的IPC机制一般以睡眠的方式等待所需的资源。由于中断处理程序的限制,普通的IPC机制大多不适于中断处理程序和进程之间的同步。中断和进程之间一般通过事件通知模型来进行通信。进程在某一个信号量或者等待队列中睡眠,直到中断将这一资源可用的消息通知给进程。事件通知模型适于基于状态的变化而不是状态本身进行工作的进程和中断处理程序之间的通信和同步,在后一种情况下,进程可在任何状态下工作,所以不会等待某个状态发生变化。还有一种可选的方式是:在工作单元执行前后关闭和打开中断,并用定时器查询的方式获得与硬件状态的同步的方式。但是较低的***执行效率和较高的开销也使这种模型不太适合。目前,使用事件通知模型进行资源共享和同步的技术已经得到广泛的运用,但是对基于硬件状态而不是状态变化的进程和中断处理程序之间的同步还没有有效的模式,急需发展新的模型来解决。
发明内容
为克服现有技术中的缺陷和不足,本发明的目的在于提供一种实时中断与多个进程状态同步的方法。
为达到上述目的,本发明采用以下技术方案:
实时中断与多个进程状态同步的方法,包括
(1)设置进程中任务的启动和终止函数、启动标志,并定义中断计数变量;
(2)进入中断处理程序,将中断计数变量值加1,获得需要处理的任务的启动标志,并对已启动的任务进行状态切换操作,完成对已启动任务的设置;
(3)执行任务启动函数,获得当前的中断计数变量值、任务写锁,启动任务;
(4)再次获得中断的计数变量值;比较前后两次获得的计数变量值的奇偶性是否相同,若相同,则任务启动完成,进入步骤(5);若不同,则对该任务进行状态切换操作,重复步骤(4);
(5)由任务终止函数完成任务的终止,释放设备资源。
其中,步骤(2)和步骤(4)中的切换操作包括:
(A)关闭在前一状态下打开的设备,释放相关的设备资源;
(B)为新的状态设置打开新的设备,获得相关资源,完成设备设置。
其中,可以用以下步骤替换所述步骤(3)和(4):
(31)执行任务启动函数,获得当前的中断计数变量值并保存,并根据获得的当前任务写锁,执行任务的工作单元;
(32)重新获得中断计数变量值,比较前后两次获得中断计数变量值的奇偶性是否相同,若相同,设置任务启动完成标志后释放任务写锁;若不相同,则对该任务进行状态切换操作,设置任务启动完成标志后释放任务写锁。
其中,可以用以下步骤替换所述步骤(3)和(4):
(41)执行任务启动函数,获得当前的中断计数变量值并保存,并根据获得的当前任务写锁,执行任务的工作单元;
(42)重新获得中断计数变量值;
(43)比较前后两次获得中断计数变量值的奇偶性是否相同,若相同,设置任务启动完成标志后释放任务写锁;若不相同,则将重新获得的中断计数变量值设置为当前的中断计数变量值后对该任务进行状态切换操作,返回步骤(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机制采用多处理器版本。总之,本发明的所述方法具有适用范围广、可靠性高和实现简单的特点,可广泛应用于驱动程序开发。

Claims (3)

1、实时中断与多个进程状态同步的方法,其特征在于:包括
(1)设置进程中任务的启动和终止函数、启动标志,并定义中断计数变量;
(2)进入中断处理程序,将中断计数变量值加1,获得需要处理的任务的启动标志,并对已启动的任务进行状态切换操作,完成对已启动任务的设置;
(3)执行任务启动函数,获得当前的中断计数变量值、任务写锁,启动任务;
(4)再次获得中断的计数变量值;比较前后两次获得的计数变量值的奇偶性是否相同,若相同,则任务启动完成,进入步骤(5);若不同,则对该任务进行状态切换操作,重复步骤(4);
(5)由任务终止函数完成任务的终止,释放设备资源;
其中,步骤(2)和步骤(4)中的切换操作包括:
(A)关闭在前一状态下打开的设备,释放相关的设备资源;
(B)为新的状态设置打开新的设备,获得相关资源,完成设备设置。
2、根据权利要求1所述的实时中断与多个进程状态同步的方法,其特征在于:用以下步骤代替所述步骤(3)和(4):
(31)执行任务启动函数,获得当前的中断计数变量值并保存,并根据获得的当前任务写锁,执行任务的工作单元;
(32)重新获得中断计数变量值,比较前后两次获得中断计数变量值的奇偶性是否相同,若相同,设置任务启动完成标志后释放任务写锁;若不相同,则对该任务进行状态切换操作,设置任务启动完成标志后释放任务写锁。
3、根据权利要求1所述的实时中断与多个进程状态同步的方法,其特征在于:用以下步骤代替所述步骤(3)和(4):
(41)执行任务启动函数,获得当前的中断计数变量值并保存,并根据获得的当前任务写锁,执行任务的工作单元;
(42)重新获得中断计数变量值;
(43)比较前后两次获得中断计数变量值的奇偶性是否相同,若相同,设置任务启动完成标志后释放任务写锁;若不相同,则将重新获得的中断计数变量值设置为当前的中断计数变量值后对该任务进行状态切换操作,返回步骤(42)。
CN200610138732A 2006-11-14 2006-11-14 实时中断与多个进程状态同步的方法 Expired - Fee Related CN100583047C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN200610138732A CN100583047C (zh) 2006-11-14 2006-11-14 实时中断与多个进程状态同步的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN200610138732A CN100583047C (zh) 2006-11-14 2006-11-14 实时中断与多个进程状态同步的方法

Publications (2)

Publication Number Publication Date
CN101183317A CN101183317A (zh) 2008-05-21
CN100583047C true CN100583047C (zh) 2010-01-20

Family

ID=39448605

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200610138732A Expired - Fee Related CN100583047C (zh) 2006-11-14 2006-11-14 实时中断与多个进程状态同步的方法

Country Status (1)

Country Link
CN (1) CN100583047C (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108073108A (zh) * 2016-11-14 2018-05-25 Ls 产电株式会社 用于控制逆变器中的中断的方法

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103488953B (zh) * 2013-10-08 2016-01-20 飞天诚信科技股份有限公司 一种应用于多功能设备的智能切换方法
JP6350452B2 (ja) * 2015-08-27 2018-07-04 京セラドキュメントソリューションズ株式会社 電子機器および割り込み処理プログラム
CN109254834B (zh) * 2017-07-13 2021-05-14 普天信息技术有限公司 一种多线程启动同步方法
CN107678862B (zh) * 2017-10-10 2021-04-13 中电科航空电子有限公司 一种解决arinc661规范中竞态条件的方法
CN110321585A (zh) * 2019-04-09 2019-10-11 国网山西省电力公司电力科学研究院 基于ga-bp神经网络开关柜绝缘缺陷检测方法及***
CN110673792B (zh) * 2019-09-10 2022-08-02 苏州浪潮智能科技有限公司 存储设备的任务处理方法、装置、设备及可读存储介质

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108073108A (zh) * 2016-11-14 2018-05-25 Ls 产电株式会社 用于控制逆变器中的中断的方法

Also Published As

Publication number Publication date
CN101183317A (zh) 2008-05-21

Similar Documents

Publication Publication Date Title
CN100583047C (zh) 实时中断与多个进程状态同步的方法
US8176489B2 (en) Use of rollback RCU with read-side modifications to RCU-protected data structures
CN109918141B (zh) 线程执行方法、装置、终端及存储介质
CN101833475B (zh) 用于执行指令原子块的方法和装置
US8584138B2 (en) Direct switching of software threads by selectively bypassing run queue based on selection criteria
US8205201B2 (en) Process for maintaining execution synchronization between several asynchronous processors working in parallel and in a redundant manner
US6789214B1 (en) Process for reconfiguring an information processing system upon detection of a component failure
TW201508635A (zh) 多核心微處理器動態重新配置
CN107003896B (zh) 具有共享事务处理资源的装置和数据处理方法
TW201510860A (zh) 多核心同步機制
TW200941340A (en) A method and apparatus for suspending execution of a thread until a specified memory access occurs
US20090307707A1 (en) System and method for dynamically adaptive mutual exclusion in multi-threaded computing environment
US9459949B2 (en) Methods and apparatus to provide failure detection
US20150113252A1 (en) Thread control and calling method of multi-thread virtual pipeline (mvp) processor, and processor thereof
US20040187118A1 (en) Software barrier synchronization
CN101216792B (zh) 实时操作***的任务管理方法、装置
US20080155546A1 (en) Method of controlling thread access to a synchronization object
Wang et al. Transaction-friendly condition variables
US20150309845A1 (en) Synchronization method
CN105094840A (zh) 一种基于缓存一致性原理的原子操作实现方法及装置
JP5436422B2 (ja) 高インテグリティと高可用性のコンピュータ処理モジュール
CN107305507A (zh) 死锁控制方法和装置
CN108196849A (zh) 一种低延迟指令调度器
CN114816678B (zh) 一种虚拟机调度的方法、***、设备和存储介质
CN106445475A (zh) 使用lambda表达式实现的基于过程的异步调用模型

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20100120

Termination date: 20151114