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

用于保护对片上资源的访问的方法、介质和电子设备与流程

2022-11-30 13:15:20 来源:中国专利 TAG:


1.本发明涉及处理器技术领域,更具体地,涉及一种用于保护对片上资源的访问的方法、计算机可读介质和电子设备。


背景技术:

2.硬件执行的命令(hardware command)通常涉及到很多的内存读写操作,为了保证这些读写操作的效率,会考虑采用位于芯片内部的一块处理速度极快但容量不是很大的存储空间来存储一些需要读写的数据,该存储空间称为片上资源(spm, scratch pad memory)。
3.与将读写数据存储在ddr(double data rate synchronous dynamic random access memory, 双倍速率同步动态随机存储器)上相比,硬件对片上资源(spm)执行读写操作的效率要比对ddr内存执行读写操作的效率高得多,这是因为片上资源的带宽比ddr大,并且片上资源的读写周期(cycle)数比ddr少,因此硬件对片上资源(spm)执行读写操作的速度会更快,命令执行效率更高。
4.虽然利用片上资源来进行数据读写操作可以有较高的处理效率,但是,在需要处理许多硬件执行命令的情况下,如何保障对于片上资源的正确、可靠访问,以使命令被正确执行,这仍然是现有技术需要解决的问题。
5.在仅一条命令独占片上资源的情况下,对片上资源的使用是原子性的(atomic operation),即,这条命令开始执行时占用该片上资源,并且在命令结束执行之后释放该片上资源,由于这条命令不会被其他命令抢占片上资源,因此在这种情况下无需对片上资源的访问做过多保护。
6.而在有些应用场景下,如果仅仅能够满足一条命令对于片上资源的独占访问,仍然不能满足需求。例如,可能面临期望同一线程的一系列命令独占片上资源的情况,此处的独占是指:片上资源在一系列命令中的第一条命令开始执行时被占用,并且在这一系列命令中的最后一条命令结束执行之后才被释放。如果需要独占片上资源的一系列命令无法独占地访问片上资源,则片上资源可能会因其他命令的访问而写入不期望的数据,从而导致这一系列命令执行出错,进而导致严重的后续问题。


技术实现要素:

7.为克服上述现有技术中存在的问题,本发明的一个方面提供一种用于保护对片上资源的访问的方法,该方法包括:响应于来自用户的申请,使得同一线程中需要独占片上资源的一系列命令进入片上资源保护段,得到目标命令串;其中,该申请用于为一系列命令请求独占片上资源;在片上资源保护段内的目标命令串访问片上资源的期间内,阻止除目标命令串之外的其他命令对片上资源的访问;以及,在目标命令串结束访问片上资源之后,使得该目标命令串离开片上资源保护段。该方法在片上资源保护段内保护一系列命令(目标命令串)对片上资源的独立访问,对于同一线程中需要独占片上资源的一系列命令而言,可
以提高这些命令的执行结果的准确性,并且减少由于执行出错带来的后续问题。在面临需要处理许多命令的场景时,上述方法也有利于实现命令对于片上资源的有效访问,提升正确性、可靠性。
8.上述方法中,在目标命令串访问片上资源的期间内阻止除目标命令串之外的其他命令对片上资源的访问可以包括:由用户驱动在用户层将目标命令串插入同一命令执行队列,并且通过多个命令执行队列向内核层提交命令;以及,由内核驱动在内核层接收来自用户层的命令以提交到硬件;其中,在将目标命令串提交到硬件的期间内,阻止至少如下命令向硬件的提交:与目标命令串位于同一命令执行队列、需要访问片上资源并且不属于目标命令串的第一命令,以及与目标命令串位于不同命令执行队列的第二命令。换言之,在将目标命令串提交到硬件的期间内,允许向硬件提交与目标命令串位于同一命令执行队列并且无需访问片上资源的命令(第三命令),这与阻止提交除目标命令串之外的所有其他命令相比,可以在保证执行结果的准确性的同时提高硬件的并行程度。
9.上述方法中,内核层可以设置有一提交队列,内核驱动用于在内核层通过该提交队列向硬件提交命令。基于此,内核驱动在内核层还执行如下操作:响应于从接收到的命令中识别出目标命令串中的第一条命令,将第一条命令插入所述提交队列;在将第一条命令插入提交队列之后,将后续接收到的目标命令串中的命令以及第三命令插入提交队列,并且挂起后续接收到的第一命令和第二命令,直到将目标命令串中的最后一条命令插入提交队列;以及,在将所述目标命令串中的最后一条命令插入所述提交队列之后,将挂起的第一命令和第二命令插入提交队列。如上文所述,第三命令是与目标命令串位于同一命令执行队列并且无需访问片上资源的命令。
10.上述方法中,将挂起的第一命令和第二命令插入提交队列可以包括:首先将第一命令按接收顺序插入提交队列,再将第二命令按接收顺序插入提交队列。这样,与目标命令串位于同一命令执行队列的第一命令(命令a)会早于不同命令执行队列的第二命令(命令b)而执行,由于同一命令执行队列通常包括同一进程中的命令,因此可以提高指令的执行效率和执行结果的准确性。
11.上述方法中,内核层可以设置有第一提交队列和第二提交队列,内核驱动用于在内核层交叉地通过第一提交队列和第二提交队列向硬件提交命令。基于此,内核驱动在内核层还执行如下操作:响应于从接收到的命令中识别出目标命令串中的第一条命令,将第一条命令插入第一提交队列;以及,在将第一条命令插入第一提交队列之后,将后续接收到的目标命令串中的命令以及第三命令插入第一提交队列,并且将后续接收到的第一命令(命令a)和第二命令(命令b)插入第二提交队列,直到将目标命令串中的最后一条命令插入第一提交队列。设置的两个提交队列可用于交叉地向硬件提交命令,与单队列提交相比具有更好的性能。
12.上述方法中,在将目标命令串的第一条命令插入所述第一提交队列之后,将后续接收到的第一命令和第二命令插入第二提交队列可以包括:首先将第一命令(命令a)按接收顺序插入第二提交队列,再将第二命令(命令b)按接收顺序插入第二提交队列。
13.为了在内核层识别出目标命令串,上述方法还可以包括:由用户驱动在用户层对目标命令串设置标记,以供内核驱动在内核层根据所述标记,从接收到的命令中识别出目标命令串的命令。
14.上述方法还可以包括:在目标命令串离开片上资源保护段之后,响应于来自用户的后续申请,使得另一系列命令进入该片上资源保护段,得到新的目标命令串。通过这样的方式,保证了在成功锁住片上资源保护段之后并且在解锁该片上资源保护段之前,不会有除目标命令串之外的其他命令进入该片上资源保护段,从而使得片上资源保护段内的目标命令串在独占片上资源时,不会受到其他命令的干扰。
15.本发明的另一个方面提供一种计算机可读介质,其上存储有计算机程序,当该计算机程序被处理器执行时实现上述用于保护对片上资源的访问的方法。
16.本发明的又一个方面提供一种电子设备,包括处理器和存储器,存储器存储有计算机程序并且耦合到处理器,当该计算机程序被处理器执行时,使得电子设备实现上述用于保护对片上资源的访问的方法。
17.应当理解的是,以上的一般描述和后文的细节描述仅是示意性和解释性的,并不用于限制本发明。
附图说明
18.此处的附图被并入说明书中并构成说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理,其中:图1示意性地示出了根据本发明一个实施例的用于保护对片上资源的访问的方法的流程图;图2示意性地示出了根据本发明一个实施例的用于在片上资源保护段内的目标命令串访问片上资源的期间内,阻止除目标命令串之外的其他命令访问片上资源的方法的流程图;图3示意性地示出了根据本发明另一个实施例的用于在片上资源保护段内的目标命令串访问片上资源的期间内,阻止除目标命令串之外的其他命令访问片上资源的方法的流程图;以及图4示意性地示出了根据本发明又一个实施例的用于在片上资源保护段内的目标命令串访问片上资源的期间内,阻止除目标命令串之外的其他命令访问片上资源的方法的流程图。
具体实施方式
19.为使本发明的目的、技术方案及优点更加清楚明白,以下结合附图通过具体实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作或对象,与另一个实体或操作或对象区分开来,而不一定要求或者暗示这些实体或操作或对象之间存在任何这种实际的关系或者顺序。
20.发明人经过研究发现,虽然通过访问片上资源(spm)这种片上内存来进行数据处理会比较快,但是片上资源这个存储空间的容量很小,对于期望访问片上资源(spm)的多个硬件执行命令(可简称硬件命令或命令),可能是来自同一进程的多个线程的,也有可能来自多个进程的,硬件的片上资源有可能在一段时间内会面临被同一进程的多个线程同时访问的情况,或被多个进程同时访问的情况。
21.具体的,由于在操作系统运行时会产生非常多的进程,并且每个进程会包括非常多的线程。这些进程、线程的硬件执行命令(可简称硬件命令或命令)通常是通过命令执行队列(command buffer,或,hardware command queue)从用户层(用户层对应的是用户态)提交到内核层(内核层对应的是内核态),并且进而由内核层提交给硬件来执行的。因此,用户层会为不同的进程甚至不同的线程创建很多命令执行队列,用来向内核层提交命令。从内核层来看,就会发现有很多命令通过不同的命令执行队列依次到来。
22.即便将需要独占片上资源的同一线程的一系列命令都插入同一命令执行队列,在内核层接收这一系列命令的期间内也可能会接收到来自其他命令执行队列的命令;而且,即便在同一命令执行队列中,这一系列命令也可能会被同一线程或不同线程的命令隔开。
23.在这种情况下,就很难保证一系列命令能够独占地访问片上资源。例如,这一系列命令可能会在执行期间,被其他线程或其他进程的命令插入执行,而插入的命令可能也需要访问该片上资源(例如,来自其他命令执行队列的需要访问片上资源的命令,来自同一命令执行队列的不同线程的需要访问片上资源的命令),从而导致该一系列命令无法独占片上资源。如果需要独占片上资源的一系列命令无法独占地访问片上资源,意味着这一系列命令可能会被其他线程或进程的命令干扰,会导致片上资源的数据被覆盖,在不合适的时机被写入不期望的数据,从而使得这一系列命令执行出错,进而造成后续更严重的问题。
24.有鉴于此,本发明的一个方面提供一种用于保护对片上资源的访问的方法,该方法在用户层(用户态)和内核层(内核态)执行,用于为同一线程中需要独占片上资源的一系列命令实现对片上资源的独占访问,免受该一系列命令之外的其他命令的影响。
25.需要说明的是,本文中的“一系列命令”指的是同一线程中需要在一段时间内独占对于片上资源的访问,并且需要被硬件按序执行的多个命令。为便于描述,在该一系列命令进入本技术的片上资源保护段(resource section)后,该一系列命令可称为目标命令串。本文中的其他命令通常指的是:内核驱动在接收这一系列命令(即,目标命令串)的期间内接收到的除目标命令串之外的任何命令,在后文中称为其他命令、或除目标命令串之外的其他命令、或除目标命令串之外的任何其他命令。
26.其中,其他命令可以进一步划分为多种类型,例如其他命令可以包括:第一命令(也可记为命令a)、第二命令(也可记为命令b)、第三命令(也可记为命令c)。
27.第一命令(命令a):可表示与目标命令串位于同一个命令执行队列、且需要访问片上资源的命令,并且第一命令是不属于目标命令串的命令。
28.第二命令(命令b):可表示与目标命令串位于不同命令执行队列的命令。
29.第三命令(命令c):可表示与目标命令串位于同一命令执行队列并且无需访问片上资源的命令。
30.在下文的一些实施例中,在将目标命令串提交到硬件的期间内,可阻止命令a、b和c向硬件的提交,而在另一些实施例中,仅阻止命令a和b向硬件的提交。
31.图1示意性地示出了本技术实施例提供的一个用于保护对片上资源的访问的方法的流程图,如图1所示,该方法包括:步骤s11. 定义片上资源保护段;步骤s12. 响应于来自用户的申请,使得同一线程中需要独占片上资源的一系列命令进入片上资源保护段,作为目标命令串;步骤s13. 在片上资源保护段内的目标命令串访问片上资源的期间内,阻止除目标命令串之外的其他命令对片上资源的访问;步骤s14. 在目标命令串结束访问片上资
源之后,使得目标命令串离开片上资源保护段。下文将详细描述这些步骤:步骤s11. 定义片上资源保护段(resource section)。
32.其中,片上资源保护段定义在用户层,成功进入该片上资源保护段的多个命令作为目标命令串,能够在访问片上资源时获得保护,具体来说,能够独占片上资源而不被除目标命令串之外的其他命令干扰。换言之,当被纳入片上资源保护段内的目标命令串在访问片上资源时,未进入片上资源保护段的其他命令对该片上资源的访问将会被阻止(直至目标命令串中的命令都完成了对于该片上资源的访问),由此实现片上资源保护段内的目标命令串对片上资源的独占访问。
33.步骤s12. 响应于来自用户的申请,使得同一线程中需要独占片上资源的一系列命令进入片上资源保护段,作为目标命令串;其中,所述申请用于为这一系列命令请求独占片上资源。
34.如上文所述,同一线程中可能存在需要独占片上资源的一系列命令,用户可以采用提交申请的方式,为这一系列命令请求独占片上资源。例如,用户可以提交申请,请求为同一线程中需要独占片上资源的一系列命令锁住片上资源保护段。
35.用户层的用户驱动可以在接收到用户的申请之后,将同一线程中需要独占片上资源的这一系列命令输入片上资源保护段,当这一系列命令全部进入片上资源保护段(的保护范围),则表示这一系列命令成功锁住了片上资源保护段,也即成功锁住片上资源保护段对应的片上资源,而片上资源保护段内的目标命令串将独占片上资源。将一系列命令输入片上资源保护段可视为在命令与片上资源保护段之间建立锁定联系,该联系用于反映哪些命令对于片上资源的访问将被保护,这可以使得与片上资源保护段建立了锁定联系的这些命令,能够被视为一个将要执行原子操作的整体,得到独占访问片上资源的资格。
36.作为一种实施方式,在一系列命令进入片上资源保护段之后,用户驱动可以在用户层对片上资源保护段内的目标命令串设置标记,该标记可被内核层的内核驱动(kernel mode driver)识别,基于此,内核驱动可以在内核层根据该标记,从接收到的命令中识别出目标命令串。例如,用户驱动可以为目标命令串设置标记,该标记用于指示这些命令位于片上资源保护段内并且需要独占片上资源,用户驱动还可以为目标命令串中的最后一条命令设置特殊标记,以便内核层的内核驱动能够根据该特殊标记,确定出目标命令串中的最后一条命令。又如,用户驱动可以为所有命令设置具有默认值的标记,在一系列命令进入片上资源保护段之后,更新目标命令串的标记的值(使得目标命令串的标记不再是原始的默认值,例如更新为第一标记值),更新后的值用于指示这些命令位于片上资源保护段内并且需要独占片上资源,用户驱动还可以将目标命令串中的最后一条命令的标记的值更新为特殊值(例如更新为第二标记值),以便内核驱动能够根据更新后的特殊值,确定出目标命令串中的最后一条命令。
37.步骤s13. 在片上资源保护段内的目标命令串访问片上资源的期间内,阻止除目标命令串之外的其他命令对片上资源的访问。
38.当用户驱动在用户层对片上资源保护段内的目标命令串设置标记之后,将向内核层的内核驱动提交该目标命令串;内核层的内核驱动识别出该目标命令串,然后将该目标命令串提交到硬件进行执行,以使硬件的各个模块执行该目标命令串。硬件执行该目标命令串的过程中如果需要访问片上资源,那么该目标命令串对于片上资源的访问可得到保
护。其中,在将目标命令串提交到硬件的期间内,内核驱动可以阻止除目标命令串之外的其他命令向硬件的提交。参见图2,步骤s13可以包括如下的子步骤:s1301. 由用户驱动从用户层持续地向内核层提交命令,用户驱动提交的命令包括片上资源保护段内的目标命令串以及除目标命令串之外的其他命令。
39.其中,用户驱动在用户层可通过多个命令执行队列持续地向内核层的内核驱动提交命令,该多个命令执行队列可以是基于不同的线程和/或不同的进程所创建的。
40.s1302. 由内核驱动在内核层接收来自用户层的命令,并且从接收到的命令中识别出目标命令串的命令。其中,内核驱动在接收到一条命令时,会查看该命令的标记或者该命令的标记的值,从而确定该命令是否在片上资源保护段内。
41.s1303. 由内核驱动在内核层确定出在接收目标命令串的期间内,接收到的除目标命令串之外的其他命令,并且记录其他命令的接收顺序。
42.s1304. 由内核驱动在内核层将识别出的目标命令串提交到硬件。
43.其中,内核驱动在内核层可通过至少一个提交队列向硬件提交命令,以使硬件的各个模块执行命令。
44.s1305. 当目标命令串中的命令均提交到硬件之后,由内核驱动在内核层按命令的接收顺序,将在接收目标命令串的期间内接收到的除目标命令串之外的其他命令提交到硬件。
45.s1306. 由内核驱动在内核层,将在目标命令串之后接收到的命令,按接收顺序提交到硬件。
46.若按照通常的现有流程,内核层的内核驱动会按所有命令的接收顺序将来自用户层的所有命令直接按序提交到硬件,但这样可能造成在将片上资源保护段内的目标命令串提交到硬件的期间内,还将除目标命令串之外的那些也要访问片上资源的其他命令提交到硬件,从而影响目标命令串中的一些命令的执行结果。与通常的流程不同,上述步骤中,在将片上资源保护段内的目标命令串提交到硬件的期间内,阻止了除目标命令串之外的其他命令向硬件的提交(但记录所阻止的这些命令的接收顺序)。通过这样的方式,当硬件执行目标命令串的命令时,在目标命令串访问片上资源的期间内,硬件不会执行除目标命令串之外的任何需要访问片上资源的其他命令,从而阻止了会对目标命令串造成不良影响的命令对片上资源的访问,并且实现了目标命令串对片上资源的独占访问。
47.步骤s14. 在目标命令串结束访问片上资源之后,使得该目标命令串离开前述的片上资源保护段。
48.当片上资源保护段内的目标命令串结束对片上资源的独占访问之后,由用户驱动可在用户层从片上资源保护段输出目标命令串,当目标命令串全部离开片上资源保护段,则表示为该目标命令串解锁了片上资源保护段,也即,解除该目标命令串对于片上资源的独占访问。可选的,内核层的内核驱动在将目标命令串提交到硬件时,可以向硬件指示目标命令串中的最后一条命令;硬件在执行完该最后一条命令之后,向内核层的内核驱动发送通知,以指示目标命令串执行完成;进而,由内核层的内核驱动向用户层的用户驱动转发该通知,以指示目标命令串已结束对片上资源的独占访问,从而用户驱动可以在用户层从片上资源保护段输出该目标命令串,使得所述目标命令串离开所述片上资源保护段,解除该目标命令串与片上资源保护段之间的锁定关系,也即,解除目标命令串与该片上资源保护
段对应的片上资源之间的独占访问关系。当然,内核层也可以通过检测的方式识别硬件执行完毕的命令是否为目标命令串的最后一条命令,从而将目标命令串中最后一条命令的执行结果转发给用户层。
49.在片上资源保护段解锁后,另外的需要独占片上资源的命令才可以依申请顺序,进入解锁的片上资源保护段。如果存在多个申请,则由用户驱动在用户层按申请顺序将最早的申请所对应的一系列命令输入解锁的片上资源保护段。通过这样的方式,保证了在成功锁住片上资源保护段之后并且在解锁该片上资源保护段之前,不会有任何命令进入该片上资源保护段,从而使得片上资源保护段内的目标命令串在独占片上资源时,不会受到除目标命令串之外的其他命令的干扰。
50.上述实施例在片上资源保护段内保护目标命令串对片上资源的独立访问,并且在目标命令串访问片上资源的期间内阻止除目标命令串之外的其他命令对片上资源的访问。对于同一线程中需要独占片上资源的一系列命令而言,可以提高这些命令的执行结果的准确性,并且减少由于执行出错带来的后续问题。
51.可选的,在上述实施例的步骤s13中,在将片上资源保护段内的目标命令串提交到硬件的期间内,阻止了除目标命令串之外的所有其他命令向硬件的提交,而在其他实施例中,可以允许向硬件提交同一线程中的其他命令以及同一进程的不同线程中无需访问片上资源的命令。图3示意性地示出了根据本发明另一个实施例的用于在片上资源保护段内的目标命令串访问片上资源的期间内,阻止除目标命令串之外的其他命令访问片上资源的方法的流程图,如图3所示,该方法包括如下步骤:步骤s1311. 由用户驱动在用户层创建多个命令执行队列(command queue),并且由内核驱动在内核层创建一个提交队列。
52.用户驱动可以在用户层为进程和线程创建多个命令执行队列,用于将命令从用户层提交到内核层。通常来说,同一命令执行队列的命令属于同一进程,但可以属于不同线程,即同一命令执行队列中可以包括同一进程的不同线程中的命令。内核驱动可以在内核层创建一个提交队列,用于将接收到的来自用户层的命令从内核层提交到硬件,以供硬件执行这些命令。
53.步骤s1312. 由用户驱动在用户层将片上资源保护段内的目标命令串插入同一命令执行队列。
54.其中,片上资源保护段内的目标命令串在同一命令执行队列中,可以是连续的或者是不连续的,目标命令串中的任意连续两个命令可能被同一线程中的其他命令或者被同一进程的不同线程中的其他命令隔开。
55.步骤s1313. 由用户驱动从用户层通过多个命令执行队列持续地向内核层提交命令,包括片上资源保护段内的目标命令串以及除目标命令串之外的其他命令。其中,每个命令执行队列一次可以提交一个命令或者多个命令。
56.从内核层的角度,其会得知用户层的多个命令执行队列在持续不断地提交命令。也即,从用户层向内核层提交命令的命令提交过程是非阻塞的,即使在内核层会阻止部分命令的提交、将部分命令往硬件提交的过程进行重排序,但是,对于用户层的各个命令执行队列的多个命令,仍然可以保持先到先向内核层提交的原则。
57.步骤s1314. 由内核驱动在内核层接收来自用户层的命令,并且在常规提交模式
下将接收到的命令插入提交队列。
58.在常规提交模式下,内核驱动会在内核层按接收顺序将来自用户层的命令插入提交队列,并且通过该提交队列将命令从内核层提交到硬件。
59.步骤s1315. 响应于从接收到的命令中识别出目标命令串中的第一条命令,由内核驱动在内核层将第一条命令插入提交队列,并且内核驱动从常规提交模式切换到单队列保护提交模式。
60.内核驱动在接收到来自用户层的一条命令时,会查看该命令的标记或者该命令的标记的值。在接收到片上资源保护段内的目标命令串中的第一条命令之前,内核驱动接收到的命令或者没有标记、或者标记的值为默认值;若在用户层为进入了片上资源保护段的目标命令串设置过标记,当内核驱动第一次接收到设置有标记或者标记的值不为默认值的命令时,将该命令识别为目标命令串中的第一条命令。
61.内核驱动在识别出目标命令串的第一条命令之后,将第一条命令插入提交队列,接着切换到单队列保护提交模式。
62.在单队列保护提交模式下,内核驱动在接收到来自用户层的一条命令时,会确定接收到的命令对应的命令类型,并基于不同的命令类型进行不同的处理。
63.在单队列保护提交模式下,内核驱动在接收到来自用户层的一条命令时,首先判断接收到的命令是否是如下命令之一:与目标命令串位于同一命令执行队列、需要访问片上资源、并且不属于目标命令串的命令(即,第一命令,简称为命令a,命令a可以包括:与目标命令串属于同一进程的不同线程、并且需要访问片上资源的命令),与目标命令串位于不同命令执行队列的命令(即,第二命令,简称为命令b)。
64.如果接收到的命令是上述命令a和命令b中的任一种命令,即,接收到的命令可能会干扰片上资源保护段内的目标命令串对片上资源的独占访问,则挂起该接收到的命令。
65.如果接收到的命令是目标命令串中的命令,或者是与目标命令串位于同一命令执行队列并且无需访问片上资源的命令(即,第三命令,简称命令c),则将其插入提交队列。第三命令(命令c)可包括:与目标命令串属于同一线程并且无需访问片上资源的命令,以及,与目标命令串属于同一进程的不同线程并且无需访问片上资源的命令。
66.步骤s1316. 在将目标命令串的第一条命令插入提交队列之后,由内核驱动在单队列保护提交模式下,按命令接收顺序,将后续接收到的目标命令串中的命令以及命令c(即,与目标命令串位于同一命令执行队列并且无需访问片上资源的命令)插入提交队列,挂起后续接收到的命令a(即,与目标命令串位于同一命令执行队列、需要访问片上资源、并且不属于目标命令串的命令)和命令b(即,与目标命令串位于不同命令执行队列的命令),直到将目标命令串中的最后一条命令插入提交队列。
67.其中,内核驱动可以在内核层根据特殊标记或者具有特殊值的标记,识别出目标命令串中的最后一条命令。
68.步骤s1317. 在将目标命令串中的最后一条命令插入提交队列之后,将挂起的命令a和命令b按接收顺序插入提交队列,并且内核驱动从单队列保护提交模式切换到常规提交模式。
69.接下来,内核驱动在常规提交模式下处理目标命令串之后的命令。在识别出新进入片上资源保护段的新的目标命令串中的第一条命令之后,内核驱动可以再次切换到单队
列保护提交模式。
70.从上述步骤s1314-s1317可知,在提交队列中,片上资源保护段内的目标命令串中不会穿插有如下命令:与目标命令串位于同一命令执行队列、需要访问片上资源、并且不属于目标命令串的命令(命令a),以及与目标命令串位于不同命令执行队列的命令(命令b)。这使得在将目标命令串(通过插入提交队列)提交到硬件的期间内,阻止了上述命令a和命令b向硬件的提交。但在将目标命令串提交到硬件的期间内,允许如下命令向硬件的提交:与目标命令串位于同一命令执行队列并且无需访问片上资源的命令(命令c)。与阻止命令a、b和c提交相比,仅阻止命令a和b的进一步提交,可以在保证执行结果的准确性的同时提高硬件的并行程度,即硬件可以以时分复用的方式来执行命令。
71.在上述实施例中,内核驱动在内核层创建一个提交队列,而在其他实施例中,也可以创建多个提交队列。图4示意性地示出了根据本发明又一个实施例的用于在片上资源保护段内的目标命令串访问片上资源的期间内,阻止除目标命令串之外的其他命令访问片上资源的方法,其中以创建两个提交队列用于交叉地向硬件提交命令为例,方法包括如下步骤:步骤s1321. 由用户驱动在用户层创建多个命令执行队列,并且由内核驱动在内核层创建两个提交队列,即第一提交队列和第二提交队列,将第一提交队列设置为默认提交队列。
72.内核层的内核驱动可以交叉地通过第一提交队列和第二提交队列向硬件提交命令,例如,先通过第一提交队列向硬件提交命令,在第一提交队列中的命令提交完成之后,再通过第二提交队列向硬件提交命令,以此类推。
73.步骤s1322. 由用户驱动在用户层将片上资源保护段内的目标命令串插入同一命令执行队列。
74.步骤s1323. 由用户驱动在用户层通过多个命令执行队列持续地向内核层提交命令,包括目标命令串的命令以及除目标命令串之外的其他命令。
75.步骤s1324. 由内核驱动在内核层接收来自用户层的命令,并且在常规提交模式下将接收到的命令插入默认提交队列(即第一提交队列)。
76.在常规提交模式下,内核驱动会在内核层按接收顺序将来自用户层的命令插入默认提交队列。
77.步骤s1325. 响应于从接收到的命令中识别出目标命令串中的第一条命令,由内核驱动在内核层将第一条命令插入默认提交队列(即第一提交队列),并且内核驱动从常规提交模式切换到多队列保护提交模式。
78.在多队列保护提交模式下,内核驱动在接收到来自用户层的一条命令时,首先判断接收到的命令是否是如下命令之一:命令a(即,与目标命令串位于同一命令执行队列、需要访问片上资源、并且不属于目标命令串的命令,换言之,与目标命令串属于同一进程的不同线程、并且需要访问片上资源的命令),命令b(即,与目标命令串位于不同命令执行队列的命令)。
79.如果接收到的命令是上述命令a和命令b中的任一种,即该命令可能会干扰片上资源保护段内的目标命令串对片上资源的独占访问,则将该命令a或命令b插入不同于默认提交队列的另一提交队列(即第二提交队列);如果接收到的命令是目标命令串中的命令,或
者是命令c(即,与目标命令串位于同一命令执行队列并且无需访问片上资源的命令,包括:与目标命令串属于同一线程并且无需访问片上资源的命令,与目标命令串属于同一进程的不同线程、并且无需访问片上资源的命令),则将其插入默认提交队列(即第一提交队列)。
80.步骤s1326. 在将第一条命令插入默认提交队列(即第一提交队列)之后,由内核驱动在多队列保护提交模式下,按命令接收顺序,将后续接收到的目标命令串中的命令以及命令c(即,与目标命令串位于同一命令执行队列并且无需访问片上资源的命令)插入默认提交队列(即第一提交队列),并且将后续接收到的命令a(即,与目标命令串位于同一命令执行队列、需要访问片上资源、并且不属于目标命令串的命令)和命令b(即,与目标命令串位于不同命令执行队列的命令)插入不同于默认提交队列的另一提交队列(即第二提交队列),直到将目标命令串中的最后一条命令插入默认提交队列(即第一提交队列)。
81.其中,在多队列保护提交模式下,可将第一提交队列中的命令按序提交给硬件,以此优先、尽快向硬件提交片上资源保护段内的目标命令串。
82.步骤s1327. 内核驱动从多队列保护提交模式切换到常规提交模式,并且将第二提交队列设置为默认提交队列。
83.接下来,内核驱动在常规提交模式下处理片上资源保护段内的目标命令串之后的命令。在识别出新进入片上资源保护段的新的目标命令串的第一条命令之后,内核驱动可以再次切换到多队列保护提交模式。
84.从上述步骤s1321-s1327可见,内核层设置有两个提交队列,用于交叉地向硬件提交命令,与单队列相比减少了锁竞争、具有更好的性能。此处只是以两个提交队列为例,本领域技术人员可以根据实际需求设置提交队列的数量,在其他实施例中,也可以设置更多的提交队列,用于内核驱动从内核层向硬件提交命令。
85.在上述实施例中,对于在将目标命令串提交到硬件的期间内阻止的命令,内核驱动在将目标命令串提交到硬件之后,按接收顺序将这些被阻止的命令提交到硬件。如上文所述,同一命令执行队列通常包括同一进程中的命令,为了进一步提高指令的执行效率和执行结果的准确性,在其他实施例中,可以在将片上资源保护段内的目标命令串提交到硬件之后,先将阻止的命令a(与目标命令串位于同一命令执行队列、需要访问片上资源、并且不属于目标命令串的命令)按接收顺序提交到硬件,再将命令b(即,与目标命令串位于不同命令执行队列的命令)按接收顺序提交到硬件。
86.例如,在创建了一个提交队列的情况下,在将目标命令串中的最后一条命令插入提交队列(参见步骤s1316)之后,对于挂起的命令,先将挂起的命令a按接收顺序插入提交队列,然后将挂起的命令b按接收顺序插入提交队列。又如,在创建了两个提交队列的情况下,在将阻止的命令插入第二提交队列时(参见步骤s1326),先将命令a按接收顺序插入第二提交队列,然后将命令b按接收顺序插入第二提交队列。
87.应注意,一些示例性方法被描绘为流程图。虽然流程图将操作表述为顺序执行,但可以理解的是,其中的许多操作可以并行、同时或者同步地执行,另外,还可以重新排列操作的顺序。处理可以在操作完成时终止,也可以具有未包括在附图中或者实施例中的附加步骤。
88.本发明的另一个方面提供一种用于实现本发明实施例的电子设备的计算机系统,该计算机系统可以包括总线,以及耦合到总线的处理器、存储器、输入装置(诸如键盘、鼠
标、传感器等)、输出装置(诸如显示器、打印机、扬声器等)、通信接口(诸如并行端口、串行端口、调制解调器、网卡等)以及其他装置(诸如可拆卸装置、驱动装置等)。
89.其中,存储器(诸如rom、prom、eeprom、ram、sram等)用于存储数据以及计算机指令或程序,包括用于实现上文描述的用于保护对片上资源的访问的方法的计算机指令或程序。处理器用于执行计算机指令或程序所指定的一系列动作,例如执行存储器中存储的计算机指令或程序,当处理器执行存储器中存储的计算机指令或程序时,使得计算机系统能够实现上文描述的用于保护对片上资源的访问的方法的实施例,包括图1-4中所示的步骤。
90.本发明的另一个方面提供一种计算机可读介质,该计算机可读介质包括但不限于:软盘、硬盘、磁带、其它磁介质、cdrom、cdrw、dvd、其它光介质、穿孔卡片、其它物理介质、rom、prom、eeprom、ram、sram、或计算机可读取的其它介质,以及传输介质(诸如同轴电缆、光纤电缆、载波等)。计算机可读介质可以包括在上述计算机系统中,也可以是未安装的单独的介质。计算机可读介质用于承载计算机指令或程序,包括用于实现上文描述的用于保护对片上资源的访问的方法的计算机指令或程序,当计算机可读介质中的计算机指令或程序被处理器(例如,上述计算机系统中的处理器)读取并执行时,可以实现(例如,使得上述计算机系统实现)上文描述的用于保护对片上资源的访问的方法的实施例,包括图1-4中所示的步骤。
91.尽管本发明已经通过优选实施例进行了描述,但应理解的是,本发明并不局限于上文描述的并且在附图中示出的实施例,本领域技术人员可以在不脱离本发明范围的情况下进行各种更改和变型。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

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

相关文献