一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种锁管理方法、装置及设备与流程

2022-02-20 12:44:21 来源:中国专利 TAG:


1.本技术涉及计算机领域,特别涉及一种锁管理方法、装置及设备。


背景技术:

2.多核中央处理单元(central processing unit,cpu)中并行运行多个线程,线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。一个进程可以有一个或多个线程,各个线程之间共享程序的内存空间。为保证程序对某一资源的安全访问,维持数据的一致性,并行运行的程序一般需要使用锁机制进行同步,从而保证程序运行过程中共享资源数据的一致性。
3.目前,一个线程在获取到锁之后,可以访问临界区,执行临界区的操作,在对临界区执行完毕之后,该线程释放锁,此时,其他线程就可以获得锁以执行自己的临界区。由于同一时间最多只能有一个线程获取到锁,所以临界区在某一个时刻最多只会有一个线程执行,如此,通过加锁的方式保证了临界区不会被并行。但是,在一个线程获取锁后,其他线程需要一直等待锁被释放,而在等待锁释放的过程中其他线程会一直尝试获取锁,占用cpu资源。可见,得到锁的线程在临界区执行的时间越长,其他线程的等待的时间也就越长,会造成长时间无谓消耗cpu资源。


技术实现要素:

4.本技术提供了一种锁管理方法、装置及设备,以提升性能,节约资源。
5.第一方面,本技术提供一种锁管理方法,该方法可以应用于锁管理模块,该锁管理模块可以设置于第一cpu中,并与第一cpu中的至少一个cpu核以及中断分发模块通信,至少一个cpu核包括第一cpu核。
6.在本技术中,上述锁管理方法可以包括:锁管理模块获得来自第一cpu核的锁申请请求,以请求为第一cpu核中的第一程序分配锁;锁管理模块响应锁申请请求,为第一程序分配锁;锁管理模块向中断分发模块发送第一信号,以指示中断分发模块停止向第一cpu核分发中断。
7.可以理解的,锁管理模块为第一程序分配锁的步骤与锁管理模块向中断分发模块发送第一信号的步骤可以并行执行,即锁管理模块可以响应锁申请请求,为第一程序分配锁的同时向中断分发模块发送第一信号,当然,上述两个步骤也可以串行执行,即锁管理模块先为第一程序分配锁,再向中断分发模块发送第一信号。
8.在本技术中,通过在第一程序访问临界区的时候停止向第一cpu核分发中断,使得第一程序在申请到锁之后,能够不受中断的打断,保持访问临界区,直至完成对临界区的执行。由于在第一程序访问临界区的时候停止向第一cpu核分发中断,避免了中断结束后选择更高优先级线程进行执行而不是原程序执行的死锁问题。进一步地,在第一程序完成对临界区的执行后,锁管理装置释放锁,使得其他程序可以尝试获取锁,如此,减少其他程序等待获取的时间,降低对cpu资源以及内存资源的消耗。
9.在一种可能的实现方式中,锁管理模块可以先接收第一cpu中的至少一个cpu核发送来的锁申请请求,以请求为各个cpu核中的程序分配锁,然后,锁管理模块再从至少一个cpu核中确定出第一cpu核,进而获得来自第一cpu核的锁申请请求。
10.可以理解的,锁管理模块可以根据预设规则从至少一个cpu核中确定出第一cpu核。可选的,预设规则可以包括:至少一个cpu核中优先级最高的程序对应的cpu核;或,至少一个cpu核中的最先向所述锁管理模块发送所述锁申请请求的cpu核;或,至少一个cpu核中组优先级最高的一组程序对应的cpu核;或,一组程序中位于队列头部的程序对应的核。当然,预设规则还可以为其他,本技术实施例不做具体限定。
11.在本技术中,锁管理模块可以获得至少一个cpu核发送的锁申请请求后,那么,就需要进行仲裁,以确认将锁分配给哪一个cpu核,进而保证临界区被唯一访问,执行临界区的操作。
12.在另一种可能的实现方式中,第一程序用于在获得锁后保持对临界区的访问,直至完成对临界区的操作,临界区用于指示一个访问共享资源的程序片段。如此,第一程序在获得锁后,一直访问临界区,能够不受中断的打断,直至完成对临界区的执行,进而尽快完成对临界区的执行。
13.在另一种可能的实现方式中,锁管理模块在为第一程序分配锁之后,还可以释放第一程序对应的锁,并向中断分发模块发送第二信号,以指示中断分发模块恢复向第一cpu核分发中断。
14.可以理解的,锁管理模块为第一程序释放锁的步骤与锁管理模块向中断分发模块发送第二信号的步骤可以并行执行,即锁管理模块可以响应锁申请请求,为第一程序释放锁的同时向中断分发模块发送第二信号,当然,上述两个步骤也可以串行执行,即锁管理模块先为第一程序释放锁,再向中断分发模块发送第二信号。
15.在本技术中,在第一程序完成对临界区的执行后,锁管理模块释放第一程序对应的锁,使得其他程序可以尝试获取锁,如此,减少其他程序等待获取的时间,降低对cpu资源以及内存资源的消耗;进一步地,由于在第一程序完成执行临界区的操作的时候恢复向第一cpu核分发中断,保证cpu的性能。
16.在另一种可能的实现方式中,锁管理模块在为第一程序分配锁之后,如果第一程序完成对临界区的访问后,可以向锁管理模块发送锁释放请求,如此,锁管理模块就可以获得来自第一cpu核的锁释放请求,然后,锁管理模块响应该锁释放请求,释放第一程序对应的锁;锁管理模块还可以响应上述锁释放请求,向中断分发模块发送第二信号,以指示中断分发模块恢复向第一cpu核分发中断。
17.可以理解的,第一程序在完成对临界区的访问后,可以主动请求释放锁,并由锁管理模块指示中断分发模块恢复对第一cpu核分发中断,以使得其他程序能够尽快尝试获取锁,进而减少其他程序等待获取的时间,降低对cpu资源以及内存资源的消耗。
18.在另一种可能的实现方式中,锁管理模块在为第一程序分配锁的时候,还可以启动一定时器模块,也就是锁管理模块自行设定一段时间,以供第一程序访问临界区,当定时器超时时,无论第一程序是否完成临界区的访问,锁管理模块均会向中断分发模块发送第二信号,以指示会恢复向第一cpu核分发中断。
19.可以理解的,锁管理模块在向中断分发模块发送第二信号之后,如果第一程序未
完成对临界区的访问,则第一程序还可以继续对临界区进行访问;如果第一程序完成对临界区的访问,则第一程序可以向锁管理模块发送锁释放请求,以请求释放锁。
20.在本技术中,锁管理模块自行设定一段时间,在这段时间中,第一程序访问临界区,在这一段时间结束时,无论第一程序是否完成临界区的访问,所管理模块均会请求恢复向第一cpu核分发中断,以保证cpu的性能。
21.在另一种可能的实现方式中,第一程序为用户态程序。
22.在另一种可能的实现方式中,第一cpu包括至少一个cpu核、锁管理模块以及中断分发模块,至少一个cpu核、锁管理模块以及中断分发模块通信,至少一个cpu核包括第一cpu核。可以理解的,锁管理模块可以采用硬件模块实现。
23.第二方面,本技术提供一种锁管理装置,该锁管理装置可以为处理器中的芯片或者片上系统,还可以为处理器中用于实现第一方面或第一方面的任一可能的实施方式所述的方法的功能模块。举例来说,该锁管理装置包括:第一通信单元、分配单元以及第二通信单元;其中,第一通信单元,用于获得来自第一cpu核的锁申请请求,锁申请请求用于请求为第一cpu核中的第一程序分配锁;分配单元,用于响应锁申请请求,为第一程序分配锁;第二通信单元,用于向中断分发装置发送第一信号,第一信号用于指示中断分发模块停止向第一cpu核分发中断。
24.在本技术中,通过锁管理装置在第一程序访问临界区的时候停止向第一cpu核分发中断,使得第一程序在申请到锁之后,能够不受中断的打断,保持访问临界区,直至完成对临界区的执行。由于在第一程序访问临界区的时候停止向第一cpu核分发中断,避免了中断结束后选择更高优先级线程进行执行而不是原程序执行的死锁问题。进一步地,在第一程序完成对临界区的执行后,锁管理装置释放锁,使得其他程序可以尝试获取锁,如此,减少其他程序等待获取的时间,降低对cpu资源以及内存资源的消耗。。
25.在一种可能的实现方式中,上述装置还包括:确定单元;那么,第一通信单元,还用于在获得来自第一cpu核的锁申请请求之前,获得来自至少一个cpu核的锁申请请求,来自至少一个cpu核的锁申请请求用于请求为至少一个cpu核中的程序分配锁,至少一个cpu核包括第一cpu核;确定单元,用于从至少一个cpu核中确定第一cpu核。
26.在另一种可能的实现方式中,上述确定单元,具体用于根据预设规则从至少一个cpu核中确定第一cpu核。
27.在另一种可能的实现方式中,第一程序用于在获得锁后保持对临界区的访问,直至完成对临界区的操作,临界区用于指示一个访问共享资源的程序片段。
28.在另一种可能的实现方式中中,上述装置还包括:释放单元,用于在分配单元为第一程序分配锁之后,释放第一程序对应的锁;第二通信单元,还用于向中断分发装置发送第二信号,第二信号用于指示中断分发装置恢复向第一cpu核分发中断。
29.在另一种可能的实现方式中,第一通信单元,还用于在释放单元释放第一程序对应的锁之前,获得来自第一cpu核的锁释放请求,锁释放请求用于请求释放第一程序对应的锁;第二通信单元,用于响应锁释放请求,向中断分发装置发送第二信号。
30.在另一种可能的实现方式中,上述装置还包括:定时单元,用于在分配单元为第一程序分配锁时,触发定时器模块;第二通信单元,用于当定时器模块超时时,向中断分发装置发送第二信号。
31.在另一种可能的实现方式中,第一程序为用户态程序。
32.第三方面,本技术提供一种处理器,包括:至少一个cpu核、总线、锁管理装置以及中断分发装置,其中,至少一个cpu核、锁管理装置以及中断分发装置通过总线通信,至少一个cpu核包括第一cpu核;锁管理装置,用于执行上述第一方或者第一方面的任一可能的实施方式所述的锁管理方法。
33.在一种可能的实现方式中,中断分发装置,用于接收锁管理装置发送的第一信号;响应第一信号,停止向第一cpu核分发中断。
34.在另一种可能的实现方式中,中断分发装置,还用于接收锁管理装置发送的第二信号;响应第二信号,恢复向第一cpu核分发中断。
35.第四方面,本技术提供一种电子设备,包括:处理器,处理器用于用于执行上述第一方或者第一方面的任一可能的实施方式所述的锁管理方法。
36.在本技术中,该电子设备可以为计算设备、存储设备、网络设备等。
37.第五方面,本技术提供一种锁管理装置,包括:处理器、存储器、第一接口以及第二接口,处理器分别与存储器、第一接口以及第二接口耦合,处理器通过第一接口与至少一个cpu核通信,通过第二接口与中断分发装置通信,处理器被配置为读取并执行存储器中的指令,以实现上述第一方或者第一方面的任一可能的实施方式所述的锁管理方法。
38.第六方面,本技术提供一种计算机可读存储介质,计算机可读存储介质存储有指令,当指令在计算机上运行时,用于执行如上述第一方面或者第一方面的任一可能的实施方式所述的锁管理方法。
39.第七方面,本技术提供一种计算机程序或计算机程序产品,当计算机程序或计算机程序产品在计算机上被执行时,使得计算机实现如上述第一方面或者第一方面的任一可能的实施方式所述的锁管理方法。
40.应当理解的是,本技术的第二至七方面与本技术的第一方面的技术方案一致,各方面及对应的可行实施方式所取得的有益效果相似,不再赘述。
附图说明
41.为了更清楚地说明本技术实施例中的技术方案,下面将对本技术实施例中所需要使用的附图进行说明。
42.图1为本技术实施例中的一种锁的使用访问方式的示意图;
43.图2为本技术实施例中的a线程执行临界区的操作的时序示意图;
44.图3为本技术实施例中的处理器的结构示意图;
45.图4为本技术实施例中的锁管理装置和中断分发装置的结构示意图;
46.图5为本技术实施例中的锁管理方法的流程示意图;
47.图6为本技术实施例中的硬件队列的逻辑结构示意图;
48.图7为本技术实施例中的锁管理装置的结构示意图;
49.图8为本技术实施例中的电子设备的结构示意。
具体实施方式
50.下面结合本技术实施例中的附图对本技术实施例进行描述。
51.图1为本技术实施例中的一种锁的使用访问方式的示意图,参见图1所示,a线程获取到锁之后,会执行自身临界区的操作,并在其临界区的执行完毕之后释放锁,然后,其他线程,如b线程或者c线程就可以获取锁,并在获取到锁之后执行自身的临界区代码。但是,由于最多只能有一个线程获取到锁,所以临界区在某一个时刻最多只会有一个线程执行,如此,通过加锁的方式保护了临界区不会被并行。
52.需要说明的是,在本技术实施例中,临界区指的是一个访问共用资源的程序片段,这些共用资源又无法同时被多个程序访问。当有程序执行临界区的操作时,其他程序必须等待,以确保这些共用资源是被互斥获得使用的。
53.在多程序软件开发和运行中,程序能够获得的锁是用于控制资源访问的方式,可以包括自旋锁(spin lock),互斥锁(mutex lock)、改进型的互斥锁等。当然,上述锁还可以为其他基于自旋锁和/或互斥锁衍生的锁,本技术实施例不做具体限定。
54.需要说明的是,在本技术实施例中所说的“程序”可以理解为在cpu核中运行的进程或者线程,本技术实施例不做具体限定。
55.下面以线程申请或释放自旋锁为例来对上述锁的工作机制进行说明。
56.自旋锁是一种用于多线程间快速同步的一种锁,在多个线程需要快速互斥访问时被大量的应用,特别是临界区较短时,使用自旋锁可以有效降低锁自身开销对应用性能的影响。
57.例如,一种典型的自旋锁获取函数的逻辑可以如下所示:
58.spin_lock_get{}{
59.while(读写公共变量失败);
60.}
61.其中,上述公共变量相当于标识位(flag),读写公共变量的操作一般是对公共变量设置或者检查变量的值;如果设置变量值就表示锁已经占用,清除变量值表示锁空闲,可以被其他线程使用。如果线程尝试获取锁失败就一直循环继续尝试获取锁,直到成功获取锁。也就是说,当线程尝试获取自旋锁失败时,该线程会不停的继续尝试下一次获取自旋锁,而不是释放cpu资源做其他工作。这样做的优势是在其他线程释放自旋锁后,由于当前线程一直处于执行状态,那么,当前线程就可以迅速的获取到被释放的锁,而不需要经过较复杂的线程调度等流程;与此同时,这么做的劣势也很明显,就是在当前线程等待获取锁的过程中,cpu资源会一直被占用,不能转而执行其他线程的任务,对cpu资源的存在无谓的浪费,特别是在等待时间较长的条件下会有较大的浪费。
62.进一步地,由于程序获取自旋锁的操作是采用读写内存公共变量的方式来实现的,所以在程序等待获取自旋锁的时候,不仅会占用cpu资源,还会占用不必要的内存带宽资源。为了降低等待的线程对cpu资源以及内存资源的消耗,持有自旋锁的线程需要尽快完成临界区的操作进而释放自旋锁。但是,一个线程对临界区的执行时间,除了取决于临界区的逻辑复杂度,还会受到其他代码的抢占运行的影响。例如,图2为本技术实施例中的a线程执行临界区的操作的时序示意图,参见图2所示,a线程在临界区的执行过程中,cpu资源被优先级更高的程序抢占,cpu核优先响应中断,那么,a线程执行临界区就必须要等到中断处理执行完成之后才能继续,a线程释放锁的时间也会相应延后,其他线程,如b线程、c线程的等待时间也会延长,造成对cpu资源的存在无谓的浪费,特别是在等待时间较长的条件下会
有较大的浪费。
63.另外,根据期望程序运行时所处的不同权限状态,一般可以把程序分为用户态程序和内核态程序,用户态程序是指处于cpu最低权限下运行的程序,而内核态程序可以狭义地指需要在cpu最高权限下运行的程序,也可以泛指在比用户态权限更高一些的权限下运行的程序。结合本技术实施例来说,访问内存变量的指令是一个低权限指令,那么,用户态程序(用户态线程或用户态进程)可以直接执行,但是禁止中断、禁止抢占等操作都是高权限操作,在用户态程序不能直接执行,而是需要系统调用内核态程序执行的,但是系统调用是一个非常费时的操作,通常需要几百纳秒乃至微秒时间来完成,那么,可能在系统调用的过程中,就会发生其他程序的抢占,从而影响程序对临界区的执行时间。
64.进一步地,如果程序在执行临界区的操作时,被中断打断,那么,还可能会存在中断结束后cpu核选择更高优先级程序进行执行而不是原程序进行执行,导致死锁的问题。
65.那么,为了解决上述问题,本技术实施例提供一种处理器,如cpu,该处理器可以设置于如计算设备、存储设备、网络设备等设备中。图3为本技术实施例中的处理器的硬件结构示意图,参见图3中实线所示,该处理器100可以包括:至少一个处理器核(core)101、总线102、锁管理装置103、中断分发装置104,其中,处理器核101包括cpu核,每一个处理器核101、锁管理装置103、中断分发装置104通过总线102通信。
66.在一些可能的实现方式中,参见图3中虚线所示,锁管理装置103与中断分发装置104之间还可以直接通信。
67.在本技术实施例中,上述总线可以为环状总线(ring bus),作为cpu内部各个核之间以及与其他硬件模块之间的互联总线,这里,其他硬件模块可以包括锁管理装置、中断分发装置、内存控制器、pcie根复合器等,本技术实施例不做具体限定。
68.上述锁管理装置,用于获得来自第一cpu核的锁申请请求;响应锁申请请求,为第一cpu核中的第一程序分配锁,并向中断分发装置发送第一信号,以指示中断分发装置停止向第一cpu核分发中断。
69.在本技术其他实施例中,锁管理装置,还用于释放第一程序对应的锁,并向中断分发装置发送第二信号,以指示中断分发装置恢复向第一cpu核分发中断。
70.上述中断分发装置,用于接收锁管理装置发送的第一信号;响应第一信号,停止向第一cpu核分发中断。
71.在本技术其他实施例中,中断分发装置,还用于接收锁管理装置发送的第二信号;响应第二信号,恢复向第一cpu核分发中断。
72.那么,从第一cpu核的角度来看,第一cpu核向锁管理装置申请锁,锁管理装置给第一cpu核分配锁,并通知中断分发装置停止对第一cpu核分发中断;在第一cpu核释放锁的时候,锁管理装置通知中断分发装置恢复对第一cpu核分发中断。
73.在实际应用中,上述锁管理装置可以基于硬件队列、环状链表(ring)、寄存器存储的标识位或其他逻辑实现。锁管理装置可以采用可编程器件,如专用集成电路(application specific integrated circuit,asic)、寄存器转换级电路(register transfer level,rtl)、现场可编程逻辑门阵列(field programmable gate array,fpga)等实现,当然,依赖于cpu的类型,还可以采用其他可编程器件实现,或者,锁管理装置还可以采用逻辑电路实现,本技术实施例不做具体限定。上述中断分发装置可以基于cpu的中断
控制器的结构来实现,中断分发装置可以利用硬件结构实现上述功能,也可以由软件实现上述功能,例如,利用处理器100中任意一个处理器核实现上述功能。
74.在本技术实施例中,图4为本技术实施例中的锁管理装置和中断分发装置的结构示意图,参见图4中实线所示,上述锁管理装置103可以包括:锁管理模块401、第一接口模块402以及第二接口模块403。其中,第一接口模块用于与cpu核进行通信,第二接口模块用于与中断分发装置进行通信。在实际应用中,锁管理装置中的各个模块可以由独立的可编程器件、逻辑电路等硬件模块实现。
75.仍参见图4所示,上述中断分发装置104可以包括:中断分发模块411、第三接口模块412以及第四接口模块413;第三接口模块,用于与锁管理装置进行通信,第四接口模块用于与至少一个cpu核通信,以进行中断分发。其中,第三接口模块与第二接口模块可以通过总线通信,也可以直接通信。
76.上述第一接口模块、第二接口模块、第三接口模块和/或第四接口模块可以采用如收发电路、光收发器等来实现。
77.需要说明的是,在本技术实施例中,锁管理装置为第一cpu中的第一程序分配的锁可以为自旋锁,也可以为改进型的互斥锁,当然,还可以其他基于自旋锁和/或互斥锁衍生的锁,对此不做具体限定。
78.上述第一程序可以为用户态程序,第一程序还可以理解为用户态线程或者用户态进程。
79.上述中断分发模块停止或者恢复向第一cpu核分发的中断为可屏蔽中断,可屏蔽中断是由具有中断能力的外围设备所产生的。也就是说,当第一程序在获取到锁后,通知中断分发装置停止或恢复为第一cpu核分发可屏蔽中断。
80.下面以锁为自旋锁为例,结合上述cpu的结构,对本技术实施例提供的一种锁管理方法进行说明。
81.图5为本技术实施例中的锁管理方法的流程示意图,参见图6中的实线所示,该方法可以包括:
82.s501:第一cpu核向锁管理模块发送锁申请请求;
83.当第一cpu核中运行的第一程序需要访问临界区时,第一cpu核通过第一接口模块向锁管理模块发送锁申请请求,以请求锁管理模块为第一程序分配锁,使得第一程序能够访问临界区,执行临界区的操作。
84.在一些可能的实施方式中,在第一cpu核锁申请请求的同时,cpu的其他核也可以通过第一接口模块向锁管理模块发送锁申请请求,也就是说,第一接口模块可以被至少一个cpu核同时访问,接收来自至少一个cpu核的锁申请请求。
85.s502:锁管理模块响应锁申请请求,为第一程序分配锁。
86.在只有第一cpu核向锁管理模块发送锁申请请求的情况下,锁管理模块响应该锁申请请求,将锁分配给第一程序。
87.在实际应用中,除了第一cpu核中的第一程序请求访问临界区外,还可以存在其他线程同时向锁管理模块发送锁申请请求的情况,那么,锁管理模块获得至少一个cpu核发送的锁申请请求后,需要进行仲裁,以确认将锁分配给哪一个cpu核。假设,锁管理模块仲裁决定将锁分配给第一程序,然后,锁管理模块可以只响应第一cpu核发送的锁申请请求,将锁
分配给第一程序,如此,第一程序就可以唯一的访问临界区,执行临界区的操作。
88.s503:锁管理模块向中断分发模块发送第一信号;
89.其中,第一信号用于指示中断分发模块停止向第一cpu核分发中断。
90.锁管理模块在s502执行的同时或者在s502执行之后,通过第二接口模块与第三接口模块通信,向中断分发模块发送第一信号,通知中断分发模块停止向第一cpu核分发中断,使得第一程序能够保持访问临界区,不会被中断打扰,尽快完成对临界区的操作,减少其他线程等待获取锁的时长,降低对cpu资源以及内存资源的消耗。
91.s504:中断分发模块响应第一信号,停止向第一cpu核分发中断;
92.在一些可能的实现方式中,s502和s503在执行过程中可以先后顺序执行,如先执行s502,后执行s503,或者,先执行s503,后执行s502;当然,也可以同时执行s502和s503,对于s502和s503的执行顺序,本技术实施例不做具体限定。
93.至此,便完成了锁申请流程。
94.在一些可能的实施方式中,第一程序在完成对临界区的执行之后,就需要释放锁,以便其他程序能够尽快获取锁,那么,参见图6中的虚线所示,在s504之后,上述锁管理方法还可以包括:
95.s505:锁管理模块释放第一程序对应的锁;
96.s506:锁管理模块向中断分发模块发送第二信号;
97.其中,第二信号用于指示中断分发模块恢复向第一cpu核分发中断。
98.在一些可能的实现方式中,s505和s506在执行过程中可以先后顺序执行,如先执行s505,后执行s506,或者,先执行s506,后执行s505;当然,也可以同时执行s505和s506,对于s505和s506的执行顺序,本技术实施例不做具体限定。
99.s507:中断分发模块响应第二信号,恢复向第一cpu核分发中断。
100.锁管理模块在释放锁的同时或者在释放锁之后,可以通过第二接口模块与第三接口模块的通信向中断分发模块发送第二信号,以指示中断分发模块恢复向第一cpu核分发中断。中断分发模块响应第二信号,恢复向第一cpu分发中断,那么,当第一cpu核接收到中断分发模块分发的中断后,可以响应该中断,对中断进行处理。
101.在一些可能的实施例中,上述第一程序在完成对临界区的执行后,可以请求锁管理模块释放分配给第一程序的锁,那么,s505可以包括:锁管理模块获得来自第一cpu核的锁释放请求,锁管理模块响应锁释放请求,释放第一程序对应的锁。
102.当第一程序完成对临界区的执行之后,第一cpu核通过第一接口模块可以向锁管理模块发送锁释放请求,以请求第一cpu核释放通过上述s501至s504所述的锁申请过程为第一程序分配的锁,锁管理模块响应第一cpu核发送的锁释放请求,释放锁,此时,其他程序可以尝试获取锁。如此,第一程序在完成临界区的操作后,立即指示锁管理模块释放锁,使得其他程序能够尽快的获取到锁,减少其他程序的等待时间,降低对cpu资源以及内存资源的消耗。
103.相应地,锁管理模块在执行s505之前、之后或者同时,响应上述锁释放请求,向中断分发模块发送第二信号,以指示中断分发模块恢复向第一cpu核分发中断。
104.在一些可能的实施例中,锁管理模块除了根据第一cpu核的请求指示中断分发模块恢复向第一cpu核分发中断之外,还可以自行指示中断分发模块恢复向第一cpu核分发中
断。那么,参见图4中虚线所示,上述锁管理装置103还可以包括:定时器模块404;这里,定时器模块404的时长可以理解为期望第一程序执行临界区的操作所用的时长,该时长的具体取值可以根据cpu的性能、操作系统的需求等进行设置,本技术实施例不做具体限定。
105.在实际应用中,定时器模块可以且不限于以定时器电路或者定时器程序来实现,本技术实施例不做具体限定。
106.那么,锁管理模块通过s502为第一程序分配锁之后,启动定时器模块,定时器模块开始计时。当定时器模块超时时,锁管理模块向中断分发模块发送第二信号,中断分发模块响应第二信号,恢复向第一cpu分发中断,那么,当第一cpu核接收到中断分发模块分发的中断后,可以响应该中断,对中断进行处理。
107.在一些可能的实施方式中,锁管理模块在定时器模块超时之前或者之后均可以释放分配给第一程序的锁,本技术实施例对此不做限定。
108.至此,便完成了锁释放流程。
109.在一些可能的实施方式中,锁管理模块在通过s502为第一程序分配锁的过程中,可以记录下为哪个cpu核的程序分配了锁,如第一cpu核,这样,锁管理模块在执行s503时,可以指示中断分发模块停止向记录的cpu核,即第一cpu核分发中断。
110.相应的,锁管理模块在通过s505为第一程序释放锁的过程中,可以记录下为哪个cpu核的程序释放了锁,如第一cpu核,这样,锁管理模块在执行s506时,可以指示中断分发模块恢复向记录的cpu核,即第一cpu核分发中断。
111.通过上述锁申请流程以及锁释放流程,使得用户态的第一程序在申请到锁之后,能够不受中断的打断,保持访问临界区,直至完成对临界区的执行。由于在第一程序访问临界区的时候停止向第一cpu核分发中断,避免了中断结束后选择更高优先级线程进行执行而不是原程序执行的死锁问题。进一步地,在第一程序完成对临界区的执行后,锁管理装置释放锁,使得其他程序可以尝试获取锁,如此,减少其他程序等待获取的时间,降低对cpu资源以及内存资源的消耗。进一步地,由于在第一程序访问临界区的时候停止向第一cpu核分发中断,避免了中断结束后选择更高优先级线程进行执行而不是原程序执行的死锁问题。
112.在一些可能的实施例中,以锁管理装置为基于硬件队列逻辑实现为例,对上述s501至s507的执行过程进行说明。
113.图6为本技术实施例中的硬件队列的逻辑结构示意图,参见图6所示,硬件队列读写接口允许多个cpu核同时访问,由读写接口自行仲裁决定多个cpu核对队列内容的读写访问顺序,以实现最终向队列存储区域读写数据时是串行写入(可以理解的,所有的读过程串行,所有写过程串行,读的同时可以有写过程)。当某个cpu核向队列写入一个数据时,队列存储中会多一个数据,且新添加的数据位于队列存储区域中有效数据的尾部;当某个cpu核向队列请求读出一个数据时,队列存储中也会减少一个数据,且减少的数据为之前位于存储区域中有效数据的头部的数据。队列存储区域中的数据,会始终按照写入时的顺序来保持相对顺序,当队列由于读取而减少一个数据后,后续的数据会自动前移一个位置,保证队列下一次可以读取到数据。如果队列中的存储区域已经全部都存储了有效数据,即处于满状态,后续cpu核的写操作会得到一个已满的反馈信息而需要等待重新写入;如果队列存储区域无有效数据,即处于空状态,后续cpu核的读操作会得到一个已空的反馈信息而需要等待重新读取。
114.在硬件队列初始化的时候,在队列中存储一个有效数据。首先,cpu中的至少一个cpu核同时访问读接口,发送锁申请请求(这里,锁申请请求可以理解为读信号),由读接口仲裁决定将锁分配给哪个cpu核中的程序。例如,读接口可以将cpu核中的程序按照优先级进行排序,决定为优先级最高的第一程序分配锁,相应地,读接口响应第一cpu核的锁申请请求,第一程序读取队列头部的有效数据;或者,读接口可以将cpu核发送锁申请请求按时间顺序进行排序,决定为最先向读接口发送锁申请请求的第一程序分配锁,相应地,读接口响应第一cpu核的锁申请请求;第一程序读取队列头部的有效数据。当然,读接口还可以采用其他仲裁规则决定为哪个cpu核中的程序分配锁,例如,读接口还可以决策为组优先级最高的一组程序分配锁,或为一组程序中位于队列头部的第一程序分配锁等,本技术实施例不做具体限定。那么,读接口在给第一程序分配锁的同时,可以向中断分发装置发送第一信号,以指示中断分发装置停止向第一cpu核分发中断。
115.当第一程序完成临界区的执行后,向硬件队列中的写接口发送锁释放请求(这里,锁释放请求可以理解为写信号),写接口响应锁释放请求,将有效数据写入队列的尾部,完成锁的释放。与此同时,写接口还可以向中断分发装置发送第二信号,以指示中断分发装置恢复向第一cpu核分发中断。
116.进一步地,写接口在将有效数据写入队列尾部之后,该有效数据将自动移至队列头部,以便后其他程序读取,移动后的队列内相对顺序保持不变。
117.在实际应用中,上述读接口与写接口在物理上可以分设或者合设,读接口和写接口中与cpu核通信的功能模块可以与上述第一接口模块对应,与中断分发装置通信的功能模块可以与上述第二接口模块对应,读接口中进行仲裁决策的功能模块可以与上述锁管理模块对应。
118.或者,以锁管理装置为基于寄存器标识位逻辑实现为例,对上述s501至s507的执行过程进行说明。
119.在寄存器中设置一标识位来表示锁的状态,如标识位置1,则表示锁未被分配,可以获取,反之,如果标识位置0,则标识锁已被分配,不可以获取。首先,寄存器初始化的时候,将标识位置1。首先,cpu中的至少一个cpu核同时访问寄存器,发送锁申请请求,由寄存器仲裁决定将锁分配给哪个cpu核中的程序。例如,寄存器可以将cpu核中的程序按照优先级进行排序,决定为优先级最高的第一程序分配锁,相应地,寄存器响应第一cpu核的锁申请请求,将标识位置0,并告知第一cpu核,或者,寄存器可以将cpu核发送锁申请请求按时间顺序进行排序,决定为最先向寄存器发送锁申请请求的第一程序分配锁,相应地,读接口响应第一cpu核的锁申请请求,将标识位置0,并告知第一cpu核。当然,寄存器还可以采用其他仲裁规则决定为哪个cpu核中的程序分配锁,例如,寄存器还可以决策为组优先级最高的一组程序分配锁,或为一组程序中位于队列头部的第一程序分配锁等,本技术实施例不做具体限定。那么,寄存器在给第一程序分配锁的同时,可以向中断分发装置发送第一信号,以指示中断分发装置停止向第一cpu核分发中断。
120.当第一程序完成临界区的执行后,向寄存器发送锁释放请求,寄存器响应锁释放请求,将标识位置1,完成锁的释放。与此同时,写接口还可以向中断分发装置发送第二信号,以指示中断分发装置恢复向第一cpu核分发中断。
121.由上述可知,其他程序访问寄存器,如果读取到标识位为0,则表明锁已被分配,其
他程序等待,并继续尝试获取锁;而如果读取到标识位为1,则表明锁未被分配,该程序可以获取锁。
122.当然,锁管理装置还可以为其他实现形式,本技术实施例不做具体限定。
123.在一些可能的实现方式中,上述第一程序还可以为内核态程序,第一程序还可以理解为内核态线程或者内核态进程。由于内核态程序是可以执行禁止中断、禁止抢占等操作,但是内核态程序是通过不响应中断来实现禁止中断或禁止抢占的,这样会使得中断迟迟得不到响应,增加了中断响应的耗时,那么,针对内核态的第一程序,可以执行如s501至s505所述的方法,这样,中断分发装置可以在停止向第一cpu核分发中断之后,将优先级较高的中断分发至其他cpu核去处理,使得中断能够及时被响应,提高实时性能。
124.在一些可能的实施方式中,为了满足实时要求较高的应用场景,如车载系统或者实时操作系统中,锁管理装置还可以为多个程序分配锁,并通知中断分发装置停止分发相应的中断。具体来说,锁管理装置接收至少一个cpu核发送的锁申请请求,并为一个或者多个cpu核中的多个实时性要求较高的程序分配锁,这样就能够保证这些程序尽快执行,提升实时性能。
125.基于相同的发明构思,本技术实施例还提供一种锁管理装置,该锁管理装置可以为处理器中的芯片或者片上系统,还可以为处理器中用于实现上述实施例中任一可能的实施方式所述的方法的功能模块。举例来说,图7为本技术实施例中的锁管理装置的结构示意图一,参见图7所示,该锁管理装置700可以包括:第一通信单元701、分配单元702以及第二通信单元703;其中,第一通信单元701,用于获得来自第一cpu核的锁申请请求,锁申请请求用于请求为第一cpu核中的第一程序分配锁;分配单元702,用于响应锁申请请求,为第一程序分配锁;第二通信单元703,用于向中断分发装置发送第一信号,第一信号用于指示中断分发模块停止向第一cpu核分发中断。
126.在本技术实施例中,通过锁管理装置在第一程序访问临界区的时候停止向第一cpu核分发中断,使得第一程序在申请到锁之后,能够不受中断的打断,保持访问临界区,直至完成对临界区的执行。由于在第一程序访问临界区的时候停止向第一cpu核分发中断,避免了中断结束后选择更高优先级线程进行执行而不是原程序执行的死锁问题。进一步地,在第一程序尽快完成对临界区的执行后,锁管理模块释放锁,使得其他程序可以尝试获取锁,减少其他程序等待获取的时间,降低对cpu资源以及内存资源的消耗。
127.应理解的是,本技术实施例的装置700可以通过专用集成电路(asic)实现,或可编程逻辑器件(programmable logic device,pld)实现,上述pld可以是复杂程序逻辑器件(complex programmable logical device,cpld),现场可编程门阵列(fpga),通用阵列逻辑(generic array logic,gal)或其任意组合。也可以通过软件实现图1至图7中所示的方法时,装置700及其各个模块也可以为软件模块。
128.在一些可能的实施方式中,上述装置还包括:确定单元;那么,第一通信单元,还用于在获得来自第一cpu核的锁申请请求之前,获得来自至少一个cpu核的锁申请请求,来自至少一个cpu核的锁申请请求用于请求为至少一个cpu核中的程序分配锁,至少一个cpu核包括第一cpu核;确定单元,用于从至少一个cpu核中确定第一cpu核。
129.在一些可能的实施方式中,上述确定单元,具体用于根据预设规则从至少一个cpu核中确定第一cpu核。
130.在一些可能的实施方式中,第一程序用于在获得锁后保持对临界区的访问,直至完成对临界区的操作,临界区用于指示一个访问共享资源的程序片段。
131.在一些可能的实施方式中,上述装置还包括:释放单元,用于在分配单元为第一程序分配锁之后,释放第一程序对应的锁;第二通信单元,还用于向中断分发装置发送第二信号,第二信号用于指示中断分发装置恢复向第一cpu核分发中断。
132.在一些可能的实施方式中,第一通信单元,还用于在释放单元释放第一程序对应的锁之前,获得来自第一cpu核的锁释放请求,锁释放请求用于请求释放第一程序对应的锁;第二通信单元,用于响应锁释放请求,向中断分发装置发送第二信号。
133.在一些可能的实施方式中,上述装置还包括:定时单元,用于在分配单元为第一程序分配锁时,触发定时器模块;第二通信单元,用于当定时器模块超时时,向中断分发装置发送第二信号。
134.在一些可能的实施方式中,第一程序为用户态程序。
135.上述第一通信单元可以与图4中的第一接口模块对应,第二通信单元可以与图4中的第二接口模块对应;分配单元、确定单元、释放单元以及定时单元可以为一个或者多个处理器。
136.基于相同的发明构思,本技术实施例还提供一种电子设备,包括:处理器,处理器用于用于执行上述实施例的任一可能的实施方式所述的锁管理方法。
137.在本技术实施例中,上述电子设备可以为计算设备,如服务器;电子设备还可以为存储设备,如存储阵列等;电子设备还可以为网络设备,如交换机等。
138.基于相同的发明构思,本技术实施例还提供一种锁管理装置,该管理装置如图8中锁管理装置8011,如图所示,该锁管理装置8011可以包括:处理器80111、存储器80112、至少一个通信接口(图3中仅是示例性的以包括第一接口80113以及第二接口80114为例进行说明)和总线80115,处理器80111、存储器80112、至少一个通信接口通过总线80115进行通信。
139.处理器80111可以是通用中央处理器(cpu)、微处理器、特定应用集成电路(asic)或一个或多个用于控制本技术实施例提供的锁管理方法执行的集成电路,处理器80111可以包括一个或多个cpu,例如cpu0和cpu1。
140.至少一个通信接口可以使用任何收发器一类的装置来实现,用于与其他功能器件、设备或通信网络通信,如以太网、无线接入网(radio access network,ran)、无线局域网(wireless local area networks,wlan)等。其中,第一接口80113用于与电子设备的处理器801(例如cpu)中至少一个处理器核(例如8013)通信,第二接口用于与电子设备中的中断控制器通信。
141.存储器802可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-only memory,rom)、可编程只读存储器(programmable rom,prom)、可擦除可编程只读存储器(erasable prom,eprom)、电可擦除可编程只读存储器(electrically eprom,eeprom)或闪存。易失性存储器可以是随机存取存储器(random access memory,ram),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的ram可用,例如静态随机存取存储器(static ram,sram)、动态随机存取存储器(dram)、同步动态随机存取存储器(synchronous dram,sdram)、双倍数据速率同步动态随机存取存储器(double data date sdram,ddr sdram)、增强型同步动态随机存
取存储器(enhanced sdram,esdram)、同步连接动态随机存取存储器(synchlink dram,sldram)和直接内存总线随机存取存储器(direct rambus ram,dr ram)。。
142.其中,存储器802用于存储执行本技术实施例提供的锁管理方法的计算机执行指令,其中,存储器802以存储用于实现三个模块化功能的指令:第一通信指令、第一处理指令和第二通信指令,并由处理器801来控制执行。处理器801用于执行存储器802中存储的计算机执行指令,从而实现上述一个或者多个实施例中任一可能的实现方式中所提供的锁管理方法。图8中示出的存储器802仅为示意图,该存储器还可以包括其他功能化的指令,对此,本技术实施例不进行限定。
143.锁管理装置用于上述图1至图6上述的方法实施例中相应主体执行的功能,为了简洁,在此不再赘述。
144.本技术还提供的一种电子设备,如图8所示,该电子设备包括处理器801、存储器802、通信接口803和总线804,处理器801、存储器802、通信接口803通过总线804进行通信。处理器801中包括锁管理装置8011、中断控制器8012、处理器核8013和总线8014,锁管理装置8011、中断控制器8012、处理器核8013通过总线8014相连。中断控制器8012可以对应上述图1至图6中所述的中断分发装置,用于实现上述中断分发装置所执行的方法的操作步骤。该电子设备800用于实现上述图1至图6所述方法中相应主体所执行的操作步骤,为了简洁,在此不再赘述。
145.总线804、总线8014和总线80115除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等各种用于实现器件或设备内部通信的传输媒介。但是为了清楚说明起见,在图中将各种总线都标为总线804、总线8014和总线80115。
146.值得说明的是,图8中各部分的数量并不构成对本技术的限定,例如,处理器核8013可以包括多个,为了简洁,本技术仅以一个为例进行标标注。
147.上述电子设备800用于上述图1至图6上述的方法实施例中相应主体执行的功能,为了简洁,在此不再赘述。
148.基于相同的发明构思,本技术实施例提供一种计算机可读存储介质,计算机可读存储介质存储有指令,当指令在计算机上运行时,用于执行如上述实施例中任一可能的实施方式所述的锁管理方法。
149.基于相同的发明构思,本技术实施例提供一种计算机程序或计算机程序产品,当计算机程序或计算机程序产品在计算机上被执行时,使得计算机实现如上述实施例中任一可能的实施方式所述的锁管理方法。
150.上述实施例,可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载或执行所述计算机程序指令时,全部或部分地产生按照本技术实施例所述的流程或功能。所述计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介
质或者是包含一个或多个可用介质集合的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质。半导体介质可以是固态硬盘(solid state drive,ssd)。
151.以上所述,仅为本技术示例性的具体实施方式,但本技术的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本技术揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应该以权利要求的保护范围为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献