CN104424027B - 线程运行方法及装置 - Google Patents
线程运行方法及装置 Download PDFInfo
- Publication number
- CN104424027B CN104424027B CN201310370098.5A CN201310370098A CN104424027B CN 104424027 B CN104424027 B CN 104424027B CN 201310370098 A CN201310370098 A CN 201310370098A CN 104424027 B CN104424027 B CN 104424027B
- Authority
- CN
- China
- Prior art keywords
- thread
- run
- user
- target hardware
- hardware thread
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例提供一种线程运行方法及装置。本发明提供的线程运行方法,包括:正在运行的当前用户线程向操作系统OS发送硬件线程分配请求;接收所述OS返回的硬件线程分配响应,所述硬件线程分配响应包括所述OS分配的目标硬件线程的标识;所述当前用户线程指示待运行用户线程在所述目标硬件线程中运行。本发明实施例提供的线程运行方法,实现待运行用户线程的启动和运行可以通过当前用户线程的指令执行完成,相对于现有技术中需要库调度器和OS调度器的调度配置,用户线程才能被分配到硬件线程中启动和运行,在一定程度上减少了待执行用户线程启动和运行的过程,提高系统资源的利用率。
Description
技术领域
本发明实施例涉及通信技术,尤其涉及一种线程运行方法及装置。
背景技术
随着计算机和智能终端设备的普及,各种的操作系统(Operation System,以下简称为:OS)广泛的应该在日常生活中。
计算机中每个运行的程序就是一个进程,进程需要创建并运行一个或多个软件线程,然而,软件线程需要被调度到中央处理器(Central Processing Unit,以下简称为:CPU)内核中运行,具体在CPU内核的硬件线程中运行,因此,所述软件线程需要被OS调度器指派到CPU内核的可用硬件线程中才能实现运行。例如通常的同时多线程(SimultaneousMultithreading,以下简称为:SMT)内核中存在多个硬件线程,每个进程中一般都包含多个待运行的用户线程,用户线程在运行时由库调度器为其分派到内核线程,多个用户线程可能被分配到一个内核线程中,并标记可执行的用户线程,进而由OS调度器选择已标记的用户线程并将其映射到可用的硬件线程,上述用户线程和内核线程均为软件线程;在SMT内核中存在可用硬件线程时,进程中的用户线程被OS调度器指派到CPU内核的硬件线程中实现运行。
现有技术的进程中,将用户线程指派到SMT内核的硬件线程的过程,需要库调度器和OS调度器的调度配置,软件线程的启动和运行过程复杂,会耗费大量系统资源。
发明内容
本发明实施例提供一种线程运行方法及装置,以解决现有技术中待运行用户线程的启动过程需要通过库调度器和OS调度器才能为该用户线程分配硬件线程的问题。
第一方面,本发明实施例提供一种线程运行方法,包括:
正在运行的当前用户线程向操作系统OS发送硬件线程分配请求;
接收所述OS返回的硬件线程分配响应,所述硬件线程分配响应包括所述OS分配的目标硬件线程的标识;
所述当前用户线程指示待运行用户线程在所述目标硬件线程中运行。
在第一方面的第一种可能实现方式中,所述当前用户线程指示待运行用户线程在所述目标硬件线程中运行,包括:
所述当前用户线程执行线程启动指令,以使所述待运行用户线程在所述目标硬件线程中运行。
根据第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述当前用户线程执行线程启动指令之前,还包括:
初始化所述目标硬件线程的系统寄存器。
根据第一方面的第一种或第二种可能的实现方式,在第三种可能的实现方式中,所述当前用户线程执行线程启动指令,包括:
将所述待运行用户线程的函数入口值、参数个数和参数内容分别拷贝到所述目标硬件线程的相应通用寄存器中。
根据第一方面的第三种可能的实现方式,在第四种可能的实现方式中,所述将所述待运行用户线程的函数入口值、参数个数和参数内容分别拷贝到所述目标硬件线程的相应寄存器中,包括:
将所述线程启动指令译码为三条微指令,所述三条微指令分别用于将所述待运行用户线程的函数入口值拷贝到所述目标硬件线程的程序计数器PC 中,将所述待运行用户线程的参数个数拷贝到所述目标硬件线程的第一寄存器,将所述待运行用户线程的各参数拷贝到所述目标硬件线程的第二寄存器;并行执行所述三条微指令。
根据第一方面的第三种可能的实现方式,在第五种可能的实现方式中,所述将所述待运行用户线程的函数入口值、参数个数和参数内容分别拷贝到所述目标硬件线程的相应寄存器中,包括:
对所述线程启动指令进行译码;
依次执行将所述待运行用户线程的函数入口值拷贝到所述目标硬件线程的PC中,将所述待运行用户线程的参数个数拷贝到所述目标硬件线程的第一寄存器,将所述待运行用户线程的各参数拷贝到所述目标硬件线程的第二寄存器。
根据第一方面的第二种到第五种可能的实现方式的任意一种,在第六种可能的实现方式中,所述初始化所述目标硬件线程的系统寄存器之后,还包括:
将所述目标硬件线程的程序状态寄存器PSR的激活位设置为0。
根据第一方面的第六种可能的实现方式,在第七种可能的实现方式中,所述当前用户线程执行线程启动指令之后,还包括:
将所述目标硬件线程的PSR的激活位设置为1。
根据第一方面的第一种到第七种可能的实现方式的任意一种,在第八种可能的实现方式中,所述当前用户线程执行线程启动指令之后,还包括:
所述当前用户线程执行所述当前用户线程的指令流中所述线程启动指令之后的指令。
根据第一方面、第一方面的第一种到第八种可能的实现方式的任意一种,在第九种可能的实现方式中,所述待运行用户线程为指令行数不超过800行的用户线程。
第二方面,本发明实施例提供一种线程运行方法,包括:
操作系统OS接收正在运行的当前用户线程发送的硬件线程分配请求;
确定一个可用的目标硬件线程;
向所述当前用户线程返回硬件线程分配响应,所述硬件线程分配响应包括所述目标硬件线程的标识,以使所述当前用户线程指示待运行用户线程在所述目标硬件线程中运行。
在第二方面的第一种可能实现方式中,所述确定一个可用的目标硬件线程,包括:
选择一个除运行所述当前用户线程的硬件线程之外的目标硬件线程,停止所述目标硬件线程中正在运行的用户线程,并将所述目标硬件线程中已停止运行的用户线程从所述目标硬件线程中调离。
第三方面,本发明实施例提供一种线程运行装置,设置在用户线程中,包括:
发送模块,用于在用户线程正在运行时,向操作系统OS发送硬件线程分配请求;
接收模块,用于接收所述OS返回的硬件线程分配响应,所述硬件线程分配响应包括所述OS分配的目标硬件线程的标识;
处理模块,用于指示待运行用户线程在所述目标硬件线程中运行。
在第三方面的第一种可能实现方式中,所述处理模块,具体用于执行线程启动指令,以使所述待运行用户线程在所述目标硬件线程中运行。
根据第三方面的第一种可能的实现方式,在第二种可能的实现方式中,还包括:初始模块,用于在所述处理模块执行线程启动指令之前,初始化所述目标硬件线程的系统寄存器。
根据第三方面的第一种或第二种可能的实现方式,在第三种可能的实现方式中,所述处理模块,具体用于将所述待运行用户线程的函数入口值、参数个数和参数内容分别拷贝到所述目标硬件线程的相应通用寄存器中。
根据第三方面的第三种可能的实现方式,在第四种可能的实现方式中,所述处理模块,包括:
第一译码单元,用于将所述线程启动指令译码为三条微指令,所述三条微指令分别用于将所述待运行用户线程的函数入口值拷贝到所述目标硬件线程的程序计数器PC中,将所述待运行用户线程的参数个数拷贝到所述目标硬件线程的第一寄存器,将所述待运行用户线程的各参数拷贝到所述目标硬件线程的第二寄存器;
第一执行单元,用于行执行所述三条微指令。
根据第三方面的第三种可能的实现方式,在第五种可能的实现方式中,所述处理模块,包括:
第二译码单元,用于对所述线程启动指令进行译码;
第二执行单元,用于依次执行将所述待运行用户线程的函数入口值拷贝到所述目标硬件线程的PC中,将所述待运行用户线程的参数个数拷贝到所述目标硬件线程的第一寄存器,将所述待运行用户线程的各参数拷贝到所述目标硬件线程的第二寄存器。
根据第三方面的第二种到第五种可能的实现方式的任意一种,在第六种可能的实现方式中,所述装置还包括:设置模块,用于在所述初始模块初始化所述目标硬件线程的系统寄存器之后,将所述目标硬件线程的程序状态寄存器PSR的激活位设置为0。
根据第三方面的第六种可能的实现方式,在第七种可能的实现方式中,所述设置模块,还用于在所述处理模块执行线程启动指令之后,将所述目标硬件线程的PSR的激活位设置为1。
根据第三方面的第一种到第七种可能的实现方式的任意一种,在第八种可能的实现方式中,所述处理模块,还用于在所述处理模块执行线程启动指令之后,执行所述当前用户线程的指令流中所述线程启动指令之后的指令。
根据第三方面、第三方面的第一种到第八种可能的实现方式的任意一种,在第九种可能的实现方式中,所述待运行用户线程为指令行数不超过800行的用户线程。
第四方面,本发明实施例提供一种线程运行装置,设置在OS中,包括:
接收模块,用于接收正在运行的当前用户线程发送的硬件线程分配请求;
处理模块,用于确定一个可用的目标硬件线程;
发送模块,用于向所述当前用户线程返回硬件线程分配响应,所述硬件线程分配响应包括所述目标硬件线程的标识,以使所述当前用户线程指示待运行用户线程在所述目标硬件线程中运行。
在第四方面的第一种可能实现方式中,所述处理模块,具体用于选择一个除运行所述当前用户线程的硬件线程之外的目标硬件线程,停止所述目标硬件线程中正在运行的用户线程,并将所述目标硬件线程中已停止运行的用户线程从所述目标硬件线程中调离。
本实施例所提供的线程运行方法,通过正在运行的当前用户线程向OS 申请分配一个硬件线程,并指示待运行用户线程在OS分配的硬件线程中运行,实现待运行用户线程的启动运行可以通过当前用户线程的指令执行完成,相对于现有技术中需要库调度器和OS调度器的调度配置,用户线程才能被分配到硬件线程中启动运行,在一定程度上减少了待执行用户线程启动和运行的过程,提高系统资源的利用率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一所提供的一种线程运行方法的流程图;
图2为本发明实施例二所提供的一种线程运行方法的流程图;
图3为本发明实施例三所提供的一种线程运行方法的流程图;
图4为本发明实施例四所提供的一种线程运行装置的结构示意图;
图5为本发明实施例五所提供的一种线程运行装置的结构示意图;
图6为本发明实施例六所提供的一种线程运行装置的结构示意图;
图7为本发明实施例七所提供的一种终端设备的结构示意图;
图8为本发明实施例八所提供的一种终端设备的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例一所提供的一种线程运行方法的流程图。本实施例的方法适用于使用SMT内核的用户设备运行用户线程的情况,该方法可由用户设备或线程启动装置执行,该线程启动装置通常以硬件和/或软件的方法来实现,并集成在用户设备中。如图1所示,本实施例的方法可以包括:
S110,正在运行的当前用户线程向OS发送硬件线程分配请求;
进程包括至少一个用户线程,当进程包括多个用户线程时,在配置有SMT 内核的OS中,进程中的不同用户线程可以被同时调度到SMT内核中的不同硬件线程中同时运行;本发明实施例提供一种不同于现有技术中通过库调度器和OS调度器将用户线程调度到硬件线程的方法,本发明实施例的用户线程中可以包含启动其它待运行用户线程的指令,并通过指令的执行使待运行用户线程被分配到硬件线程中运行;具体地,用户线程的指令流中包括用于向OS发送硬件线程分配请求的指令,该用户线程在硬件线程中运行时,按照指令流的顺序执行到用于向OS发送硬件线程分配请求的指令时,执行该指令以使OS保留一个空闲状态的硬件线程,在具体实现时,通常所有硬件线程都处于工作状态,即所有硬件线程中都有正在运行的用户线程,因此, OS可以停止一个正在硬件线程中运行的用户线程,并记录被停止运行的用户线程的运行位置,随后将该被停止运行的用户线程从该硬件线程中调离,进而使该硬件线程上没有运行的用户线程,即为空闲状态,因此,可以使该硬件线程被分配给其它待运行的用户线程。
S120,接收所述OS返回的硬件线程分配响应,所述硬件线程分配响应包括所述OS分配的目标硬件线程的标识;
OS根据正在运行的当前用户线程的指令,保留了一个硬件线程后,向发出硬件线程分配请求的指令的当前用户线程返回相应的硬件线程分配响应,以使该当前用户线程得到由OS分配的目标硬件线程的标识。
S130,所述当前用户线程指示待运行用户线程在所述目标硬件线程中运行。
当前用户线程接收到OS分配的目标硬件线程的标识后,可以根据该标识将当前用户线程需要启动的待运行用户线程调度到该标识对应的目标硬件线程中,即完成待运行用户线程的启动,被调度到该目标硬件线程的用户线程可以执行自身包含的指令流,实现进程中用户线程的运行;与现有技术不同的,本实施例提供的待运行用户线程的启动方法,不需要由库调度器和OS 调度器实现将待运行用户线程调度到SMT内核中空闲的硬件线程中,可以直接由正在运行的当前用户线程中包含的指令执行为待运行用户线程分配目标硬件线程和启动该待运行用户线程的操作。
本实施例所提供的线程运行方法,通过正在运行的当前用户线程向OS 申请分配一个硬件线程,并指示待运行用户线程在OS分配的硬件线程中运行,实现待运行用户线程的启动运行可以通过当前用户线程的指令执行完成,相对于现有技术中需要库调度器和OS调度器的调度配置,用户线程才能被分配到硬件线程中启动运行,在一定程度上减少了待执行用户线程启动和运行的过程,提高系统资源的利用率。
实施例二
图2为本发明实施例二所提供的一种线程运行方法的流程图。如图2所示,本实施例的方法可以包括:
S210,正在运行的当前用户线程向OS发送硬件线程分配请求;
S220,接收所述OS返回的硬件线程分配响应,所述硬件线程分配响应包括所述OS分配的目标硬件线程的标识;
本实施例中S210和S220的具体实施方法可以参考实施例一中的S110 和S120。
S230,初始化所述目标硬件线程的系统寄存器。
被OS保留的目标硬件线程在停止正在运行的用户线程后,其系统寄存器中保留之前运行的用户线程的指令执行结果,因此,在将待运行用户线程分配到该目标硬件线程之前,需要重新配置,即初始化该目标硬件线程的系统寄存器,以使该目标硬件线程在运行所述待运行用户线程时,系统寄存器可以正确存储运行的用户线程的指令执行结果;例如,通常需要被初始化的系统寄存器包括堆栈指针寄存器(Stack point,简称为:SP)和程序状态寄存器(Program Status Register,简称为:PSR),不同OS的硬件线程一般具有不同的系统寄存器,比较通用的系统寄存器如上述SP和PSR。需要注意的是,本实施例中初始化的系统寄存器可以不仅包括SP和PSR,还可以包括该目标硬件线程的其它系统寄存器。
S240,所述当前用户线程执行线程启动指令,以使所述待运行用户线程在所述目标硬件线程中运行。
当前用户线程对待运行用户线程的启动,也是由该当前用户线程中的指令执行实现的,具体执行了指令流中预置的线程启动指令,例如该线程启动指令可以是MT_Start指令,该当前用户线程对MT_Start指令的执行结果为:待运行的用户线程被分配到OS保留的目标硬件线程中,以使待运行用户线程可以在目标硬件线程中完成自身指令流的运行。
本实施例所述的线程运行方法中,S240中当前用户线程执行线程启动指令,具体可以包括:将待运行用户线程的函数入口值、参数个数和参数内容分别拷贝到目标硬件线程的相应通用寄存器中。在具体实现时,可选地,将线程启动指令译码为三条微指令,三条微指令分别用于将待运行用户线程的函数入口值拷贝到该目标硬件线程的程序计数器(Program Count,简称为: PC)中,将待运行用户线程的参数个数拷贝到该目标硬件线程的第一寄存器,将待运行用户线程的各参数拷贝到该目标硬件线程的第二寄存器,并行执行上述三条微指令。
当前用户线程对线程启动指令的执行,以上述MT_Start指令为例进行说明,例如MT_Start指令格式为:
MT_Start Ra,Rb,Rc
上述MT_Start指令中Ra为待运行用户线程的函数入口值,Rb为待运行用户线程的参数个数,Rc为待运行用户线程的各参数,该MT_Start指令的实现方式,可以在当前用户线程执行指令的译码阶段将该MT_Start指令分成三条微指令,本实施例以在Power PC构架中为例,相应地,目标硬件线程的第一寄存器具体为R0,第二寄存器具体为R1,译码的三条微指令分别为:
Ra->(T_TID,PC)
Rb->(T_TID,R0)
Rc->(T_TID,R1)
当前用户线程对MT_Start指令的译码需要分三次才能译码得出上述三条微指令,并且在译码成功后执行三条微指令,T_TID为目标硬件线程标识 Target_Thread_ID,在OS向当前用户线程返回硬件线程分配响应时,包括在该响应中,以使当前用户线程在执行MT_Start指令时,需要根据目标硬件线程对应的Target_Thread_ID对该MT_Start指令进行译码,并执行相应的译码结果,即执行上述三条微指令,本实施例中可以一次完成三条微指令的执行。
S240中当前用户线程执行线程启动指令的又一种实现方式可以为,对线程启动指令进行译码;依次执行将待运行用户线程的函数入口值拷贝到该目标硬件线程的PC中,将待运行用户线程的参数个数拷贝到该目标硬件线程的第一寄存器,将待运行用户线程的各参数拷贝到该目标硬件线程的第二寄存器。
同样以上述MT_Start指令的执行为例进行说明,本实施例中当前用户线程对MT_Start指令的译码不需要将其拆分为三条微指令,可以直接对 MT_Start指令进行一次译码,译码后指令的语义与上述实施例中三条微指令的语义相同,不同的是当前用户线程对译码后的MT_Start指令需要分三个时钟周期执行,一次执行一个拷贝动作。
需要说明的是,本发明上述实施例中,用户设备采用通常的SMT内核, SMT内核中的多个硬件线程是在一个物理内核中,因此,在本实施中初始化目标硬件寄存器时,该SMT内核中硬件线程间寄存器的拷贝只需要拷贝寄存器的重命名表,不需要拷贝寄存器中的值。
本实施例所提供的线程运行方法,通过正在运行的当前用户线程向OS 申请分配一个硬件线程,并指示待运行用户线程在OS分配的硬件线程中运行,实现待运行用户线程的启动运行可以通过当前用户线程的指令执行完成,也就是当前用户线程执行的线程启动指令,并且该线程启动指令可以通过不同的方式实现,相对于现有技术中需要库调度器和OS调度器的调度配置,用户线程才能被分配到硬件线程中启动运行,在一定程度上减少了待执行用户线程启动和运行的过程,提高系统资源的利用率。
在本发明实施例二的基础上,可选地,在S230之后还包括,将目标硬件线程的PSR的激活位设置为0;类似地,S240之后还可以包括,将该目标硬件线程的PSR的激活位设置为1。
OS根据当前用户线程发送的请求保留了目标硬件线程,该目标硬件线程停止了当前正在运行的用户线程,由于硬件线程在运行用户线程时一般有指令控制使该硬件线程的PSR的激活位设置为1,表明该硬件线程已被占用,因而不能再被OS调用;因此,本实施例中当前用户线程完成目标硬件线程的初始化指令后,在执行线程启动指令之前,也就是将待运行用户线程分配到目标硬件线程运行之前,需要将该目标硬件线程的PSR的激活位设置为0,用于表明该目标硬件线程当前的状态为空闲;相应地,在当前用户线程启动了线程启动指令之后,由于已将待运行用户线程被分配到目标硬件线程中运行,因此需要将该目标硬件线程的PSR的激活位设置为1,表明该硬件线程已被占用。
进一步地,本实施例提供的线程运行方法中,S240之后还可以包括,当前用户线程执行当前用户线程的指令流中线程启动指令之后的指令。
当前用户线程执行线程启动指令成功后,待运行用户线程即在目标硬件线程中运行,此时,该当前用户线程继续执行自身指令流中的其它指令,且指令的执行顺序是按照指令流中预置的顺序执行,因此当前用户线程需要执行线程启动指令之后的指令,依次完成当前用户线程中指令的执行。
需要说明的是,本发明上述实施例中待运行用户线程可以为指令行数不超过800条的用户线程,即包含指令数目较少的用户线程,相应地,这类用户线程在相同硬件和软件环境中的运行时间相对较短,以现有技术中的调度方式分配硬件线程的会耗费大量的系统资源启动一个运行时间较短的用户线程,因此,对于指令数不超过800条的用户线程而言,本发明实施例提供的线程运行方法在节省系统资源方面,优势更明显。
实施例三
图3为本发明实施例三所提供的一种线程运行方法的流程图。本实施例的方法适用于使用SMT内核的用户设备运行用户线程的情况,该方法可由用户设备或OS执行,该OS通常以或软件的方法来实现,并集成在用户设备中。如图3所示,本实施例的方法可以包括:
S310,OS接收正在运行的当前用户线程发送的硬件线程分配请求;
通常的SMT内核中的所有硬件线程中都有正在运行的用户线程,因此正在运行的当前用户线程需要为待运行用户线程分配硬件线程时,首先需要向 OS发送硬件线程分配请求。
S320,确定一个可用的目标硬件线程;
OS系统在接收到硬件线程分配请求后,执行分配一个硬件线程的操作,即确定一个可用的目标硬件线程。具体地,先停止一个正在运行的其它用户线程,被停止的用户线程可以是除上述向OS发送硬件线程分配请求的当前用户线程之外的其它正在运行的用户线程;在具体实现时,由OS选择一个除运行当前用户线程的硬件线程之外的目标硬件线程,停止该目标硬件线程中正在运行的用户线程,并将目标硬件线程中已停止运行的用户线程从该目标硬件线程中调离,此时,SMT内核中存在一个空闲状态的目标硬件线程,该目标硬件线程可以用于当前用户线程执行线程启动指令时,将待运行用户线程分配到该目标硬件线程中运行。
S330,向所述当前用户线程返回硬件线程分配响应,所述硬件线程分配响应包括所述目标硬件线程的标识,以使所述当前用户线程指示待运行用户线程在所述目标硬件线程中运行。
OS在SMT内核中停止并保留了一个硬件线程后,对OS而言该硬件线程的标识是已知的,OS向当前用户线程返回硬件线程分配响应,通知该当前用户线程SMT内核中已存在一个空闲状态的硬件线程,可以将待执行用户线程分配到该空闲状态的硬件线程中。当前用户线程需要根据OS返回响应中包含的目标硬件线程标识来识别目标硬件线程,进而将待运行用户线程分配到该目标硬件线程中,完成该待运行用户线程的启动,以使其在目标硬件线程中运行。
本实施例所提供的线程运行方法,OS根据当前用户线程发送的硬件线程分配请求为其分配一个硬件线程,并指示待运行用户线程在OS分配的硬件线程中运行,实现待运行用户线程的启动运行可以通过当前用户线程的指令执行完成,相对于现有技术中需要库调度器和OS调度器的调度配置,用户线程才能被分配到硬件线程中启动运行,在一定程度上减少了待执行用户线程启动和运行的过程,提高系统资源的利用率。
实施例四
图4为本发明实施例四所提供的一种线程运行装置的结构示意图。如图 4所示,本实施例提供的线程运行装置设置在用户线程中,具体包括:发送模块11,接收模块12和处理模块13。
其中,发送模块11,用于在用户线程正在运行时,向操作系统OS发送硬件线程分配请求;
接收模块12,用于接收所述OS返回的硬件线程分配响应,所述硬件线程分配响应包括所述OS分配的目标硬件线程的标识;
处理模块13,用于指示待运行用户线程在所述目标硬件线程中运行。
本发明实施例提供的线程运行装置用于执行本发明实施例一提供的线程运行方法,具备相应的功能模块,其实现原理和技术效果类似,此处不再赘述。
实施例五
图5为本发明实施例五所提供的一种线程运行装置的结构示意图。如图5所示,本实施例提供的线程运行装置在图4所示装置结构的基础上,所述处理模块13,具体用于执行线程启动指令,以使所述待运行用户线程在所述目标硬件线程中运行;
本实施例提供的装置还包括:初始模块14,用于在所述处理模块13执行线程启动指令之前,初始化所述目标硬件线程的系统寄存器。
本实施例提供的装置中,所述处理模块13,具体用于将所述待运行用户线程的函数入口值、参数个数和参数内容分别拷贝到所述目标硬件线程的相应通用寄存器中。
本实施例提供的装置中,可选地,所述处理模块13包括:第一译码单元 15和第一执行单元16;在具体实现时,第一译码单元15,用于将线程启动指令译码为三条微指令,三条微指令分别用于将待运行用户线程的函数入口值拷贝到目标硬件线程的程序计数器PC中,将待运行用户线程的参数个数拷贝到目标硬件线程的第一寄存器,将待运行用户线程的各参数拷贝到目标硬件线程的第二寄存器;第一执行单元16,用于行执行上述三条微指令。
在本实施例执行线程启动指令的又一种实现方式中,所述处理模块13可以包括:第二译码单元和第二执行单元;所述第二译码单元,用于对线程启动指令进行译码;所述第二执行单元,用于依次执行将待运行用户线程的函数入口值拷贝到目标硬件线程的PC中,将待运行用户线程的参数个数拷贝到目标硬件线程的第一寄存器,将待运行用户线程的各参数拷贝到目标硬件线程的第二寄存器。
本发明实施例提供的线程运行装置用于执行本发明实施例二提供的线程运行方法,具备相应的功能模块,其实现原理和技术效果类似,此处不再赘述。
在本实施例提供的线程运行装置结构的基础上,可选地,还可以包括设置模块17,用于在初始模块14初始化目标硬件线程的系统寄存器之后,将目标硬件线程的程序状态寄存器PSR的激活位设置为0;类似地,该设置模块17,还用于在处理模块13执行线程启动指令之后,将目标硬件线程的PSR 的激活位设置为1。
进一步地,本实施例提供的线程运行装置,所述处理模块13,还用于在执行线程启动指令之后,执行当前用户线程的指令流中线程启动指令之后的指令。
需要说明的是,本发明上述实施例中待运行用户线程可以为指令行数不超过800条的用户线程。
实施例六
图6为本发明实施例六所提供的一种线程运行装置的结构示意图。如图 6所示,本实施例提供的线程运行装置设置在OS中,具体包括:接收模块 21,处理模块22和发送模块23。
其中,接收模块21,用于接收正在运行的当前用户线程发送的硬件线程分配请求;
处理模块22,用于确定一个可用的目标硬件线程;在具体实现时,所述处理模块23,具体用于选择一个除运行所述当前用户线程的硬件线程之外的目标硬件线程,停止所述目标硬件线程中正在运行的用户线程,并将所述目标硬件线程中已停止运行的用户线程从所述目标硬件线程中调离;
发送模块23,用于向所述当前用户线程返回硬件线程分配响应,所述硬件线程分配响应包括所述目标硬件线程的标识,以使所述当前用户线程指示待运行用户线程在所述目标硬件线程中运行。
本发明实施例提供的线程运行装置用于执行本发明实施例三提供的线程运行方法,具备相应的功能模块,其实现原理和技术效果类似,此处不再赘述。
实施例七
图7为本发明实施例七所提供的一种终端设备的结构示意图。如图7所示,本实施例提供的终端设备,具体包括:发送器31,接收器32和处理器 33。
其中,发送器31,用于在用户线程正在运行时,向操作系统OS发送硬件线程分配请求;
接收器32,用于接收所述OS返回的硬件线程分配响应,所述硬件线程分配响应包括所述OS分配的目标硬件线程的标识;
处理器33,用于指示待运行用户线程在所述目标硬件线程中运行。
本发明实施例提供的终端设备用于执行本发明实施例一提供的线程运行方法,具备相应的实体装置,其实现原理和技术效果类似,此处不再赘述。
进一步地,在上述实施例的基础上,本实施例提供的终端设备中,所述处理器33,具体用于执行线程启动指令,以使所述待运行用户线程在所述目标硬件线程中运行;
所述处理器33,还用于在执行线程启动指令之前,初始化所述目标硬件线程的系统寄存器。
更进一步地,本实施例提供的终端设备中,所述处理器33,具体用于将所述待运行用户线程的函数入口值、参数个数和参数内容分别拷贝到所述目标硬件线程的相应通用寄存器中。
在具体实现时,所述处理器33,具体用于将线程启动指令译码为三条微指令,三条微指令分别用于将待运行用户线程的函数入口值拷贝到目标硬件线程的程序计数器PC中,将待运行用户线程的参数个数拷贝到目标硬件线程的第一寄存器,将待运行用户线程的各参数拷贝到目标硬件线程的第二寄存器;并行执行上述三条微指令。
在本实施例执行线程启动指令的又一种实现方式中,所述处理器33,具体用于对线程启动指令进行译码;并依次执行将待运行用户线程的函数入口值拷贝到目标硬件线程的PC中,将待运行用户线程的参数个数拷贝到目标硬件线程的第一寄存器,将待运行用户线程的各参数拷贝到目标硬件线程的第二寄存器。
本发明实施例提供的终端设备用于执行本发明实施例二提供的线程运行方法,具备相应的实体装置,其实现原理和技术效果类似,此处不再赘述。
可选地,本实施例提供的终端设备,所述处理器33,还用于在初始化目标硬件线程的系统寄存器之后,将目标硬件线程的程序状态寄存器PSR的激活位设置为0;类似地,所述处理器33,还用于在执行线程启动指令之后,将目标硬件线程的PSR的激活位设置为1。
进一步地,本实施例提供的终端设备,所述处理器33,还用于在执行线程启动指令之后,执行当前用户线程的指令流中线程启动指令之后的指令。
需要说明的是,本发明上述实施例中待运行用户线程可以为指令行数不超过800条的用户线程。
实施例八
图8为本发明实施例八所提供的一种终端设备的结构示意图。如图8所示,本实施例提供的终端设备具体包括:接收器41,处理器42和发送器43。
其中,接收器41,用于接收正在运行的当前用户线程发送的硬件线程分配请求;
处理器42,用于确定一个可用的目标硬件线程;在具体实现时,所述处理器42,具体用于选择一个除运行所述当前用户线程的硬件线程之外的目标硬件线程,停止所述目标硬件线程中正在运行的用户线程,并将所述目标硬件线程中已停止运行的用户线程从所述目标硬件线程中调离;
发送器43,用于向所述当前用户线程返回硬件线程分配响应,所述硬件线程分配响应包括所述目标硬件线程的标识,以使所述当前用户线程指示待运行用户线程在所述目标硬件线程中运行。
本发明实施例提供的终端设备用于执行本发明实施例三提供的线程运行方法,具备相应的实体装置,其实现原理和技术效果类似,此处不再赘述。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (24)
1.一种线程运行方法,其特征在于,包括:
正在运行的当前用户线程向操作系统OS发送硬件线程分配请求;
接收所述OS返回的硬件线程分配响应,所述硬件线程分配响应包括所述OS分配的目标硬件线程的标识;
所述当前用户线程指示待运行用户线程在所述目标硬件线程中运行。
2.根据权利要求1所述的方法,其特征在于,所述当前用户线程指示待运行用户线程在所述目标硬件线程中运行,包括:
所述当前用户线程执行线程启动指令,以使所述待运行用户线程在所述目标硬件线程中运行。
3.根据权利要求2所述的方法,其特征在于,所述当前用户线程执行线程启动指令之前,还包括:
初始化所述目标硬件线程的系统寄存器。
4.根据权利要求2或3所述的方法,其特征在于,所述当前用户线程执行线程启动指令,包括:
将所述待运行用户线程的函数入口值、参数个数和参数内容分别拷贝到所述目标硬件线程的相应通用寄存器中。
5.根据权利要求4所述的方法,其特征在于,所述将所述待运行用户线程的函数入口值、参数个数和参数内容分别拷贝到所述目标硬件线程的相应寄存器中,包括:
将所述线程启动指令译码为三条微指令,所述三条微指令分别用于将所述待运行用户线程的函数入口值拷贝到所述目标硬件线程的程序计数器PC中,将所述待运行用户线程的参数个数拷贝到所述目标硬件线程的第一寄存器,将所述待运行用户线程的各参数拷贝到所述目标硬件线程的第二寄存器;并行执行所述三条微指令。
6.根据权利要求4所述的方法,其特征在于,所述将所述待运行用户线程的函数入口值、参数个数和参数内容分别拷贝到所述目标硬件线程的相应寄存器中,包括:
对所述线程启动指令进行译码;
依次执行将所述待运行用户线程的函数入口值拷贝到所述目标硬件线程的PC中,将所述待运行用户线程的参数个数拷贝到所述目标硬件线程的第一寄存器,将所述待运行用户线程的各参数拷贝到所述目标硬件线程的第二寄存器。
7.根据权利要求3所述的方法,其特征在于,所述初始化所述目标硬件线程的系统寄存器之后,还包括:
将所述目标硬件线程的程序状态寄存器PSR的激活位设置为0。
8.根据权利要求7所述的方法,其特征在于,所述当前用户线程执行线程启动指令之后,还包括:
将所述目标硬件线程的PSR的激活位设置为1。
9.根据权利要求2所述的方法,其特征在于,所述当前用户线程执行线程启动指令之后,还包括:
所述当前用户线程执行所述当前用户线程的指令流中所述线程启动指令之后的指令。
10.根据权利要求1或2所述的方法,其特征在于,所述待运行用户线程为指令行数不超过800行的用户线程。
11.一种线程运行方法,其特征在于,包括:
操作系统OS接收正在运行的当前用户线程发送的硬件线程分配请求;
确定一个可用的目标硬件线程;
向所述当前用户线程返回硬件线程分配响应,所述硬件线程分配响应包括所述目标硬件线程的标识,以使所述当前用户线程指示待运行用户线程在所述目标硬件线程中运行。
12.根据权利要求11所述的方法,其特征在于,所述确定一个可用的目标硬件线程,包括:
选择一个除运行所述当前用户线程的硬件线程之外的目标硬件线程,停止所述目标硬件线程中正在运行的用户线程,并将所述目标硬件线程中已停止运行的用户线程从所述目标硬件线程中调离。
13.一种线程运行装置,其特征在于,设置在用户线程中,包括:
发送模块,用于在用户线程正在运行时,向操作系统OS发送硬件线程分配请求;
接收模块,用于接收所述OS返回的硬件线程分配响应,所述硬件线程分配响应包括所述OS分配的目标硬件线程的标识;
处理模块,用于指示待运行用户线程在所述目标硬件线程中运行。
14.根据权利要求13所述的装置,其特征在于,所述处理模块,具体用于执行线程启动指令,以使所述待运行用户线程在所述目标硬件线程中运行。
15.根据权利要求14所述的装置,其特征在于,还包括:初始模块,用于在所述处理模块执行线程启动指令之前,初始化所述目标硬件线程的系统寄存器。
16.根据权利要求14或15所述的装置,其特征在于,所述处理模块,具体用于将所述待运行用户线程的函数入口值、参数个数和参数内容分别拷贝到所述目标硬件线程的相应通用寄存器中。
17.根据权利要求16所述的装置,其特征在于,所述处理模块,包括:
第一译码单元,用于将所述线程启动指令译码为三条微指令,所述三条微指令分别用于将所述待运行用户线程的函数入口值拷贝到所述目标硬件线程的程序计数器PC中,将所述待运行用户线程的参数个数拷贝到所述目标硬件线程的第一寄存器,将所述待运行用户线程的各参数拷贝到所述目标硬件线程的第二寄存器;
第一执行单元,用于行执行所述三条微指令。
18.根据权利要求16所述的装置,其特征在于,所述处理模块,包括:
第二译码单元,用于对所述线程启动指令进行译码;
第二执行单元,用于依次执行将所述待运行用户线程的函数入口值拷贝到所述目标硬件线程的PC中,将所述待运行用户线程的参数个数拷贝到所述目标硬件线程的第一寄存器,将所述待运行用户线程的各参数拷贝到所述目标硬件线程的第二寄存器。
19.根据权利要求15所述的装置,其特征在于,还包括:设置模块,用于在所述初始模块初始化所述目标硬件线程的系统寄存器之后,将所述目标硬件线程的程序状态寄存器PSR的激活位设置为0。
20.根据权利要求19所述的装置,其特征在于,所述设置模块,还用于在所述处理模块执行线程启动指令之后,将所述目标硬件线程的PSR的激活位设置为1。
21.根据权利要求14所述的装置,其特征在于,所述处理模块,还用于在所述处理模块执行线程启动指令之后,执行当前用户线程的指令流中所述线程启动指令之后的指令。
22.根据权利要求13或14所述的装置,其特征在于,所述待运行用户线程为指令行数不超过800行的用户线程。
23.一种线程运行装置,其特征在于,设置在OS中,包括:
接收模块,用于接收正在运行的当前用户线程发送的硬件线程分配请求;
处理模块,用于确定一个可用的目标硬件线程;
发送模块,用于向所述当前用户线程返回硬件线程分配响应,所述硬件线程分配响应包括所述目标硬件线程的标识,以使所述当前用户线程指示待运行用户线程在所述目标硬件线程中运行。
24.根据权利要求23所述的装置,其特征在于,所述处理模块,具体用于选择一个除运行所述当前用户线程的硬件线程之外的目标硬件线程,停止所述目标硬件线程中正在运行的用户线程,并将所述目标硬件线程中已停止运行的用户线程从所述目标硬件线程中调离。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310370098.5A CN104424027B (zh) | 2013-08-22 | 2013-08-22 | 线程运行方法及装置 |
PCT/CN2014/083605 WO2015024433A1 (zh) | 2013-08-22 | 2014-08-04 | 线程运行方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310370098.5A CN104424027B (zh) | 2013-08-22 | 2013-08-22 | 线程运行方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104424027A CN104424027A (zh) | 2015-03-18 |
CN104424027B true CN104424027B (zh) | 2018-07-13 |
Family
ID=52483046
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310370098.5A Active CN104424027B (zh) | 2013-08-22 | 2013-08-22 | 线程运行方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN104424027B (zh) |
WO (1) | WO2015024433A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9798582B2 (en) | 2015-10-22 | 2017-10-24 | International Business Machines Corporation | Low latency scheduling on simultaneous multi-threading cores |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102411512A (zh) * | 2010-09-20 | 2012-04-11 | 国际商业机器公司 | 对多个辅助硬件线程进行可缩放状态跟踪的方法和系统 |
CN103154885A (zh) * | 2010-09-20 | 2013-06-12 | 国际商业机器公司 | 在没有管理程序介入的情况下获得和释放硬件线程 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6928645B2 (en) * | 2001-03-30 | 2005-08-09 | Intel Corporation | Software-based speculative pre-computation and multithreading |
-
2013
- 2013-08-22 CN CN201310370098.5A patent/CN104424027B/zh active Active
-
2014
- 2014-08-04 WO PCT/CN2014/083605 patent/WO2015024433A1/zh active Application Filing
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102411512A (zh) * | 2010-09-20 | 2012-04-11 | 国际商业机器公司 | 对多个辅助硬件线程进行可缩放状态跟踪的方法和系统 |
CN103154885A (zh) * | 2010-09-20 | 2013-06-12 | 国际商业机器公司 | 在没有管理程序介入的情况下获得和释放硬件线程 |
Also Published As
Publication number | Publication date |
---|---|
WO2015024433A1 (zh) | 2015-02-26 |
CN104424027A (zh) | 2015-03-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7698540B2 (en) | Dynamic hardware multithreading and partitioned hardware multithreading | |
JP6089349B2 (ja) | マルチコアアーキテクチャでのリソース分離を支援するための方法およびシステム | |
US9436510B2 (en) | System and method for managing the interleaved execution of threads | |
US6671827B2 (en) | Journaling for parallel hardware threads in multithreaded processor | |
CN106569891B (zh) | 一种存储系统中任务调度执行的方法和装置 | |
KR20070095376A (ko) | 스케쥴링 방법, 장치, 멀티스레딩 시스템 및 제조물 | |
US11163677B2 (en) | Dynamically allocated thread-local storage | |
US10248456B2 (en) | Method and system for providing stack memory management in real-time operating systems | |
CN108885559B (zh) | 在多个处理器之间快速转移工作负载 | |
US9218201B2 (en) | Multicore system and activating method | |
CN107577539B (zh) | 用于内核态和用户态通讯的共享内存结构及其应用 | |
JP2011044165A (ja) | システムにおける要求のスケジューリング | |
CN114168271B (zh) | 一种任务调度方法、电子设备及存储介质 | |
US11175919B1 (en) | Synchronization of concurrent computation engines | |
US20150143378A1 (en) | Multi-thread processing apparatus and method for sequentially processing threads | |
CN114637536A (zh) | 任务处理方法、计算协处理器、芯片及计算机设备 | |
US8108662B2 (en) | Checkpointing a hybrid architecture computing system | |
US20060146864A1 (en) | Flexible use of compute allocation in a multi-threaded compute engines | |
CN112965755B (zh) | 多核处理器的初始化方法、装置、电子设备及存储介质 | |
CN114691321A (zh) | 一种任务调度方法、装置、设备及存储介质 | |
CN104424027B (zh) | 线程运行方法及装置 | |
CN113918336A (zh) | 基于多核CPU的FreeRTOS运行任务方法及装置 | |
US10007553B2 (en) | Method for configuring an it system, corresponding computer program and it system | |
US7984446B1 (en) | Method and system for multitasking BIOS initialization tasks | |
US20130104141A1 (en) | Divided central data processing, |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |