基于AHB总线的多核SOC中实现原子操作系统及方法与流程

文档序号:12719392阅读:371来源:国知局

本发明涉及一种操作系统及方法,特别是涉及一种基于AHB总线的多核SOC中实现原子操作系统及方法。



背景技术:

在基于AHB(AHB是Advanced High performance Bus的缩写,高级高性能总线)总线的SOC(System on Chip,片上系统)芯片中,要实现多个主设备对共享变量的原子操作,通常采用锁定(LOCK)传输,但是这种传输通常只允许一个主设备占用总线。这样一来,如果有两个主设备向两个不同的从设备同时发送操作,其中一个主设备操作共享变量,另一个主设备访问的是非共享变量,操作共享变量的主设备会锁定总线,导致另一个访问非共享变量的主设备发送的操作无法使用总线,必须要等操作共享变量的主设备完成所有的锁定传输后,才能使用总线,导致总线的使用效率降低。

一、假设第三CUP模块和第四CUP模块都对第十正常存储模块的某个共享变量K进行加1计数操作,则需要先读出变量K的初始值(假设为2),然后在CUP将加操作后的结果3,重新写回第十正常存储模块内部。这样一来,如果不使用原子操作,可能会导致最终结果出错(期望的结果为4,实际结果为3)。为解决这个问题第三CUP模块和第四CUP模块需要对该共享变量发送LOCK操作,假设总线先响应第三CUP模块的LOCK(锁定)操作,则总线会等第三CUP模块的操作完成后(即此时第三CUP模块加1操作已经完成,共享变量K的值此时为3),然后响应第四CUP模块的LOCK操作(第四CUP模块读取变量K的值为3,然后加1,将最终结果4写入第十正常存储模块)。

二、如果第三CUP模块对第十正常存储模块的某个共享变量进行加1计数操作,而第四CUP模块是对第十一正常存储模块的某个非共享变量进行加1计数操作,从原则上两个CUP的操作是互相不冲突的,可以同时进行。但是由于第三CUP模块对共享变量的LOCK操作会锁定总线,导致总线不会响应第四CUP模块的操作,这样第四CUP模块的操作就必须等第三CUP模块的操作完成,解锁总线后才能进行,降低总线使用效率。如果总线上挂接的主设备比较多,那影响更明显。



技术实现要素:

本发明所要解决的技术问题是提供一种基于AHB总线的多核SOC中实现原子操作系统及方法,其能够提高总线利用效率。

本发明是通过下述技术方案来解决上述技术问题的:一种基于AHB总线的多核SOC中实现原子操作系统,其特征在于,其包括其包括第一CUP模块、第二CUP模块、总线模块、AOC本体模块、原子存储模块、第一正常存储模块、第二正常存储模块,第一CUP模块、第二CUP模块都与总线模块相连,第一CUP模块位于第二CUP模块左侧,总线模块通过AOC本体模块与原子存储模块相连,第一正常存储模块、第二正常存储模块都与总线模块相连,第一正常存储模块位于第二正常存储模块左侧,AOC本体模块、原子存储模块都位于第一正常存储模块左侧。

本发明还提供一种基于AHB总线的多核SOC中实现原子操作方法,其包括以下步骤:

一种基于AHB总线的多核SOC中实现原子操作方法,其特征在于,其包括以下步骤:

步骤一,第一CUP模块、第二CUP模块对第一正常存储模块的某个共享变量K同时进行加1计数操作,则需要先向AOC本体模块申请原子操作权限,如果此空间未被占用,则申请成功,然后开始对共享变量K进行加1计数操作,加1计数操作完成后,再向AOC本体模块发送释放原子操作空间的命令;如果此空间正在被占用,则申请失败,不能对共享变量进行加1计数操作,需要继续申请此空间,直到此空间被释放,申请成功,然后再进行加1计数操作;

步骤二,第一CUP模块对第一正常存储模块的某个共享变量K进行加1计数操作,第四CUP模块同时对第二正常存储模块的另外一个共享变量M进行加1计数操作;

步骤三,第一CUP模块对第一正常存储模块的某个共享变量K进行加1计数操作,而第二CUP模块同时对第二正常存储模块的某个非共享变量N进行加1计数操作,K和N是自然数。

优选地,所述步骤一包括以下步骤:

步骤十一,第一CUP模块、第二CUP模块都需要对第一正常存储模块空间的第二地址B进行操作,则需要先向AOC本体模块的第一地址A发送申请对第二地址B的操作权限,当AOC本体模块检测到CUP对第一地址A的读操作后,会向原子存储模块的第一地址A发送一个读操作,然后判断读回数据的值,如果是0,则表示此时没有CUP对第二地址B进行操作,然后将0返回给CUP;同时,会向原子存储模块的第一地址A发送一个写操作,对该地址写入1,表示已经有CUP在对第二地址B进行操作了,如果从原子存储模块的第一地址A返回的读数据为1,则表示此时已经有CUP在对第二地址B进行操作,直接将1返回第一CUP模块或第二CUP模块;

步骤十二,当第一CUP模块或第二CUP模块收到AOC本体模块返回的结果后,会进行判断,如果结果为0,表示此时第一CUP模块或第二CUP模块享有对第二地址B的操作权,则会对第二地址B进行各种操作,由于AOC本体模块已经保证了不会同时给多个第一CUP模块或第二CUP模块返回0,所以得到权限的第一CUP模块或第二CUP模块对第二地址B的任何操作都不需要锁定总线模块;如果收到的返回结果为1,则不会对第二地址B进行任何操作,而是会继续向第一地址A发送读操作,去申请对第二地址B的操作权限;

步骤十三,当得到权限的第一CUP模块或第二CUP模块完成了对第二地址B的一系列操作后,会向第一地址A发送一个写0操作,以释放对第二地址B的操作权限;AOC本体模块检测到对第一地址A的写0操作后,会向原子存储模块发送一个写操作,将数据0写入第一地址A,表示第二地址B的操作权限已经被释放;

步骤十四,上次未申请到对第二地址B操作权限的第一CUP模块或第二CUP模块继续发送读操作,AOC本体模块检测到对第一地址A的读操作后,会向第一地址A发送一个读操作,由于此空间已经被释放,读到的数据为0,将0返回给发起申请权限的第一CUP模块或第二CUP模块,该第一CUP模块或第二CUP模块获得对第二地址B的操作权,便开始进行对第二地址B的一系列操作。

优选地,所述步骤二包括以下步骤:

步骤二十一,第一CUP模块对第一正常存储模块空间的第二地址B进行操作,第二CUP模块对第二正常存储模块空间的第四地址BB进行操作;则第一CUP模块向AOC本体模块的第一地址A发送读操作,申请对第二地址B的操作权限,第二CUP模块向AOC本体模块的AA发送读操作,申请第四地址BB的操作权限;假设在这之前第二地址B与第四地址BB的操作权限都已经被释放;当AOC本体模块检测到第一CUP模块对第一地址A的读操作后,会向原子存储模块的第一地址A发送一个读操作,读到的数据为0,将0返回给第一CUP模块,表示第一CUP模块取得对第二地址B的操作权;同时,会向第一地址A发送一个写操作,对该地址写入1;由于第一地址A与第三地址AA是两个不同的地址,AOC本体模块对第一地址A的写1操作不会影响到第三地址AA的值;因此,第二CUP模块对第三地址AA的读操作返回的数据也为0,第二CUP模块取得对第四地址BB的操作权;

步骤二十二,第一CUP模块取得对第二地址B的操作权后,便开始对第二地址B进行一系列操作;同时,第二CUP模块取得对第四地址BB的操作权后,也开始对第四地址BB进行一系列操作,而不需要等到第一CUP模块完成对第二地址B的操作;同理,第一CUP模块的对第二地址B的一系列操作,也不需要等第二CUP模块对第四地址BB的一系列操作完成;

步骤二十三,第一CUP模块完成对第二地址B的操作后,对第一地址A进行写0操作,释放对第二地址B的操作权;同理,第二CUP模块完成对第四地址BB的操作后,对第三地址AA进行写0操作,释放对第四地址BB的操作权;

所述步骤三由于变量N是非共享的,因此,第二CUP模块不需要从AOC本体模块处申请对变量N的操作权,直接操作即可;而第一CUP模块对共享变量K的操作不会锁定总线模块,因此,不会影响第二CUP模块对N的操作,可以并行完成,提高总线利用效率。

与现有技术相比,本发明具有以下有益效果:在AOC本体模块与总线模块接口处,读写操作是串行进入AOC本体模块内部的,即如果上一个读写操作未完成,AOC本体模块不会响应下一个操作的读写命令;本发明的应用不限于只是对共享变量的原子操作;本发明中并不限定返回0代表获取总线权限成功,也不限定返回1代表获取总线失败,也可以是返回1代表获取总线成功,返回0代表获取总线失败等。

附图说明

图1为本发明的结构示意图。

具体实施方式

下面结合附图给出本发明较佳实施例,以详细说明本发明的技术方案。

如图1所示,本发明基于AHB总线的多核SOC中实现原子操作系统包括第一CUP(Central Processing Unit,中央处理单元)模块、第二CUP模块、总线模块、AOC(Atomic Operation Controller,原子操作控制器)本体模块、原子存储(Atomic_Mcmory)模块、第一正常存储(Normal_Memory)模块、第二正常存储模块,第一CUP模块、第二CUP模块都与总线模块相连,第一CUP模块位于第二CUP模块左侧,总线模块通过AOC本体模块与原子存储模块相连,第一正常存储模块、第二正常存储模块都与总线模块相连,第一正常存储模块位于第二正常存储模块左侧,AOC本体模块、原子存储模块都位于第一正常存储模块左侧。

本发明基于AHB总线的多核SOC中实现原子操作方法包括以下步骤:

步骤一,第一CUP模块、第二CUP模块对第一正常存储模块的某个共享变量K同时进行加1计数操作,则需要先向AOC本体模块申请原子操作权限,如果此空间未被占用,则申请成功,然后开始对共享变量K进行加1计数操作,加1计数操作完成后,再向AOC本体模块发送释放原子操作空间的命令;如果此空间正在被占用,则申请失败,不能对共享变量进行加1计数操作,需要继续申请此空间,直到此空间被释放,申请成功,然后再进行加1计数操作;

步骤二,第一CUP模块对第一正常存储模块的某个共享变量K进行加1计数操作,第四CUP模块同时对第二正常存储模块的另外一个共享变量M进行加1计数操作;

步骤三,第一CUP模块对第一正常存储模块的某个共享变量K进行加1(加1计数是指对共享变量K进行加1的操作)计数操作,而第二CUP模块同时对第二正常存储模块的某个非共享变量N进行加1计数操作,K和N是自然数。

所述步骤一包括以下步骤:

步骤十一,第一CUP模块、第二CUP模块都需要对第一正常存储模块空间的第二地址B进行操作,则需要先向AOC本体模块的第一地址A发送申请对第二地址B的操作权限(一个普通的读操作),当AOC本体模块检测到CUP对第一地址A的读操作后,会向原子存储模块的第一地址A发送一个读操作,然后判断读回数据的值,如果是0,则表示此时没有CUP对第二地址B进行操作,然后将0返回给CUP;同时,会向原子存储模块的第一地址A发送一个写操作,对该地址写入1,表示已经有CUP在对第二地址B进行操作了,如果从原子存储模块的第一地址A返回的读数据为1,则表示此时已经有CUP在对第二地址B进行操作,直接将1返回第一CUP模块或第二CUP模块;

步骤十二,当第一CUP模块或第二CUP模块收到AOC本体模块返回的结果后,会进行判断,如果结果为0,表示此时第一CUP模块或第二CUP模块享有对第二地址B的操作权,则会对第二地址B进行各种操作,由于AOC本体模块已经保证了不会同时给多个第一CUP模块或第二CUP模块返回0(即不会同时授予多个第一CUP模块或第二CUP模块对第二地址B的操作权限),所以得到权限的第一CUP模块或第二CUP模块对第二地址B的任何操作都不需要锁定总线模块;如果收到的返回结果为1,则不会对第二地址B进行任何操作,而是会继续向第一地址A发送读操作,去申请对第二地址B的操作权限;

步骤十三,当得到权限的第一CUP模块或第二CUP模块完成了对第二地址B的一系列操作后,会向第一地址A发送一个写0操作,以释放对第二地址B的操作权限;AOC本体模块检测到对第一地址A的写0操作后,会向原子存储模块发送一个写操作,将数据0写入第一地址A,表示第二地址B的操作权限已经被释放;

步骤十四,上次未申请到对第二地址B操作权限的第一CUP模块或第二CUP模块继续发送读操作,AOC本体模块检测到对第一地址A的读操作后,会向第一地址A发送一个读操作,由于此空间已经被释放,读到的数据为0,将0返回给发起申请权限的第一CUP模块或第二CUP模块,该第一CUP模块或第二CUP模块获得对第二地址B的操作权,便开始进行对第二地址B的一系列操作。

所述步骤二包括以下步骤:

步骤二十一,第一CUP模块对第一正常存储模块空间的第二地址B进行操作,第二CUP模块对第二正常存储模块空间的第四地址BB进行操作;则第一CUP模块向AOC本体模块的第一地址A发送读操作,申请对第二地址B的操作权限,第二CUP模块向AOC本体模块的AA发送读操作,申请第四地址BB的操作权限;假设在这之前第二地址B与第四地址BB的操作权限都已经被释放(即第一地址A与第三地址AA的值都为0);当AOC本体模块检测到第一CUP模块对第一地址A的读操作后,会向原子存储模块的第一地址A发送一个读操作,读到的数据为0,将0返回给第一CUP模块,表示第一CUP模块取得对第二地址B的操作权;同时,会向第一地址A发送一个写操作,对该地址写入1;由于第一地址A与第三地址AA是两个不同的地址,AOC本体模块对第一地址A的写1操作不会影响到第三地址AA的值;因此,第二CUP模块对第三地址AA的读操作返回的数据也为0,第二CUP模块取得对第四地址BB的操作权;

步骤二十二,第一CUP模块取得对第二地址B的操作权后,便开始对第二地址B进行一系列操作;同时,第二CUP模块取得对第四地址BB的操作权后,也开始对第四地址BB进行一系列操作,而不需要等到第一CUP模块完成对第二地址B的操作;同理,第一CUP模块的对第二地址B的一系列操作,也不需要等第二CUP模块对第四地址BB的一系列操作完成;

步骤二十三,第一CUP模块完成对第二地址B的操作后,对第一地址A进行写0操作,释放对第二地址B的操作权;同理,第二CUP模块完成对第四地址BB的操作后,对第三地址AA进行写0操作,释放对第四地址BB的操作权。

所述步骤三由于变量N是非共享的,因此,第二CUP模块不需要从AOC本体模块处申请对变量N的操作权,直接操作即可;而第一CUP模块对共享变量K的操作不会锁定总线模块,因此,不会影响第二CUP模块对N的操作,可以并行完成,提高总线利用效率。

通常一个SOC系统中,除了一个CUP模块和一个Memory(存储)模块外,还会存在其他的一个Master模块(主模块)与一个Slave模块(从模块);如果采用一个LOCK操作实现共享变量的原子操作,则在原子操作期间,其他Master访问其他Slave的所有操作将都不被总线响应,极大降低了总线利用效率;而本方案实现原子操作不会采用任何LOCK操作,在原子操作期间,不会影响其他Master访问其他Slave的操作,提高了总线利用效率。

以上所述的具体实施例,对本发明的解决的技术问题、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1