CN102047224B - 信息处理装置、信息处理方法及信息处理程序 - Google Patents
信息处理装置、信息处理方法及信息处理程序 Download PDFInfo
- Publication number
- CN102047224B CN102047224B CN2009801191287A CN200980119128A CN102047224B CN 102047224 B CN102047224 B CN 102047224B CN 2009801191287 A CN2009801191287 A CN 2009801191287A CN 200980119128 A CN200980119128 A CN 200980119128A CN 102047224 B CN102047224 B CN 102047224B
- Authority
- CN
- China
- Prior art keywords
- thread
- context
- situation
- detecting unit
- state
- 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.)
- Expired - Fee Related
Links
Images
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/461—Saving or restoring of program or task context
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供信息处理装置、信息处理方法及信息处理程序。本发明的信息处理装置,用于对分别与事件的取得相对应地进行处理的多个线程,在进行切换的同时通过处理器来加以执行,在取代执行状态下的第1线程,而使所述多个线程中处于非执行状态的第2线程转变为执行状态时,检测第1线程中下一次成为执行状态时的处理的开始位置是与事件的取得相对应的既定的处理部分这一情况,并检测第2线程中的处理的开始位置是所述既定的处理部分这一情况,根据这些检测结果,切换是否对处理器设定第2线程执行用的上下文,并进行动作。
Description
技术领域
本发明涉及多线程执行控制技术。
背景技术
已被公知的被称为多线程(multi-thread)的执行控制方法,利用一个处理器切换多个处理,并且在表观上是并行执行的。此处所说的多线程有时被称为多任务(multi-task)、多进程(multi-process)等各种称呼。
在多线程控制中,通常在发生了所执行的线程的切换原因的情况下进行如下处理(以下称为“上下文的保存/设定处理”),将此前执行的线程的上下文(context)、即处理器内的寄存器值保存在存储器中,将接下来执行的线程的存储器中保存的上下文复原到处理器中。
由此,对于因线程的切换而被中断执行的线程,在以后再次开始执行时,能够从被中断的时刻的处理再次开始。
这样,在多线程控制的线程的切换之时,通常进行这种上下文的保存/设定处理,但是由于在处理器和存储器之间进行上下文的写入和读出用的数据传输,所以线程的切换花费时间,存在程序的处理效率下降的问题。
关于有效进行线程的切换的方法公知有各种方法,例如有专利文献1。专利文献1在对所处理的寄存器大小不同的多个程序(线程)进行切换并且并列执行的情况下,进行与线程所处理的寄存器大小相对应的大小量的数据(上下文)的保存/设定处理,由此缩短线程的切换所需的时间。
现有技术文献
专利文献
专利文献1:日本专利公开2007-207074号公报
发明概要
发明要解决的问题
但是,在采用专利文献1的方法时,只不过是缩短了由于执行各个线程时不需要的数据的读写而产生的时间,依旧不能解决线程的切换花费时间的问题。
发明内容
本发明就是鉴于这种问题而提出的,其目的在于提供一种信息处理装置、信息处理方法及信息处理程序,能够利用与以往不同的方法更加快速地进行线程的切换。
用于解决问题的手段
为了解决上述问题,本发明的信息处理装置,对分别与事件的取得相对应地进行处理的多个线程,在进行切换的同时通过处理器来加以执行,其特征在于,所述信息处理装置具有:调度单元,使为执行状态的第1线程的状态转变为非执行状态,从所述多个线程中选择接下来执行的第2线程,并使其转变为执行状态;第1检测单元,对被转变为非执行状态的所述第1线程中下一次成为执行状态时的处理的开始位置是与事件的取得相对应的既定的处理部分这一情况进行检测;第2检测单元,对被转变为执行状态的所述第2线程中的处理的开始位置是所述既定的处理部分这一情况进行检测;和设定单元,在所述第2线程被转变为执行状态时,根据所述第1检测单元及所述第2检测单元的检测结果,切换是否对所述处理器设定所述第2线程执行用的上下文,并进行动作。
另外,为了解决上述问题,在本发明的信息处理装置中使用的信息处理方法,该信息处理装置对分别与事件的取得相对应地进行处理的多个线程,在进行切换的同时通过处理器来加以执行,其特征在于,所述信息处理方法具有如下步骤:调度单元使为执行状态的第1线程的状态转变为非执行状态,从所述多个线程中选择接下来执行的第2线程,并使其转变为执行状态的步骤;第1检测单元对被转变为非执行状态的所述第1线程中下一次成为执行状态时的处理的开始位置是与事件的取得相对应的既定的处理部分这一情况进行检测的步骤;第2检测单元对被转变为执行状态的所述第2线程中的处理的开始位置是所述既定的处理部分这一情况进行检测的步骤;和在所述第2线程被转变为执行状态时,设定单元根据所述第1检测单元及所述第2检测单元的检测结果,切换是否对所述处理器设定所述第2线程执行用的上下文并进行动作的步骤。
另外,为了解决上述问题,本发明的信息处理程序,用于使信息处理装置执行线程的执行控制处理,该信息处理装置对分别与事件的取得相对应地进行处理的多个线程,在进行切换的同时通过处理器来加以执行,其特征在于,所述线程的执行控制处理具有:调度步骤,使为执行状态的第1线程的状态转变为非执行状态,从所述多个线程中选择接下来执行的第2线程,并使其转变为执行状态;第1检测步骤,对被转变为非执行状态的所述第1线程中下一次成为执行状态时的处理的开始位置是与事件的取得相对应的既定的处理部分这一情况进行检测;第2检测步骤,对被转变为执行状态的所述第2线程中的处理的开始位置是所述既定的处理部分这一情况进行检测;和设定步骤,在所述第2线程被转变为执行状态时,根据所述第1检测步骤及所述第2检测步骤的检测结果,切换是否对所述处理器设定所述第2线程执行用的上下文并进行动作。
发明效果
具有上述结构的本发明的信息处理装置在取代第1线程而使第2线程转变为执行状态时,根据第1检测单元及第2检测单元的检测结果,切换是否对处理器设定第2线程执行用的上下文,因此与一定对处理器设定上下文的现行情况相比,能够更加快速地进行线程的切换。
另外,也可以是,所述信息处理装置还具有:上下文存储单元,用于与线程相对应地存储上下文;和上下文对应单元,在所述第1检测单元未检测出的情况下,将对所述处理器设定的上下文作为与所述第1线程相对应的上下文存储在所述上下文存储单元中,在所述第1检测单元检测出、且所述第2检测单元检测出的情况下,所述设定单元不对所述处理器设定与所述第2线程相对应的上下文,在所述第2检测单元未检测出的情况下,所述设定单元对所述处理器设定与所述第2线程相对应的上下文。
其中,所说对应是指使线程与在上下文存储单元中存储的上下文建立关联的信息。
由此,在第1检测单元检测出、且第2检测单元检测出的情况下,在使第2线程转变为执行状态时,设定单元不对处理器设定与第2线程相对应的上下文,因此本发明的信息处理装置能够更加快速地进行线程的切换。
在第1检测单元检测出、且第2检测单元检测出的情况下,被转变为执行状态的第2线程中的处理的开始位置、和此前是执行状态的第1线程中下一次成为执行状态时的处理的开始位置都是既定的处理部分,所以即使不对处理器设定与第2线程相对应的上下文即执行第2线程,也能够正常地进行动作。
另外,也可以是,在所述第1检测单元检测出的情况下,所述上下文对应单元还将在所述上下文存储单元中存储的、与所述第1线程相对应的上下文和该第1线程之间的对应关系删除。
由此,在第1检测单元检测出的情况下,上下文对应单元将第1线程与其上下文的对应关系删除,因此能够减少应该管理的上下文的数量,整体上减少上下文存储所需要的存储器容量。
另外,也可以是,所述信息处理装置具有存储初始上下文的初始上下文存储单元,该初始上下文用于将在所述上下文存储单元中没有对应上下文的线程用的所述既定的处理部分作为处理的开始位置,当在所述上下文存储单元中所述第2线程与上下文没有对应的情况下,所述第2检测单元检测为该第2线程中的处理的开始位置是所述既定的处理部分,在所述第2检测单元检测出的情况下,当所述第1检测单元检测出时,所述上下文对应单元将与所述第1线程相对应的上下文的对应目标变更为所述第2线程,当所述第1检测单元未检测出时,所述上下文对应单元将所述初始上下文作为与所述第2线程相对应的上下文存储在所述上下文存储单元中,在所述第1检测单元未检测出、且所述第2检测单元检测出的情况下,所述设定单元对所述处理器设定通过所述上下文对应单元与所述第2线程相对应地被存储在所述上下文存储单元中的初始上下文。
由此,在第2检测单元检测出的情况下、即第2线程没有对应上下文的情况下,当第1检测单元检测出时,使与第1线程相对应的上下文与第2线程相对应,所以在执行该第2线程后又处于非执行状态、而且不得不进行上下文的保存时,能够已经确保该保存用的区域。
另外,在第2线程没有对应上下文的情况下,当第1检测单元也未检测出时,使用于将既定的处理部分作为处理的开始位置的初始上下文与第2线程相对应,设定单元对处理器设定该初始上下文,所以能够正常地执行第2线程。
另外,也可以是,所述信息处理装置还具有上下文对应单元,在所述第1检测单元检测出、且所述第2检测单元检测出的情况下,该上下文对应单元将在所述上下文存储单元中存储的、与所述第2线程相对应的上下文的对应目标变更为所述第1线程,将与所述第1线程相对应的上下文的对应目标变更为所述第2线程。
由此,在第1检测单元检测出、且第2检测单元检测出的情况下,被转变为执行状态的第2线程中的处理的开始位置、和此前是执行状态的第1线程中下一次成为执行状态时的处理的开始位置都是既定的处理部分,所以上下文对应单元通过使对应于第2线程的上下文与第1线程相对应,能够正确地保持第1线程的上下文,而不需保存对处理器设定的上下文。
另外,上下文对应单元使对应于第1线程的上下文与第2线程相对应,所以在执行该第2线程后又处于非执行状态、而且不得不进行上下文的保存时,能够已经确保该保存用的区域。
另外,在以后第1线程处于执行状态时,能够原样对处理器设定与第1线程相对应的上下文。
另外,也可以是,所述事件是消息,所述非执行状态包括等待消息的接收的消息等待状态,所述多个线程中包括如下构成线程,即,构成为在下一次成为执行状态时的处理的开始位置是所述既定的处理部分的情况下,设定表示转变为所述消息等待状态的标志的线程,所述第1检测单元以及所述第2检测单元通过对在检测对象的线程中设定有所述标志这一情况进行检测,来对该处理对象的线程中的处理的开始位置是所述既定的处理部分这一情况进行检测。
由此,只需使各个线程构成为在下一次成为执行状态时的处理的开始位置是所述既定的处理部分的情况下,设定表示转变为所述消息等待状态的标志,本发明的信息处理装置即可获得更加快速地进行线程的切换的效果。
附图说明
图1是本发明的实施方式1的信息处理装置1000的功能框图。
图2是表示在存储部1010中存储的结构体组的图。
图3是表示调度器结构体D00的数据结构的图。
图4是表示线程结构体D10A的数据结构的图。
图5是用于说明线程的状态转变的图。
图6是表示信号量结构体D20的数据结构的图。
图7是表示上下文结构体D30A的数据结构的图。
图8是表示各个线程的处理的流程图(左侧)、和表示信息处理装置1000的执行控制部1050的动作的流程图(右侧)。
图9是表示信息处理装置1000的调度部1020的动作的流程图。
图10是表示信息处理装置1000的转变检测部1030的动作的流程图。
图11是表示信息处理装置1000的唤醒检测部1040的动作的流程图。
图12是表示信息处理装置1000的上下文对应交换部1071的动作的流程图。
图13是表示信息处理装置1000的分配部1060的动作的流程图。
图14是本发明的实施方式2的信息处理装置2000的功能框图。
图15是表示调度器结构体D40的数据结构的图。
图16是表示上下文结构体D50A的数据结构的图。
图17是表示信息处理装置2000的执行控制部2020的动作的流程图。
图18是表示信息处理装置2000的上下文未对应检测部2010的动作的流程图。
图19是表示信息处理装置2000的上下文对应移动部2031的动作的流程图。
图20是表示信息处理装置2000的上下文对应开放/复原部2032的动作的流程图。
图21是表示信息处理装置2000的上下文保管/对应分配部2033的动作的流程图。
图22是表示信息处理装置2000的上下文保管/对应分配部2033的动作的流程图。
具体实施方式
下面,参照附图来说明本发明的实施方式。
《实施方式1》
<概况>
实施方式1的信息处理装置是对现有的信息处理装置进行改良而得到的,通过使CPU(Central Processing Unit,中央处理单元)等处理器执行程序,实现作为多线程OS(Operating System,操作系统)的功能。
下面,以多线程控制的对象的各个线程中,包括作为所谓事件驱动型的处理程序而进行动作的多个线程,并且利用消息来传递各种事件的发生的情况为例进行说明。
作为该消息的示例,可以列举表示用户点击了鼠标按钮的通知、用于在线程之间取得协作而使用的通知等,另外关于各个线程的切换原因,可以列举时间片(time slice)已用尽的情况、等待共用资源的分配的情况、等待上述消息的接收的情况等。另外,下面在进行从某个线程向另一个线程的切换时,把该某个线程称为“前一线程”,把另一个线程称为“当前线程”。
事件驱动型的各个线程在执行状态期间,反复执行被称为消息循环(message loop)的循环处理。消息循环构成为在程序的主例程中包括是否在消息队列中接收到消息的判定处理,在接收到消息的情况下,调用既定的子例程并进行与该消息对应的处理,然后再次进行该判定处理,在没有接收到消息的情况下,进行用于设定表示转变为等待消息的状态(以下称为“消息等待状态”)之意的标志的处理,使OS进行线程的切换处理。
在设定了该标志的状态下,在通过OS进行线程的切换处理时,设定了该标志的线程(前一线程)处于消息等待状态,并中断消息循环的执行,另一个线程(当前线程)处于执行状态,该当前线程也执行消息循环。处于消息等待状态的前一线程在下一次成为执行状态时,从上述判定处理再次开始执行。
另外,在上述的子例程处理中有可能产生线程的切换,但这种情况的前一线程处于与消息等待状态不同的状态(后面叙述的可执行状态或者通常等待状态)。
这样,由于事件驱动型的各个线程分别在执行消息循环,所以假如在前一线程处于消息等待状态的情况下,当前线程在即将从上一次执行状态变为非执行状态之前等待消息,所以向消息等待状态转变,前一线程在下一次成为执行状态时的执行的再次开始位置、和当前线程此后再次开始执行的位置都成为上述判定处理。
即,通过使对CPU的寄存器设定的值(前一线程的上下文)所指示的数据的内容、与当前线程的上下文所指示的数据的内容一致,能够再次开始当前线程的处理,而不需要进行上下文的保存/设定处理。
因此,该信息处理装置在切换线程时,在检测到前一线程转变为消息等待状态、而且检测到当前线程在上次处于执行状态时又转变为消息等待状态的情况下,不进行上下文的保存/设定处理,由此更加快速地进行线程的切换,实现高效率的处理。
<结构>
图1是本发明的实施方式1的信息处理装置1000的功能框图。
信息处理装置1000包括CPU及存储器,从功能方面讲如图所示具有存储部1010、调度部1020、转变检测部1030、唤醒检测部1040、执行控制部1050、分配部1060、对应部1070。
其中,存储部1010利用存储器等存储介质实现,具有存储构成操作系统的子例程组(以下称为“步骤组”)以及数据组(调度器结构体、各个线程结构体、各个上下文结构体等结构体组)的功能。通过由上述的CPU执行该步骤组,实现调度部1020、转变检测部1030、唤醒检测部1040、执行控制部1050、分配部1060、对应部1070的各个功能。
关于步骤组、结构体组的具体内容将在后面进行说明,调度器结构体包括用于确定前一线程和当前线程的信息,各个线程结构体是各个线程的执行控制用的信息,包括该线程的状态、执行的优先度、和表示相对应的上下文的指针等。另外,各个上下文结构体是表示与各个线程对应的上下文的内容的信息。
另外,此处的结构体是指具有固定的数据结构的数据本身,调度器结构体、线程结构体、上下文结构体分别具有不同的数据结构。并且,各个线程结构体虽然具有相同的数据结构,但是数据本身不同,这对于各个上下文结构体也相同。
调度部1020具有如下功能:按照执行控制部1050的指示,根据在存储部1010中存储的各个线程结构体中包含的各个线程的状态和执行的优先度,确定下一次执行的线程,并使所确定的线程转变为执行状态。调度部1020将与所确定的线程相关的信息反映在存储部1010的调度器结构体中。
转变检测部1030具有如下功能:按照执行控制部1050的指示,并参照作为前一线程的执行控制用信息的存储部1010的线程结构体(以下称为“前一线程结构体”),检测该线程转变为消息等待状态这一情况。
唤醒检测部1040具有如下功能:按照执行控制部1050的指示,并参照作为当前线程的执行控制用信息的存储部1010的线程结构体(以下称为“当前线程结构体”),检测该线程在上次处于执行状态时已转变为消息等待状态这一情况。
执行控制部1050具有进行装置整体的控制、以及对装置内的各个块进行指示的功能。尤其具有如下功能:在通过调度部1020进行确定时,指示转变检测部1030和唤醒检测部1040进行检测,根据该检测结果,指示分配部1060和对应部1070中任一方进行线程切换用的处理。
分配(dispatch)部1060具有如下功能:按照来自执行控制部1050的指示,把对CPU的寄存器设定的值作为前一线程的上下文结构体存储在存储部1010中,并对CPU的寄存器设定在存储部1010中存储的当前线程的上下文结构体的内容。
对应部1070包括上下文对应交换部1071,该上下文对应交换部1071具有如下功能:按照来自执行控制部1050的指示,将前一线程与上下文的对应关系、和当前线程与上下文的对应关系进行交换。更具体地讲,将前一线程结构体中包含的指示与该线程对应的上下文的指针、和当前线程结构体中包含的指示与该线程对应的上下文的指针进行交换。
<数据>
关于信息处理装置1000在多线程控制中使用的数据进行说明。另外,下面说明的示例是假设3个事件驱动型的线程的并列执行的情况。并且,在下面的示例中假设使用一个信号量(semaphore)进行等待处理的情况来进行说明。
图2是表示在存储部1010中存储的结构体组的图。
如该图所示,在存储部1010中存储有调度器结构体D00、线程结构体D10A~D10C、信号量结构体D20、上下文结构体D30A~D30C。
<线程结构体>
首先,说明线程结构体D10A~D10C。
线程结构体D10A~D10C分别是一个线程的执行控制用的信息,是在生成线程时生成的。线程结构体D10A~D10C具有相同的数据结构,所以下面以线程结构体D10A为例进行说明。
图4是表示线程结构体D10A的数据结构的图。
如该图所示,线程结构体D10A由线程状态D11、线程优先度D12、消息等待状态转变检测标志D13、指向上下文结构体的指针D14、消息队列D15、消息处理器(message handler)D16构成。
其中,线程状态D11是表示线程的状态的信息,表示结束状态T0、执行状态T1、可执行状态T2、通常等待状态T3、消息等待状态T4中的任意一种状态。关于线程的状态是如何转变的将在后面进行说明。
线程优先度D12是表示线程的执行的优先度的信息,优先度例如是在生成线程时按照生成源的程序接受指定而决定的。
消息等待状态转变检测标志D13是表示前一线程是否转变为消息等待状态T4、以及当前线程是否转变为消息等待状态T4的信息。为了表示线程从执行状态T1转变为消息等待状态T4,利用该线程设定为“真”。在发生线程的切换时,使用该标志来判定是否需要上下文的保存/设定处理。
指向上下文结构体的指针D14是用于确定与线程对应的上下文结构体的指针,是在生成与线程对应的上下文时设定的,如后面所述,在不进行上下文的保存/设定处理即进行线程的切换的情况下被更新。该图中的“上下文结构体D30”的记述,表示指示上下文结构体D30A~D30C中的任意一个上下文结构体。
消息队列D15是线程接收到的消息的集合。该消息是通过OS或其他线程而追加的,也存在通过对该消息进行处理、即执行与事件(消息)对应的子例程(消息处理器),消息队列D15成为空的情况。
消息处理器D16是用于存储在接收到消息时执行的子例程(消息处理器)在存储部1010中的地址的指针。
在此,对通过信息处理装置1000的多线程控制而形成的线程的状态转变进行简单说明。
图5是用于说明线程的状态转变的图。
该图所示的结束状态T0是指线程的动作结束的状态,在刚刚生成线程后也处于该状态。在生成了线程的情况下,通过进行使该线程开始的处理,线程转变为可执行状态T2。
可执行状态T2是指等待CPU被分配的状态,在对该线程分配CPU后,线程转变为执行状态T1。
另外,执行状态T1是指对线程分配CPU并使其执行的状态。在执行状态T1的线程的优先度比处于可执行状态T2的另一个线程低的情况下等,执行状态T1的线程转变为可执行状态T2,并且在产生了另一个线程的资源开放等待(信号量等待)等的情况下,转变为通常等待状态T3,在产生了消息等待的情况下,转变为消息等待状态T4。
另外,通常等待状态T3是指信号量等待等、由于消息等待状态T4的原因之外的原因而等待的状态,例如通过解除信号量等待,转变为可执行状态T2。
另外,消息等待状态T4是指上述的消息队列D15中没有消息而等待消息的接收的状态,在发送了(即接收到)消息的情况下,转变为可执行状态T2。
<调度器结构体>
下面说明调度器结构体D00。
图3是表示调度器结构体D00的数据结构的图。
如该图所示,调度器结构体D00由线程结构体的排列D01、指向当前线程结构体的指针D02、指向前一线程结构体的指针D03构成。
其中,线程结构体的排列D01是把上述线程结构体D10A~D10C作为要素的排列。
另外,指向当前线程结构体的指针D02是这样一种指针,即:用于确定由调度部1020决定为下一次执行的线程(当前线程)的控制用信息——即当前线程结构体(以下,在表述线程与作为该线程的控制用信息的线程结构体的关系的情况下,简称为“与线程对应的线程结构体”、“与线程结构体对应的线程”)的指针。
另外,指向前一线程结构体的指针D03是用于确定在由调度部1020进行决定之前与作为当前线程的线程(前一线程)对应的前一线程结构体的指针。
<信号量结构体>
下面说明信号量结构体D20。
图6是表示信号量结构体D20的数据结构的图。
如该图所示,信号量结构体D20由资源数D21、通常等待状态的线程队列D22构成。
其中,资源数D21是表示信号量管理的资源数的信息,通常等待状态的线程队列D22是用于等待另一个线程的资源开放的、转变为通常等待状态T3的线程的集合。
<上下文结构体>
下面说明上下文结构体D30A~D30C。
上下文结构体D30A~D30C是表示与各个线程对应的上下文的内容的信息,是在开始线程时生成的。上下文结构体D30A~D30C具有相同的数据结构,所以下面以上下文结构体D30A为例进行说明。
图7是表示上下文结构体D30A的数据结构的图。
如该图所示,上下文结构体D30A由通常等待状态上下文D33、堆栈D34构成。
其中,通常等待状态上下文D33是表示在线程从执行状态T1转变为通常等待状态T3时、从CPU保存的上下文的信息,堆栈D34是每个上下文的堆栈信息。
<消息循环步骤>
图8是表示各个线程的处理的流程图(左侧)、和表示信息处理装置1000的执行控制部1050的动作的流程图(右侧)。
下面说明的消息循环步骤S100表示由事件驱动型的各个线程执行的消息循环的处理内容。即,成为由信息处理装置1000进行的多线程控制的对象的线程具有共同的处理构造。另外,消息循环步骤S100被存储在存储部1010中,并由信息处理装置1000具有的CPU来执行。
线程判定在与本线程对应的线程结构体(当前线程结构体)的消息队列D15中是否具有消息(部分步骤S101),在具有消息的情况下(部分步骤S101:是),把从该消息队列D15中取出的消息作为自变量,调用对消息处理器D16设定的子例程(消息处理器)(部分步骤S106),在该处理之后,返回部分步骤S101的处理。另外,关于该子例程(消息处理器)的处理内容,可以因每个线程而不同,也可以对每个线程都相同。
在部分步骤S101,在消息队列D15中没有消息的情况下(部分步骤S101:否),把当前线程结构体的消息等待状态转变检测标志D13更新为“真”,把线程状态D11更新为“T4”(部分步骤S102、S103)。
然后,线程依次调用作为子例程的调度步骤S000和分配请求步骤S110(部分步骤S104、S105),在这些处理之后,返回部分步骤S101的处理。
关于调度步骤S000和分配请求步骤S110的内容将在后面进行说明,通过部分步骤S104、S105的处理,由OS决定下一次执行的线程,并进行线程的切换。
这样,在消息队列D15中具有消息的期间(部分步骤S101:是),线程执行子例程(消息处理器),在消息队列D15中的消息消失时(部分步骤S101:否),线程设定表示转变为消息等待状态T4之意的标志(消息等待状态转变检测标志D13),并通过OS使转变为消息等待状态T4,在下一次该线程处于执行状态T1的情况下,从部分步骤S101再次开始处理。
如上所述,由于各个线程的处理构造相同,当在变为消息等待状态T4的线程和已是消息等待状态T4的线程之间进行切换的情况下,两个线程的上下文所指示的数据的内容一致。
<动作>
下面,说明具有上述结构的信息处理装置1000的动作。
<调度步骤>
首先,对在消息循环步骤的部分步骤S104调用的调度步骤S000进行说明。
图9是表示信息处理装置1000的调度部1020的动作的流程图。
调度部1020将指向当前线程结构体的指针D02代入到调度器结构体D00中指向前一线程结构体的指针D03中(部分步骤S001)。
然后,从各个线程结构体中、线程状态D11为执行状态T1和可执行状态T2的线程结构体中,检索线程优先度D12最高的线程结构体(部分步骤S002)。
然后,判定被检索到的线程结构体的线程状态D11是否是执行状态T1(部分步骤S003),在不是执行状态T1的情况下(部分步骤S003:否),为了使被检索到的线程(成为当前线程的线程)的状态转变,进行如下处理。即,把与被检索到的线程对应的线程结构体的线程状态D11更新为执行状态T1,对指向当前线程结构体的指针D02设定与被检索到的线程对应的线程结构体(部分步骤S004)。
然后,判定前一线程结构体的线程状态D11是否是执行状态T1(部分步骤S005),在是执行状态T1的情况下(部分步骤S005:是),为了使前一线程的状态转变,把前一线程结构体的线程状态D11更新为可执行状态T2(部分步骤S006),并结束调度步骤的处理(部分步骤S007)。并且,当在部分步骤S005不是执行状态T1的情况下(部分步骤S005:否),不进行处理,而结束调度步骤的处理(部分步骤S007)。
另外,当在部分步骤S003是执行状态T1的情况下(部分步骤S003:是),由于被检索到的线程本来就是执行状态T1,不需要进行转变,所以不进行处理,而结束调度步骤的处理(部分步骤S007)。
<分配请求步骤>
下面,针对在消息循环步骤的部分步骤S105调用的分配请求步骤S110,按照图8中的右侧示出的流程图进行说明。
首先,执行控制部1050判定当前线程结构体和前一线程结构体是否相同(部分步骤S111)。即,判定指向当前线程结构体的指针D02和指向前一线程结构体的指针D03是否相同。
当在部分步骤S111判定为相同的情况下(部分步骤S111:是),由于不需要进行线程的切换,所以结束分配请求步骤的处理(部分步骤S117),在判定为不同的情况下(部分步骤S111:否),按照下面所述进行用于切换线程的处理。
即,执行控制部1050判定消息等待状态转变检测步骤S010的返回值是否为“真”(部分步骤S112)。关于消息等待状态转变检测步骤S010的内容将在后面进行说明,由于前一线程结构体的消息等待状态转变检测标志D13的值成为返回值,所以部分步骤S112相当于判定与前一线程结构体对应的线程是否转变为消息等待状态T4。
当在部分步骤S112返回值为“真”的情况下(部分步骤S112:是),执行控制部1050判定来自消息等待状态的唤醒检测步骤S020的返回值是否为“真”(部分步骤S113)。关于来自消息等待状态的唤醒检测步骤S020的内容将在后面进行说明,由于当前线程结构体的消息等待状态转变检测标志D13的值成为返回值,所以部分步骤S113相当于判定与当前线程结构体对应的线程在上次是执行状态T1时是否转变为消息等待状态T4。
当在部分步骤S113返回值为“真”的情况下(部分步骤S113:是),由于与前一线程结构体对应的线程的上下文所指示的数据的内容、和与当前线程结构体对应的线程的上下文所指示的数据的内容一致,所以执行控制部1050调用上下文对应交换步骤S030(部分步骤S114),并在该处理之后结束分配请求步骤的处理(部分步骤S117)。关于上下文对应交换步骤S030的内容将在后面进行说明,此时进行交换与前一线程对应的上下文和与当前线程对应的上下文的对应关系(指针)的处理。
另外,当在部分步骤S113返回值为“伪”的情况下(部分步骤S113:否),由于与前一线程结构体对应的线程的上下文所指示的数据的内容、和与当前线程结构体对应的线程的上下文所指示的数据的内容不一致,所以执行控制部1050调用分配步骤S040(部分步骤S116),并在该处理之后结束分配请求步骤的处理(部分步骤S117)。关于分配步骤S040的内容将在后面进行说明,进行上下文的保存/设定处理。
另外,当在部分步骤S112返回值为“伪”的情况下(部分步骤S112:否),执行控制部1050将当前线程结构体的消息等待状态转变检测标志D13更新为“伪”(部分步骤S115),并进入部分步骤S116。
这样,在分配请求步骤S110中,通过进行部分步骤S112、S113的判定处理,对作为子例程的分配步骤S040和上下文对应交换步骤S030中的任意一个步骤分配处理。
如上所述,在分配步骤S040进行上下文的保存/设定处理,在上下文对应交换步骤S030,进行交换与前一线程对应的上下文和与当前线程对应的上下文的对应关系(指针)的处理。
相比上下文的保存/设定处理,上下文的对应关系的交换处理通常能够快速进行处理,所以在进行线程的切换时,上下文对应交换步骤S030被调用的次数越多,相比每次调用分配步骤S040的情况,能够整体上提高程序的处理效率。
<消息等待状态转变检测步骤>
下面,对分配请求步骤的部分步骤S112中的消息等待状态转变检测步骤S010进行说明。
图10是表示信息处理装置1000的转变检测部1030的动作的流程图。
转变检测部1030返回前一线程结构体的消息等待状态转变检测标志D13的值(部分步骤S011),并结束消息等待状态转变检测步骤的处理(部分步骤S012)。
<来自消息等待状态的唤醒检测步骤>
下面,对分配请求步骤的部分步骤S113中的来自消息等待状态的唤醒检测步骤S020进行说明。
图11是表示信息处理装置1000的唤醒检测部1040的动作的流程图。
唤醒检测部1040返回当前线程结构体的消息等待状态转变检测标志D13的值(部分步骤S021),将该消息等待状态转变检测标志D13的值设定为“伪”(部分步骤S022),并结束来自消息等待状态的唤醒检测步骤的处理(部分步骤S023)。
<上下文对应交换步骤>
下面,对在分配请求步骤的部分步骤S114调用的上下文对应交换步骤S030进行说明。
图12是表示信息处理装置1000的上下文对应交换部1071的动作的流程图。
上下文对应交换部1071将指向当前线程结构体的上下文结构体的指针D14的值、和指向前一线程结构体的上下文结构体的指针D14的值进行交换(部分步骤S031),并结束上下文对应交换步骤的处理(部分步骤S032)。
这样,通过在当前线程结构体和前一线程结构体之间交换指向上下文结构体的指针D14,不需进行上下文的保存处理即可正确保持前一线程的上下文,并且能够保持使上下文与当前线程对应的状态,即使在需要保存该当前线程的上下文时,也能够如现有方法那样进行保存。
<分配步骤>
下面,说明在分配请求步骤的部分步骤S116调用的分配步骤S040。
图13是表示信息处理装置1000的分配部1060的动作的流程图。
首先,分配部1060把对CPU的寄存器设定的值,存储为指向前一线程结构体的上下文结构体的指针D14所指示的上下文结构体D30的通常等待状态上下文D33。但是,程序计数器(以下也称为“PC”)的值在S043被修正并存储(部分步骤S041)。程序计数器的值的修正表示与前一线程结构体对应的线程在下一次成为执行状态T1时,将从部分步骤S043再次开始处理。
然后,分配部1060对CPU的寄存器设定指向当前线程结构体的上下文结构体的指针D14所指示的上下文结构体D30的通常等待状态上下文D33的值(部分步骤S042),并结束分配步骤的处理(部分步骤S043)。
<具体示例>
以在与线程结构体D10A对应的线程和与线程结构体D10B对应的线程之间发生切换的情况为例,对信息处理装置1000的动作进行具体说明。
下面,假设指向当前线程结构体的指针D02为“D10A”,线程结构体D10A的线程状态D11为“T1”,消息队列D15为空,指向上下文结构体的指针D14为“D30A”。
并且,假设线程结构体D10B的线程状态D11为“T2”,消息等待状态转变检测标志D13为“真”,指向上下文结构体的指针D14为“D30B”,说明与线程结构体D10A对应的线程此后执行图8中左侧所示的消息循环步骤S100内的部分步骤S101的处理。
与线程结构体D10A对应的线程由于在线程结构体D10A的消息队列D15中没有消息(该图左侧的部分步骤S101:否),所以把消息等待状态转变检测标志D13更新为“真”,把线程状态D11更新为“T4”(部分步骤S102、S103)。
然后,与线程结构体D10A对应的线程调用作为子例程的调度步骤S000(部分步骤S104)。
受理了调度步骤S000的调用,信息处理装置1000的执行控制部1050指示调度部1020进行处理。
接收到该指示,调度部1020将指向当前线程结构体的指针D02(D10A)代入到调度器结构体D00中的指向前一线程结构体的指针D03中(图9中的部分步骤S001)。
然后,调度部1020从各个线程结构体中、线程状态D11为执行状态T1和可执行状态T2的线程结构体中,检索线程优先度D12最高的线程结构体(在该示例中,设为线程结构体D10B)(部分步骤S002),由于线程结构体D10B的线程状态D11(T2)不是执行状态T1(部分步骤S003:否),所以把该线程状态D11更新为“T1”,并对指向当前线程结构体的指针D02设定“D10B”(部分步骤S004)。
然后,由于前一线程结构体(D10A)的线程状态D11不是“T1”(部分步骤S005:否),所以结束调度步骤的处理(部分步骤S007)。
再次返回消息循环步骤的处理,与线程结构体D10A对应的线程调用分配请求步骤S110(部分步骤S105)。
受理了分配请求步骤S110的调用,由于指向当前线程结构体的指针D02(D10B)和指向前一线程结构体的指针D03(D10A)不同(图8右侧的部分步骤S111:否)、消息等待状态转变检测步骤S010的返回值为“真”(部分步骤S112:是)、来自消息等待状态的唤醒检测步骤S020的返回值也为“真”(部分步骤S113:是),所以执行控制部1050调用上下文对应交换步骤S030(部分步骤S114)。
接收到来自执行控制部1050的指示,上下文对应交换部1071将指向当前线程结构体的上下文结构体的指针D14的值(D30B)和指向前一线程结构体的上下文结构体的指针D14的值(D30A)交换(图12中的部分步骤S031),并结束上下文对应交换步骤的处理(部分步骤S032)。
再次返回分配请求步骤的处理,执行控制部1050结束分配请求步骤的处理(图8右侧的部分步骤S117)。
在上述示例中,在分配请求步骤S110中调用上下文对应交换步骤S030,并进行线程的切换,所以与调用分配步骤S040的情况相比,可以说能够快速进行线程的切换。
《实施方式2》
<概况>
在实施方式1的信息处理装置1000中,各个线程一定与一个上下文对应,而以下说明的实施方式2的信息处理装置在前一线程转变为消息等待状态T4的情况下,删除前一线程与上下文的对应关系(指针),这一点与信息处理装置1000不同。
本实施方式的信息处理装置通过检测不存在当前线程与上下文的对应,检测当前线程在上次处于执行状态T1时又转变为消息等待状态T4这一情况,并对与该上下文的对应关系被删除的当前线程,重新进行与所设定的上下文的对应关系,以从消息循环的判定处理开始执行。这样,针对在消息等待状态T4下中断处理的线程,不需要对应上下文,所以这种线程越多,整体上能够减少存储器的使用量。
另外,在上述说明中,针对被删除了与上下文的对应关系的当前线程进行了说明,在刚刚生成后就不存在与上下文的对应关系的线程成为当前线程的情况下,从消息循环的判定处理开始执行,所以能够进行相同的处理。
下面,主要说明与信息处理装置1000不同的部分。
<结构>
图14是本发明的实施方式2的信息处理装置2000的功能框图。
信息处理装置2000从功能方面讲如图所示具有存储部1010、调度部1020、转变检测部1030、上下文未对应检测部2010、执行控制部2020、对应部2030。
上下文未对应检测部2010、执行控制部2020、对应部2030与实施方式1的信息处理装置1000不同,所以下面说明这些要素。
其中,上下文未对应检测部2010具有如下功能:按照执行控制部2020的指示,并参照存储部1010的当前线程结构体,检测在该线程上没有对应上下文这一情况。
执行控制部2020与执行控制部1050相同,具有如下功能:根据各个检测部的检测结果,指示分配部1060和对应部2030中任意一方进行线程切换的处理,但以下方面与执行控制部1050不同。
即,执行控制部1050在各个检测部中的任意一个检测部未检测出的情况下,指示分配部1060进行切换线程的处理,而执行控制部2020只在转变检测部1030和上下文未对应检测部2010都未检测出的情况下,指示分配部1060进行处理,这一点不同。
即,执行控制部2020在转变检测部1030和上下文未对应检测部2010中任意一方检测出的情况下,指示对应部2030进行切换线程的处理。
对应部2030包括取代上下文对应交换部1071的、上下文对应移动部2031和上下文对应开放/复原部2032和上下文保管/对应分配部2033,这一点与对应部1070不同。
其中,上下文对应移动部2031具有如下功能:在转变检测部1030和上下文未对应检测部2010都检测出的情况下,按照来自执行控制部2020的指示,使对应于前一线程的上下文与当前线程相对应,并删除该上下文与前一线程的对应关系。
上下文对应开放/复原部2032具有如下功能:在转变检测部1030检测出、而上下文未对应检测部2010未检测出的情况下,按照来自执行控制部2020的指示,删除前一线程与该上下文的对应关系,并对CPU的寄存器设定与当前线程对应的上下文。
上下文保管/对应分配部2033具有如下功能:在转变检测部1030未检测出、而上下文未对应检测部2010检测出的情况下,按照来自执行控制部2020的指示,把对CPU的寄存器设定的值作为前一线程的上下文结构体存储在存储部1010中,使没有与线程对应的上下文结构体与当前线程相对应,并对CPU的寄存器设定相对应的该上下文结构体的内容。关于与该当前线程对应的上下文结构体所表示的上下文的内容,将在后面进行说明。
<数据>
关于信息处理装置2000在多线程控制中使用的数据进行说明。
在信息处理装置2000的存储部1010中存储有调度器结构体D40和上下文结构体D50A~D50C,以取代实施方式1的调度器结构体D00和上下文结构体D30A~D30C。
下面,针对调度器结构体D40和上下文结构体D50A~D50C,主要说明与调度器结构体D00和上下文结构体D30A~D30C的不同之处。另外,下面说明指向线程结构体D10A~D10C的上下文结构体的指针D14指示上下文结构体D50(D50A~D50C中的任意一个上下文结构体)的情况。
<调度器结构体>
首先说明调度器结构体D40。
图15是表示调度器结构体D40的数据结构的图。
如该图所示,调度器结构体D40包括上下文池(context pool)D04,这一点与调度器结构体D00不同。
其中,上下文池D04是用于确定没有进行与线程的对应的上下文结构体的信息,在通过上述的上下文对应开放/复原部2032将前一线程与其上下文的对应关系删除的情况下,该信息被存储,在通过上下文保管/对应分配部2033将利用该信息确定的上下文结构体与当前线程相对应时,该信息被删除。
<上下文结构体>
下面,说明上下文结构体D50A~D50C。
上下文结构体D50A~D50C具有相同的数据结构,所以下面以上下文结构体D50A为例进行说明。
图16是表示上下文结构体D50A的数据结构的图。
如该图所示,上下文结构体D50A包括消息等待状态上下文D31和消息等待状态上下文保管标志D32,这一点与上下文结构体D30A不同。
其中,消息等待状态上下文D31是表示通过上述的上下文保管/对应分配部2033与当前线程相对应的上下文的信息,该上下文被设定成为使上次处于执行状态T1时又转变为消息等待状态T4的线程能够再次开始处理,在新生成的线程成为当前线程的情况下也能够对应。
消息等待状态上下文保管标志D32是表示消息等待状态上下文D31是有效的上下文这一情况的信息。
另外,事件驱动型的各个线程执行的消息循环的处理内容与实施方式1相同(在图8中左侧示出的消息循环步骤S100),在部分步骤S105,假设将要调用的子例程是分配请求改进步骤S130,下面进行说明。
<动作>
下面说明具有上述结构的信息处理装置2000的动作。
<分配请求改进步骤>
首先说明分配请求改进步骤S130。
图17是表示信息处理装置2000的执行控制部2020的动作的流程图。
部分步骤S131、S132分别与图8所示的分配请求步骤S110的部分步骤S111、S112相同地进行处理。
在部分步骤S132,在消息等待状态转变检测步骤S010的返回值为“真”的情况下(部分步骤S132:是),执行控制部2020判定上下文未对应检测步骤S050的返回值是否为“真”(部分步骤S133)。关于上下文未对应检测步骤S050的内容将在后面进行说明,如果指向当前线程结构体的上下文结构体的指针D14为NULL,则返回值为“真”,所以部分步骤S133相当于判定指向当前线程结构体的上下文结构体的指针D14是否为NULL。
在部分步骤S133,在返回值为“真”的情况下(部分步骤S133:是),与前一线程结构体对应的线程的上下文所指示的数据的内容、和与当前线程结构体对应的线程的上下文所指示的数据的内容一致,所以执行控制部2020调用上下文对应移动步骤S060(部分步骤S134),在该处理之后,结束分配请求改进步骤的处理(部分步骤S139)。关于上下文对应移动步骤S060的内容将在后面进行说明,此时进行使对应于前一线程的上下文与当前线程相对应(指针的设定)、并删除前一线程与其上下文的对应关系(指针)的处理。
并且,在部分步骤S133,在返回值为“伪”的情况下(部分步骤S133:否),执行控制部2020调用上下文对应开放/复原步骤S070(部分步骤S135),在该处理之后,结束分配请求改进步骤的处理(部分步骤S139)。关于上下文对应开放/复原步骤S070的内容将在后面进行说明,此时进行上下文的设定处理、删除前一线程与其上下文的对应关系(指针)的处理。
并且,在部分步骤S132,在消息等待状态转变检测步骤S010的返回值为“伪”的情况下(部分步骤S132:否),执行控制部2020进行与部分步骤S133相同的处理(部分步骤S136)。
在部分步骤S136,在返回值为“真”的情况下(部分步骤S136:是),执行控制部2020调用上下文保管/对应分配步骤S080(部分步骤S137),在该处理之后,结束分配请求改进步骤的处理(部分步骤S139)。关于上下文保管/对应分配步骤S080的内容将在后面进行说明,此时进行上下文的保存处理、以及在使没有进行与线程对应的上下文(消息等待状态上下文D31)与当前线程相对应后的上下文的设定处理。
在部分步骤S136,在返回值为“伪”的情况下(部分步骤S136:否),调用分配步骤S040(部分步骤S138),在该处理之后,结束分配请求改进步骤的处理(部分步骤S139)。
如上所述,在分配步骤S040以及上下文保管/对应分配步骤S080,进行上下文的保存/设定处理,但在上下文对应移动步骤S060不进行上下文的保存/设定处理,只进行指针的设定、删除处理,在上下文对应开放/复原步骤S070进行上下文的设定处理,但是不进行上下文的保存处理,而进行删除指针的处理。
因此,在进行线程的切换时,上下文对应移动步骤S060和上下文对应开放/复原步骤S070被调用的次数越多,与每次调用分配步骤S040的情况相比,整体上能够提高程序的处理效率。
<上下文未对应检测步骤>
下面,说明分配请求改进步骤的部分步骤S133、S136中的上下文未对应检测步骤S050。
图18是表示信息处理装置2000的上下文未对应检测部2010的动作的流程图。
上下文未对应检测部2010对当前线程结构体的消息等待状态转变检测标志D13设定“伪”(部分步骤S051),如果指向当前线程结构体的上下文结构体的指针D14为NULL,则返回“真”,如果不是NULL则返回“伪”(部分步骤S052),并结束上下文未对应检测步骤的处理(部分步骤S053)。
<上下文对应移动步骤>
下面,说明在分配请求改进步骤的部分步骤S134调用的上下文对应移动步骤S060。
图19是表示信息处理装置2000的上下文对应移动部2031的动作的流程图。
上下文对应移动部2031判定指向前一线程结构体的上下文结构体的指针D14所指示的上下文结构体D50的消息等待状态上下文保管标志D32是否为“真”(部分步骤S061),在是“伪”的情况下(部分步骤S061:否),将该消息等待状态上下文保管标志D32设定为“真”(部分步骤S062)。
然后,上下文对应移动部2031将CPU的寄存器的值保存在指向前一线程结构体的上下文结构体的指针D14所指示的上下文结构体D50的消息等待状态上下文D31中。此时,PC的值被保存为“S066”(部分步骤S063)。
进行部分步骤S063的处理,或者当在部分步骤S061消息等待状态上下文保管标志D32为“真”的情况下(部分步骤S061:是),上下文对应移动部2031对指向当前线程结构体的上下文结构体的指针D14,设定指向前一线程结构体的上下文结构体的指针D14(部分步骤S064),对该指向前一线程结构体的上下文结构体的指针D14设定“NULL”(部分步骤S065),并结束上下文对应移动步骤的处理(部分步骤S066)。
<上下文对应开放/复原步骤>
下面,说明在分配请求改进步骤的部分步骤S135调用的上下文对应开放/复原步骤S070。
图20是表示信息处理装置2000的上下文对应开放/复原部2032的动作的流程图。
针对部分步骤S071~S073,进行与图19所示的上下文对应移动步骤S060的部分步骤S061~S063相同的处理。但是,在部分步骤S073,PC的值被保存为“S076”
然后,上下文对应开放/复原部2032将指向前一线程结构体的上下文结构体的指针D14所指示的上下文结构体D50堆积在上下文池D04中,将该指向前一线程结构体的上下文结构体的指针D14初始化为“NULL”(部分步骤S074)。
然后,上下文对应开放/复原部2032对CPU的寄存器,设定指向当前线程结构体的上下文结构体的指针D14所指示的上下文结构体D50的通常等待状态上下文D33的值(部分步骤S075),并结束上下文对应开放/复原步骤的处理(部分步骤S076)。
<上下文保管/对应分配步骤>
下面,说明在分配请求改进步骤的部分步骤S137调用的上下文保管/对应分配步骤S080。
图21及图22是表示信息处理装置2000的上下文保管/对应分配部2033的动作的流程图。
上下文保管/对应分配部2033将CPU的寄存器的值保存在指向前一线程结构体的上下文结构体的指针D14所指示的上下文结构体D50的通常等待状态上下文D33中。此时,PC的值被保存为“S084”(部分步骤S081)。
然后,上下文保管/对应分配部2033调用上下文对应分配步骤S 120(部分步骤S082)。关于上下文对应分配步骤S120的内容将在后面进行说明。
然后,上下文保管/对应分配部2033对CPU的寄存器,设定指向当前线程结构体的上下文结构体的指针D14所指示的上下文结构体D50的消息等待状态上下文D31的值(部分步骤S083),并结束上下文保管/对应分配步骤的处理(部分步骤S084)。
<上下文对应分配步骤>
下面,针对在上下文保管/对应分配步骤的部分步骤S082调用的上下文对应分配步骤S120,按照图22所示的流程图进行说明。
上下文保管/对应分配部2033判定在上下文池D04中是否堆积有上下文结构体D50(部分步骤S121),在没有堆积的情况下(部分步骤S121:否),生成上下文结构体D50,将消息等待状态上下文D31的PC初始化为“S100”,将堆栈指针(以下也称为“SP”)初始化为所生成的上下文结构体D50的堆栈D34(部分步骤S122)。
然后,上下文保管/对应分配部2033将所生成的上下文结构体D50的消息等待状态上下文保管标志D32初始化为“伪”(部分步骤S123),对指向当前线程结构体的上下文结构体的指针D14设定所生成的上下文结构体的地址(部分步骤S124),并结束上下文对应分配步骤的处理(部分步骤S126)。
并且,在部分步骤S121,在上下文池D04中堆积有上下文结构体D50的情况下(部分步骤S121:是),对指向当前线程结构体的上下文结构体的指针D14设定从上下文池D04取出的上下文结构体D50的地址(部分步骤S124),并结束上下文对应分配步骤的处理(部分步骤S126)。
<具体示例>
以在与线程结构体D10A、线程结构体D10B、线程结构体D10C对应的各个线程之间发生切换的情况为例,对信息处理装置2000的动作进行具体说明。
下面,假设指向当前线程结构体的指针D02为“D10C”,线程结构体D10A的线程状态D11为“T2”,线程优先度D12为“最低”,消息队列D15为“MES”(有一个消息),指向上下文结构体的指针D14为“D50A”。
并且,假设线程结构体D10B的线程状态D11为“T2”,线程优先度D12为“中”,消息队列D15为“MES”,指向上下文结构体的指针D14为“NULL”。
并且,假设线程结构体D10C的线程状态D11为“T1”,线程优先度D12为“高”,消息队列D15为空,指向上下文结构体的指针D14为“D50B”,线程结构体D50B的消息等待状态上下文保管标志D32为“真”。
并且,假设为与线程结构体D10C对应的线程此后执行图8中左侧所示的消息循环步骤S100内的部分步骤S101的处理,对上述情况进行说明。
<第1次切换>
与线程结构体D10C对应的线程,由于在线程结构体D10C的消息队列D15中没有消息(该图左侧的部分步骤S101:否),所以与在实施方式1的具体示例中说明的情况相同地执行部分步骤S102~S105。在该示例中,通过部分步骤S104的处理,指向当前线程结构体的指针D02被更新为“D10B”。
受理了分配请求改进步骤S130的调用,执行控制部2020由于指向当前线程结构体的指针D02(D10B)与指向前一线程结构体的指针D03(D10A)不同(图17中的部分步骤S131:否)、消息等待状态转变检测步骤S010的返回值为“真”(部分步骤S132:是),而且上下文未对应检测步骤S050的返回值为“真”(部分步骤S133:是),所以执行控制部2020调用上下文对应移动步骤S060(部分步骤S134)。
接收到来自执行控制部2020的指示,上下文对应移动部2031由于指向前一线程结构体(D10C)的上下文结构体的指针D14所指示的上下文结构体(D50B)的消息等待状态上下文保管标志D32为“真”(部分步骤S061:是),所以将指向当前线程结构体(D10B)的上下文结构体的指针D14设定为“D50B”,将指向前一线程结构体(D10C)的上下文结构体的指针D14设定为“NULL”(部分步骤S064、S065),并结束上下文对应移动步骤的处理(部分步骤S066)。
再次返回分配请求改进步骤的处理,执行控制部2020结束分配请求改进步骤的处理(图17中的部分步骤S139)。
<第2次切换>
由于在线程结构体D10B的消息队列D15中具有消息(图8左侧的部分步骤S101:是),所以与线程结构体D10B对应的线程把所取出的消息作为自变量,进行消息处理器的处理(部分步骤S106)。另外,在该示例中,假设为没有进行消息处理器中的线程的切换。
再次返回部分步骤S101的处理,由于在线程结构体D10B的消息队列D15中没有消息(部分步骤S101:否),所以与线程结构体D10B对应的线程与上述第1次切换时相同地执行部分步骤S102~S105。在该示例中,通过部分步骤S104的处理,指向当前线程结构体的指针D02被更新为“D10A”。
受理了分配请求改进步骤S130的调用,执行控制部2020由于当前线程结构体(D10A)与前一线程结构体(D10B)不同(图17中的部分步骤S131:否)、消息等待状态转变检测步骤S010的返回值为“真”(部分步骤S132:是),而且上下文未对应检测步骤S050的返回值为“伪”(部分步骤S133:否),所以执行控制部2020调用上下文对应开放/复原步骤S070(部分步骤S135)。
接收到来自执行控制部2020的指示,由于指向前一线程结构体(D10B)的上下文结构体的指针D14所指示的上下文结构体(D50B)的消息等待状态上下文保管标志D32为“真”(部分步骤S071:是),所以上下文对应开放/复原部2032将指向前一线程结构体(D10B)的上下文结构体的指针D14所指示的上下文结构体(D50B)堆积在上下文池D04中,将该指向前一线程结构体的上下文结构体的指针D14初始化为“NULL”(部分步骤S074)。
然后,上下文对应开放/复原部2032对CPU的寄存器,设定指向当前线程结构体(D10A)的上下文结构体的指针D14所指示的上下文结构体(D50A)的通常等待状态上下文D33的值(部分步骤S075),并结束上下文对应开放/复原步骤的处理(部分步骤S076)。
再次返回分配请求改进步骤的处理,执行控制部2020结束分配请求改进步骤的处理(图17中的部分步骤S139)。
在上述的示例中,在分配请求改进步骤S130中调用上下文对应移动步骤S060和上下文对应开放/复原步骤S070,并进行线程的切换,所以与调用分配步骤S040的情况相比,可以说能够快速进行线程的切换。
<补充>
以上根据实施方式对本发明的信息处理装置进行了说明,但是也能够进行以下所述的变形,本发明当然不限于在上述实施方式中示出的信息处理装置。
(1)在各个实施方式中,说明了使用一个处理器来切换多个线程并且并行执行的示例,但当然也可以使用多个处理器来切换多个线程并且并列执行。在这种情况下,在对各个处理器分配线程时,按照在各个实施方式中说明的那样进行分配。
(2)在各个实施方式中,说明了各个线程共用与主循环步骤对应的编程代码,并且各个线程执行该代码的情况,但是也可以准备各个线程用的具有相同的处理构造的代码,各个线程执行本线程用的代码。在这种情况下,此后将要执行的当前线程必须将存储有本线程用的代码的存储器上的位置通知本发明的信息处理装置,例如,这能够通过使与该线程对应的线程结构体包含存储有本线程用的代码的存储器上的基础地址(base address)值来实现。
(3)本发明中的调度单元相当于各个实施方式中的调度部1020,本发明中的第1检测单元相当于各个实施方式中的转变检测部1030,本发明中的第2检测单元相当于实施方式1中的唤醒检测部1040、以及实施方式2中的上下文未对应检测部2010,本发明中的上下文存储单元及初始上下文存储单元相当于各个实施方式中的存储部1010,本发明中的上下文对应单元及设定单元相当于各个实施方式中的执行控制部和对应部和分配部1060。
产业上的可利用性
本发明的信息处理装置能够在进行多线程执行控制中使用。
标号说明
1000、2000信息处理装置;
1010存储部;
1020调度部;
1030转变检测部;
1040唤醒检测部;
1050、2020执行控制部;
1060分配部;
1070、2030对应部;
1071上下文对应交换部;
2010上下文未对应检测部;
2031上下文对应移动部;
2032上下文对应开放/复原部;
2033上下文保管/对应分配部。
Claims (6)
1.一种信息处理装置,一边对多个线程进行切换一边通过处理器来执行线程,其中该多个线程分别与事件的取得相对应地执行处理,其特征在于,
所述信息处理装置具有:
调度单元,使为执行状态的第1线程的状态转变为非执行状态,从所述多个线程中选择接下来执行的第2线程,并使其转变为执行状态;
第1检测单元,对被转变为非执行状态的所述第1线程中下一次成为执行状态时的处理的开始位置是否是与事件的取得相对应的既定的处理部分进行检测;
第2检测单元,对被转变为执行状态的所述第2线程中的处理的开始位置是否是所述既定的处理部分进行检测;和
设定单元,在所述第2线程被转变为执行状态时,根据所述第1检测单元及所述第2检测单元的检测结果,切换是对所述处理器设定所述第2线程执行用的上下文、还是不对所述处理器设定所述第2线程执行用的上下文,来进行动作,
所述信息处理装置还具有:
上下文存储单元,用于与线程相对应地存储上下文;和
上下文对应单元,在所述第1检测单元的检测结果为否的情况下,将对所述处理器设定的上下文作为与所述第1线程相对应的上下文存储在所述上下文存储单元中,
在所述第1检测单元的检测结果为是、且所述第2检测单元的检测结果为是的情况下,所述设定单元不对所述处理器设定与所述第2线程相对应的上下文,在所述第2检测单元的检测结果为否的情况下,所述设定单元对所述处理器设定与所述第2线程相对应的上下文。
2.根据权利要求1所述的信息处理装置,其特征在于,
在所述第1检测单元的检测结果为是的情况下,所述上下文对应单元还将在所述上下文存储单元中存储的、与所述第1线程相对应的上下文和该第1线程之间的对应关系删除。
3.根据权利要求2所述的信息处理装置,其特征在于,
所述信息处理装置具有存储初始上下文的初始上下文存储单元,该初始上下文用于将在所述上下文存储单元中没有对应上下文的线程用的所述既定的处理部分作为处理的开始位置,
当在所述上下文存储单元中所述第2线程与上下文没有对应的情况下,所述第2检测单元的检测结果为是,
在所述第2检测单元的检测结果为是的情况下,当所述第1检测单元的检测结果为是时,所述上下文对应单元将与所述第1线程相对应的上下文变更为与所述第2线程相对应,当所述第1检测单元的检测结果为否时,所述上下文对应单元将所述初始上下文作为与所述第2线程相对应的上下文存储在所述上下文存储单元中,
在所述第1检测单元的检测结果为否、且所述第2检测单元的检测结果为是的情况下,所述设定单元对所述处理器设定通过所述上下文对应单元与所述第2线程相对应地被存储在所述上下文存储单元中的初始上下文。
4.根据权利要求1所述的信息处理装置,其特征在于,
在所述第1检测单元的检测结果为是、且所述第2检测单元的检测结果为是的情况下,所述上下文对应单元还将在所述上下文存储单元中存储的、与所述第2线程相对应的上下文变更为与所述第1线程相对应,将与所述第1线程相对应的上下文变更为与所述第2线程相对应。
5.根据权利要求4所述的信息处理装置,其特征在于,
所述事件是消息,
所述非执行状态包括等待消息的接收的消息等待状态,
所述多个线程中包括如下线程,该线程构成为,在下一次成为执行状态时的处理的开始位置是所述既定的处理部分的情况下,该线程设定有表示转变为所述消息等待状态的标志,
所述第1检测单元以及所述第2检测单元通过对在检测对象的线程中是否设定有所述标志进行检测,来对该检测对象的线程中的处理的开始位置是否是所述既定的处理部分进行检测。
6.一种信息处理方法,一边对多个线程进行切换一边通过处理器来执行线程,其中该多个线程分别与事件的取得相对应地执行处理,其特征在于,
所述信息处理方法具有如下步骤:
调度步骤,使为执行状态的第1线程的状态转变为非执行状态,从所述多个线程中选择接下来执行的第2线程,并使其转变为执行状态;
第1检测步骤,对被转变为非执行状态的所述第1线程中下一次成为执行状态时的处理的开始位置是否是与事件的取得相对应的既定的处理部分进行检测;
第2检测步骤,对被转变为执行状态的所述第2线程中的处理的开始位置是否是所述既定的处理部分进行检测;和
设定步骤,在所述第2线程被转变为执行状态时,根据所述第1检测步骤及所述第2检测步骤的检测结果,切换是对所述处理器设定所述第2线程执行用的上下文、还是不对所述处理器设定所述第2线程执行用的上下文,来进行动作,
所述信息处理方法还具有:
上下文存储步骤,用于与线程相对应地存储上下文;和
上下文对应步骤,在所述第1检测步骤的检测结果为否的情况下,将对所述处理器设定的上下文作为与所述第1线程相对应的上下文存储在上下文存储单元中,
在所述第1检测步骤的检测结果为是、且所述第2检测步骤的检测结果为是的情况下,所述设定步骤不对所述处理器设定与所述第2线程相对应的上下文,在所述第2检测步骤的检测结果为否的情况下,所述设定步骤对所述处理器设定与所述第2线程相对应的上下文。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008165443 | 2008-06-25 | ||
JP2008-165443 | 2008-06-25 | ||
PCT/JP2009/002080 WO2009157127A1 (ja) | 2008-06-25 | 2009-05-13 | 情報処理装置、情報処理方法及び情報処理プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102047224A CN102047224A (zh) | 2011-05-04 |
CN102047224B true CN102047224B (zh) | 2013-10-02 |
Family
ID=41444200
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009801191287A Expired - Fee Related CN102047224B (zh) | 2008-06-25 | 2009-05-13 | 信息处理装置、信息处理方法及信息处理程序 |
Country Status (4)
Country | Link |
---|---|
US (1) | US8392932B2 (zh) |
JP (1) | JP5330384B2 (zh) |
CN (1) | CN102047224B (zh) |
WO (1) | WO2009157127A1 (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8832663B2 (en) * | 2009-11-23 | 2014-09-09 | International Business Machines Corporation | Thread serialization and disablement tool |
US8549523B2 (en) | 2009-11-23 | 2013-10-01 | International Business Machines Corporation | Performing runtime analysis and control of folding identified threads by assuming context of another thread and executing in lieu of another thread folding tool |
US20120180057A1 (en) * | 2011-01-10 | 2012-07-12 | International Business Machines Corporation | Activity Recording System for a Concurrent Software Environment |
WO2012095762A1 (en) * | 2011-01-10 | 2012-07-19 | International Business Machines Corporation | Activity recording system for a concurrent software environment |
US9652282B2 (en) * | 2011-11-08 | 2017-05-16 | Nvidia Corporation | Software-assisted instruction level execution preemption |
US10795722B2 (en) * | 2011-11-09 | 2020-10-06 | Nvidia Corporation | Compute task state encapsulation |
TWI439925B (zh) * | 2011-12-01 | 2014-06-01 | Inst Information Industry | 內嵌式系統及其執行緒與緩衝區管理方法 |
US9471458B2 (en) | 2012-01-05 | 2016-10-18 | International Business Machines Corporation | Synchronization activity recording system for a concurrent software environment |
US9928109B2 (en) * | 2012-05-09 | 2018-03-27 | Nvidia Corporation | Method and system for processing nested stream events |
US10628320B2 (en) | 2016-06-03 | 2020-04-21 | Synopsys, Inc. | Modulization of cache structure utilizing independent tag array and data array in microprocessor |
US10318302B2 (en) | 2016-06-03 | 2019-06-11 | Synopsys, Inc. | Thread switching in microprocessor without full save and restore of register file |
US10558463B2 (en) * | 2016-06-03 | 2020-02-11 | Synopsys, Inc. | Communication between threads of multi-thread processor |
US10613859B2 (en) | 2016-08-18 | 2020-04-07 | Synopsys, Inc. | Triple-pass execution using a retire queue having a functional unit to independently execute long latency instructions and dependent instructions |
US10552158B2 (en) | 2016-08-18 | 2020-02-04 | Synopsys, Inc. | Reorder buffer scoreboard having multiple valid bits to indicate a location of data |
CN110971920B (zh) * | 2018-09-30 | 2021-11-26 | 武汉斗鱼网络科技有限公司 | 一种消息的降级方法及相关装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1864139A (zh) * | 2003-08-05 | 2006-11-15 | 松下电器产业株式会社 | 程序执行装置 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07141209A (ja) | 1993-11-16 | 1995-06-02 | Fujitsu Ltd | データ処理装置 |
JP2636722B2 (ja) * | 1993-12-25 | 1997-07-30 | 日本電気株式会社 | マルチタスク実行管理方式 |
JP3027845B2 (ja) | 1997-11-21 | 2000-04-04 | オムロン株式会社 | プログラム制御装置および方法 |
EP1247195A4 (en) * | 1999-12-22 | 2005-01-05 | Ubicom Inc | SYSTEM AND METHOD FOR MULTITHREADING WORKING ON COMMAND LEVEL IN AN EMBEDDED PROCESSOR WITH ZERO-TIME CONTEXT SWITCHING |
US7234139B1 (en) * | 2000-11-24 | 2007-06-19 | Catharon Productions, Inc. | Computer multi-tasking via virtual threading using an interpreter |
JP4502650B2 (ja) * | 2004-02-03 | 2010-07-14 | 日本電気株式会社 | アレイ型プロセッサ |
US7730479B2 (en) | 2004-03-30 | 2010-06-01 | Kyocera Corporation | Cell-phone terminal, program management method and computer program of same |
JP4601983B2 (ja) * | 2004-03-30 | 2010-12-22 | 京セラ株式会社 | 携帯電話端末装置及びプログラム管理方法並びにそのコンピュータプログラム |
JP4476193B2 (ja) * | 2005-07-29 | 2010-06-09 | 株式会社ソニー・コンピュータエンタテインメント | 情報処理方法および情報処理装置 |
US20070113055A1 (en) * | 2005-11-15 | 2007-05-17 | Dale Jason N | Apparatus and method for improving single thread performance through speculative processing |
JP2007207074A (ja) | 2006-02-03 | 2007-08-16 | Ricoh Co Ltd | オペレーションシステム、スレッド制御機構、及び情報処理装置 |
US8001549B2 (en) * | 2006-04-27 | 2011-08-16 | Panasonic Corporation | Multithreaded computer system and multithread execution control method |
JP2008102847A (ja) | 2006-10-20 | 2008-05-01 | Nec Corp | マルチスレッドプログラム処理方法及び装置 |
-
2009
- 2009-05-13 JP JP2010517676A patent/JP5330384B2/ja not_active Expired - Fee Related
- 2009-05-13 CN CN2009801191287A patent/CN102047224B/zh not_active Expired - Fee Related
- 2009-05-13 US US12/991,980 patent/US8392932B2/en not_active Expired - Fee Related
- 2009-05-13 WO PCT/JP2009/002080 patent/WO2009157127A1/ja active Application Filing
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1864139A (zh) * | 2003-08-05 | 2006-11-15 | 松下电器产业株式会社 | 程序执行装置 |
Non-Patent Citations (1)
Title |
---|
JP特开2005-284904A 2005.10.13 |
Also Published As
Publication number | Publication date |
---|---|
JPWO2009157127A1 (ja) | 2011-12-08 |
US20110067034A1 (en) | 2011-03-17 |
CN102047224A (zh) | 2011-05-04 |
US8392932B2 (en) | 2013-03-05 |
JP5330384B2 (ja) | 2013-10-30 |
WO2009157127A1 (ja) | 2009-12-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102047224B (zh) | 信息处理装置、信息处理方法及信息处理程序 | |
CN101258469B (zh) | 信息处理设备 | |
CN107291547B (zh) | 一种任务调度处理方法、装置及系统 | |
KR101651246B1 (ko) | 멀티-코어 아키텍처들을 위한 사용자-레벨 인터럽트 메커니즘 | |
KR970004091B1 (ko) | 컴퓨터 시스템내의 프로세스간 메시지 라우팅을 위한 방법 및 장치 | |
US9772879B2 (en) | System and method for isolating I/O execution via compiler and OS support | |
US9529582B2 (en) | Modular architecture for distributed system management | |
CN101547212B (zh) | 一种分布式对象的调度方法和系统 | |
CN110781012B (zh) | 一种基于统一消息队列的拟态裁决器和裁决方法 | |
TW201227520A (en) | Virtual machine branching and parallel execution | |
CN102455940A (zh) | 一种定时器和异步事件的处理方法及系统 | |
CN112379992B (zh) | 基于角色的多智能体任务协同消息传递及异常处理方法 | |
US20140195790A1 (en) | Processor with second jump execution unit for branch misprediction | |
CN107168789A (zh) | 多任务的串行调度方法以及装置 | |
CN108270634B (zh) | 一种心跳探测的方法及系统 | |
US20040194088A1 (en) | Network device management | |
CN113094305B (zh) | 一种异步通信处理方法、装置和存储介质 | |
US20080184232A1 (en) | Target thread selection in a multi-threaded process | |
US10536332B1 (en) | Configuration invocation management | |
WO2004051462A1 (en) | Serving concurent tcp/ip connections of multiple virtual internet users with a single thread | |
US11474868B1 (en) | Sharded polling system | |
US20180084077A1 (en) | Processing a unit of work | |
CN112685147A (zh) | 中断响应方法、装置及可读存储介质 | |
CN112114940B (zh) | Docker环境下多容器多任务处理器调度方法 | |
CN114911658A (zh) | 一种实时运行系统的检测方法及计算设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20131002 Termination date: 20200513 |