CN117762496A - 一种自旋锁、使用方法、装置及介质 - Google Patents
一种自旋锁、使用方法、装置及介质 Download PDFInfo
- Publication number
- CN117762496A CN117762496A CN202311768131.XA CN202311768131A CN117762496A CN 117762496 A CN117762496 A CN 117762496A CN 202311768131 A CN202311768131 A CN 202311768131A CN 117762496 A CN117762496 A CN 117762496A
- Authority
- CN
- China
- Prior art keywords
- lock
- processor
- module
- request
- proxy module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 38
- 238000012423 maintenance Methods 0.000 claims abstract description 101
- 230000004044 response Effects 0.000 claims abstract description 87
- 238000012545 processing Methods 0.000 claims abstract description 51
- 230000015654 memory Effects 0.000 claims description 11
- 238000004590 computer program Methods 0.000 claims description 9
- 238000004891 communication Methods 0.000 claims description 4
- 230000008569 process Effects 0.000 description 12
- 238000010586 diagram Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Hardware Redundancy (AREA)
Abstract
本申请提供了一种自旋锁、使用方法、装置及介质,该自旋锁包括:代理模块和锁维护模块;所述代理模块外接处理器,所述代理模块与所述锁维护模块连接;所述代理模块,用于根据处理器的不同操作请求,生成与所述操作请求对应类型的处理锁指令,并将所述处理锁指令发送给所述锁维护模块;所述锁维护模块,用于根据接收到各个所述代理模块发送所述处理锁指令的类型和顺序,向所述代理模块发送对应的结果响应;所述代理模块,用于根据接收到的结果响应,向所述处理器发送对应的反馈结果。本申请通过代理模块和锁维护模块的组合使用,实现在常规的系统中,不需要锁定总线,也不需要屏蔽中断即可实现自旋锁的功能。
Description
技术领域
本申请涉及芯片设计技术领域,具体而言,涉及一种自旋锁、使用方法、装置及介质。
背景技术
自旋锁是专为防止多处理器并发访问临界资源而引入的一种锁,它在内核中大量应用于中断处理等部分(对于单处理器来说,防止中断处理中的并发可简单采用关闭中断的方式,即在标志寄存器中关闭/打开中断标志位,不需要自旋锁)。
现有技术中自旋锁的操作过程为:申请锁,查询等待直到得到锁;进行临界资源的处理,释放锁。然而在进行原子操作时,需要进行的往往是Read-Modify-Write的操作,这种操作必须保证以一个不被打断的方式实现,请求锁的过程或者释放锁的过程需要有这样的原子操作。在常规系统中,一般通过锁定总线或者关闭中断的方式来实现原子操作。但有如下缺点:在部分系统中,尤其是□型的MCU系统,有可能不具备锁定总线的硬件支持;无论使用关闭中断的方式还是锁定总线的方式,都会对系统的性能产生比较大的影响,从而降低系统的可用性。
发明内容
有鉴于此,本申请的目的在于提供一种自旋锁、使用方法、装置及介质,以克服现有技术中的问题。
第一方面,本申请实施例提供了一种自旋锁,所述自旋锁包括:代理模块和锁维护模块;所述代理模块外接处理器,所述代理模块与所述锁维护模块连接;
所述代理模块,用于根据处理器的不同操作请求,生成与所述操作请求对应类型的处理锁指令,并将所述处理锁指令发送给所述锁维护模块;
所述锁维护模块,用于根据接收到各个所述代理模块发送所述处理锁指令的类型和顺序,向所述代理模块发送对应的结果响应;
所述代理模块,用于根据接收到的结果响应,向所述处理器发送对应的反馈结果。
在本申请一些技术方案中,上述代理模块包括有寄存器和状态机;
所述寄存器,用于记录所述处理器是否得到了锁的状态;
所述状态机,用于与所述处理器和所述锁维护模块进行交互完成上锁、查询和释放锁。
在本申请一些技术方案中,上述代理模块包括:第一代理模块和第二代理模块;所述第一代理模块与第一处理器连接,所述第二代理模块与第二处理器连接;
所述第一处理器和所述第二处理器发送的不同操作请求包括:读请求和写请求;
所述第一代理模块和所述第二代理模块生成的处理锁指令包括请求锁和释放锁;
所述锁维护模块发出的结果响应包括:就绪响应和等待响应;
所述第一代理模块和所述第二代理模块发送的反馈结果包括:请求锁成功和请求锁失败。
在本申请一些技术方案中,上述第一代理模块,用于接收所述第一处理器发送的读请求,生成与所述读请求对应的请求锁指令,并将所述请求锁指令发送给所述锁维护模块;
所述锁维护模块,用于在接收到所述第一代理模块发送的请求锁指令时,对锁的状态进行检测,在锁为空闲状态时,向所述第一代理模块发送就绪响应;
所述第一代理模块,用于在接收到所述就绪响应的时候,向所述第一处理器发送请求锁成功的反馈结果。
在本申请一些技术方案中,上述锁维护模块,向所述第一代理模块发送就绪响应后,还用于记录当前锁的所有者为所述第一处理器;
所述第二代理模块,用于接收所述第二处理器发送的读请求,生成与所述读请求对应的请求锁指令,并将所述请求锁指令发送给所述锁维护模块;
所述锁维护模块,用于在接收到所述第二代理模块发送的请求锁指令时,对锁的状态进行检测,当前锁的所有者为所述第一处理器,向所述第二代理模块发送等待响应,并将所述第二代理模块加入到等待列表中;
所述第二代理模块,用于在接收到所述等待响应的时候,向所述第二处理器发送请求锁失败的反馈结果,并自身状态设置为等待状态;
所述第二代理模块处于等待状态时,接收到所述第二处理器发送的读请求时,直接反馈请求锁失败的反馈结果。
在本申请一些技术方案中,上述第一代理模块,用于在接收所述第一处理器发送的写请求时,生成与所述写请求对应的释放锁指令,并将所述释放锁指令发送给所述锁维护模块;
所述锁维护模块,用于在接收到所述第一代理模块发送的释放锁指令时,将锁的状态修改为空闲状态。
在本申请一些技术方案中,上述锁维护模块,将将锁的状态修改为空闲状态后,还用于对所述等待列表进行检测;
将就绪响应发送给位于所述等待列表首位的处理器。
第二方面,本申请实施例提供了一种自旋锁的使用方法,所述方法包括:
所述代理模块根据处理器的不同操作请求,生成与所述操作请求对应类型的处理锁指令,并将所述处理锁指令发送给所述锁维护模块;
所述锁维护模块根据接收到各个所述代理模块发送所述处理锁指令的类型和顺序,向所述代理模块发送对应的结果响应;
所述代理模块根据接收到的结果响应,向所述处理器发送对应的反馈结果。
第三方面,本申请实施例提供了一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述的自旋锁的使用方法的步骤。
第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行上述的自旋锁的使用方法的步骤。
本申请的实施例提供的技术方案可以包括以下有益效果:
本申请中自旋锁包括代理模块和锁维护模块;所述代理模块外接处理器,所述代理模块与所述锁维护模块连接;所述代理模块,用于根据处理器的不同操作请求,生成与所述操作请求对应类型的处理锁指令,并将所述处理锁指令发送给所述锁维护模块;所述锁维护模块,用于根据接收到各个所述代理模块发送所述处理锁指令的类型和顺序,向所述代理模块发送对应的结果响应;所述代理模块,用于根据接收到的结果响应,向所述处理器发送对应的反馈结果。
本申请通过代理模块和锁维护模块的组合使用,实现在常规的系统中,不需要锁定总线,也不需要屏蔽中断即可实现自旋锁的功能。
为使本申请的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本申请实施例所提供的一种自旋锁连接的示意图;
图2示出了本申请实施例所提供的一种自旋锁示意图;
图3示出了本申请实施例所提供的一种具体实施方式示意图;
图4示出了本申请实施例所提供的一种自旋锁的使用方法的流程示意图;
图5为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,应当理解,本申请中附图仅起到说明和描述的目的,并不用于限定本申请的保护范围。另外,应当理解,示意性的附图并未按实物比例绘制。本申请中使用的流程图示出了根据本申请的一些实施例实现的操作。应该理解,流程图的操作可以不按顺序实现,没有逻辑的上下文关系的步骤可以反转顺序或者同时实施。此外,本领域技术人员在本申请内容的指引下,可以向流程图添加一个或多个其他操作,也可以从流程图中移除一个或多个操作。
另外,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,本申请实施例中将会用到术语“包括”,用于指出其后所声明的特征的存在,但并不排除增加其他的特征。
自旋锁是专为防止多处理器并发访问临界资源而引入的一种锁,它在内核中大量应用于中断处理等部分(对于单处理器来说,防止中断处理中的并发可简单采用关闭中断的方式,即在标志寄存器中关闭/打开中断标志位,不需要自旋锁)。
现有技术中自旋锁的操作过程为:申请锁,查询等待直到得到锁;进行临界自旋的处理,释放锁。然而在进行原子操作时,需要进行的往往是Read-Modify-Write的操作,这种操作必须保证以一个不被打断的方式实现,请求锁的过程或者释放锁的过程需要有这样的原子操作。在常规系统中,一般通过锁定总线或者关闭中断的方式来实现原子操作。但有如下缺点:在部分系统中,尤其是□型的MCU系统,有可能不具备锁定总线的硬件支持;无论使用关闭中断的方式还是锁定总线的方式,都会对系统的性能产生比较大的影响,从而降低系统的可用性。
基于此,本申请实施例提供了一种自旋锁、使用方法、装置及介质,下面通过实施例进行描述。下面对本申请的一些实施方式作详细说明。在不冲突的情况下,下述的实施例及实施例中的特征可以相互组合。
图1示出了本申请实施例所提供的一种自旋锁的示例图,所述自旋锁包括代理模块和锁维护模块;所述代理模块外接处理器,所述代理模块与所述锁维护模块连接;
所述代理模块,用于根据处理器的不同操作请求,生成与所述操作请求对应类型的处理锁指令,并将所述处理锁指令发送给所述锁维护模块;
所述锁维护模块,用于根据接收到各个所述代理模块发送所述处理锁指令的类型和顺序,向所述代理模块发送对应的结果响应;
所述代理模块,用于根据接收到的结果响应,向所述处理器发送对应的反馈结果。
本申请实施例中通过代理模块和锁维护模块的组合使用,实现在常规的系统中,不需要锁定总线,也不需要屏蔽中断即可实现自旋锁的功能。
如图2所示,在一可选的实施方式中,本申请实施例中的代理模块至少为两个,即本申请实施例中的一个自旋锁可以外接至少两个处理器。为了对处理器进行区分,多个处理器分别称为第一处理器、第二处理器……第N处理器,与各个处理器对应分别为第一代理模块、第二代理模块……第N代理模块,第一处理器与第一代理模块连接、第二处理器与第二代理模块连接……第N处理器与第N代理模块连接。
上述的处理器能够读取不同的指令,进而生成不同操作请求。具体的,这里的操作请求包括了读请求和写请求。处理器读取的不同操作请求,在发送给代理模块之后,代理模块会根据不同操作请求生成对应的处理锁指令。例如,当处理器首次向代理模块发送读请求的时候,代理模块会根据该读请求生成请求锁。当该处理器再次向代理模块发送写请求的时候,代理模块会根据该写请求,生成释放锁。再例如,当处理器首次向代理模块发送读请求的时候,代理模块会根据该读请求生成请求锁指令。当该处理器再次向代理模块发送写读请求的时候,代理模块会根据该写请求,生成释放锁指令。
代理模块在生成处理锁指令之后,还需要将处理锁指令发送给锁维护模块,锁维护模块对处理锁指令处理之后,向代理模块发送结果响应。锁维护模块生成的结果响应包括了就绪响应和等待响应。其中,就绪响应表征锁可以使用,等待响应表征锁暂时不能使用需等待。这里结果响应的类型是根据代理模块发送处理锁指令的类型和顺序确定的。
代理模块接收到不同的结果响应之后,向与之连接的处理发送对应的反馈结果。这里的反馈结果包括了请求锁成功和请求锁失败。当代理模块接收到就绪响应的时候,代理模块向处理器发送请求锁成功的反馈结果;当代理模块接收到等待响应的时候,代理模块向处理发送请求锁失败的反馈结果。处理器在请求锁成功之后,可以使用锁进行业务处理,在请求锁失败的时候不能使用锁进行业务处理。
例如,当处理器首次向代理模块发送读请求(请求锁)的时候,代理模块会根据该读请求生成请求锁。因为锁维护模块所处的状态不同(锁的状态不同),锁维护模块可能响应为等待响应或者就绪响应。
在响应为就绪响应时,该处理器即成为锁的所有者。处理器后续可以通过写操作来释放锁。
在响应为等待响应时,锁维护模块会将该处理器信息加入到等待列表,代理模块则会响应处理器为锁失败,在锁失败的情况下,处理器会重试获取锁(自旋),此时代理模块不需要再次向锁维护模块发起请求,直接响应为锁失败。在锁维护模块可以将锁分配给当前处理器时,锁维护模块会向当前代理模块发送锁就绪信息。此时,如果处理器再次发起读请求(请求锁)则可以得到锁就绪信息。
在一可选的实施方式中,为了能够实现上述功能,本申请实施例中代理模块包括寄存器和状态机;所述寄存器,用于记录所述处理器是否得到了锁的状态;所述状态机,用于与所述处理器和所述锁维护模块进行交互完成上锁释放锁。例如,寄存器(REG_LOCKED(STATE=LOCKED即锁定状态))于表明当前处理器是否得到了锁。
在一可选的实施方式中,锁维护模块在根据处理锁指令的时候,优先处理先接收到的处理锁指令,在先接收到的处理锁指令未处理结束的时候,再次接收到处理锁指令的时候,不进行处理(进入等待列表)。在先接收到的处理锁指令处理结束后,再处理后续接收到的处理锁指令。当接收到多个处理锁指令的时候,依次如上述方式进行处理。
具体的,如下方式进行处理:所述第一代理模块,用于接收所述第一处理器发送的读请求,生成与所述读请求对应的请求锁指令,并将所述请求锁指令发送给所述锁维护模块;
所述锁维护模块,用于在接收到所述第一代理模块发送的请求锁指令时,对锁的状态进行检测,在锁为空闲状态时,向所述第一代理模块发送就绪响应;
所述第一代理模块,用于在接收到所述就绪响应的时候,向所述第一处理器发送请求锁成功的反馈结果。
所述锁维护模块,向所述第一代理模块发送就绪响应后,还用于记录当前锁的所有者为所述第一处理器;
所述第二代理模块,用于接收所述第二处理器发送的读请求,生成与所述读请求对应的请求锁指令,并将所述请求锁指令发送给所述锁维护模块;
所述锁维护模块,用于在接收到所述第二代理模块发送的请求锁指令时,对锁的状态进行检测,当前锁的所有者为所述第一处理器,向所述第二代理模块发送等待响应,并将所述第二代理模块加入到等待列表中;
所述第二代理模块,用于在接收到所述等待响应的时候,向所述第二处理器发送请求锁失败的反馈结果,并自身状态设置为等待状态;
所述第二代理模块处于等待状态时,接收到所述第二处理器发送的读请求时,直接反馈请求锁失败的反馈结果。
所述第一代理模块,用于在接收所述第一处理器发送的写请求时,生成与所述写请求对应的释放锁指令,并将所述释放锁指令发送给所述锁维护模块;
所述锁维护模块,用于在接收到所述第一代理模块发送的释放锁指令时,将锁的状态修改为空闲状态。
所述锁维护模块,将将锁的状态修改为空闲状态后,还用于对所述等待列表进行检测;
将就绪响应发送给位于所述等待列表首位的处理器,即第二处理器。同时,锁维护模块将状态设置为就绪状态,并记录当前的锁的所有者为处理器二。
所述第二代理模块在得到锁维护模块的就绪响应时,将自身状态设置为就绪状态。
所述第二处理器重试发起读请求到第二代理模块,第二代理模块得到此请求后,检测到当前自身状态为就绪状态,向所述第二处理器发送请求锁成功的反馈结果。
在一可选的实施方式中,在具体实施的时候,有两个处理器和两个代理模块的时候,可以参考图3所示的过程进行:
在初始状态下,所有的处理器代理模块的寄存器REG_LOCKED状态都设置为0,状态都设置为空闲(IDLE),锁维护模块处于锁定状态,状态为空闲,所有者(OWNER)为空(效),等待锁的列表为空(NULL)。
步骤1:第一处理器申请锁:第一处理器读取REG_LOCKED,用于请求锁。第一代理模块得到读请求,检测到状态机处于空闲状态,向锁维护模块申请锁;锁维护模块得到第一代理模块的请求,检测到当前没有人拥有锁(空闲状态),返回给第一代理模块就绪响应(OKAYResponse),记录当前的锁的所有者为第一处理器;第一代理模块得到锁维护模块的就绪响应,返回就绪信号给第一处理器(REG_LOCKED=1)。并将锁状态设置为锁定。
步骤2:第二处理器申请锁:第二处理器读取第二代理模块的REG_LOCKED,用于请求锁;第二代理模块得到读请求,检测到本地处于空闲状态,向锁维护模块申请锁;锁维护模块得到读请求,检测到当前为锁定状态,因此将LIST中的第一个元素记录为第二处理器,返回等待响应(WAIT Response);第二代理模块得到等待响应,返回REG_LOCKED=0给第二处理器,同时将自身状态修改为等待状态。第二处理器在得到返回值为0时,需要重新发起读取操作,此时第二代理模块处于等待状态,直接返回0(第二代理模块不需要再与锁维护模块通信以请求锁),第二处理器可以重复进行读取操作(自旋/spin)。
步骤3:第一处理器释放锁:第一处理器写第一代理模块的REG_LOCKED=0,用于释放锁;第一代理模块得到写请求,向锁维护者发送释放锁请求。锁维护模块得到第一代理模块的释放锁请求,检测到等待列表(LIST)中还有第二处理器也在请求锁,就将OWNER记录为第二处理器,同时向处理器模块2发送锁就绪响应。将所有者修改为第二处理器,将等待列表中的第二处理器清除。第二代理模块得到就绪响应后,状态机变为就绪态,在此步骤之前,第二处理器重复进行读取,只能得到0。第二处理器再次读取REG_LOCKED寄存器,即可得到1,即得到锁。
步骤4:第二处理器释放锁:第二处理器写第二代理模块的REG_LOCKED=0,用于释放锁;第二代理模块得到写请求,向锁维护者发送释放锁请求,并将自身状态设置为空闲状态。锁维护模块得到第二代理模块的锁释放请求,检测到等待列表中没有等待锁的设备,将REG_LOCKED设置为0,并进入空闲状态。
在具体实施的时候,有三个处理器和三个代理模块的时候,可以如下过程进行:
在初始状态下,所有的处理器代理模块的寄存器REG_LOCKED状态都设置为0,状态都设置为空闲(IDLE),锁维护模块处于锁定状态,状态为空闲,所有者(OWNER)为空(效),等待锁的列表为空(NULL)。
步骤1:第一处理器申请锁:第一处理器读取REG_LOCKED,用于请求锁。第一代理模块得到读请求,检测到状态机处于空闲状态,向锁维护模块申请锁;锁维护模块得到第一代理模块的请求,检测到当前没有人拥有锁(空闲状态),返回给第一代理模块就绪响应(OKAYResponse),记录当前的锁的所有者为第一处理器;第一代理模块得到锁维护模块的就绪响应,返回就绪信号给第一处理器(REG_LOCKED=1)。
步骤2:第二处理器申请锁:第二处理器读取第二代理模块的REG_LOCKED,用于请求锁;第二代理模块得到读请求,检测到本地处于空闲状态,向锁维护模块申请锁;锁维护模块得到读请求,检测到REG_LOCKED=1,因此将LIST中的第一个元素记录为第二处理器,返回等待响应(WAIT Response);第二代理模块得到等待响应,返回REG_LOCKED=0给第二处理器,第二处理器得知请求锁失败;同时第二代理模块将自身状态修改为等待状态。第二处理器在得到返回值为0时,需要重新发起读取操作,此时第二代理模块处于等待状态,直接返回0。第二处理器可以重复进行读取操作(自旋/spin)。
步骤3:第三处理器申请锁:第三处理器读取第三代理模块的REG_LOCKED,用于请求锁;第三代理模块得到读请求,检测到本地处于空闲状态,向锁维护模块申请锁;锁维护模块得到读请求,检测到REG_LOCKED=1,因此将LIST中的第二个元素记录为第三处理器,返回等待响应(WAIT Response);第三代理模块得到等待响应,返回REG_LOCKED=0给第三处理器,第三处理器得知请求锁失败;同时第三代理模块将自身状态修改为等待状态。第三处理器在得到返回值为0时,需要重新发起读取操作,此时第三代理模块处于等待状态,直接返回0。第三处理器可以重复进行读取操作(自旋/spin)。
步骤4:第一处理器释放锁:第一处理器写第一代理模块的REG_LOCKED=0,用于释放锁;第一代理模块得到写请求,向锁维护者发送释放锁请求。锁维护模块得到第一代理模块的释放锁请求,检测到等待列表(LIST)中还有第二处理器和第三处理器也在请求锁,由于第二处理器在第三处理器的前边,优先处理第二处理器,就将OWNER记录为第二处理器,同时向处理器模块2发送锁就绪响应。将所有者修改为第二处理器,将等待列表中的第二处理器清除。第二代理模块得到就绪响应后,状态机变为就绪态,在此步骤之前,重复进行读取,只能得到0。第二处理器再次读取REG_LOCKED寄存器,即可得到1,即得到锁。
步骤4:第二处理器释放锁:第二处理器写第二代理模块的REG_LOCKED=0,用于释放锁;第二代理模块得到写请求,向锁维护者发送释放锁请求,并将自身状态设置为空闲状态。锁维护模块得到第二代理模块的释放锁请求,检测到等待列表(LIST)中还有第三处理器也在请求锁,就将OWNER记录为第三处理器,同时向处理器模块3发送锁就绪响应。将所有者修改为第三处理器,将等待列表中的第三处理器清除。第三代理模块得到就绪响应后,状态机变为就绪态,在此步骤之前,重复进行读取,只能得到0,并进入空闲状态。第三处理器再次读取REG_LOCKED寄存器,
即可得到1,即得到锁。
步骤5:第三处理器释放锁:第三处理器写第三代理模块的REG_LOCKED=0,用于释放锁;第三代理模块得到写请求,向锁维护者发送释放锁请求,并将自身状态设置为空闲状态。锁维护模块得到第三代理模块的锁释放请求,检测到等待列表中没有等待锁的设备,将REG_LOCKED设置为0,并进入空闲状态。
图4示出了本申请实施例所提供的一种自旋锁的使用方法的流程示意图,应用于所述的自旋锁,该方法包括步骤S101-S103;具体的:
所述代理模块根据处理器的不同操作请求,生成与所述操作请求对应类型的处理锁指令,并将所述处理锁指令发送给所述锁维护模块;
所述锁维护模块根据接收到各个所述代理模块发送所述处理锁指令的类型和顺序,向所述代理模块发送对应的结果响应;
所述代理模块根据接收到的结果响应,向所述处理器发送对应的反馈结果。
所述代理模块包括有寄存器和状态机;
所述寄存器记录所述处理器是否得到了锁的状态;
所述状态机与所述处理器和所述锁维护模块进行交互完成上锁、查询和释放锁。
所述代理模块包括:第一代理模块和第二代理模块;所述第一代理模块与第一处理器连接,所述第二代理模块与第二处理器连接;
所述第一处理器和所述第二处理器发送的不同操作请求包括:读请求和写请求;
所述第一代理模块和所述第二代理模块生成的处理锁指令包括请求锁和释放锁;
所述锁维护模块发出的结果响应包括:就绪响应和等待响应;
所述第一代理模块和所述第二代理模块发送的反馈结果包括:请求锁成功和请求锁失败。
所述第一代理模块接收所述第一处理器发送的读请求,生成与所述读请求对应的请求锁指令,并将所述请求锁指令发送给所述锁维护模块;
所述锁维护模块在接收到所述第一代理模块发送的请求锁指令时,对锁的状态进行检测,在锁为空闲状态时,向所述第一代理模块发送就绪响应;
所述第一代理模块在接收到所述就绪响应的时候,向所述第一处理器发送请求锁成功的反馈结果。
所述锁维护模块,向所述第一代理模块发送就绪响应后,还记录当前锁的所有者为所述第一处理器;
所述第二代理模块接收所述第二处理器发送的读请求,生成与所述读请求对应的请求锁指令,并将所述请求锁指令发送给所述锁维护模块;
所述锁维护模块在接收到所述第二代理模块发送的请求锁指令时,对锁的状态进行检测,当前锁的所有者为所述第一处理器,向所述第二代理模块发送等待响应,并将所述第二代理模块加入到等待列表中;
所述第二代理模块在接收到所述等待响应的时候,向所述第二处理器发送请求锁失败的反馈结果,并自身状态设置为等待状态;
所述第二代理模块处于等待状态时,接收到所述第二处理器发送的读请求时,直接反馈请求锁失败的反馈结果。
所述第一代理模块在接收所述第一处理器发送的写请求时,生成与所述写请求对应的释放锁指令,并将所述释放锁指令发送给所述锁维护模块;
所述锁维护模块在接收到所述第一代理模块发送的释放锁指令时,将锁的状态修改为空闲状态。
所述锁维护模块,将将锁的状态修改为空闲状态后,还对所述等待列表进行检测;
将就绪响应发送给位于所述等待列表首位的处理器。
如图5所示,本申请实施例提供了一种电子设备,用于执行本申请中的自旋锁的使用方法,该设备包括存储器、处理器、总线及存储在该存储器上并可在该处理器上运行的计算机程序,其中,上述处理器执行上述计算机程序时实现上述的自旋锁的使用方法的步骤。
具体地,上述存储器和处理器可以为通用的存储器和处理器,这里不做具体限定,当处理器运行存储器存储的计算机程序时,能够执行上述的自旋锁的使用方法。
对应于本申请中的自旋锁的使用方法,本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述的自旋锁的使用方法的步骤。
具体地,该存储介质能够为通用的存储介质,如移动磁盘、硬盘等,该存储介质上的计算机程序被运行时,能够执行上述的自旋锁的使用方法。
在本申请所提供的实施例中,应该理解到,所揭露系统和方法,可以通过其他的方式实现。以上所描述的系统实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,系统或单元的间接耦合或通信连接,可以是电性,机械或其他的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,既可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请提供的实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释,此外,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
最后应说明的是:以上所述实施例,仅为本申请的具体实施方式,用以说明本申请的技术方案,而非对其限制,本申请的保护范围并不局限于此,尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本申请实施例技术方案的精神和范围。都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。
Claims (10)
1.一种自旋锁,其特征在于,所述自旋锁包括:代理模块和锁维护模块;所述代理模块外接处理器,所述代理模块与所述锁维护模块连接;
所述代理模块,用于根据处理器的不同操作请求,生成与所述操作请求对应类型的处理锁指令,并将所述处理锁指令发送给所述锁维护模块;
所述锁维护模块,用于根据接收到各个所述代理模块发送所述处理锁指令的类型和顺序,向所述代理模块发送对应的结果响应;
所述代理模块,用于根据接收到的结果响应,向所述处理器发送对应的反馈结果。
2.根据权利要求1所述的自旋锁,其特征在于,所述代理模块包括有寄存器和状态机;
所述寄存器,用于记录所述处理器是否得到了锁的状态;
所述状态机,用于与所述处理器和所述锁维护模块进行交互完成上锁、查询和释放锁。
3.根据权利要求1所述的自旋锁,其特征在于,所述代理模块包括:第一代理模块和第二代理模块;所述第一代理模块与第一处理器连接,所述第二代理模块与第二处理器连接;
所述第一处理器和所述第二处理器发送的不同操作请求包括:读请求和写请求;
所述第一代理模块和所述第二代理模块生成的处理锁指令包括请求锁和释放锁;
所述锁维护模块发出的结果响应包括:就绪响应和等待响应;
所述第一代理模块和所述第二代理模块发送的反馈结果包括:请求锁成功和请求锁失败。
4.根据权利要求3所述的自旋锁,其特征在于,
所述第一代理模块,用于接收所述第一处理器发送的读请求,生成与所述读请求对应的请求锁指令,并将所述请求锁指令发送给所述锁维护模块;
所述锁维护模块,用于在接收到所述第一代理模块发送的请求锁指令时,对锁的状态进行检测,在锁为空闲状态时,向所述第一代理模块发送就绪响应;
所述第一代理模块,用于在接收到所述就绪响应的时候,向所述第一处理器发送请求锁成功的反馈结果。
5.根据权利要求4所述的自旋锁,其特征在于,
所述锁维护模块,向所述第一代理模块发送就绪响应后,还用于记录当前锁的所有者为所述第一处理器;
所述第二代理模块,用于接收所述第二处理器发送的读请求,生成与所述读请求对应的请求锁指令,并将所述请求锁指令发送给所述锁维护模块;
所述锁维护模块,用于在接收到所述第二代理模块发送的请求锁指令时,对锁的状态进行检测,当前锁的所有者为所述第一处理器,向所述第二代理模块发送等待响应,并将所述第二代理模块加入到等待列表中;
所述第二代理模块,用于在接收到所述等待响应的时候,向所述第二处理器发送请求锁失败的反馈结果,并自身状态设置为等待状态;
所述第二代理模块处于等待状态时,接收到所述第二处理器发送的读请求时,直接反馈请求锁失败的反馈结果。
6.根据权利要求5所述的自旋锁,其特征在于,
所述第一代理模块,用于在接收所述第一处理器发送的写请求时,生成与所述写请求对应的释放锁指令,并将所述释放锁指令发送给所述锁维护模块;
所述锁维护模块,用于在接收到所述第一代理模块发送的释放锁指令时,将锁的状态修改为空闲状态。
7.根据权利要求6所述的自旋锁,其特征在于,
所述锁维护模块,将将锁的状态修改为空闲状态后,还用于对所述等待列表进行检测;
将就绪响应发送给位于所述等待列表首位的处理器。
8.一种自旋锁的使用方法,其特征在于,应用于如权利要求1至7任一所述的自旋锁,所述方法包括:
所述代理模块根据处理器的不同操作请求,生成与所述操作请求对应类型的处理锁指令,并将所述处理锁指令发送给所述锁维护模块;
所述锁维护模块根据接收到各个所述代理模块发送所述处理锁指令的类型和顺序,向所述代理模块发送对应的结果响应;
所述代理模块根据接收到的结果响应,向所述处理器发送对应的反馈结果。
9.一种电子设备,其特征在于,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行如权利要求8所述的自旋锁的使用方法的步骤。
10.一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如权利要求8所述的自旋锁的使用方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311768131.XA CN117762496A (zh) | 2023-12-20 | 2023-12-20 | 一种自旋锁、使用方法、装置及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311768131.XA CN117762496A (zh) | 2023-12-20 | 2023-12-20 | 一种自旋锁、使用方法、装置及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117762496A true CN117762496A (zh) | 2024-03-26 |
Family
ID=90324887
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311768131.XA Pending CN117762496A (zh) | 2023-12-20 | 2023-12-20 | 一种自旋锁、使用方法、装置及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117762496A (zh) |
-
2023
- 2023-12-20 CN CN202311768131.XA patent/CN117762496A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7536582B1 (en) | Fault-tolerant match-and-set locking mechanism for multiprocessor systems | |
CN111813791B (zh) | 一种分布式补偿事务的方法及设备 | |
EP3399692B1 (en) | Method and apparatus for upgrading distributed storage system | |
US7856636B2 (en) | Systems and methods of sharing processing resources in a multi-threading environment | |
US5892954A (en) | Method and apparatus for refreshing file locks to minimize conflicting accesses to data files | |
JP2009506403A (ja) | 直接更新ソフトウェアトランザクショナルメモリ | |
WO2007078891A1 (en) | Software assisted nested hardware transactions | |
US20120222051A1 (en) | Shared resource access verification | |
EP0806012B1 (en) | Ordered and reliable maintenance of inter-process relationships in a distributed multiprocessor | |
US7353342B1 (en) | Shared lease instruction support for transient blocking synchronization | |
CN114020406A (zh) | 一种云平台加速虚拟机i/o的方法、装置及系统 | |
CN116489179A (zh) | 业务处理系统及业务处理方法 | |
CN113448701B (zh) | 一种多进程外呼控制方法、系统、电子设备及存储介质 | |
US20040255084A1 (en) | Shadow register to enhance lock acquisition | |
CN117762496A (zh) | 一种自旋锁、使用方法、装置及介质 | |
CN110059115B (zh) | 一种数据读取方法和装置 | |
JP2005149501A (ja) | Dmaを使用して拡張カードでメモリをテストするためのシステムおよび方法 | |
US20050198005A1 (en) | Systems and methods for controlling access to an object | |
JP2005149503A (ja) | Dmaを使用してメモリをテストするためのシステムおよび方法 | |
US7555614B1 (en) | Methods, systems, and computer program products for preventing concurrent execution of conflicting software operations on the same and different storage processors having access to a common storage medium while avoiding deadlocks | |
US20080162823A1 (en) | System and method for handling multiple aliased shadow register numbers to enhance lock acquisition | |
JP3494788B2 (ja) | プログラム実行管理システム及びプログラム実行管理方法 | |
CN106537342B (zh) | 事务中寄存器的动态保存 | |
JPH09212470A (ja) | マルチプロセッサシステム | |
CN118409757B (zh) | 分布式编译方法、装置、计算机程序产品、设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |