共享资源访问方法和装置
技术领域
本发明涉及计算机应用领域,尤其涉及一种多核SOC系统中的共享资源访问方法和装置。
背景技术
在SOC系统中由于系统的复杂程度越来越高,单个处理器核已经不能满足性能和控制的需求,因此在现代的SOC系统中通常会使用多个相同的处理核或者不同的处理器核进行控制和运算,其结构示意图如图1所示。同时SOC系统中还会有很多通用外设和存储设备,例如UART、I2C、GPIO、SPI和DDR等等。但是在多核系统中每一个处理器核都可以独立控制系统中的设备,如果两个或多个处理器核需要访问同一个设备时会产生冲突现象,例如第一个处理器核对该设备的配置可能会被另外的处理器核修改,如果没有有效的保护机制,可能会导致设备错误甚至出现死机的可能。
为了解决多个处理器核访问这些共享设备可能产生的冲突现象,其中一种方法是使用软件去维护一个共享设备状态表。每次访问要先通知其他和不要访问这个表,然后再去看一下这个表中本核希望访问的设备是否被占用。如果被占用则等待,如未被占用写入本核的相关信息标识占用本设备,最后通知其他核共享设备状态表释放。但软件保护方式不能保证异常访问可能导致的异常解锁或锁信息被破坏。
另外一个方法就是使用具有带独占访问指令的处理器核,并且在所有的共享设备上加入访问控制单元,其系统连接示意图如图二所示。当处理器核发出独占访问时,访问控制根据单元记录设备的访问状态确认该访问是否成功。该方法是一种基于处理器核和硬件协调的方式,当访问控制单元采用访问控制表时可实现分片独占访问控制,其结构示意图如图2所示。
这些方法虽然都可以解决多核系统中共享设备访问冲突的情况,但第一种方法由于是基于纯软件的维护,效率不高。而且设备状态表有可能被DMA等Master设备错误修改而无法知道的情况。第二种方法虽然效率有很大提高,但对处理器核有较大的依赖性,同时共享设备需要增加相关硬件资源,对于希望有分块控制的共享设备来说分块数量有限,缺乏灵活性。因此为了保证多核SOC系统中共享设备能被多个处理器核灵活控制,需要一种更高效的共享设备冲突控制的方法。
发明内容
本发明提供了一种共享资源访问方法,解决了缺乏适合的共享设备访问冲突处理方式的问题。
一种共享资源访问方法,包括:
在多核SOC系统中,其特征在于,该方法包括:
资源锁接收访问共享资源的请求;
所述资源锁读取该资源锁中所述共享资源对应的指定位置的值;
所述资源锁根据所述指定位置的值,判定当前所述共享资源是否被占用。
优选的,所述资源锁接收访问共享资源的请求具体为:
所述资源锁接收处理器核或主控设备发送的访问共享资源的请求。
优选的,该方法还包括:
将存储控制器的存储空间划分为多个分段,将其中的一个或多个分段作为所述资源锁的存储空间。
优选的,读取资源锁中该共享资源对应的指定位置的值的步骤之前还包括:
在所述资源锁中,为所述SOC系统中的至少一个共享资源分配指定位置,不同共享资源的指定位置不同,所述指定位置的值指示对应的共享资源空闲或占用对应的共享资源的处理器核或主控设备。
优选的,所述资源锁根据所述指定位置的值,判定当前所述共享资源是否被占用的步骤之后,还包括:
所述资源锁在所述共享资源被占用时,返回所述指定位置的值至所述处理器核或主控设备。
优选的,所述资源锁在所述共享资源被占用时,返回所述指定位置的值至所述处理器核或主控设备的步骤之后,还包括:
所述处理器核或主控设备进入所述共享资源的等待队列。
优选的,所述资源锁在所述共享资源被占用时,返回所述指定位置的值至所述处理器核或主控设备的步骤之后,还包括:
所述处理器核或主控设备等待预置时间间隔后再访问所述共享资源。
优选的,所述资源锁根据所述指定位置的值,判定当前所述共享资源是否被占用的步骤之后,还包括:
在所述共享资源空闲时,所述资源锁将发起访问的处理器核或主控设备在系统中的唯一位置标识写入到所述指定位置中,表明所述处理器核或主控设备占用所述共享资源;
所述资源锁向所述处理器核或主控设备回复响应,指示所述处理器核或主控设备已完成对所述共享资源的加锁。
优选的,所述资源锁向所述处理器核或主控设备回复响应,指示所述处理器核或主控设备已完成对所述共享资源的加锁的步骤之后,还包括:
所述处理器核或主控设备在完成使用所述共享资源后,向所述资源锁发送针对所述共享资源的指定位置的写命令,指示释放所述共享资源。
优选的,所述处理器核或主控设备在完成使用所述共享资源后,向所述资源锁发送针对所述共享资源的指定位置的写命令的步骤之后,还包括:
所述资源锁检查发送所述写命令的处理器核或主控设备的唯一位置标识与所述共享资源的指定位置的值是否匹配;
所述资源锁在检查结果为匹配时,清除所述共享资源的指定位置的值,表明所述共享资源空闲。
优选的,所述资源锁检测发送所述写命令的处理器核或主控设备的唯一位置标识与所述共享资源的指定位置的值是否匹配的步骤之后,还包括:
所述资源锁在检查结果为不匹配时,不修改所述指定位置的值,并向发出所述写命令的处理器核或主控设备返回写失败响应。
本发明还提供了一种共享资源访问装置,在多核SOC系统中,包括:
请求接收模块,用于接收访问共享资源的请求;
存储控制模块,用于读取资源锁中所述共享资源对应的指定位置的值;
判定模块,用于根据所述指定位置的值,判定当前所述共享资源是否被占用。
优选的,该装置还包括:
存储模块,用于在所述资源锁中,为所述SOC系统中的至少一个共享资源分配指定位置,不同共享资源的指定位置不同,所述指定位置的值指示对应的共享资源空闲或占用对应的共享资源的处理器核或主控设备。
优选的,所述存储控制模块,还用于在所述共享资源被占用时,返回所述指定位置的值至所述处理器核或主控设备,或,
在所述共享资源空闲时,所述资源锁将发起访问的处理器核或主控设备在系统中的唯一位置标识写入到所述指定位置中,表明所述处理器核或主控设备占用所述共享资源。
优选的,所述存储控制模块,还用于在接收到所述处理器核或主控设备在完成使用所述共享资源后发送的针对所述共享资源的指定位置的写命令后,检查发送所述写命令的处理器核或主控设备的唯一位置标识与所述共享资源的指定位置的值是否匹配,并在检查结果为匹配时清除所述共享资源的指定位置的值,在检查结果为不匹配时不修改所述指定位置的值并向发出所述写命令的处理器核或主控设备返回写失败响应。
本发明提供了一种共享资源访问方法和装置,在多核SOC系统中,通过资源锁对共享资源的使用情况进行管理,资源锁接收访问共享资源的请求,读取该资源锁中所述共享资源对应的指定位置的值,并根据所述指定位置的值,判定当前所述共享资源是否被占用,提供了一种可靠的共享资源管理机制,在尽可能减少额外硬件消耗的前提下,实现了高效率高可靠性的共享资源管理,解决了缺乏适合的共享设备访问冲突处理方式的问题。
附图说明
图1是现有技术下普通SOC系统的结构示意图;
图2是现有技术下使用硬件方式实现共享资源设备访问冲突的结构示意图;
图3是本发明的实施例一中使用本发明设计的设备和方法实现共享资源设备访问冲突的结构示意图;
图4是本发明的实施例一中提供的资源锁的内部结构示意图;
图5是本发明的实施例一提供的一种共享资源访问方法中资源锁加锁工作流程图;
图6是本发明的实施例一提供的一种共享资源访问方法中资源锁解锁工作流程图;
图7是本发明的实施例一提供的一种共享资源访问方法的处理流程图;
图8是本发明的实施例二提供的一种共享资源访问装置的结构示意图;
图9是本发明的实施例三提供的一种共享资源访问装置的结构示意图。
具体实施方式
基于纯软件的共享资源管理,效率不高,而且设备状态表有可能被DMA等Master设备错误修改而无法知道的情况。基于纯硬件的共享资源管理,虽然效率有很大提高,但对处理器核有较大的依赖性,同时共享设备需要增加相关硬件资源,对于希望有分块控制的共享设备来说分块数量有限,缺乏灵活性。因此为了保证多核SOC系统中共享设备能被多个处理器核灵活控制,需要一种更高效的共享设备冲突控制的方法。
为了解决上述问题,本发明的实施例提供了一种共享资源访问方法和装置。下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
首先结合附图,对本发明的实施例一进行说明。
本发明实施例提出了一种在多核SOC系统中对共享资源访问冲突进行控制的共享资源访问方法,其系统连接示意图如图3所示。使多个处理器核在不产生冲突并高效使用各个共享设备的前提下,具有较高的灵活性。
本发明实施例中,处理器核只使用普通的处理器读写指令,通过软件实现维护一个可扩展的共享资源列表,用于记录资源锁内共享资源与指定位置的对应关系,在所述资源锁中,为所述SOC系统中的至少一个共享资源分配指定位置,不同共享资源的指定位置不同,所述指定位置的值指示对应的共享资源空闲或占用对应的共享资源的处理器核或主控设备。例如:系统中有2个uart,在资源锁的位置是0、1,那么cpu或者其他master要去访问的时候就知道该去上锁那个地方了。对于通用的存储空间也是一样道理。。
使用一个特殊控制的存储控制器为资源锁提供存储空间,软硬件协同,高效的防止共享资源访问冲突出现,并可实现单一共享资源设备灵活分块锁定功能。另外,资源锁控制逻辑还可以支持动态划分锁区域,当需要锁住的资源较多的情况下可以增加资源锁的空间。其中资源锁以普通的存储控制器为基础,增加特殊控制逻辑(如将该存储控制器的存储空间划分为多个分段,根据实际需求从中取若干分段作为资源锁的存储空间,而剩余的空间则可做他用),实现使用普通的读指令实现共享资源硬件加锁,加锁后其他处理器核请求该共享设备时可知道该设备状态,并保证设备只能被加锁的处理器核进行写解锁,其内部结构如图4所示。具体工作过程如下:
当系统中某个处理器核,例如处理器核0需要访问共享资源0的时候,根据共享资源列表设备在资源锁中的位置,发出访问共享资源的请求,具体的,发出读指令到系统中的资源锁,读取资源锁中该共享资源对应的指定位置的值。资源锁将指定位置的值读出,根据所述指定位置的值,判定当前所述共享资源是否被占用。
如果读出值为0或某一特定值(可以为任意值,只要资源锁与处理器核事先约定了该值代表相应的共享资源没被占用即可),则证明该共享资源0没有被占用,是空闲的。此时,资源锁控制逻辑将发起访问的处理器核在系统中的唯一位置标识写入到所述指定位置中,表明所述处理器核或主控设备占用所述共享资源。同时,资源锁向所述处理器核0回复响应,指示所述处理器核0已完成对所述共享资源的加锁,例如:将0值或者该特定值返回到处理器核0,完成加锁动作。即此时处理器核0获得该共享资源0的控制权,可以开始使用该共享资源0。资源锁加锁过程流程图如图5所示。
如果此时还有其他处理器核希望访问该共享资源,由于共享资源已被占用,资源锁会向该处理器核返回正在占用该共享资源设备的处理器核0的系统唯一位置标识值,其他处理器核就知道该共享资源目前不能被使用。此时,该处理器核可以进入所述共享资源的等待队列或者定时(如等待预置时间间隔后)再来访问该共享资源0。
当共享资源0被使用完后,获得该共享资源设备控制权的处理器核0向所述资源锁发送针对所述共享资源的指定位置的写命令,指示释放所述共享资源,资源锁接收到该写命令后检查发送所述写命令的处理器核或主控设备的唯一位置标识与所述共享资源的指定位置的值是否匹配,即检查发送写命令的处理器核是否为当前获得共享资源0的控制权的处理器核。如果检查结果为匹配,则清除所述共享资源0的指定位置的值,表明所述共享资源空闲释放该共享资源0,并返回写入成功到处理器核0中去;如果检查结果为不匹配,则表明非具有该共享资源0控制权的处理器核发出写命令到代表该共享资源0锁的存储位置,此时该写命令不会被写到该存储位置,且资源锁会向发出所述写命令的处理器核返回写失败响应,对该共享资源0的解锁失败。从而保证加解锁的唯一性。资源锁解锁过程流程图如图6所示。
另外,由于使用软硬件共同协作,因此可以对单一设备进行多段地址独立加锁操作,并且可以自由的控制分段的数量,分段数的唯一限制仅来自于资源锁使用的存储控制器的容量。软件对资源锁使用控制流程图如图7所示。
需要说明的是,本发明实施例中以处理器核为共享资源请求方为例进行了说明,在实际应用中,发起共享资源请求的主体可以是任意的主控设备或处理器核。例如芯片作为从片时,其他主控芯片可能通过本芯片的srio进行共享资源的访问。在以主控设备(如主控芯片)作为主体发起共享资源请求至该资源锁时,其完成对共享资源使用冲突的实现原理是相同的,在此不作重复说明。
下面结合附图,对本发明的实施例二进行说明。
如图8所示,本发明实施例提供了一种共享资源访问装置,包含了以下基本单元:接口模块、指令转换模块、存储控制模块、存储模块。为了更高效的利用装置中的存储模块,本发明实施例中存储模块还可以用做为系统普通存储,提供系统性能。
其中接口模块可以根据SOC系统需要使用相匹配的协议支持;指令转换模块可根据访问类型为加解锁或普通存储访问进行访问命令的生成;存储控制模块用于接收从指令转换模块过来指令、数据发送到存储控制器中,并负责将存储控制器返回的数据送出;存储模块根据接口过来的指令要求用于存储锁信息(如指定位置的值)或普通数据。
当作为共享资源访问冲突控制用时,其具体工作过程如下:当系统中多处理器核中的某个处理器核,例如处理器核0需要访问共享资源0的时候,根据共享资源列表设备在资源锁中的位置,发出读指令到系统中的资源锁。指令转换模块首先会判读该指令是加锁、解锁或是普通存储访问,当为加锁访问时,指令转换模块首先产生一个读指令送到存储控制模块中将指定位置上存储单元的值读出,如果当读出值为0或某一特定值,则证明该设备没有被占用,此时指令转换模块将产生一条额外的写指令到存储控制模块,将访问资源锁的处理器在系统中的唯一位置标识写入到该存储单元中,同时将0值或者某一特定值返回到处理器核0,完成加锁动作。即此时处理器核0获得该共享资源的控制权,可以开始使用该共享资源0。
如果此时还有其他处理器核希望访问该共享资源,指令转换模块发出读命令后,存储模块会返回正在占用该共享资源设备的处理器核0的位置值。此时指令转换模块将不会再产生额外的写指令,而直接将从存储模块中返回的值送会该处理器核。此时,其他处理器核就知道该共享资源目前不能被使用。此时软件可以进入等待或者定时再来访问该设备。
当共享资源0被使用完后,获得该共享资源设备控制权的处理器核0发出写命令到代表该共享资源设备解锁,指令转换模块接收到该写命令后后首先将这个写指令转换为读指令确定该解锁是否合法。如果从存储模块的返回值和请求解锁的处理器唯一标识匹配,则指令转换模块产生写命令到存储控制模块,清除该存储位置上的值,即释放该共享资源设备,并返回写入成功到处理器核0中去;如果非该共享资源设备控制权的处理器核发出写命令到代表该共享资源0锁的存储位置,资源锁会检测到位置信息不匹配,此时该写命令不会被真是写到该存储位置,并返回写失败到发出写命令的处理器核或主控设备,解锁失败。从而保证加解锁的唯一性。
当作为普通存储访问时,指令转换模块通过锁存储和普通存储的分界寄存器确定为普通存储区访问时,则不会进行任何的检查和指令转换工作,而直接将读写指令发送到存储控制模块中进行存储器的读写操作。由于此过程为纯硬件操作,锁空间和普通存储空间的访问无需任何的软件配置或转换即可实现,具有很高的灵活性。
上述共享资源访问装置可集成于本发明实施例一中的资源锁内,由资源锁完成相应功能。
下面结合附图,对本发明的实施例三进行说明。
本发明实施例提供了一种共享资源访问装置,其结构如图9所示,包括:
请求接收模块,用于接收访问共享资源的请求;
存储控制模块,用于读取资源锁中所述共享资源对应的指定位置的值;
判定模块,用于根据所述指定位置的值,判定当前所述共享资源是否被占用。
优选的,该装置还包括:
存储模块,用于在所述资源锁中,为所述SOC系统中的至少一个共享资源分配指定位置,不同共享资源的指定位置不同,所述指定位置的值指示对应的共享资源空闲或占用对应的共享资源的处理器核或主控设备。
优选的,所述存储控制模块,还用于在所述共享资源被占用时,返回所述指定位置的值至所述处理器核或主控设备,或,
在所述共享资源空闲时,所述资源锁将发起访问的处理器核或主控设备在系统中的唯一位置标识写入到所述指定位置中,表明所述处理器核或主控设备占用所述共享资源。
优选的,所述存储控制模块,还用于在接收到所述处理器核或主控设备在完成使用所述共享资源后发送的针对所述共享资源的指定位置的写命令后,检查发送所述写命令的处理器核或主控设备的唯一位置标识与所述共享资源的指定位置的值是否匹配,并在检查结果为匹配时清除所述共享资源的指定位置的值,在检查结果为不匹配时向发出所述写命令的处理器核或主控设备返回写失败响应。
图9所示的共享资源访问装置,能够集成于本发明实施例一提供的资源锁中,由资源锁完成相应功能。
本发明的实施例提供了一种共享资源访问方法和装置,在多核SOC系统中,通过资源锁对共享资源的使用情况进行管理,资源锁接收访问共享资源的请求,读取该资源锁中所述共享资源对应的指定位置的值,并根据所述指定位置的值,判定当前所述共享资源是否被占用,提供了一种可靠的共享资源管理机制,在尽可能减少额外硬件消耗的前提下,实现了高效率高可靠性的共享资源管理,解决了缺乏适合的共享设备访问冲突处理方式的问题。
利用了软硬件结合的方式高效解决了多核SOC系统中共享资源设备多核同时访问产生冲突的问题,较纯软件的解决方式性能有很大提升,较纯硬件的解决方式避免了对处理器核的依赖,也能增加原设备的可重用性减少新开发,并且具有更高灵活性,因此具有很高的使用价值。
本领域普通技术人员可以理解上述实施例的全部或部分步骤可以使用计算机程序流程来实现,所述计算机程序可以存储于一计算机可读存储介质中,所述计算机程序在相应的硬件平台上(如系统、设备、装置、器件等)执行,在执行时,包括方法实施例的步骤之一或其组合。
可选地,上述实施例的全部或部分步骤也可以使用集成电路来实现,这些步骤可以被分别制作成一个个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
上述实施例中的各装置/功能模块/功能单元可以采用通用的计算装置来实现,它们可以集中在单个的计算装置上,也可以分布在多个计算装置所组成的网络上。
上述实施例中的各装置/功能模块/功能单元以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。上述提到的计算机可读取存储介质可以是只读存储器,磁盘或光盘等。
任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求所述的保护范围为准。