嵌入式实时多分区操作系统进程同步机制的研究
2017-07-10卫一芃杨弋张东
卫一芃 杨弋 张东
摘 要: 并发执行的各进程在访问共享资源时可能造成操作系统的混乱。如何做到进程间相互合作,共享资源?本文详细介绍了各种进程间同步互斥的方式以及信号机制。这些方式使用灵活、方便,能够有效地实现进程间的资源共享及相互合作。
关键词:进程同步;信号量;事件;互斥量;条件变量;信号
中图分类号:TP311 文献标识码:A
嵌入式实时多分区操作系统是专门为新一代航空电子系统开发的,它是支持综合化航空电子系统的嵌入式实时操作系统。进程同步与通信功能的出现为多任务同时执行提供的可能。进程同步机制在嵌入式实时多分区操作系统中进程交互、数据保护及临界资源保护等方面做出巨大贡献。
1 进程间关系
為了满足新一代航空电子系统高度综合化、模块化的要求,在高安全实时操作系统中引 入了分区的概念。分区在时间和空间上相互隔离。分区内运行一个或多个进程,每个进程作为基本的运行单位隶属于特定的分区,各进程之间并发执行[ 1 ]。
一个进程就是一个正在执行程序的实例,包括程序计数器,寄存器和变量的当前值。进程是分区内的可调度单元。一个分区内的进程共享分区资源。进程参与资源竞争,处理器资源在进程间分配,进程的状态在不断的变化[ 2 ]。
进程动态性、并发性、独立性及异步性等特性。进程的异步性就是指每个进程都以其相对独立不可预知的速度运行。进程的异步性是导致进程争夺共享资源的原因。
多道程序系统中,进程间由于资源共享及合作,各进程可能产生两种形式的制约关系—间接制约和直接制约。在仅有一台打印机的系统中有两个进程,一个进程占用打印机时另一个进程必须阻塞,等到打印机空闲,阻塞的进程才能被唤醒,转为就绪态,占用打印机。这种情况下两个进程的关系称为间接制约。另一种情况是,进程之间通过缓冲传递数据。当缓冲为空时接收进程阻塞,此时,如果有发送进程向缓冲发送数据,接收进程才能被唤醒。反之,当缓冲满时,发送进程阻塞,接收进程从缓冲接收数据后,缓冲不满,发送进程才能从阻塞态转为就绪态,向缓冲发送消息。
2 进程同步与互斥
任何一个时刻,只有一个进程处于运行态,占用处理器。两个或多个进程读写某些共享数据,而最后的结果取决于进程运行的精准时序,这种现象称为竞争条件(race condition)。
如何避免竞争条件?要避免此类现象的发生关键是要找出某种途径以阻止多个进程同时读写共享数据,即以某种手段确保当一个进程在使用共享变量或文件时其他进程不能操作。这种手段即为互斥(mutual exclusion)。我们把对共享内存进行访问的程序片段称为临区域(critical region)或临界区(critical section)。如果我们能够适当地安排,使得两个进程不可能同时处于临界区中,就能够避免竞争条件。
实现进程间同步与互斥的方式有:信号量,事件,互斥量,条件变量。下面详细介绍这几种方式。
2.1信号量
信号量用于实现对分区内资源的同步和互斥访问。进程等待信号量以获取资源访问权,访问结束时释放信号量。等待信号量的进程可以按照FIFO(先进先出,First in First out)规则,也可以按照优先级规则在资源的等待队列中排队。相同优先级的进程按照FIFO规则排队。进程在等待队列的排队规则在信号量创建时定义。
信号量管理提供了资源同步和互斥访问的机制,分区中提供了两种类型的信号量:计数信号量和互斥信号量。
计数信号量用于对多个资源的受控访问,初始值为共享资源的数目。互斥信号量用于共享资源的互斥访问。创建信号量时设置计数器的初始值,当信号量被获取时,其计数值减1;当信号量被释放时,其计数值加1。如果计数值为0,则尝试获取信号量的进程被阻塞。等待信号量的进程可以按照先进先出原则,也可以按照优先级次序原则在队列中排队。采用优先级排队规则时,对于同优先级进程按先进先出原则排队。
2.2 事件
事件是一种进程间通信机制:它可以把某种情况的发生告知给等待进程。事件是一个二值状态变量(状态为“有效态(UP)”和“无效态(DOWN)”),通过事件状态的改变通知进程事件的发生。
2.3互斥量
一个互斥量在某一时刻只允许一个进程获取。每个互斥量包含一个优先级定义,当某个进程拥有该互斥量时,该进程的优先级被提升到该互斥量所定义的优先级;当该进程释放该互斥量时,该进程的优先级被恢复到其拥有该互斥量之前的值;如果进程在获得互斥量后被其他服务设置了优先级,那么在该进程释放互斥量时,它的优先级将被恢复为该服务设置的优先级。
一个进程在某一时刻最多只允许获取一个互斥量,当某进程拥有互斥量时,它不允许被调用的服务阻塞。
等待互斥量的进程可以按照先进先出原则,也可以按照优先级次序原则在队列中排队。在优先级次序条件下,同等优先级的进程按照先进先出原则排队。等待队列的排队原则在互斥量创建时定义。
每个互斥量都有一个锁定计数,进程释放互斥量的次数必须和获取互斥量的次数相等,该互斥量才能够被释放。此外,进程也可以通过重置互斥量来立即释放互斥量[ 3 ]。
2.4 条件变量
条件变量是另一种同步机制。互斥量在允许或阻塞对临界区的访问上非常有用,而条件变量允许线程由于一些未达到的条件而阻塞。
绝大多数情况下,条件变量与互斥量在一起使用。这种模式用于让一个线程锁住一个互斥量,然后当它不能获得它期待的结果时等待一个条件变量。最后另一个线程会向它发信号,使其继续执行[ 4 ]。
3 信号
信号机制是进程之间相互传递消息的一种方法,主要用于产生、传送和处理系统中的各种信号。通过信号可以实现进程间的控制和通信。进程等待某个事件时,该进程仍然可以执行其他任务。当事件发生,操作系统发送信号通知该进程。这称之为信号的异步性。通过信号完成进程间通信和控制,将大幅提高嵌入式实时多分区操作系统的处理能力,增强实时性。
4 结语
操作系统中引入进程后,改善了资源利用率,但是由于进程的异步性,在其争夺共享资源时可能会给系统造成混乱,使数据处理出错,导致每次结果不同。进程同步和互斥的任务就是使并发执行的各进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。
本文详细介绍了信号量、事件、互斥量、条件变量等同步机制与信号的基本概念,在复杂的应用中,进程间共享的资源类型不一、大小不一,因此应根据具体情况和需求,采用相应的同步机制,以提高软件设计的灵活性和信息交换的效率。
参考文献:
[1] 李运喜,时磊,任晓瑞.分区内进程管理的设计与实现[J].航空计算计算,2005年12月,04期:12-14.
[2] 冯海欣.系统进程的同步[J].科技资讯,2007年,04期:170.
[3] Airlines Electronic Engineering Committee. Avionics Application Software Standard Interface Part 1-Required Services[S].16701 MELFORD BLVD.SUITE 120 BOWIE, MARYLAND 20715 USA: ARINC, August 21,2015.
[4] Andrew S.Tanenbaum著,陈向群,马红兵,等译.现代操作系统[M].第1版.北京:机械工业出版社,2013年6月.
航空科学基金项目资助:
工信部民用飞机专项科研项目(MJ-S-2012-05)
作者简介:
卫一芃(1984-),女,陕西西安人,硕士研究生,研究方向为嵌入式实时操作系统。