用于多核处理器的信号机的制作方法

文档序号:12887013阅读:151来源:国知局
用于多核处理器的信号机的制作方法与工艺

本发明涉及多核处理器,更具体地涉及可以用于多核处理器的信号机(semaphore)。



背景技术:

在多核系统中,信号机是用于控制由多个进程对并行编程或者多用户环境中的共享资源的访问的设备。例如,在一些常规多核处理器中,核心必须在其可以访问共享资源之前轮询信号机。如果共享资源被另一个核占用,则重复轮询操作直到共享资源被释放。如果核心数量相对较大,那么相对较高百分比的系统总线容量会不利地浪费在这种重复轮询操作上。相应地,本发明的目标是提供改善总线使用的用于多核系统的信号机。

附图说明

此处通过示例的方式图示了本发明的一个或者多个实施例,并且不由附图进行限制,在附图中相似的参考标号指示相似元件。图中的元件是为了简单和清楚起见进行图示的并且并不一定按比例绘制。通过涉及附图的下列详细描述,所公开实施例的各种方面、特征和益处将通过示例的方式变得更充分地显而易见,在附图中:

图1是根据本发明实施例的多核处理器的示意性框图;

图2a-2b是根据本发明实施例可以用于图1的系统中的硬件信号机的示意性框图;

图3是根据本发明实施例可以用于图2的硬件信号机中的调度模块的示意性框图;

图4是根据本发明实施例可以用于图1的系统中的共享资源访 问方法的流程图;以及

图5a-5c是图形地图示根据本发明实施例可以用于图1的系统中的三个示例调度算法的时序图。

具体实施方式

此处公开了本发明的详细例示性实施例。然而,出于描述本发明示例实施例的目的,本公开提及的特定结构和功能细节仅仅是代表性的。本发明的实施例可以以许多替换形式实施并且不应该被解释为仅限于此处阐述的实施例。

如此处使用的,单数形式“一”、“一个”和“该”旨在也包括复数形式,除非上下文另外清楚地指出,还应当理解,尽管术语“包括”、“包含”、“有”、“具有”、“含有”和/或“包含有”指定存在所陈述特征、步骤或者部件,但不排除存在或者添加一个或者多个其它特征、步骤或者部件。还应当注意,在一些替换实施例中,某些功能或者动作可以不按图中指示的顺序出现。

如此处使用的,当提到使控制信号、状态位或者其它相关功能特征或者元件再现为其逻辑真和逻辑假状态时分别地使用术语“断言(assert)”和“解除断言(de-assert)”。如果逻辑真状态是逻辑电平1,则逻辑假状态是逻辑电平0。替换地,如果逻辑真状态是逻辑电平0,则逻辑假状态是逻辑电平1。

在各种替换实施例中,可以使用正逻辑电路或者负逻辑电路生成此处描述的每个逻辑信号。例如,在负逻辑信号的情况下,信号为低电平有效,以及逻辑真状态与逻辑电平0相对应。替换地,在正逻辑信号的情况下,信号为高电平有效,以及逻辑真状态与逻辑电平1相对应。

由使用信号机管理核心之间对共享资源的访问的竞争的多核处理器系统解决上面指示现有技术中的问题中的至少一些,该信号机为不同核心维持单独访问请求队列并且使用可选择的调度算法一次准许待定请求中的一个。信号机通过使用不是系统总线一部分的相应专用 核心线路向请求被准许的核心发送相应中断信号以用信号通知请求被准许的该核心。随后将所准许的请求移出队列,并且核心响应于接收断言的中断信号访问共享资源。使用用于将中断信号从硬件信号机传输至核心的专用核心线路有利地去除在系统总线上重复轮询信号机的需要,同时使用调度算法有利地防止竞争核心之间的潜在竞争状况。

本发明的一个实施例是多核处理系统,包括多个核心、可由核心通过系统总线访问的第一共享资源和运行以选通由核心对第一共享资源的访问的第一信号机。第一信号机使用第一调度算法解决不同核心之间对第一共享资源的竞争。第一信号机通过使用相应专用核心线路向赢得竞争的核心发送相应断言的中断信号以用信号通知赢得竞争的该核心。赢得竞争的核心随后响应于接收相应断言的中断信号访问第一共享资源。

本发明的另一个实施例是管理其多个核心之间对多核处理系统的共享资源的访问的竞争的方法,该方法包括:维持多个请求队列,其中将请求队列中的每一个分配给相应核心以使对由相应核心访问共享资源的一个或者多个请求在请求队列中排队;使用第一调度算法从请求队列中选择要准许的请求;和在相应专用核心线路上发送断言的中断信号以使得请求被准许的相应核心访问共享资源。

现在参照图1,示出了根据本发明实施例的多核处理器系统100的示意性框图。为了图示目的并且没有过度限制,在图1中示出了系统100,并且下面将系统100描述为具有四个核心1200-1203和三个共享资源1500-1502。在替换实施例中,系统100中核心120的数量可以不同于四个。类似地,系统100中的共享资源150的数量可以不同于三个。在优选实施例中,在单个集成电路管芯上制造系统100。

如此处使用的,术语“核心”指的是电子设备的独立处理单元,其中电子设备是例如中央处理单元(cpu)、数字信号处理器(dsp)或者片上系统(soc)。核心可以读取和执行程序指令。多核处理系统的多个核心能够同时运行多个指令,从而提高服从并行计算的程序的总体速度。制造商可以将核心集成到单个集成电路(ic) 管芯上(称为芯片多处理器或者cmp)或者将核心集成到组装成单个ic封装件的多个管芯上。多核处理器系统用于许多应用,诸如,但不限于,通用计算、嵌入式系统、网络、dsp系统和图形处理单元(gpu)。

如此处使用的,术语“共享资源”指的是可以由核心1200-1203中的任何一个在执行它们的功能的进程中使用的系统100的硬件元件。共享资源的示例非排他列表包括:末级(例如,l2或者l3)高速缓存、存储器控制器、互连电路和预取硬件模块。

除核心1200-1203和共享资源1500-1502以外,系统100包括硬件信号机1400-1402,该硬件信号机1400-1402中的全部通过系统总线130互连(例如,如图1所指示的)。信号机140i(其中i=0、1、2)运行以选通对对应共享资源150i的访问,从而确保每次由核心1200-1203中的单个核心使用共享资源150i。信号机140i使用专用中断信号142ij(其中j=0、1、2、3)以用信号通知核心120j共享资源150i是否可用于访问。该中断信令使核心120j能够避免通过系统总线130重复轮询信号机140i。

不同中断信号142ij中的每一个被施加至相应中断控制器(intc)110j,该相应中断控制器(intc)110j通过在核心线路112j上对核心120j发出适当控制信号对中断信号142ij作出响应。在示例实施例中,中断信号142ij中的每一个是一位信号,而核心线路112j上传送的控制信号可以是多位控制信号或者核心指令。中断控制器110j运行以将若干中断源组合到核心线路112j上,同时允许向其中断输出分配优先级别。当中断控制器110j接收多个断言的中断信号142ij以及可选地其它断言的中断信号(在图1中没有明确示出)时,中断控制器110j按照它们的相对优先级次序将它们转换成核心线路112j上的对应控制信号。在各种实施例中,向中断分配优先级的可能模式中的一些包括硬优先级、轮流优先级和级联优先级,它们中的全部对本领域普通技术人员是已知的。

当核心1200-1203中的两个或者更多个正在等待(相同)共享资 源150i变得可用于访问时,在共享资源被先前占用核心释放时在竞争核心之间会潜在地出现竞争状况。为了防止竞争核心1200-1203之间对于锁定刚释放的共享资源150i的这种竞争,对应信号机140i运行以每次仅断言中断信号142ij中的单个中断信号。信号机140i使用操作调度算法确定断言中断信号142ij中的哪个中断信号,例如,如下面参照图2-5更详细描述的。

图2a-2b是根据本发明实施例图示硬件信号机140i(图1)的示意性框图。更具体地,图2a是信号机140i的总体框图。图2b是用于图2a的信号机140i的寄存器模块220的更详细框图。

在一个实施例中,信号机140i包括总线接口210、寄存器模块220、调度模块230和中断发生器240。总线接口210将信号机140i连接至系统总线130(图1)并且使系统100的其它电路能够对寄存器模块220进行读取和/或写入。寄存器模块220将与信号机140i的预期功能有关的各种参数值存储在六个寄存器中,该六个寄存器分别地标记为reg0、reg1、reg2、reg3、status(状态)和sch(调度)。调度模块230运行所选择的调度算法以确定应当准许访问对应的刚释放的共享资源150i的竞争请求中的哪个请求并且随后相应地断言中断启动信号2320-2323中的一个。中断发生器240响应于从调度模块230接收的中断启动信号2320-2323生成中断信号142ij。

寄存器reg0、reg1、reg2和reg3中的每一个将与核心1200-1203中的相应核心相对应的参数值存储在图2b中标记为pid、to、req和lock的四个相应字段中。寄存器regj中的lock字段:(a)如果共享资源150i没被核心120i锁定,则具有二进制“0”;(b)如果共享资源150i由核心120i锁定和/或正由核心120i使用,则具有二进制“1”。当由核心120j请求共享资源150i时,寄存器regj中的req字段具有二进制“1”,否则具有二进制“0”。寄存器regj中的to字段具有n+1位的长度(如长度指示符[n:0]指示的),并且被配置为存储相对时间,在该相对时间生成核心120j的超时中断和/或寄存器regj中的其它参数值中的一些或者 全部被复位为缺省状态。如果to字段被设定为0,则禁用超时控制。如果核心120j是多进程核心,则寄存器regj的pid字段存储核心120j上运行的请求或者锁定共享资源150i的进程的标识值。如果核心120j是单进程核心,则pid字段被设定为0。

status寄存器具有分别在图2b中标记为core_id和pid的两个字段。core_id字段被配置为存储当前使用共享资源150i的核心120的标识值。status寄存器的pid字段被配置为如果对应核心120是多进程核心则存储正使用共享资源150i的特定进程的标识值。如果对应核心120是单进程核心,则pid字段被设定为0。

sch寄存器例示性地示出为具有标记为sel的单个2位字段。sel字段中存储的二进制值标识当前选择为在调度模块230上运行的调度算法。下列示例图示了sel值的一个可能分配。

如果sel[1:0]=00,则选择循环(round-robin)算法用于调度模块230。如果sel[1:0]=01,则选择加权循环(weightedround-robin)算法用于调度模块230。如果sel[1:0]=10,则选择固定优先级(fixed-priority)算法用于调度模块230。为另外的调度算法保留“11”的sel值以例如在下次系统升级时添加至可用调度算法的菜单。下面分别地参照图5a-5c对示例循环(round-robin)算法、加权循环算法和固定优先级算法进行更详细的描述。

本领域普通技术人员将理解上面提及的可用调度算法的菜单严格地用于图示目的。在替换实施例中,可以类似地提供不同调度算法组供信号机140i选择。此外,可用调度算法的数量可以不同于三个或者四个,在此情况下相应地调节sel字段的长度。

图3是图示根据本发明实施例的调度模块230(图2)的框图。调度模块230包括请求检测器310、四个请求队列3200-3203、解锁检测器330和调度器340。调度模块230的各种电路彼此交互,与例如寄存器模块220(图2a-2b)和中断发生器240交互,如下面进一步描述的。

在操作中,请求检测器310对寄存器模块230(图2b)的寄存 器reg0-reg3的req字段的内容作出响应。当寄存器regj(图2b)的req字段中的值被设定为二进制“1”时,请求检测器310通过在请求队列320j的末端记录对应请求来作出响应。在请求排入队列之后,调度模块230使寄存器regj的req字段中的二进制值复位为0。如果适用,则排入队列的请求将包括来自寄存器regj(参见图2b)的pid字段的pid值。以这种方式,即使在相同请求队列320j中,由多进程核心120j运行的不同进程也分开排队。

解锁检测器330对寄存器模块230(图2b)的寄存器reg0-reg3的lock字段的内容作出响应。当寄存器模块230(图2b)的寄存器regj中的任何一个的lock字段被清除为0时,解锁检测器330通过向调度器340提供对应解锁指示符332来作出响应。如上面已经解释的,将寄存器regj的lock字段中存储的值从“1”改变为“0”意味着共享资源150i被核心120j释放并且现在可用于供其它请求核心120访问。

调度器340通过下列操作对从解锁检测器330接收的解锁指示符332作出响应:(a)基于当前有效的(active)调度算法从请求队列3200-3203的右(就图3而言)端选择请求中的一个,以及(b)断言中断启动信号2320-2323中的相应中断启动信号。调度模块230随后从对应请求队列320将所选择的请求移出队列,更新status寄存器的core_id和pid字段中存储的值以及将寄存器模块230(图2b)的寄存器regj中的相应寄存器的lock寄存器中存储的值设定为“1”。

信号机140i(图2a)的中断发生器240通过断言中断信号142ij对所断言的中断启用控制信号232j作出响应。同时,如果寄存器regj的to字段中存储的值不是0,则中断发生器240启动计数器(在图2a没有明确地示出)。在该情况下,当计数器达到寄存器regj的to字段中存储的值时,向中断控制器110j发送超时中断,寄存器regj的lock字段被清除为0,以及向调度器340发送伴随的解锁指示符332。在一些实施例中,使用分开的线路传输超时中 断。

图4是根据本发明实施例可以用于系统100(图1)中的共享资源访问方法400的流程图。为了图示目的,下面使用核心1200(核心0)访问共享资源1500(resource0)的示例描述方法400。本领域普通技术人员将理解如何使方法400适合于任意核心120j访问任意共享资源150i的情况。

在方法400的步骤402处,核心1200读取信号机1400(semaphore0)(还参见图1、2a和2b)的寄存器模块220中的寄存器reg0的lock字段。

在步骤404处,确定所读取的寄存器reg0的lock字段中是否存储有二进制0。如果寄存器reg0的lock字段具有二进制0,则方法400的处理引导至步骤412。否则,方法400的处理引导至步骤420。

在示例实施例中,当核心1200读取寄存器reg0的lock字段时,寄存器模块220的对应逻辑电路将(reg0[lock]|reg1[lock]|reg2[lock]|reg3[lock])作为lock字段值返回至核心1200。如果所返回的lock字段值是二进制“1”,则意味着共享资源1500被占用。因此,例如,如下面进一步描述的,在步骤420处使当前请求排入队列。如果所返回的lock字段值是二进制“0”,则意味着共享资源1500可用于供核心1200访问。寄存器模块220的对应逻辑电路因此将reg0[lock]的值设定为二进制“1”并且方法400的处理引导至步骤412。

在步骤412处,核心1200(核心0)访问共享资源1500(resource0)。信号机1400的寄存器模块220中的status寄存器相应地更新为在其中具有对应core_id值以及在适用的情况下具有pid值(还参见图2b)。

在步骤414处,确定核心1200是否已经完成对共享资源1500的访问。如果核心1200已经完成访问,则方法400的处理引导至步骤416。否则,方法400的处理保持在步骤412和414的循环中。在一 些实施例中,由于非0值存储在寄存器reg0的to字段中,响应于由中断发生器240(图2)生成的超时中断,方法400的处理可以退出该循环。

在步骤416处,信号机1400的寄存器模块220中的寄存器reg0的lock字段被设定为“0”以解锁共享资源1500(resource0)。

在步骤420处,使访问请求排到信号机1400(semaphore0)的调度模块230的请求队列3200中。为了实现该结果,执行下列子步骤。首先,将信号机1400的寄存器模块220中的寄存器reg0的req字段设定为“1”。其次,请求检测器310通过在请求队列3200的末端处记录对应请求来对req字段中的“1”作出响应。最后,在请求排入队列之后,将req字段中的二进制值设置回0。如果适用,则排入队列的请求将包括来自寄存器reg0(参见图2b)的pid字段的pid值。

在步骤422处,核心1200等待来自信号机1400的中断到达核心线路1120以能够访问共享资源1500。注意,在步骤422期间没有发生信号机轮询。

步骤424和426用来滤出转换为到达核心线路1120的控制信号的任何其它(不是来自信号机1400)中断。如上面已经解释的,由于中断控制器1100(intc0)也可以使用核心线路1120传输这种其它转换的中断,因此执行该过滤。步骤424运行以检测由核心1200在核心线路1120上接收的任何转换中断。步骤426运行以检测指示共享资源1500现在可用于供核心1200访问的来自信号机1400的经转换中断。只有当肯定地清除步骤424和426两者时,方法400的处理才进行至步骤428。否则,方法400的处理循环回步骤422。

如上面已经解释的,当来自信号机1400的经转换中断到达核心线路1120时,信号机1400的调度模块230已经使来自请求队列3200的对应请求移出队列,更新了status寄存器的core_id和pid字段中存储的值,并且将寄存器reg0(还参见图2b)的lock寄 存器中存储的值设定为“1”。

在示例实施例中,步骤428、430和432分别地类似于上面描述的步骤412、414和416。重申一下,在核心1200访问共享资源1500时执行步骤428和430的循环。步骤432使得共享资源1500(resource0)解锁并且可用于供其它核心120和/或其它进程访问。使用信号机1400的请求队列3200-3203并且根据该信号机的调度器340上运行的当前有效的调度算法选择访问共享资源1500的下一个核心/进程。

图5a-5c是图形地图示根据本发明实施例可以用于系统100(图1)中的三个示例调度算法的时序图。更具体地,图5a是图形地图示示例循环算法的时序图。图5b是图形地图示示例加权循环算法的时序图。图5c是图形地图示示例固定优先级算法的时序图。如上面解释的,可以选择这些调度算法中的任何一个在信号机140i的调度器340上运行,其中由调度模块230(还参见图2b和图3)的sch寄存器中存储的sel值控制算法选择。为了图示目的而并非不当限制,图5a-5c中所示示例与由信号机1400执行的用于准许访问对应共享资源1500的调度相对应。本领域普通技术人员将理解可以以类似方式实现由任何其它信号机140i执行的用于准许访问对应共享资源150i的调度。

参照图5a,如果sel[1:0]=00(还参见图2b),则选择循环算法。图5a中的时间轴指示占用核心120使共享资源1500解锁的时间t1-t7。沿着引导至解锁时间的对应水平箭头指示占用核心的标识。例如,在时间t1处使共享资源1500解锁的占用核心120是核心1200(核心0)。在时间t2处使共享资源1500解锁的占用核心120是核心1201(核心1)。在时间t3处使共享资源1500解锁的占用核心120是核心1202(核心2)等等。对于时间t1-t7中的每一个在对应时间标记正上方示出了请求队列3200-3203(还参见图3)的状态。请求队列3200-3203中的每个符号r表示相应待定请求。

循环算法通过以循环次序并且没有优先级地选择请求队列3200- 3203准许待定请求。在所示示例中,循环次序如下:0→1→2→3→0。跳过在共享资源1500被解锁时没有待定请求的下一个请求队列320。

在时间t1处,请求队列3201是由循环算法使用的循环次序中下一个队列。由于请求队列3201具有待定请求r,因此在时间t1处准许该请求r并且使该请求r从请求队列3201移出队列。因此,核心1201(核心1)成为占用核心。

在时间t2处,请求队列3202是由循环算法使用的循环次序中下一个队列。由于请求队列3202具有待定请求r,因此在时间t2处准许该请求r并且使该请求r从请求队列3202移出队列。因此,核心1202(核心2)成为占用核心。

注意,直到时间t5为止,接下来的请求队列320没有一个被跳过。在时间t5处,请求队列3201是由循环算法使用的循环次序中下一个队列。然而,请求队列3201在时间t5处没有待定请求r并且因而被跳过。由于请求队列3202(现在是由循环算法使用的循环次序中的下一个队列)具有待定请求r,因此在时间t5处准许该请求r并且将该请求r从请求队列3202移出队列。因此,核心1202(核心2)成为占用核心。

在时间t6处,由于请求队列3203没有待定请求r,因此请求队列3203被类似地跳过。因此,在时间t6处准许来自请求队列3200的请求r。

在时间t7处,所有请求队列3200-3203都是空的。

图5b以类似于图5a中使用的描绘的方式描绘了加权循环算法。在所示示例中,分配至请求队列3200-3203的算法权重分别是2、1、1和1。加权循环算法与上面描述的循环算法的不同在于:对下一个请求队列320准许的请求r的数量等于该请求队列的算法权重,条件是该请求队列在其中具有足够数量的待定请求。在图5b中这种类型的调度的示例在时间t4和t5处是明显的。在这些时间处,由于请求队列3200的算法权重是2,因此成排地准许来自请求队列3200的两个待定请求r。

图5c以类似于图5a和5b中使用的描绘的方式描绘了固定优先级算法。在所示示例中,分配至请求队列3200-3203的算法优先级分别是“最高”、“高”、“中等”和“低”。根据固定优先级算法,在解锁时间准许来自具有待定请求r的请求队列当中具有最高优先级的请求队列的待定请求r。例如,在时间t1处,由于请求队列3201具有比请求队列3202高的优先级,因此准许来自请求队列3201的请求r。在时间t2处,由于请求队列3200具有比请求队列3202和3203中的任何一个高的优先级,因此准许来自请求队列3200的请求r。在时间t3处,由于请求队列3202具有比请求队列3203高的优先级,因此准许来自请求队列3202的请求r,诸如此类。

尽管本公开包括对例示性实施例的参考,但是本说明书并不旨在按照限制性意义进行解释。

例如,尽管上面参照硬件信号机描述了各种实施例,但是本发明的实施例并不仅限于此。替换实施例可以包括使用由通用处理器或者核心运行的软件实现的信号机设备,用以向对应多核处理器系统的其它部分提供适当指令。因而,如权利要求中使用的术语“信号机”应当解释为涵盖硬件信号机设备和软件信号机设备两者。

在本公开范围内的所描述实施例的各种修改以及其它实施例对本公开涉及领域的技术人员显而易见,它们被认为落入例如如在下列权利要求中表示的本公开的原理和范围内。

还应当理解,可以由本领域技术人员在不背离如下列要求中表示的本发明范围的情况下对为解释本发明的性质描述和图示的部分的细节、材料和布置作出各种改变。

可以以方法和用于实践那些方法的装置的形式实施一些实施例。还可以以有形介质(诸如磁记录介质、光记录介质、固态存储器、软磁盘、cd-rom、硬盘驱动器或者任何其它非暂时机器可读存储介质)中记录的程序代码的形式实施一些实施例,其中,当程序代码加载到机器(诸如计算机)中并且由机器执行时,机器成为用于实践一个或者多个专利发明的装置。还可以以例如包括加载到机器中 和/或由机器执行的非暂时机器可读存储介质中存储的程序代码的形式实施一些实施例,其中,当程序代码加载到机器(诸如计算机或者处理器)中和/或由机器执行时,机器成为用于实践一个或者多个专利发明的装置。当在通用处理器上实现时,程序代码段与处理器结合以提供类似于特定逻辑电路工作的独特设备。

可以通过使用专用硬件以及能够执行与适当软件相关联的指令的硬件提供图中所示各种元件的功能,包括但不限于标记为“处理器”和/或“控制器”的任何功能块。当由处理器提供时,可以由单个专用处理器、由单个共享处理器或者由可以共享其中一些的多个单独处理器提供该功能。另外,术语“处理器”或者“控制器”的明确使用不应该被解释为排他性地指代能够执行软件的硬件并且可以隐含地而非限制地包括数字信号处理器(dsp)硬件、网络处理器、专用集成电路(asic)、现场可编程门阵列(fpga)、用于存储软件的只读存储器(rom)、随机存取存储器(ram)和非易失性存储装置。还可以包括其它硬件(常规的和/或定制的)。类似地,图中所示任何开关仅是概念性。可以通过程序逻辑的操作、通过专用逻辑、通过程序控制与专用逻辑的交互或者甚至手动地实施它们的功能,如从上下文更具体理解的可由实施者选择具体技术。

此处对“一个实施例”或者“实施例”的引用指的是结合实施例描述的特定特征、结构或者特性可以包括在本发明的至少一个实施例中。在说明书中各种地方出现的短语“在一个实施例中”并不一定都指的是相同实施例,也不一定是与其它实施例互斥的单独实施例或者替换实施例。这同样适用于术语“实施方式”。

除非另外明确地陈述,每个数字值和范围应当被解释为近似的,就好像在值或者范围的值前面有词语“大约”或者“近似”一样。如本申请中使用的,除非另外明确地指示,术语“连接的”旨在涵盖元件之间的直接连接和间接连接两者。

为了该描述的目的,术语“耦合”、“耦连”、“耦合的”、“耦接”、“连接”或者“连接的”指的是本领域已知或者今后开发 的允许在两个或者更多个元件之间传递能量的任何方式,以及尽管并不一定,但是可以预期一个或者多个额外元件的插入。术语“直接耦合”、“直接连接”等等暗示连接的元件邻接或者通过用于传递能量的导体连接。

尽管利用对用标记按照特定顺序陈述下列方法权利要求中的步骤,但是除非权利要求的陈述另外暗示用于实现这些步骤中的一些或者全部的特定序列,否则这些步骤并不一定旨在限于以该特定顺序实现。

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