访问临界区的方法和系统的制作方法

文档序号:6560714阅读:112来源:国知局
专利名称:访问临界区的方法和系统的制作方法
技术领域
本发明涉及数据通信技术领域,具体涉及在多核系统中访问临界区的方法和系统。
背景技术
在多核系统中通过自旋锁(Spinlock)实现多中央处理单元(CPU)并发运行互斥访问临界资源的要求。读写锁(read write lock)是自旋锁的一个变形,自旋锁一次只能有一个进程读进程或写进程进入临界区,对临界区的操作是串行操作,而对读写锁而言,读进程可以并发执行,写进程则不允许并发执行,在读进程或写进程执行过程中,另外一种进程不允许执行即读进程和写进程不能同时执行。
以linux中针对无互锁流水线级的微处理机(MIPS)的读写锁实现方案为例,对现有的读写锁数据结构进行说明在linux 2.6.9中给出了针对MIPS的读写锁数据结构,具体如下typedef struct{volatile unsigned int lock;}rwlock_t;其中,无符号整数类型的lock表示读写锁的锁值,读写锁共16位,其中,第0~14位表示当前临界区所加的读锁的个数,第15位为写锁标志位。因此,当lock的值在(0,0x7FFF]时,表示当前临界区加读锁,且lock的值即为当前临界区所加的读锁的个数;当lock的值为0x8000时,表示当前临界区加写锁。
图1是现有的从临界区读取数据的流程图,如图1所示,其具体步骤如下步骤101CPU准备从临界区读取数据。
步骤102CPU判断临界区是否已加锁,若是,执行步骤103;否则,执行步骤104。
步骤103CPU判断临界区已加读锁还是写锁,若已加读锁,执行步骤104;若已加写锁,执行步骤105。
步骤104CPU将临界区的读写锁的锁值加1,开始从临界区读取数据,本流程结束。
步骤105CPU等待至临界区的写锁释放即读写锁的写锁标志位由1变为0时,将临界区的读写锁的锁值加1,开始从临界区读取数据。
图2是现有的向临界区写入数据的流程图,如图2所示,其具体步骤如下步骤201CPU准备向临界区写入数据。
步骤202CPU判断临界区是否已加锁,若是,执行步骤203;否则,执行步骤204。
步骤203CPU等待至临界区的读写锁释放即读写锁的锁值为0时,将读写锁的写锁标志位置为1,并向临界区写入数据,本流程结束。
无论临界区已加读锁还是已加写锁,只要临界区的读写锁还未全部释放即读写锁的锁值不为0,CPU就无法向临界区写入数据。
步骤204CPU将临界区的读写锁的写锁标志位置为1,开始向临界区写入数据。
可以看出当CPU要从临界区读取数据时,若临界区已加读锁,则读进程仍可进入临界区,若临界区已加写锁,则须等待至写锁释放后读进程才能进入临界区;当CPU要向临界区写入数据时,无论临界区是否已加读锁还是写锁,都必须等待至读写锁完全释放后,写进程才能进入临界区,这样造成的问题是当临界区的读写锁的锁值不为0时,若不停地有要求从临界区读取数据的读进程请求进入,则要求向临界区写入数据的写进程必须一直等待,直至读写锁的锁值为0时写进程才能进入临界区,当写进程比较紧急如管理员要对多核系统进行实时性要求较高的写操作时,该要求就无法得到满足。

发明内容
本发明提供多核系统中访问临界区的方法和系统,已使得对临界区的写操作可以及时得到响应。
本发明的技术方案是这样实现的一种访问临界区的方法,预先设置用于指示是否有写进程在等待的写优先标志位,包括CPU准备向临界区写入数据,当检测到当前临界区已加读锁、且写优先标志位指示无写进程在等待时,则将写优先标志位设置为指示有写进程在等待;在所述读锁释放后,将写优先标志位设置为无写进程在等待,并向临界区写入数据。
所述CPU准备向临界区写入数据之后进一步包括当CPU检测到当前临界区已加读锁、且写优先标志位指示有写进程在等待时,则在所述读锁释放后,CPU对应的写进程与所述正在等待的写进程进行进入临界区的竞争,若竞争成功,CPU将写优先标志位设置为无写进程在等待,并向临界区写入数据;若竞争失败,CPU对应的写进程继续等待。
所述CPU准备向临界区写入数据之后进一步包括当CPU检测到当前临界区已加写锁时,在该写锁释放后,向临界区写入数据。
所述CPU准备向临界区写入数据之后进一步包括当CPU检测到临界区未加锁时,直接向临界区写入数据。
所述方法进一步包括CPU准备从临界区读取数据,当检测到当前临界区已加读锁且写优先标志位指示有写进程在等待时,则依次等待所述读锁释放、等待所述正在等待的写进程进入临界区、等待写锁释放,从临界区读取数据。
所述设置写优先标志位包括在临界区的读写锁中设置写优先标志位。
一种访问临界区的方法,预先设置用于指示是否有写进程在等待的写优先标志位,包括CPU准备从临界区读取数据,当检测到当前临界区已加读锁且写优先标志位指示有写进程在等待时,依次等待所述读锁释放、等待所述正在等待的写进程进入临界区、等待写锁释放,从临界区读取数据。
所述CPU准备从临界区读取数据之后进一步包括当CPU检测到当前临界区加读锁、且写优先标志位指示无写进程在等待时,直接从临界区读取数据。
所述CPU准备从临界区读取数据之后进一步包括当CPU检测到当前临界区加写锁时,在该写锁释放后,从临界区读取数据。
所述CPU准备从临界区读取数据之后进一步包括当CPU检测到当前临界区未加锁时,直接从临界区读取数据。
一种访问临界区的系统,包括CPU、读写锁模块和写优先标志位存储模块,其中CPU,用于准备向临界区写入数据,当根据从读写锁模块读取的读写锁值检测到当前临界区已加读锁、且从写优先标志位存储模块读取的写优先标志位的值指示无写进程在等待时,将写优先标志位存储模块存储的写优先标志位的值设置为指示有写进程在等待,并在根据从读写锁模块读取的读写锁值检测到读锁释放后,将写优先标志位存储模块存储的写优先标志位的值设置为指示无写进程在等待,并向临界区写入数据;读写锁模块,用于存储临界区的读写锁值,并根据进入到临界区的读、写进程和临界区释放的读、写锁,更改读写锁值;写优先标志位存储模块,用于存储写优先标志位的值,根据CPU的操作,更改写优先标志位的值。
所述CPU进一步用于,准备向临界区写入数据,当检测到当前临界区已加读锁、且从写优先标志位存储模块读取的写优先标志位的值指示有写进程在等待时,则在根据从读写锁模块读取的读写锁值检测到所述读锁释放后,与所述正在等待的写进程进行进入临界区的竞争,若竞争成功,将写优先标志位存储模块存储的写优先标志位的值设置为无写进程在等待,并向临界区写入数据;若竞争失败,继续等待。
所述CPU进一步用于,准备向临界区写入数据,当根据从读写锁模块读取的读写锁值检测到当前临界区已加写锁时,在根据从读写锁模块读取的读写锁值检测到写锁释放后,向临界区写入数据。
所述CPU进一步用于,准备从临界区读取数据,当根据从读写锁模块读取的读写锁值检测到当前临界区加读锁、且根据从写优先标志位存储模块读取的写优先标志位的值检测到无写进程在等待时,直接从临界区读取数据。
所述写优先标志位存储模块位于读写锁模块之内。
一种访问临界区的系统,包括CPU、读写锁模块和写优先标志位存储模块,其中CPU,用于准备从临界区读取数据,当根据从读写锁模块读取的读写锁值检测到当前临界区已加读锁、且根据从写优先标志位存储模块读取的写优先标志位的值检测到有写进程在等待时,在根据从读写锁模块读取的读写锁值,依次检测到读锁释放、正在等待的写进程进入临界区、写锁释放时,从临界区读取数据;读写锁模块,用于存储临界区的读写锁值,并根据进入到临界区的读、写进程和临界区释放的读、写锁,更改读写锁值;写优先标志位存储模块,用于存储写优先标志位的值。
所述CPU进一步用于,准备从临界区读取数据,当根据从读写锁模块读取的读写锁值检测到当前临界区加读锁、且根据从写优先标志位存储模块读取的写优先标志位的值检测到无写进程在等待时,则直接从临界区读取数据。
所述CPU进一步用于,准备从临界区读取数据,当根据从读写锁模块读取的读写锁值检测到当前临界区加写锁时,在根据从读写锁模块读取的读写锁值检测到写锁释放后,从临界区读取数据。
与现有技术相比,本发明通过定义用于指示是否有写进程在等待的写优先标志位,当CPU要从临界区读取数据时,若根据写优先标志位检测到同时有写进程在等待,则写进程优先进入临界区;当CPU要向临界区写入数据时,若检测到临界区已加读锁,且写优先标志位指示无写进程在等待,则设置写优先标志位为指示有写进程在等待,以使得在所述读锁释放后,能够及时进入临界区,使得对临界区的写操作可以及时得到响应,满足了多核系统中实时性要求较高的写操作的要求。


图1为现有的在多核系统中从临界区读取数据的流程图;图2为现有的在多核系统中向临界区写入数据的流程图;图3为本发明实施例提供的在多核系统中从临界区读取数据的流程图;图4为本发明实施例提供的在多核系统中向临界区写入数据的流程图;图5为本发明实施例提供的应用在多核系统中的临界区访问的系统组成图。
具体实施例方式
下面结合附图及具体实施例对本发明再作进一步详细的说明。
图3为本发明实施例提供的在多核系统中,从临界区读取数据的流程图,如图3所示,其具体步骤如下步骤301预先设置一个用于指示当前是否有写进程正在等待进入临界区的写优先标志位。
例如对于支持Linux的MIPS,可以将读写锁的第14位设为写优先标志位,当写优先标志位为1时即读写锁的值在
时,表示当前有写进程在等待,若同时有读进程在等待,则该写进程应优先进入临界区。
或者,也可在读写锁之外,单独设置一个写优先标志位,并初始化该写优先标志位的值为0。
步骤302CPU准备从临界区读取数据。
步骤303CPU根据临界区的读写锁的锁值,判断临界区是否已加锁,若是,执行步骤304;否则,执行步骤307。
只要读写锁的锁值不为0,就表示临界区已加锁。
步骤304CPU判断临界区已加读锁还是写锁,若已加读锁,执行步骤305;若已加写锁,执行步骤308。
写锁标志位为0表示临界区加读锁,写锁标志位为1表示临界区加写锁。
步骤305CPU判断写优先标志位是否指示已有写进程在等待,若是,执行步骤306;否则,执行步骤307。
步骤306CPU依次等待当前的读锁释放、等待正在等待的写进程进入临界区、等待写锁释放,然后CPU将读写锁的锁值加1,开始从临界区读取数据,本流程结束。
例如对于支持linux的MIPS,若将读写锁的第14位设为写优先标志位,则本步骤中,CPU首先会等待至读写锁的锁值变为0x4000即第14位为1,其余位为0,然后等待至读写锁的锁值变为0x8000即第15位为1,其余位为0,然后等待至读写锁的锁值变为0,此时,CPU可以从临界区读取数据。
步骤307CPU将读写锁的锁值加1,开始从临界区读取数据,本流程结束。
步骤308CPU等待当前的写锁释放,将读写锁的锁值加1,开始从临界区读取数据,本流程结束。
图4为本发明实施例提供的在多核系统中向临界区写入数据的流程图,如图4所示,其具体步骤如下步骤401预先设置一个用于指示当前是否有写进程正在等待进入临界区的写优先标志位。
写优先标志位的设置方式与步骤301相同。
步骤402CPU要向临界区写入数据。
步骤403CPU根据临界区的读写锁的锁值,判断临界区是否已加锁,若是,执行步骤405;否则,执行步骤404。
步骤404CPU将读写锁的写锁标志位置为1,然后向临界区写入数据,本流程结束。
步骤405CPU判断临界区已加读锁还是写锁,若已加读锁,执行步骤406;若已加写锁,执行步骤409。
步骤406CPU判断写优先标志位是否指示已有写进程在等待,若是,执行步骤407;否则,执行步骤408。
步骤407CPU等待至读锁释放,CPU对应的写进程与正在等待的写进程进行进入临界区的竞争,若竞争成功,CPU将写优先标志位置为0,并向临界区写入数据,本流程结束;若竞争失败,CPU对应的写进程继续等待,本流程结束。
步骤408CPU将写优先标志位置为1,然后等待读锁释放,将写锁标志位置为1,将写优先标志位置为0,并向临界区写入数据,本流程结束。
步骤409CPU等待当前的写锁释放,将读写锁的写锁标志位置为1,向临界区写入数据,本流程结束。
若临界区的写锁释放时,同时有读进程和写进程在等待,则等待的读进程和写进程通过竞争决定谁先进入临界区。
图5为本发明实施例提供的应用在多核系统中的临界区访问系统组成图,如图5所示,其主要包括CPU51、读写锁模块52和写优先标志位存储模块53,其中CPU51用于在准备从临界区读取数据时,根据从读写锁模块52读取的读写锁值,判断临界区是否已加锁,若未加锁,则直接从临界区读取数据;若已加读锁,则根据从写优先标志位存储模块53读取的写优先标志位的值,判断是否有写进程在等待,若有,则根据从读写锁模块52读取的读写锁值检测到当前读锁释放、且正在等待的写进程进入临界区、且写锁释放后,从临界区读取数据;若没有,则直接从临界区读取数据;若已加写锁,则根据从读写锁模块52读取的读写锁值检测到当前写锁释放后,从临界区读取数据。
进一步地,CPU51用于在准备向临界区写入数据时,根据从读写锁模块52读取的读写锁值,判断临界区是否已加锁,若未加锁,则直接向临界区写入数据;若已加读锁且从写优先标志位存储模块53读取的写优先标志位的值为1,则在根据从读写锁模块52读取的读写锁值检测到当前读锁释放后,与正在等待的其它写进程进行进入临界区的竞争,若自身竞争成功,将写优先标志位存储模块54存储的写优先标志位置为0,并向临界区写入数据;若竞争失败,则继续等待。
若已加读锁且从写优先标志位存储模块53读取的写优先标志位的值为0,则将写优先标志位存储模块53的写优先标志位置为1、并在当前读锁释放后,将写优先标志位存储模块54的写优先标志位置为0,并向临界区写入数据;若已加写锁,则根据从读写锁模块53读取的读写锁值检测到当前写锁释放后,向临界区写入数据。
读写锁模块52用于存储临界区的读写锁的锁值,并根据进入到临界区的CPU51的读进程或写进程、以及临界区释放的读、写锁,更改读写锁的锁值。
写优先标志位存储模块53用于存储写优先标志位的值,并根据CPU51的操作更改写优先标志位的值。
写优先标志位存储模块53可独立于读写锁模块52之外,也可位于读写锁模块52之中。
以上所述仅为本发明的过程及方法实施例,并不用以限制本发明,凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种访问临界区的方法,其特征在于,预先设置用于指示是否有写进程在等待的写优先标志位,该方法包括中央处理单元CPU准备向临界区写入数据,当检测到当前临界区已加读锁、且写优先标志位指示无写进程在等待时,则将写优先标志位设置为指示有写进程在等待;在所述读锁释放后,将写优先标志位设置为无写进程在等待,并向临界区写入数据。
2.如权利要求1所述的访问临界区的方法,其特征在于,所述CPU准备向临界区写入数据之后进一步包括当CPU检测到当前临界区已加读锁、且写优先标志位指示有写进程在等待时,则在所述读锁释放后,CPU对应的写进程与所述正在等待的写进程进行进入临界区的竞争,若竞争成功,CPU将写优先标志位设置为无写进程在等待,并向临界区写入数据;若竞争失败,CPU对应的写进程继续等待。
3.如权利要求1所述的访问临界区的方法,其特征在于,所述CPU准备向临界区写入数据之后进一步包括当CPU检测到当前临界区已加写锁时,在该写锁释放后,向临界区写入数据。
4.如权利要求1所述的访问临界区的方法,其特征在于,所述CPU准备向临界区写入数据之后进一步包括当CPU检测到临界区未加锁时,直接向临界区写入数据。
5.如权利要求1所述的访问临界区的方法,其特征在于,所述方法进一步包括CPU准备从临界区读取数据,当检测到当前临界区已加读锁且写优先标志位指示有写进程在等待时,则依次等待所述读锁释放、等待所述正在等待的写进程进入临界区、等待写锁释放,从临界区读取数据。
6.如权利要求1至5中任一项所述的访问临界区的方法,其特征在于,所述设置写优先标志位包括在临界区的读写锁中设置写优先标志位。
7.一种访问临界区的方法,其特征在于,预先设置用于指示是否有写进程在等待的写优先标志位,该方法包括CPU准备从临界区读取数据,当检测到当前临界区已加读锁且写优先标志位指示有写进程在等待时,依次等待所述读锁释放、等待所述正在等待的写进程进入临界区、等待写锁释放,从临界区读取数据。
8.如权利要求7所述的访问临界区的方法,其特征在于,所述CPU准备从临界区读取数据之后进一步包括当CPU检测到当前临界区加读锁、且写优先标志位指示无写进程在等待时,直接从临界区读取数据。
9.如权利要求7所述的访问临界区的方法,其特征在于,所述CPU准备从临界区读取数据之后进一步包括当CPU检测到当前临界区加写锁时,在该写锁释放后,从临界区读取数据。
10.如权利要求7所述的访问临界区的方法,其特征在于,所述CPU准备从临界区读取数据之后进一步包括当CPU检测到当前临界区未加锁时,直接从临界区读取数据。
11.一种访问临界区的系统,其特征在于,包括CPU、读写锁模块和写优先标志位存储模块,其中CPU,用于准备向临界区写入数据,当根据从读写锁模块读取的读写锁值检测到当前临界区已加读锁、且从写优先标志位存储模块读取的写优先标志位的值指示无写进程在等待时,将写优先标志位存储模块存储的写优先标志位的值设置为指示有写进程在等待,并在根据从读写锁模块读取的读写锁值检测到读锁释放后,将写优先标志位存储模块存储的写优先标志位的值设置为指示无写进程在等待,并向临界区写入数据;读写锁模块,用于存储临界区的读写锁值,并根据进入到临界区的读、写进程和临界区释放的读、写锁,更改读写锁值;写优先标志位存储模块,用于存储写优先标志位的值,根据CPU的操作,更改写优先标志位的值。
12.如权利要求11所述的访问临界区的系统,其特征在于,所述CPU进一步用于,准备向临界区写入数据,当检测到当前临界区已加读锁、且从写优先标志位存储模块读取的写优先标志位的值指示有写进程在等待时,则在根据从读写锁模块读取的读写锁值检测到所述读锁释放后,与所述正在等待的写进程进行进入临界区的竞争,若竞争成功,将写优先标志位存储模块存储的写优先标志位的值设置为无写进程在等待,并向临界区写入数据;若竞争失败,继续等待。
13.如权利要求11所述的访问临界区的系统,其特征在于,所述CPU进一步用于,准备向临界区写入数据,当根据从读写锁模块读取的读写锁值检测到当前临界区已加写锁时,在根据从读写锁模块读取的读写锁值检测到写锁释放后,向临界区写入数据。
14.如权利要求11所述的访问临界区的系统,其特征在于,所述CPU进一步用于,准备从临界区读取数据,当根据从读写锁模块读取的读写锁值检测到当前临界区加读锁、且根据从写优先标志位存储模块读取的写优先标志位的值检测到无写进程在等待时,直接从临界区读取数据。
15.如权利要求11至14中任一项所述的访问临界区的系统,其特征在于,所述写优先标志位存储模块位于读写锁模块之内。
16.一种访问临界区的系统,其特征在于,包括CPU、读写锁模块和写优先标志位存储模块,其中CPU,用于准备从临界区读取数据,当根据从读写锁模块读取的读写锁值检测到当前临界区已加读锁、且根据从写优先标志位存储模块读取的写优先标志位的值检测到有写进程在等待时,在根据从读写锁模块读取的读写锁值,依次检测到读锁释放、正在等待的写进程进入临界区、写锁释放时,从临界区读取数据;读写锁模块,用于存储临界区的读写锁值,并根据进入到临界区的读、写进程和临界区释放的读、写锁,更改读写锁值;写优先标志位存储模块,用于存储写优先标志位的值。
17.如权利要求16所述的访问临界区的系统,其特征在于,所述CPU进一步用于,准备从临界区读取数据,当根据从读写锁模块读取的读写锁值检测到当前临界区加读锁、且根据从写优先标志位存储模块读取的写优先标志位的值检测到无写进程在等待时,则直接从临界区读取数据。
18.如权利要求16所述的访问临界区的系统,其特征在于,所述CPU进一步用于,准备从临界区读取数据,当根据从读写锁模块读取的读写锁值检测到当前临界区加写锁时,在根据从读写锁模块读取的读写锁值检测到写锁释放后,从临界区读取数据。
全文摘要
本发明公开了两种访问临界区的方法,包括预先设置用于指示是否有写进程在等待的写优先标志位,当CPU准备向临界区写入数据时,若检测到当前临界区已加读锁,且写优先标志位指示无写进程在等待,则设置写优先标志位为指示有写进程在等待,并在所述读锁释放后,设置写优先标志位为指示无写进程在等待,并进入临界区;当CPU准备从临界区读取数据时,若根据该写优先标志位检测到同时有写进程在等待,则该写进程优先。本发明同时公开了两种访问临界区的系统,包括CPU、读写锁模块和写优先标志位存储模块。本发明使得对临界区的写操作可以及时得到响应,满足了多核系统中实时性要求较高的写操作的要求。
文档编号G06F9/46GK1920780SQ20061011122
公开日2007年2月28日 申请日期2006年8月15日 优先权日2006年8月15日
发明者龚一斌, 李建勋, 吴快快, 赵鲲鹏 申请人:杭州华为三康技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1