专利名称:一种多线程访问间接寄存器的调度方法
技术领域:
本发明涉及光传输领域,提出了 一种多线程访问间接寄存器的调度方法。
背景技术:
光传输在现代通信中的占有非常重要的地位,随着通信:汰术的发展, 光通信设备功能越来越强大,相对的商用芯片功能也越来越复杂,但是由 于硬件资源的有限,很多商用芯片采用了大量的间接寄存器读写方式以节 约资源,这却给嵌入式软件系统埋下了炸弹。这里说明一下间接寄存器的 读写方式,以PMC的芯片为例,间接寄存器的读写操作需要控制两类寄 存器, 一类是控制寄存器, 一类是数据寄存器,在控制寄存器里面有三种 控制操作,第一种是读/写方式的控制操作,第二种是间接地址内容的控 制操作,第三种是当前从间接地址内容里面读/写内容是否完成的判断控 制操作。目前SDH设备基本都是采用嵌入式系统来开发应用软件了 ,嵌入式 操作系统为我们提供了基本的任务调度方式.即采用基于优先级的抢占式 方式来调度任务,就会引发一个问题。以两个任务为例,低优先级任务在 正在操作数据寄存器时,高优先级任务抢占了 CPU,重新操作了一次控 制寄存器和数据寄存器,然后再将CPU资源交还给低优先级任务,继续 操作数据寄存器,从软件角度来说没有任何问题,但是从硬件角度就产生 问题了,由于控制寄存器的内容发生了改变,此时的数据寄存器内容并不 是之前低优先级任务所需要的数据寄存器内容了 。现有技术解决该问题的做法是使用信号量保存高低优先级任务读写 的顺序,才能解决该问题,但是引进的信号量可以同时供高低优先级任务 使用,极不安全。 发明内容本发明要解决的技术问题是提供一种多线程访问间接寄存器的调度 方法,利用寄存器本身的原理性,在不使用信号量的前提下加以处理,可 以保证多线程访问间接寄存器不会访问错误。为了解决上述问题,本发明提供了 一种多线程访问间接寄存器的调度 方法,基于优先级的抢占方式来调度任务,由对数据寄存器以及控制寄存 器的操作来控制对所述间接寄存器的访问,其中,在访问间接寄存器的当 前优先级任务被优先级更高的任务抢占时,首先暂4f当前优先级任务,并 对当前优先级任务操作下的数据寄存器的值进行保存,再调度所述数据寄存器以及控制寄存器对所述优先级更高的任务进行操作;当所述优先级更 高的任务完成后,将之前保存的数据寄存器的值重新写入数据寄存器,恢 复数据寄存器环境,然后继续完成对之前中断的任务的操作;进一步的,本发明所述的方法,其中,操作所述控制寄存器,选择操 作才莫式以及间接地址;进一步的,本发明所述的方法,其中,所述操作模式,包括读操作 与写4喿作;进一步的,本发明所述的方法,其中,对所述间接寄存器设置延时标 记位,读取该延时标记位为假时,说明所述间接寄存器被一任务占据,硬 件操作在进行中;读取该延时标记位为真时,说明所述间接寄存器硬件操 作中断,当前任务暂停或完成;进一步的,本发明所述的方法,其中,多线程访问间接寄存器中,对 当前优先级任务的读操作,包括以下步骤(la)操作控制寄存器,选择操作模式为读操作、以及正确的间接地址;(2a)读取间接寄存器延时标记位,如果为假,则跳转步骤(3a);
如果为真,则跳转步骤(4a);(3a)如果读取的次数小于阀值,则跳转步骤(2a);如果大于阀值, 则跳转步骤(5a);(4a)操作数据寄存器,读出值;(5a)当前优先级任务的读操作结束;进一步的,本发明所述的方法,其中,多线程访问间接寄存器中,优 先级更高的任务抢占当前优先级任务,执行读操作,包括以下步骤(lb)读取间接寄存器延时标记位,如果为假,则跳转步骤(2b);如 果为真,则跳转步骤(3b);(2b)如果读取的次数小于阀值,则跳转步骤(lb);如果大于阀值, 则跳转步骤(9b);(3b)将数据寄存器的值进行保存;(4b)操作控制寄存器,选择操作模式为读操作、以及正确的间接地址;(5b)读取间接寄存器延时标记位,如果为假,则跳转步骤(6b); 如果为真,则跳转步骤(7b);(6b)如果读取的次数小于阀值,则跳转步骤(5b);如果大于阀值, 则跳转步骤(9b);(7b)操作数据寄存器,读出值;(8b)恢复数据寄存器环境,将之前保存的数据寄存器的值重新写入 数据寄存器;(9b)优先级更高的任务的读操作结束;进一步的,本发明所述的方法,其中,多线程访问间接寄存器中,当 前优先级任务的写操作,包括以下步骤(lc)操作数据寄存器,写值;(2c)操作控制寄存器,选择操作模式为写操作,以及正确的间接地 址;(3c)读取间接寄存器延时标记位,如果为假,则跳转步骤(4c); 如果为真,则跳转步骤(5c);(4c)如果读取的次数小于阀值,则跳转步骤(3c);如果大于阀值, 则跳转步骤(5c);(5c)当前优先级任务的写操作结束;进一步的,本发明所述的方法,其中,多线程访问间接寄存器中,优 先级更高的任务抢占当前优先级任务,执行写操作,包括以下步骤(ld)读取间接寄存器延时标记位,如果为假,则跳转步骤(2d); 如果为真,则跳转步骤(3d);(2d)如果读取的次数小于阀值,则跳转步骤(ld);如果大于阀值, 则跳转步骤(9d);(3d)将数据寄存器的值进行保存;(4d)操作数据寄存器,写值;(5d)操作控制寄存器,选择梯:作模式为写操作、以及正确的间接地址;(6d)读取间接寄存器延时标记位,如果为假,则跳转步骤(7d); 如果为真,则跳转步骤(8d);(7d)如果读取的次数小于阀值,则跳转步骤(6d);如果大于阀值; 则跳转步骤(9d);(8d)恢复数据寄存器环境,将之前保存的数据寄存器的值重新写入 数据寄存器;(9d)优先级更高的任务的写操作结束。采用本发明所述方法,与现有技术相比,采用本发明所述方法,可以 避免多线程访问性能间接寄存器出现的硬件操作与软件操作不一致的情 况。
图1是本发明实施例中低优先级任务访问性能间接寄存器的读操作流程图;图2是本发明实施例中低优先级任务访问性能间接寄存器的写操作 流程图;图3是本发明实施例中高优先级任务访问性能间接寄存器的读操作 流程图;图4是本发明实施例中高优先级任务访问性能间接寄存器的写操作 流程图。
具体实施方式
本发明为了解决传统技术方案存在的弊端,通过以下具体实施例进一 步阐述本发明所述的一种多线程访问间接寄存器的调度方法,以下对具体 实施方式进行详细描述,但不作为对本发明的限定。如图1所示,为本发明实施例中低优先级任务访问性能间接寄存器的 读操作流程图。多线程访问间接寄存器中,低优先级任务的读操作,包括 以下步骤步骤100,低优先级任务的读操作开始;步骤IOI,操作控制寄存器,选择操作模式为读操作、以及正确的间 接地址;步骤102,读取间接寄存器延时标记位,如果为假,则跳转步骤103; 如果为真,则跳转步骤104;步骤103,如果读取的次数小于阀值P,则跳转步骤102;如果大于 阀值P,则跳转步骤105;
步骤104,操作数据寄存器,读出值; 步骤105,低优先级任务的读操作结束。如图2所示,是本发明实施例中低优先级任务访问性能间接寄存器的 写操作流程图。多线程访问间接寄存器中,低优先级任务的写操作,包括 以下步骤步骤200,低优先级任务的写操作开始; 步骤201,操作数据寄存器,写值;步骤202,操作控制寄存器,选择操作模式为写操作,以及正确的间接 地址;步骤203,读取间接寄存器延时标记位,如果为假,则跳转步骤204; 如果为真,则跳转步骤205;步骤204,如果读取的次数小于阀值P,则跳转步骤203;如果大于 阀值P,则跳转步骤205;步骤205,低优先级任务的写操作结束。如图3所示,为本发明实施例中高优先级任务访问性能间接寄存器的 读操作流程图。多线程访问间接寄存器中,高优先级任务抢占低优先级任 务,执行读操作,包括以下步骤步骤300,高优先级任务的读操作开始;步骤301,读取间接寄存器延时标记位,如果为假,则跳转步骤302; 如果为真,则跳转步骤303;步骤302,如果读取的次数小于阀值P,则跳转步骤301;如果大于 阀值P,则跳转步骤309;步骤303,保存数据寄存器值到一中间量;步骤304,操作控制寄存器,选择操作模式为读操作、以及正确的间
接地址;步骤305,读取间接寄存器延时标记位,如果为^f叚,则跳转步骤306; 如果为真,则跳转步骤307;步骤306,如果读取的次数小于阀值P,则跳转步骤305;如果大于 阀值P,则跳转步骤309;步骤307,操作数据寄存器,读出值;步骤308,恢复数据寄存器环境,将该中间量的值写入数据寄存器; 步骤309,高优先级任务的读操作结束。如图4所示,是本发明实施例中高优先级任务访问性能间接寄存器的 写操作流程图。多线程访问间接寄存器中,高优先级任务抢占低优先级任 务,执行写操作,包括以下步骤步骤400,高优先级任务的写操作开始;步骤401,读取间接寄存器延时标记位,如果为假,则跳转步骤402; 如果为真,则跳转步骤403;步骤402,如果读取的次数小于阀值P,则跳转步骤401;如果大于 阀值P,则跳转步骤409;步骤403,保存控制数据寄存器值到一中间量;步骤404,操作数据寄存器,写值;步骤405,操作控制寄存器,选择操作模式为写操作、以及正确的间 才妄地址;步骤406,读取间接寄存器延时标记位,如果为假,则跳转步骤407; 如果为真,则跳转步骤408;步骤407,如果读取的次数小于阀值P,则跳转步骤406;如果大于 阀值P;则跳转步骤409;步骤408,恢复数据寄存器环境,将该中间量的值写入数据寄存器;
步骤409,高优先级任务的写操作结束。假设A性能和B性能分别在不同的间接寄存器中,但共用 一组控制 寄存器和数据寄存器。并且A性能要在的优先级任务a中读取,B性能要 在高优先级任务b中读取,并且在a任务中读取A性能的时候,当刚操作 完控制寄存器的时候,被b任务抢占资源优先读取B性能。 ,操作如下第一步在a任务中,操作控制寄存器。 第二步此时任务a被任务b抢占。第三步任务b读取延时标记位为假(a任务的读取A性能的硬件 操作还在继续)。第四步任务b再次读取延时标记位为真。第五步任务b保存数据寄存器的值到m_dwRegValue。第六步任务b操作控制寄存器,准备读取B性能。第七步任务b读取延时标记为真。第八步任务b操作数据寄存器,读取B性能。第九步任务b恢复数据寄存器的值为m_dwRegValue。第十步任务b查询B性能结束,交还CPU给任务a。第十一步任务a读取延时标记位为真。第十二步任务a操作数据寄存器,读取A性能。第十三步任务a查询A性能结束。假设A数据和B数据分别将被写入不同的间接寄存器中,但写入过 程要共用一组控制寄存器和数据寄存器。A数据要在的优先级任务a中写入,B数据要在高优先级任务b中写入,并且在a任务中写入A数据的时候,当刚操作完控制寄存器的时候,被b任务抢占资源优先写入B数据。
操作如下第一步在a任务中,操作控制寄存器。 第二步此时任务a^皮任务b抢占。第三步任务b读取延时标记位为假(a任务的写入A数据的硬件 操作还在继续)。第四步任务b再次读取延时标记位为真。第五步任务b保存数据寄存器的值到m—dwRegValue。第六步任务b操作控制寄存器,准备写入B数据。第七步任务b读耳又延时标记为真。第八步任务b操作数据寄存器,写入B数据。第九步任务b恢复数据寄存器的值为m—dwRegValue。第十步任务b写入B数据结束,交还CPU给任务a。第十一步任务a读取延时标记位为真。第十二步任务a操作数据寄存器,写入A数据。第十三步任务a写入A数据结束。当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
权利要求
1、 一种多线程访问间接寄存器的调度方法,基于优先级的抢占方式 来调度任务,由对数据寄存器以及控制寄存器的操作来控制对所述间接寄 存器的访问,其特征在于,在访问间接寄存器的当前优先级任务^皮优先级 更高的任务抢占时,首先暂停当前优先级任务,并对当前优先级任务操作 下的数据寄存器的值进行保存,再调度所述数据寄存器以及控制寄存器对所述优先级更高的任务进行操作;当所述优先级更高的任务完成后,将之 前保存的数据寄存器的值重新写入数据寄存器,恢复数据寄存器环境,然 后继续完成对之前中断的任务的操作。
2、 如权利要求1所述的方法,其特征在于,操作所述控制寄存器, 选择操作模式以及间接地址。
3、 如权利要求2所述的方法,其特征在于,所述操作模式,包括 读操作与写操作。
4、 如权利要求3所述的方法,其特征在于,对所述间接寄存器设置 延时标记位,读取该延时标记位为假时,说明所述间接寄存器被一任务占 据,硬件操作在进行中;读取该延时标记位为真时,说明所述间接寄存器 硬件操作中断,当前任务暂停或完成。
5、 如权利要求4所述的方法,其特征在于,多线程访问间接寄存器 中,对当前优先级任务的读操作,包括以下步骤(la)操作控制寄存器,选择操作模式为读操作、以及正确的间接地址;(2a)读取间接寄存器延时标记位,如果为假,则跳转步骤(3a); 如果为真,则跳转步骤(4a);(3a)如果读取的次数小于阀值,则跳转步骤(2a);如果大于阀值, 则跳转步骤(5a);(4a)操作数据寄存器,读出值;(5a)当前优先级任务的读操作结束。
6、 如权利要求4所述的方法,其特征在于,多线程访问间接寄存器 中,优先级更高的任务抢占当前优先级任务,执行读操作,包括以下步骤(lb)读取间接寄存器延时标记位,如果为假,则跳转步骤(2b);如 果为真,则跳转步骤(3b);(2b)如果读取的次数小于阀值,则跳转步骤(lb);如果大于阀值, 则跳转步骤(9b);(3b)将数据寄存器的值进行保存;(4b)操作控制寄存器,选择操作模式为读操作、以及正确的间接地址;(5b)读取间接寄存器延时标记位,如果为假,则跳转步骤(6b); 如果为真,则跳转步骤(7b);(6b)如果读取的次数小于阀值,则跳转步骤(5b);如果大于阀值, 则跳转步骤(9b);(7b)操作数据寄存器,读出值;(8b)恢复数据寄存器环境,将之前保存的数据寄存器的值重新写入 数据寄存器;(9b)优先级更高的任务的读操作结束。
7、 如权利要求4所述的方法,其特征在于,多线程访问间接寄存器 中,当前优先级任务的写操作,包括以下步骤(lc)操作数据寄存器,写值;(2c)操作控制寄存器,选择操作模式为写操作,以及正确的间接地址;(3c)读取间接寄存器延时标记位,如果为假,则跳转步骤(4c); 如果为真,则跳转步骤(5c);(4c)如果读取的次数小于阀值,则跳转步骤(3c);如果大于阀值, 则跳转步骤(5c); (5C)当前优先级任务的写操作结束。
8、如权利要求4所述的方法,其特征在于,多线程访问间接寄存器 中,优先级更高的任务抢占当前优先级任务,执行写操作,包括以下步骤(ld)读取间接寄存器延时标记位,如果为假,则跳转步骤(2d); 如果为真,则跳转步骤(3d);(2d)如果读取的次数小于阀值,则跳转步骤(ld);如果大于阀值, 则跳转步骤(9d);(3d)将数据寄存器的值进行保存;(4d)操作数据寄存器,写值;(5d)操作控制寄存器,选择操作模式为写操作、以及正确的间接地址;(6d)读取间接寄存器延时标记位,如果为假,则跳转步骤(7d); 如果为真,则跳转步骤(8d);(7d)如果读取的次数小于阀值,则跳转步骤(6d);如果大于阀值; 则跳转步骤(9d);(8d)恢复数据寄存器环境,将之前保存的数据寄存器的值重新写入 数据寄存器;(9d)优先级更高的任务的写操作结束。
全文摘要
本发明公开了一种多线程访问间接寄存器的调度方法,基于优先级的抢占方式来调度任务,由对数据寄存器以及控制寄存器的操作来控制对所述间接寄存器的访问,其中,在访问间接寄存器的当前优先级任务被优先级更高的任务抢占时,首先暂停当前优先级任务,并对当前优先级任务操作下的数据寄存器的值进行保存,再调度所述数据寄存器以及控制寄存器对所述优先级更高的任务进行操作;当所述优先级更高的任务完成后,将之前保存的数据寄存器的值重新写入数据寄存器,恢复数据寄存器环境,然后继续完成对之前中断的任务的操作。采用本发明所述方法,可以避免多线程访问性能间接寄存器出现的硬件操作与软件操作不一致的情况。
文档编号G06F9/46GK101145113SQ20071014986
公开日2008年3月19日 申请日期2007年9月10日 优先权日2007年9月10日
发明者曦 杨 申请人:中兴通讯股份有限公司