一种同步处理方法及其装置的制作方法

文档序号:6541699阅读:158来源:国知局
专利名称:一种同步处理方法及其装置的制作方法
技术领域
本发明涉及计算机同步技术领域,特别是一种同步处理方法及其装置。
背景技术
同步处理功能是计算机的一项非常重要的功能,因为借助同步功能才能实现多道程序协同的目的。在现代的大规模应用中,同步会成为性能的重要瓶颈之一,导致较大的延迟开销。
当某道程序需要等待某个同步标志时,传统的同步处理方法主要是通过中断的方法进行处理。这种方法由于需要多次换道,以及保存与恢复现场,开销大效率低。一种新型的、可替换中断处理的方法,即程序缓时执行方法与装置,已被发明。在L结构CPU中将程序缓时执行方法与装置用于同步处理将显著减少同步处理的开销。

发明内容
一种新型的计算机体系结构已被发明,该种新型的计算机体系结构的主要特点是在同一台CPU中在同一时刻能够并行与并发地执行多道程序。以下称在同一台CPU中在同一时刻能够执行多道程序的体系结构的计算机为L结构计算机,采用L计算机结构的CPU称为L结构CPU。然而,在相关的专利文件中未涉及有关程序间的同步处理。
有鉴于此,本发明根据L结构CPU的特点,采用程序缓时执行的方法及使用这种方法的装置,提出一种可用于L结构CPU的同步方法及使用这种方法的装置。其目的在于提供一种同步处理方法及其装置。
一种同步处理方法,该方法是在同一台CPU中在同一时刻能够并行地执行多道程序的计算机体系结构的特点并采用程序缓时执行技术,方法包括同步处理方法、L结构CPU的程序驱动器驱动方法、增设同步处理装置后的L结构CPU的程序驱动方法。主要是为L结构CPU提供一种开销小、效率高的方法及装置以实现各类同步功能。
如上所述的一种同步方法及使用这种方法的同步处理装置,其特征在于1.设置两组同步指令●测试与等待同步标志指令,指令格式如下Test&Wait_Flag Flag_No,Flag_Value,Pro_Type该指令的操作是当Pro_Type=0时如果参数Flag_Value的当前值等于编号为Flag_No的同步标志的当前值,则置当前程序的后续执行状态为顺序执行状态,即请求顺序执行本程序的下一条指令;否则置本程序的后续执行状态为请求等待执行状态,即请求缓时等待;当Pro_Type>0时如果参数Flag_Value的当前值大于编号为Flag_No的同步标志的当前值,则置当前程序的后续执行状态为顺序执行状态;否则置本程序的后续执行状态为等待执行状态;
当Pro_Type<0时如果参数Flag_Value的当前值小于编号为Flag_No的同步标志的当前值,则置当前程序的后续执行状态为顺序执行状态;否则置本程序的后续执行状态为等待执行状态;●设置同步标志指令Test&Wait_FlagFlag_No,Flag_Value,Pro_Type该指令的操作是当Pro_Type=0时将编号为Flag_No的同步标志的值置为参数Flag_Value的当前值;当Pro_Type>0时将编号为Flag_No的同步标志的值置为该同步标志当前值与参数Flag_Value的当前值之和;当Pro_Type<0时将编号为Flag_No的同步标志的值置为该同步标志当前值与参数Flag_Value的当前值之差;设置完成后,置当前程序的后续执行状态为顺序执行状态。
2.同步处理装置的硬件部分的主要构成至少有●N个同步标志,每个同步标志有n位,其中N≥1,n≥1;●同步处理装置的输入缓存寄存器,用于接收需进行同步处理的程序驱动器;同步处理装置的输出缓存寄存器,用于发送已完成同步处理的程序驱动器;●输入/出缓存寄存器的忙/闲标志,一个标志输入缓存寄存器的忙闲状态,另一个标志输出缓存寄存器的忙闲状态;●操作/控制部件,用于管理控制整个同步处理装置的操作,如接收程序驱动器的处理、执行各同步指令规定的操作、维护同步标志、发送程序驱动器的处理等;●同步处理装置的输入缓存寄存器以某种方式与L结构CPU的指令译码装置以及程序缓时执行装置相连,用于接收携带有同步指令的程序驱动器;同步处理装置的输出缓存寄存器以某种方式与L结构CPU的程序控制装置以及程序缓时执行装置相连,用于输出已完成同步处理或需要缓时等待的程序驱动器。
3.同步处理装置的主要操作是●查询在输入缓存寄存器中是否有接收到的需进行同步处理的程序驱动器,即输入缓存寄存器的忙闲标志是否为忙;若为闲,则反复查询,直到该标志为忙;●当输入缓存寄存器的忙闲标志为忙时,从输入缓存寄存器中取出待处理的程序驱动器,并执行驱动器中所携带的同步指令;如是设置同步标志指令,则按本文所定义的同步设置指令的操作设置相应的同步标志;如是测试与等待同步标志指令,则按本文所定义的测试与等待指令的操作测试相应的同步标志、并根据测试结果设置当前程序的后续执行状态顺序执行状态或等待执行状态;●根据已设置的当前程序的后续执行状态,置当前程序驱动器的下续目的装置当当前程序的后续执行状态是顺序执行状态时,置当前程序驱动器的下续目的装置为程序控制装置,以执行当前程序的下一条指令;当当前程序的后续执行状态是等待执行状态时,置当前程序驱动器的下续目的装置为程序缓时执行装置,以使当前程序进入缓时执行的等待状态;●将处理结束的程序驱动器写入到输出缓存寄存器,并置输出缓存寄存器的忙闲标志为忙;●查询输出缓存寄存器的忙闲标志是否为闲;若为忙,则反复查询,直到该标志为闲;●置输入缓存寄存器的忙闲标志为闲,允许接收并处理下一个携带有同步指令的程序驱动器。
在程序缓时执行装置中“等待”的携带有测试与等待同步指令的程序驱动器在结束“等待”后,将被重新送回到同步处理装置再次执行测试与等待同步指令,并根据测试结果或是发送到程序控制装置以执行该程序的下一条指令、或是再次发送到程序缓时执行装置中“等待”下一次的测试。由此不难看出,采用程序缓时执行技术可较显著的降低系统开销。
本文所述仅为本发明技术构思下的一些基本说明。而依据本发明的技术构想所做的任何等效变换,均应属于本发明的保护范围。


图1是本发明的同步处理装置硬件结构图。
图2是本发明的同步处理方法的工作流程图。
图3是L结构CPU的程序驱动器驱动流程图。
图4是增设本发明的同步处理装置后的L结构CPU的程序驱动器驱动流程图。
具体实施例方式
图1是本发明的同步处理装置硬件结构图。同步处理装置的硬件部分主要由同步标志组、同步处理管理控制部件、输入/输出缓存部件等组成。同步处理装置的各组成部件之间的连接关系如图所示。输入与输出缓存寄存器用于存放输入或输出的程序驱动器。同步标志组包含有N个同步标志,每个同步标志有n位。同步处理管理控制部件用于管理控制整个同步处理装置的操作,如管理程序驱动器的接收、执行各同步指令规定的操作、维护同步标志、控制程序驱动器的发送等;图2是本发明的同步处理的工作流程图。其主要工作流程如下步骤1循环检测输入缓存寄存器的忙闲标志,直到其为忙时转步骤2;步骤2从输入缓存寄存器中取出待处理的程序驱动器,并根据当前程序驱动器所携带的同步指令类型分别进行处理如果是设置同步标志指令,转步骤3;如果是测试与等待同步标志指令,转步骤4;步骤3对于设置同步标志指令,按该指令所定义的操作设置相应的同步标志,并将当前程序驱动器的执行状态设置为顺序执行;转步骤5;步骤4对于测试与等待同步标志指令,按该指令所定义的操作测试相应的同步标志、并根据测试结果设定当前程序驱动器的执行状态;如果被测试的同步标志满足测试条件,则置当前程序驱动器的执行状态为顺序执行,否则置当前程序驱动器的执行状态为等待执行;
步骤5根据当前程序驱动器的执行状态,置当前程序驱动器的下续目的装置若当前程序驱动器的执行状态为顺序执行,则置当前程序驱动器的下续目的装置为程序控制装置,否则置当前程序驱动器的下续目的装置为程序缓时执行装置;步骤6将已完成同步处理的当前程序驱动器发送到本装置的输出缓存寄存器,并置其状态为忙;步骤7循环检测输出缓存寄存器的忙闲标志,直到其为闲;置输入缓存寄存器的忙闲标志为闲,转步骤1。
图3是L结构CPU的程序驱动器驱动流程图。当没有使用同步处理方法极其使用这种方法的装置时,在L结构CPU中,程序驱动器驱动程序执行的主要驱动流程。在L结构计算机中,多个程序驱动器可在同一时刻同时驱动多道程序并行的执行。一个程序驱动器驱动一道程序的驱动流开始于程序控制装置,经取指令装置、指令译码装置、到指令执行装置,最后返回到程序控制装置,周而复始。
其具体步骤如下步骤1程序控制装置按规定用程序驱动器中的ΔPC更新程序驱动器中的PC生成下一条指令的地址并完成其它一些相关的设置;如果检测到该道程序无需中断,则将该已更新的程序驱动器以某种方式发送给L结构CPU的取指令装置,即转步骤2;如果检测到该道程序需要进行中断处理时,则将该已更新的程序驱动器以某种方式发送给L结构CPU的程序缓时执行装置,即转步骤5;
步骤2取指令装置按程序驱动器中的PC地址到程序存储器中取到相应的指令并将其保存到当前程序驱动器的相应单元中;之后,将携带有当前指令的程序驱动器发送给指令译码装置,即转步骤3;步骤3指令译码装置对当前程序驱动器携带的指令进行译码并将其保存到当前程序驱动器的相应单元中;随后将携带有已译码的当前指令的程序驱动器发送给指令执行装置,即转步骤4;步骤4指令执行装置按指令所规定的操作执行该指令、形成ΔPC等执行状态,并将它们保存到当前程序驱动器的相应单元中;最后将该程序驱动器以某种方式发送给程序控制装置,以执行该道程序的下一条指令,即转步骤1。
步骤5程序缓时执行装置接收到需要进行中断处理的程序驱动器后,将其打入程序缓执队列的第0栈;此后,该道程序的程序驱动器就被动态地锁在程序缓时执行装置中进行动态等待;每隔n拍,如果下栈空闲,就下挪一栈;直到被中断的程序驱动器已经经过逐栈移动到程序缓执队列的对首,即程序缓执队列的第N-1栈;此时,被中断的程序驱动器已经经过了一段时间的中断等待、可以返回到正常的程序驱动流程中了。此时,程序缓执装置以某种方式将存放在程序缓执队列第N-1栈的被中断的程序驱动器发送给取指令装置使该道程序转入正常的执行流程,即转步骤2。
图4是增设本发明的同步处理装置后的L结构CPU的程序驱动器驱动流程图。在程序驱动器驱动携代的不是同步指令时,程序驱动器驱动一道程序的驱动流程与图3所示的流程相同。不同的是当指令译码装置检测到某程序驱动器当前携带的指令是一条同步指令时,该道程序的程序驱动器将由指令译码装置控制发送到同步处理装置的输入缓存寄存器,同时将相应的忙闲标志置成为忙。其具体步骤如下步骤1程序控制装置按规定用程序驱动器中的ΔPC更新程序驱动器中的PC生成下一条指令的地址并完成其它一些相关的设置;如果检测到该道程序无需中断,则将该已更新的程序驱动器以某种方式发送给L结构CPU的取指令装置,即转步骤2;如果检测到该道程序需要进行中断处理时,则将该已更新的程序驱动器以某种方式发送给L结构CPU的程序缓时执行装置,转步骤5;步骤2取指令装置按程序驱动器中的PC地址到程序存储器中取到相应的指令并将其保存到当前程序驱动器的相应单元中;之后,将携带有当前指令的程序驱动器发送给指令译码装置,转步骤3;步骤3指令译码装置对当前程序驱动器携带的指令进行译码并将其保存到当前程序驱动器的相应单元中;如果当前程序驱动器当前携带的指令不是一条同步指令,则将该道程序的程序驱动器发送给指令执行装置,转步骤4;如果当前程序驱动器当前携带的指令是一条同步指令,则该道程序的程序驱动器将由指令译码装置控制发送到同步处理装置、并将相应的忙闲标志置成为忙,转步骤6;步骤4指令执行装置按指令所规定的操作执行该指令、形成ΔPC等执行状态,并将它们保存到当前程序驱动器的相应单元中;最后将该程序驱动器以某种方式发送给程序控制装置,以执行该道程序的下一条指令,即转步骤1;步骤5程序缓时执行装置接收到需要进行中断等待的程序驱动器后,将其打入程序缓执队列的第0栈;此后,该道程序的程序驱动器就被动态地锁在程序缓时执行装置中进行动态等待;每隔n拍,如果下栈空闲,就下挪一栈;直到被中断的程序驱动器已经经过逐栈移动到程序缓执队列的对首,即程序缓执队列的第N-1栈;此时,被中断的程序驱动器已经经过了一段时间的中断等待、可以返回到正常的程序驱动流程中了;此时,程序缓执装置将根据当前程序驱动器的来源,以某种方式将存放在程序缓执队列第N-1栈的被中断的程序驱动器或是发送给取指令装置使该道程序转入正常的执行流程,即转步骤2、或是发送给同步处理装置再一次执行同步测试指令,即转步骤6;步骤6当同步处理装置检测到其输入缓存寄存器的忙闲标志为忙时,从输入缓存寄存器中取出待处理的程序驱动器,并执行驱动器中所携带的同步指令如是设置同步标志指令,则按本文所定义的同步设置指令的操作设置相应的同步标志,置当前程序驱动器的下一目的装置为程序控制程序控制部件;如是测试与等待同步标志指令,则按本文所定义的测试与等待指令的操作测试相应的同步标志、并根据测试结果设定当前程序驱动器的下一目的装置程序控制程序控制部件或是程序缓时执行装置;
如果当前程序驱动器的下一目的装置被设置成为程序控制装置,则将该道程序的程序驱动器发送给指令执行装置,转步骤1;如果当前程序驱动器的下一目的装置被设置成为程序缓时执行装置,说明该道程序需要进行中断等待,故将该道程序的程序驱动器发送给程序缓时执行装置,转步骤5。
权利要求
1.一种同步处理方法,其特征在于,该方法是在同一台CPU中在同一时刻能够并行地执行多道程序的计算机体系结构的特点并采用程序缓时执行技术,方法包括同步处理方法、L结构CPU的程序驱动器驱动方法、增设同步处理装置后的L结构CPU的程序驱动方法。
2.根据权利要求1所述的同步处理方法,其特征在于,至少设置两组同步指令●测试与等待同步标志指令,指令格式如下Test&Wait_Flag Flag_No,Flag_Value,Pro_Type该指令的操作是当Pro_Type=0时如果参数Flag_Value的当前值等于编号为Flag_No的同步标志的当前值,则置当前程序的后续执行状态为顺序执行状态,即请求顺序执行本程序的下一条指令;否则置本程序的后续执行状态为请求等待执行状态,即请求缓时等待;当Pro_Type>0时如果参数Flag_Value的当前值大于编号为Flag_No的同步标志的当前值,则置当前程序的后续执行状态为顺序执行状态;否则置本程序的后续执行状态为等待执行状态;当Pro_Type<0时如果参数Flag_Value的当前值小于编号为Flag_No的同步标志的当前值,则置当前程序的后续执行状态为顺序执行状态;否则置本程序的后续执行状态为等待执行状态;●设置同步标志指令Test&Wait_Flag Flag_No,Flag_Value,Pro_Type该指令的操作是当Pro_Type=0时将编号为Flag_No的同步标志的值置成为参数Flag_Value的当前值;当Pro_Type>0时将编号为Flag_No的同步标志的值置成为该同步标志当前值与参数Flag_Value的当前值之和;当Pro_Type<0时将编号为Flag_No的同步标志的值置成为该同步标志当前值与参数Flag_Value的当前值之差;设置完成后,置当前程序的后续执行状态为顺序执行状态。
3.一种同步处理装置,其特征在于,其硬件部分的主要构成至少是●N个同步标志,每个同步标志有n位,其中N≥1,n≥1;●同步处理装置的输入缓存寄存器,用于接收需进行同步处理的程序执行的相关信息、称为程序驱动器;同步处理装置的输出缓存寄存器,用于发送已完成同步处理的程序驱动器;●输入/出缓存寄存器的忙/闲标志,一个标志输入缓存寄存器的忙闲状态,另一个标志输出缓存寄存器的忙闲状态;●操作/控制部件,用于管理控制整个同步处理装置的操作,如接收程序驱动器的处理、执行各同步指令规定的操作、维护同步标志、发送程序驱动器的处理;●同步处理装置的输入缓存寄存器以某种方式与L结构CPU的指令译码装置以及程序缓时执行装置相连,用于接收携带有同步指令的程序驱动器;同步处理装置的输出缓存寄存器以某种方式与L结构CPU的程序控制装置以及程序缓时执行装置相连,用于输出已完成同步处理或需要缓时等待的程序驱动器。
4.根据权利要求1所述的同步处理方法,其特征在于,其同步处理主要工作步骤如下步骤1循环检测输入缓存寄存器的忙闲标志,直到其为忙时转步骤2;步骤2从输入缓存寄存器中取出待处理的程序驱动器,并根据当前程序驱动器所携带的同步指令类型分别进行处理如果是设置同步标志指令,转步骤3;如果是测试与等待同步标志指令,转步骤4;步骤3对于设置同步标志指令,按该指令所定义的操作设置相应的同步标志,并将当前程序驱动器的执行状态设置为顺序执行;转步骤5;步骤4对于测试与等待同步标志指令,按该指令所定义的操作测试相应的同步标志、并根据测试结果设定当前程序驱动器的执行状态;如果被测试的同步标志满足测试条件,则置当前程序驱动器的执行状态为顺序执行,否则置当前程序驱动器的执行状态为等待执行;步骤5根据当前程序驱动器的执行状态,置当前程序驱动器的下续目的装置若当前程序驱动器的执行状态为顺序执行,则置当前程序驱动器的下续目的装置为程序控制装置,否则置当前程序驱动器的下续目的装置为程序缓时执行装置;步骤6将已完成同步处理的当前程序驱动器发送到本装置的输出缓存寄存器,并置其状态为忙;步骤7循环检测输出缓存寄存器的忙闲标志,直到其为闲;置输入缓存寄存器的忙闲标志为闲,转步骤1。
5.根据权利要求1所述的同步处理方法,其特征在于,在程序缓时执行装置中“等待”的携带有测试与等待同步指令的程序驱动器在结束“等待”后,将被重新直接送回到同步处理装置再次执行测试与等待同步指令,并根据测试结果或是发送到程序控制装置以执行该程序的下一条指令、或是再次发送到程序缓时执行装置中“等待”下一次的测试。
6.根据权利要求1所述的同步处理方法,其特征在于,L结构CPU的程序动器驱动方法,其步骤如下步骤1程序控制装置按规定用程序驱动器中的ΔPC更新程序驱动器中的PC生成下一条指令的地址并完成其它一些相关的设置;如果检测到该道程序无需中断,则将该已更新的程序驱动器以某种方式发送给L结构CPU的取指令装置,即转步骤2;如果检测到该道程序需要进行中断处理时,则将该已更新的程序驱动器以某种方式发送给L结构CPU的程序缓时执行装置,即转步骤5;步骤2取指令装置按程序驱动器中的PC地址到程序存储器中取到相应的指令并将其保存到当前程序驱动器的相应单元中;之后,将携带有当前指令的程序驱动器发送给指令译码装置,即转步骤3;步骤3指令译码装置对当前程序驱动器携带的指令进行译码并将其保存到当前程序驱动器的相应单元中;随后将携带有已译码的当前指令的程序驱动器发送给指令执行装置,即转步骤4;步骤4指令执行装置按指令所规定的操作执行该指令、形成ΔPC等执行状态,并将它们保存到当前程序驱动器的相应单元中;最后将该程序驱动器以某种方式发送给程序控制装置,以执行该道程序的下一条指令,即转步骤1;步骤5程序缓时执行装置接收到需要进行中断处理的程序驱动器后,将其打入程序缓执队列的第0栈;此后,该道程序的程序驱动器就被动态地锁在程序缓时执行装置中进行动态等待;每隔n拍,如果下栈空闲,就下挪一栈;直到被中断的程序驱动器已经经过逐栈移动到程序缓执队列的对首,即程序缓执队列的第N-1栈;此时,被中断的程序驱动器已经经过了一段时间的中断等待、可以返回到正常的程序驱动流程中了。此时,程序缓执装置以某种方式将存放在程序缓执队列第N-1栈的被中断的程序驱动器发送给取指令装置使该道程序转入正常的执行流程,即转步骤2。
7.根据权利要求1的同步处理方法,其特征在于,增设同步处理装置后的L结构CPU的程序驱动方法,其步骤如下步骤1程序控制装置按规定用程序驱动器中的ΔPC更新程序驱动器中的PC生成下一条指令的地址并完成其它一些相关的设置;如果检测到该道程序无需中断,则将该已更新的程序驱动器以某种方式发送给L结构CPU的取指令装置,即转步骤2;如果检测到该道程序需要进行中断处理时,则将该已更新的程序驱动器以某种方式发送给L结构CPU的程序缓时执行装置,转步骤5;步骤2取指令装置按程序驱动器中的PC地址到程序存储器中取到相应的指令并将其保存到当前程序驱动器的相应单元中;之后,将携带有当前指令的程序驱动器发送给指令译码装置,转步骤3;步骤3指令译码装置对当前程序驱动器携带的指令进行译码并将其保存到当前程序驱动器的相应单元中;如果当前程序驱动器当前携带的指令不是一条同步指令,则将该道程序的程序驱动器发送给指令执行装置,转步骤4;如果当前程序驱动器当前携带的指令是一条同步指令,则该道程序的程序驱动器将由指令译码装置控制发送到同步处理装置、并将相应的忙闲标志置成为忙,转步骤6;步骤4指令执行装置按指令所规定的操作执行该指令、形成ΔPC等执行状态,并将它们保存到当前程序驱动器的相应单元中;最后将该程序驱动器以某种方式发送给程序控制装置,以执行该道程序的下一条指令,即转步骤1;步骤5程序缓时执行装置接收到需要进行中断等待的程序驱动器后,将其打入程序缓执队列的第0栈;此后,该道程序的程序驱动器就被动态地锁在程序缓时执行装置中进行动态等待;每隔n拍,如果下栈空闲,就下挪一栈;直到被中断的程序驱动器已经经过逐栈移动到程序缓执队列的对首,即程序缓执队列的第N-1栈;此时,被中断的程序驱动器已经经过了一段时间的中断等待、可以返回到正常的程序驱动流程中了;此时,程序缓执装置将根据当前程序驱动器的来源,以某种方式将存放在程序缓执队列第N-1栈的被中断的程序驱动器或是发送给取指令装置使该道程序转入正常的执行流程,即转步骤2、或是发送给同步处理装置再一次执行同步测试指令,即转步骤6;步骤6当同步处理装置检测到其输入缓存寄存器的忙闲标志为忙时,从输入缓存寄存器中取出待处理的程序驱动器,并执行驱动器中所携带的同步指令如是设置同步标志指令,则按本文所定义的同步设置指令的操作设置相应的同步标志,置当前程序驱动器的下一目的装置为程序控制程序控制部件;如是测试与等待同步标志指令,则按本文所定义的测试与等待指令的操作测试相应的同步标志、并根据测试结果设定当前程序驱动器的下一目的装置程序控制程序控制部件或是程序缓时执行装置;如果当前程序驱动器的下一目的装置被设置成为程序控制装置,则将该道程序的程序驱动器发送给指令执行装置,转步骤1;如果当前程序驱动器的下一目的装置被设置成为程序缓时执行装置,说明该道程序需要进行中断等待,故将该道程序的程序驱动器发送给程序缓时执行装置,转步骤5。
全文摘要
本发明涉及计算机同步技术领域,特别是一种同步处理方法及其装置。该方法是在同一台CPU中在同一时刻能够并行地执行多道程序的计算机体系结构的特点并采用程序缓时执行技术,方法包括同步处理方法、L结构CPU的程序驱动器驱动方法、增设同步处理装置后的L结构CPU的程序驱动方法。装置包括N个同步标志、输入缓存寄存器、输出缓存寄存器、输入/出缓存寄存器的忙/闲标志、操作/控制部件。这种同步处理方法及其装置可用于协调同步多道具有数据相关的程序的执行;特别地,是为L结构CPU提供一种开销小、效率高的方法及装置以实现各类同步功能。
文档编号G06F9/46GK1652085SQ200510058829
公开日2005年8月10日 申请日期2005年3月30日 优先权日2005年3月30日
发明者李晓波 申请人:李晓波
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1