调度方法、调度装置和多处理器系统的制作方法

文档序号:6553205阅读:179来源:国知局
专利名称:调度方法、调度装置和多处理器系统的制作方法
技术领域
本发明涉及多处理器系统中的并行处理的执行单位的调度方法和调度装置以及多处理器系统。
背景技术
最近的支持多任务的操作系统实现能够同时执行多个处理的多处理环境,同时还搭载了这些处理在处理内部能够生成多个线程(thread)来进行并行处理的多线程技术。处理在执行时被分配固有的资源或地址空间,不能访问其它的处理区域。而线程是在处理内部生成的执行单位,各线程能够互相自由地访问处理内的区域。线程是操作系统分配CPU的执行时间的基本单位。
作为对CPU分配线程的线程调度方式,有每隔一定时间顺序选择进入等待行列的线程来执行的单纯的轮转(round-robin)方式,和按照线程的优先级的顺序执行的优先方式等。在轮转方式中,等待行列中的线程每隔一定时间被公平地分配给CPU来执行。在优先方式中,各优先级的线程在按每个优先级设置的等待行列中排队,从优先级高的等待行列起依次选择线程并分配给CPU来执行。

发明内容
在一个系统内搭载了多个处理器的多处理器系统中,能够并行执行处理来实现处理整体的高速化。在多处理器系统中,在实现多线程环境的情况下,将线程分配给其中一个处理器来执行,处理的执行速度或存储器消耗量等性能根据线程的执行顺序而变化。在多处理器系统中的线程调度中,需要考虑处理器资源利用的效率化和线程间的数据交换或通信的效率化等,并且需要与单处理器系统中的线程调度不同的工作。
本发明鉴于这样的课题而完成,其目的在于提供一种控制将多处理器系统中的并行处理的执行单位分配给处理器的顺序,从而能够提高处理效率,并且提高处理器的利用效率的调度(scheduling)技术。
为了解决上述课题,本发明的一个方式的调度方法在多处理器系统中,对将并行处理的调度对象的执行单位分配给多个处理器的顺序进行调度,其中,将一个以上的所述调度对象的执行单位进行分组,将所述资源映射到各执行单位所参照的地址空间中,以使能够互相参照属于同一组的所述执行单位的每一个所占有的处理器内的资源,在属于同一组的所有执行单位同时被分配给其中一个处理器的制约之下,控制对处理器分配组。
本发明的其它方式也是调度方法。该方法在多处理器系统中,对将并行处理的调度对象的执行单位分配给多个处理器的顺序进行调度,其中,将一个以上的所述调度对象的执行单位进行分组,以组为单位管理对处理器的分配,按照对每个所述组设定的优先级顺序,并且按照同一优先级内所述组到达等待行列的顺序,决定所述组的优先顺序,在属于同一组的所有执行单位同时被分配给其中一个处理器的制约之下,按照所述优先级顺序对处理器分配处于执行等待以及正在执行的状态的组。
根据该方式,能够按照优先顺序将属于同一组的所有执行单位同时分配给处理器。该优先顺序在同一优先级内按照到达等待行列的顺序来决定,因此能够在同一优先级的组间保持到达顺序。不仅包含处于执行等待的状态的组,而且包含处于正在执行的状态的组,由于在决定优先顺序后分配给处理器,因此能够集中地简单进行应分配的组对处理器的分配处理。
本发明的其它方式也是调度方法。该方法在多处理器系统中,对将并行处理的调度对象的执行单位分配给多个处理器的顺序进行调度,其中,从执行等待队列的前端起,依次取出组,仅在能够将属于取出的组的所有执行单位同时分配给其中一个处理器的情况下,将属于该组的所有执行单位分配给处理器,否则使此后从所述执行等待队列中取出的组的分配优先,所述执行等待队列将包含一个以上的所述调度对象的执行单位的组内、处于执行等待以及正在执行状态的组,按照对每个所述组设定的优先级顺序,并且在同一优先级内按到达顺序存储。
根据该方式,在由于处理器的总数的制约而不能将属于组的所有执行单位同时分配给处理器的情况下,通过对优先顺序更低的组转让分配权,从而能够提高多处理器系统的处理器的利用效率。
在属于从所述执行等待队列的前端依次取出的组的各执行单位已经被分配给其中一个处理器并且正在执行的情况下,也可以确保该正在执行的执行单位对该处理器的分配,以使该正在执行的执行单位的分配目的地不会被变更而再配置为其它处理器。由此,对于属于已经被分配给处理器并且正在执行的组的各执行单位,能够维持对已经分配的处理器的分配,并且能够削减分配处理所消耗的成本。
本发明的其它方式是调度装置。该装置在多处理器系统中,对将并行处理的调度对象的执行单位分配给多个处理器的顺序进行调度,其中包含存储器控制部分,将一个以上的所述调度对象的执行单位进行分组,将所述资源映射到各执行单位所参照的地址空间中来进行管理,以使能够互相参照属于同一组的所述执行单位的每一个所占有的处理器内的所述资源;执行等待队列,存储处于执行等待以及正在执行的状态的组;以及分配部分,从所述执行等待队列的前端起依次取出组,仅在能够将属于取出的组的所有执行单位同时分配给其中一个处理器的情况下,将属于该组的所有执行单位分配给多个处理器。
本发明的其它方式也是调度装置。该装置在多处理器系统中,对将并行处理的调度对象的执行单位分配给多个处理器的顺序进行调度,其中包含执行等待队列,将包含一个以上的所述调度对象的执行单位的组内、处于执行等待以及正在执行状态的组,按照对每个所述组设定的优先级顺序,并且在同一优先级内按到达顺序存储;分配列表生成部分,从所述执行等待队列的前端依次取出组,仅在能够将属于取出的组的所有执行单位同时分配给其中一个处理器的情况下,将该组追加到分配列表中;以及分配部分,将属于存储在由所述分配列表生成部分生成的所述分配列表中的组的所有执行单位,分配给多个处理器。
本发明的其它方式是多处理器系统。该系统将并行处理的调度对象的执行单位分配给多个处理器来并行执行,其中,一个处理器包含将所述调度对象的执行单位分配给其它多个处理器的调度器,所述调度器包含存储器控制部分,将一个以上的所述调度对象的执行单位进行分组,将所述资源映射到各执行单位所参照的地址空间中来进行管理,以使能够互相参照属于同一组的所述执行单位的每一个所占有的处理器内的资源;执行等待队列,存储处于执行等待以及正在执行的状态的组;以及分配部分,从所述执行等待队列的前端起依次取出组,仅在能够将属于取出的组的所有执行单位同时分配给其中一个处理器的情况下,将属于该组的所有执行单位分配给多个处理器。
本发明的其它方式也是多处理器系统。该系统将并行处理的调度对象的执行单位分配给多个处理器来并行执行,其中,一个处理器包含将所述调度对象的执行单位分配给其它多个处理器的调度器,所述调度器包含执行等待队列,将包含一个以上的所述调度对象的执行单位的组内、处于执行等待以及正在执行状态的组,按照对每个所述组设定的优先级顺序,并且在同一优先级内按到达顺序存储;分配列表生成部分,从所述执行等待队列的前端依次取出组,仅在能够将属于取出的组的所有执行单位同时分配给其中一个处理器的情况下,将该组追加到分配列表中;以及分配部分,将属于存储在由所述分配列表生成部分生成的所述分配列表中的组的所有执行单位,分配给多个处理器。
本发明的其它方式也是调度方法。该方法在多处理器系统中,对将并行处理的调度对象的执行单位分配给多个处理器的顺序进行调度,其中,将多个处理器内至少一个处理器从并行处理的调度对象的执行单位的分配对象中除外,将资源映射到各执行单位所参照的地址空间内,并且控制对处理器分配所述执行单位的分配对象,以便能够从所述调度对象的执行单位参照由不是在非分配对象的处理器上动作的调度对象的执行单位所单独占有的该处理器内的资源。
本发明的其它方式也是调度装置。该装置在多处理器系统中,对将并行处理的调度对象的执行单位分配给多个处理器的顺序进行调度,其中,包含存储器控制部分,将多个处理器内至少一个处理器从并行处理的调度对象的执行单位的分配对象中除外,将资源映射到各调度对象的执行单位所参照的地址空间内进行管理,以便能够从所述调度对象的执行单位参照由在非分配对象的处理器上动作的不是调度对象的执行单位所独占地占有的该处理器内的所述资源;执行等待队列,存储了处于执行等待以及正在执行的状态的所述调度对象的执行单位;以及分配部分,从所述执行等待队列的前端起依次取出所述调度对象的执行单位,并分配给其中一个处理器。
另外,以上的构成要素的任意组合、将本发明的表现在方法、装置、系统、计算机程序、数据结构等之间变换的产物,作为本发明的方式也有效。
根据本发明,能够有效利用多处理器系统的资源并且实现并行处理的高速化。


图1是实施方式1的多处理器系统的结构图。
图2是说明从分配给图1的处理器的线程方向来看的地址空间的图。
图3是说明在图1的处理器中动作的线程和线程所属的线程组的图。
图4是说明线程以图3所示的线程组为单位被分配给处理器的情况的图。
图5是说明线程的状态转移的图。
图6是实施方式1的调度装置的结构图。
图7是说明图6的线程状态表的图。
图8是说明图6的执行等待队列的图。
图9是说明图6的调度排列的图。
图10是说明实施方式1的调度装置的调度步骤的流程图。
图11是说明某一时刻的线程的分配的步骤的图。
图12是说明另一时刻的线程的分配的步骤的图。
图13是表示图11以及图12的线程调度引起的线程分配状态的时间变化的图。
图14是说明图6的线程状态表的其它例子的图。
图15是说明某一时刻的线程的分配的步骤的图。
图16是表示图15的线程调度引起的线程分配状态的时间变化的图。
图17是说明图6的线程状态表的其它例子的图。
图18是说明某一时刻的线程的分配的步骤的图。
图19是说明另一时刻的线程的分配的步骤的图。
图20是说明另一时刻的线程的分配的步骤的图。
图21是说明另一时刻的线程的分配的步骤的图。
图22是表示图18~图21的线程调度引起的线程分配状态的时间变化的图。
图23是说明从分配给实施方式2的多处理器系统的处理器的线程方向来看的地址空间的图。
图24是说明从分配给实施方式3的多处理器系统的处理器的线程方向来看的地址空间的图。
图25是表示实施方式3的多处理器系统中的线程调度引起的线程分配状态的时间变化的图。
标号说明10调度器,12分配列表生成部分,14线程分配部分,16分配线程数计数器,18线程分配列表,20调度排列,30执行等待队列,32线程状态管理部分,34线程状态表,100处理部件(processing element),110总线,120总存储器,130处理器,140局部存储器,150存储器控制部分,200调度装置。
具体实施例方式
实施方式1图1是实施方式1的多处理器系统的结构图。多处理器系统具有多个处理部件(PE)100和主存储器120,它们被连接到总线110上。各处理部件100包含处理器130、局部存储器140以及存储器控制部分150。处理器130能够对局部存储器140写入数据。存储器控制部分150提供从其它的处理部件100的处理器130参照局部存储器140的数据时的接口,同时提供存储器的同步/排他控制的功能。
处理部件100的其中之一是并行处理的执行单位,具有对成为调度对象的执行实体(以下称作线程)进行调度的功能。该调度功能按特权等级来动作。在特权等级中,具有对多处理器系统的所有资源进行访问的权限。另一方面,在不具有调度功能的其它处理部件100上动作的程序按照用户等级进行动作。用户等级中,与特权等级相比,能访问的资源受限制。
通过线程调度,在某一时刻对各处理器130分配一个线程,在多处理器系统整体中并行执行多个线程。对各处理器130分配的线程能够占有处理部件100内的局部存储器140或存储器控制部分150内部的寄存器等所有资源来使用。
在线程未被分配给任何的处理器130的情况下,线程的环境(context)被转存到主存储器120中。线程的环境是该线程在分配目的地的处理部件100(以下称作分配目的地PE)内占有的所有资源的状态,是线程在处理器130中动作时各种寄存器内保持的值的集合、局部存储器140中保持的数据、存储器控制部分150的各种寄存器的内部状态等。线程未在处理器130上动作时,将该线程的环境复制到主存储器120中,在再次分配给处理器130时,能够读入该环境来继续进行处理。
在本实施方式中,定义包含一个以上的线程作为要素的线程组,以线程组为单位进行调度,属于线程组的所有线程同时被分配给其中一个处理器130。不成为线程组内的一部分线程被分配给处理器130,剩余的线程残留在主存储器120中的状态。从而,同一线程组内的所有线程共有执行等待、正在执行等转移状态。属于同一线程组的线程能够不使用核心(kernel)的系统调用而直接参照互相的地址空间。
图2是说明从对处理器130分配的线程方向来看的地址空间170的图。在地址空间170中含有映射包含共有数据的的主存储器的主存储器区域172,以及映射同一组内的各线程的占有资源的线程映射区域174等。
在线程映射区域174中与同一组内的各线程对应地配置了线程映射#1~#n。如果将处理器数设为n,则在同一组内能够设置最大n个线程,因此对于线程映射也确保n个的区域。各线程映射#1~#n将对应的各线程在分配目的地PE内占有的资源的一部分进行了存储器映射,如标号175所示,虽然包含局部存储器和用于从外部控制存储器控制部分150的寄存器组,但用于从外部控制存储器控制部分150的寄存器组不是全部能够访问,而是仅后述的通信用寄存器能够访问,不能访问斜线所示的其它寄存器。通过不仅包含可访问的寄存器而且包含不可访问的寄存器,将寄存器组整体预先映射,从而与可访问的寄存器的种类无关,能够使线程映射的大小一定,对于线程映射的前端地址的偏移值为固定值,通过对于程序员来说管理变得容易。
通过各线程在分配目的地PE内占有的资源的一部分被映射在地址空间内,同一组内的各线程可以不经由系统调用而互相对其它线程所占有的资源的一部分进行访问从而进行操作。对于用于从外部控制存储器控制部分150的寄存器,通过仅许可操作的寄存器映射在地址空间中,从而可以对来自外部的操作设置一定限制。
对第一线程映射#1以线程基地址(base address)作为前端地址来分配线程映射大小的区域。第二线程映射#2的前端地址是在线程基地址中加入与线程映射的大小对应的偏移值后的地址。
在构筑同一组的线程时,通过指定线程映射的号#1~#n,从而决定该线程使用哪个线程映射。后述的调度装置200将同一组内的各线程使用哪个线程映射作为线程映射的设定信息保持在存储器中,在线程分配时在线程的分配目的地PE的存储器控制部分150中设定线程映射的设定信息。各处理部件100的存储器控制部分150在线程被调度时,能够通过线程映射的设定信息来掌握同一组内的各线程的资源被存储器映射到哪个线程映射,并且能够根据地址空间170的线程映射来通过DMA处理对于其它线程的资源的访问请求。
另外,更详细地说,后述的调度装置200的线程状态管理部分32管理线程组的线程映射的设定信息,将线程映射的设定信息作为一例存储在线程状态表34中来保持。此外,调度装置200的线程分配部分14进行对处理器分配线程的处理,并且进行将线程组的线程映射的设定信息设定在存储器控制部分150中的处理。对处理器分配的线程在线程组的线程映射的设定信息被设定在存储器控制部分150中之后开始。
例如,两个线程A1、A2属于同一组A。通过组A的初始设定,第一线程A1的资源被存储器映射到组A的地址空间的第一区域EA1,第二线程A2的资源被存储器映射到地址空间的第二区域EA2。组A的各线程A1、A2被调度,假设对第一处理器分配线程A1,对第二处理器分配线程A2。
此时,如果在第一处理器上动作的第一线程A1访问作为第二线程A2的线程映射的第二区域EA2,则第二处理器的资源作为第二线程A2的资源被参照。对第一线程A1、第二线程A2的处理器的分配和执行在资源被准备后进行,因此保证从第一线程A1对作为第二线程A2的线程映射的第二区域EA2的访问与第二线程A2被分配给哪个处理器无关,一定是对第二线程A2的资源的访问。第二线程A2访问作为第一线程A1的线程映射的第一区域EA1的情况也同样。
这样,通过对其中一个处理器130分配的线程访问在地址空间170内设定的线程映射的地址,能够通过DMA直接访问同一组内的其它线程所占有的资源。
同一组内的其它线程被分配给其中一个处理器130,但在调度时分配给哪个处理器130是不同的。但是,线程映射与线程被分配给哪个处理器无关,被设定在地址空间170内的相同地址中。从而,保证同一组内的各线程与线程对处理器的分配状态无关,通过访问地址空间170内的线程映射,从而能够一贯地访问其它线程的资源。
在各处理部件100的存储器控制部分150内部设有能够用于线程之间的同步通信的通信用寄存器。该通信用寄存器的值可以通过特殊的命令从该处理部件100的处理器130读取,在值尚未写入通信用寄存器时,该处理器130等待直到在通信用寄存器中写入值。
此外,该通信用寄存器可以从本身以外的处理部件100的存储器控制部分150写入。存储器控制部分150内部的通信用寄存器作为线程的占有资源,作为线程映射而被存储器映射在地址空间170内。从而,某一线程能够参照本身的地址空间170内的线程映射来访问其它的处理部件100的存储器控制部分150的通信用寄存器,并且能够写入值。
如果利用在地址空间170中存储器映射的通信用寄存器,存储器控制部分150到其它线程在本线程的通信用寄存器中写入值为止,能够以硬件方式实现处理器进行安装的机构,并且在线程之间能够进行同步通信。
此外,也可以使用存储器控制部分150具有的地址空间的参照功能,通过存储器中的轮询(polling)进行排他处理或同步处理。通过使用存储器控制部分150具有的存储器同步化命令来进行经由存储器控制部分150对主存储器的数据读写,从而能够进行存储器的同步/排他控制。
这样,由于属于同一线程组的所有线程同时被分配给其中一个处理器130来执行,因此能够灵活运用处理部件100的存储器控制部分150对地址空间的参照功能、同步/排他控制机构,进行高效率的数据传送、同步通信、存储器的排他处理/同步处理等,处理效率提高。
图3(a)~(d)是说明线程组的图。图3(a)表示包含三个线程th1a、th1b、th1c的第一线程组。图3(b)表示包含一个线程th2a的第二线程组。在这样的线程仅有1个的情况下也作为线程组来处理。同样,图3(c)表示包含两个线程th3a、th3b的第三线程组。图3(d)表示包含一个线程th4a的第四线程组。
属于线程组的线程内的一个线程被指定给主线程(primary thread),代表该线程组。在以线程组为单位进行线程调度时,通过操作主线程从而能够集中操作属于该线程组的所有线程。
图4是说明以线程组为单位对处理器130分配线程的情况的图。该图表示在处理器总数4的多处理器系统中,属于图3所示的四个线程组的线程对处理器130的分配状态。在某一时刻,属于第一线程组的三个线程th1a、th1b、th1c分别被分配给第一处理器、第二处理器、第三处理器,属于第二线程组的一个线程th2a被分配给第四处理器。属于除此以外的第三线程组的两个线程th3a、th3b以及属于第四线程组的一个线程th4a被转存到主存储器120中。
线程调度以将属于同一线程组的所有线程同时分配给其中一个处理器130作为条件来进行。在第一线程组被分配给处理器130时,仅限于属于第一线程组的三个线程th1a、th1b、th1c能够同时被分配其中一个处理器130的情况。不产生三个线程th1a、th1b、th1c的一个或两个被分配给处理器130,剩余的转存到主存储器120中的状态。
图5是说明线程的状态转移的图。线程通过生成(create)命令生成,成为未构筑(not configured)状态42。如果对处于未构筑状态42的线程执行构筑命令时,转移到构筑(configured)状态44。通过对构筑命令的自变量指定主线程,从而能够使该线程属于与主线程相同的线程组。如果对处于构筑状态44的线程执行删除(delete)命令,则该线程被删除,该线程所使用的存储器区域被解放。
将未构筑状态42和构筑状态44一并称作休止(dormant)状态40。如果对处于构筑状态44的主线程执行开始命令,则包含该主线程,属于该线程组的所有线程转移到执行等待(ready)状态52。此后,属于线程组的所有线程在动作(operational)状态50内一同进行状态转移。此后,在说明动作状态50内的状态转移时,为了简单而称作线程,但这表示属于同一线程组的所有线程。另外,通过对主线程执行对于线程组的命令,从而作用于属于该线程组的所有线程。
处于执行等待状态52的线程通过等待命令而转移到同步等待(waiting)状态56,处于同步等待状态56的线程接受信号而返回执行等待状态52。
处于执行等待状态52的线程通过调度(dispatch)命令而转移到正在执行(running)状态54,处于正在执行状态54的线程通过退让(yield)命令而返回执行等待状态52,并通过等待命令而转移到同步等待状态56,通过挂起(suspend)命令而转移到中断状态60。
处于同步等待状态56的线程通过挂起命令而转移到同步等待中断(waiting and suspended)状态58,处于同步等待中断状态58的线程通过恢复(resume)命令而恢复到同步等待状态56。处于同步等待中断状态58的线程接受信号而转移到中断(suspended)状态60。
处于中断状态60的线程通过恢复命令而转移到执行等待状态52,处于执行等待状态52的线程通过挂起命令而转移到中断状态60。
处于正在执行状态54的线程在发生例外处理时转移到中止(stopped)状态62,处于中止状态62的线程通过重开始命令而转移到正在执行状态54或执行等待状态52。
处于执行等待状态52、正在执行状态54、中止状态62以及中断状态60的线程分别结束(terminate)时,线程从动作状态50转移到休止状态40,并转移到构筑状态44。
处于上述动作状态50的线程内的处于正在执行状态54的线程被分配给处理器130,处于除此以外的状态的线程被转存到主存储器120中。
图6是实施方式1的调度装置200的结构图。该图绘制了着眼于功能的方框图,这些功能块可以仅通过硬件实现,仅通过软件实现,或者通过它们的组合,以各种形式实现。调度装置200被设置在图1的处理部件100的其中一个中,使用处理器130、局部存储器140以及存储器控制部分150实现。也可以还使用主存储器120实现。以下,在说明图6的结构时,适当参照图7~图9。
线程状态管理部分32通过线程状态表34管理线程的生成和删除、线程组的设定、线程组的优先级以及线程组单位的状态转移。
图7是说明线程状态表34的图。线程状态表34将线程组ID70、属于线程组的线程数72、线程组的转移状态74、属于线程组的线程76以及线程组的优先级78对应存储。如果有线程的生成和删除、线程组的设定和状态变化、优先级的设定等,则线程状态管理部分32更新线程状态表34。
在该图的例子中,组ID1的第一线程组的线程数为3,包含三个线程th1a、th1b、th1c,优先级被设定为1,当前的转移状态为正在执行。组ID2的第二线程组的线程数为1,包含一个线程th2a,优先级被设定为2,当前的转移状态为正在执行。组ID3的第三线程组的线程数为2,包含两个线程th3a、th3b,优先级被设定为2,当前的转移状态为执行等待。组ID4的第四线程组的线程数为1,包含一个线程th4a,优先级被设定为4,当前的转移状态为执行等待。优先级的值越小则优先级越高,这里优先级设为16级,但有设为256级等设计的自由度。
线程状态管理部分32将由线程状态表34管理的线程组内处于执行等待状态或正在执行状态的线程组在执行等待队列30中排队。执行等待队列30是如下的等待行列,将处于执行等待状态或正在执行状态的线程组,按照对每个线程组设定的优先级顺序,并且在同一优先级内按照先进入的被先取出的FIFO(First In First Out)顺序决定优先顺序来进行排队。
图8是说明执行等待队列30的图。在优先级1~16的列表的各条目中,具有该优先级的线程组的主线程以FIFO顺序排队。
在该图的例子中,在优先级1的条目中,第一线程组的主线程pth1被排队,在优先级2的条目中,第二线程组的主线程pth2和第三线程组的主线程pth3按照该顺序被排队,在优先级4的条目中,第四线程组的主线程pth4被排队。由于第二线程组比第三线程组先进入队列,因此第二线程组的主线程pth2比第三线程组的主线程pth3先排队。
从位于执行等待队列30的前端位置的优先级1的主线程pth1对在优先级2的条目的前端排队的主线程pth2添加链接。进而,从优先级2的条目的最初的主线程pth2对在同一优先级内接着排队的主线程pth3添加链接,进而从该主线程pth3对优先级4的主线程pth4添加链接。由此,生成能够按照主线程pth1、pth2、pth3、pth4的顺序取出这样决定了优先顺序的执行等待队列30。
线程状态管理部分32在线程组的状态不是执行等待或正在执行的任何一个状态的情况下,从执行等待队列30中删除该线程组的主线程。而且,新生成的通过开始命令而成为执行等待状态的线程组的主线程或从同步等待状态等恢复而成为执行等待状态的线程组的主线程,以FIFO顺序插入相应的优先级的条目,并更新执行等待队列30。
调度器10进行从前端起取出在执行等待队列30中排队的线程组并分配给处理器的控制,包含分配列表生成部分12和线程分配部分14。线程状态管理部分32通过线程组的状态转移到同步等待、中断等状态,或线程结束,在需要再调度的情况下,通知分配列表生成部分12。
分配列表生成部分12从线程状态管理部分32接受再调度的指示,进行后面叙述的“标记(marking)处理”或“分配列表生成处理”。
分配列表生成部分12利用分配线程数计数器16、线程分配列表18以及调度排列20,进行线程调度。
分配线程数计数器16对分配给处理器130的线程数进行计数,以下简称作“计数器”。线程分配列表18用于存储对处理器130分配的线程组的主线程,以下简称作“分配列表”。调度排列20是保持对线程的处理器130的分配状况的调度表,是将确定各个处理器130的处理器号和对该处理器130分配的线程对应的排列。
图9是说明调度排列20的图。调度排列20将处理器号80和对该处理器分配的线程82以及标记84对应存储。处理器号80是与处理器唯一对应的识别号。标记84在分配列表生成部分12的标记处理中,用作用于确保线程对处理器的分配的标志(flag)。在该图的例子中,处理器总数为4,以1至4的号识别第一~第四处理器。对处理器号1~3分别分配第一线程组的三个线程th1a、th1b、th1c,对处理器号4分配第二线程组的线程th2a。
分配列表生成部分12在开始线程调度时,将计数器16初始化为0,将分配列表18清空。
分配列表生成部分12从执行等待队列30的前端起依次取出主线程。以下,将取出的主线程所属的线程组称作“分配候选线程组”。分配列表生成部分12将属于分配候选线程组的线程的个数加到计数器16中。在计数器16的值超过多处理器系统的处理器总数的情况下,分配列表生成部分12将该分配候选线程组从分配候选中除外,将计数器16的值返回到加法前的值。
分配列表生成部分12通过参照调度排列20,调查从执行等待队列30依次取出的分配候选线程组是否已经处于正在执行的状态。属于分配候选线程组的各线程如果在调度排列20中,则属于该分配候选线程组的各线程正在执行。在该情况下,在调度排列20中,对被分配了正在执行的线程的处理器号添加标记。将其称作“标记处理”。通过标记处理,确保了对该处理器的分配,以便使对添加了标记的处理器号已经分配的线程的分配目的地不会被变更而再分配为其它处理器。
在属于分配候选线程组的各线程不在调度排列20中的情况下,即该分配候选线程组不是正在执行状态的情况下,分配列表生成部分12将该分配候选线程组的主线程追加到分配列表18中。将其称作“分配列表生成处理”。通过分配列表生成处理,在分配列表18中,通过本次的调度而新分配给处理器130的线程组被列出。
直到计数器16的值达到处理器总数或者从执行等待队列30的末尾取出主线程为止,分配列表生成部分12反复进行标记处理、分配列表生成处理的其中一个。
分配列表生成部分12的处理结束后,线程分配部分14从分配列表18中取出主线程,将属于该线程组的所有线程分配给调度排列20的未被标记的处理器号。此时,被分配给未被标记的处理器号而处于正在执行状态的线程被抢占(preempt),转移到执行等待状态。线程分配部分14对线程状态管理部分32通知被抢占的线程,线程状态管理部分32更新线程状态表34,对该线程的状态变化进行管理。
按照保持线程的分配状况的调度排列20,线程实际被分配给处理器130,并被转移到执行。由此,已经处于正在执行状态的线程继续在相同的处理器130上被执行,处于执行等待状态的线程被新分配给处理器130,变化为正在执行状态。线程状态管理部分32将线程状态表34更新来对各线程的状态变化进行管理。
图10是说明以上结构的调度装置200的线程调度步骤的流程图。
在线程的转移状态从正在执行状态变化到同步等待状态或中断状态,或者线程结束的情况下,线程状态管理部分32对分配列表生成部分12指示线程的调度。分配列表生成部分12将计数器16和分配列表18进行初始化(S10)。
分配列表生成部分12从执行等待队列30的前端取出分配候选线程组(S12)。分配列表生成部分12将属于分配候选线程组的线程的个数加入计数器16中,从而对分配线程数进行计数(S14)。
分配列表生成部分12判定计数器16的值是否为处理器总数以下(S16)。在计数器16的值超过处理器总数的情况下,由于不能将属于该分配候选线程组的所有线程同时分配给其中一个处理器,因此从计数器16减去该分配候选线程组的线程数后将计数值复原(S18),并进至步骤S26的处理。
在计数器16的值为处理器总数以下的情况下(S16“是”),分配列表生成部分12调查属于分配候选线程组的各线程是否被存储在调度排列20中(S20)。在调度排列20中,如果属于分配候选线程组的线程被分配给其中一个处理器号,则该线程在前一次的调度中被分配给该处理器并执行。
在属于分配候选线程组的各线程存在于调度排列20中的情况下(S20“是”),分配列表生成部分12在调度排列20的排列中对该线程被分配的处理器号添加标记(S22)。确保了对该处理器的分配,以便使对被标记了的处理器号分配的线程的分配目的地不会被变更而再分配为其它处理器。
在属于分配候选线程组的各线程不存在于调度排列20的情况下(S20“否”),分配列表生成部分12将该分配候选线程组追加到分配列表18中(S23)。
在计数器16的值等于处理器总数的情况下(S24“是”),分配列表生成部分12由于不能进行更多的线程分配,因此结束生成分配列表18,并进至步骤S30。此外,在分配候选线程组是从执行等待队列30的末尾取出的情况下(S26“是”),由于接着要分配的线程就要没有了,因此在该情况下,分配列表生成部分12也结束生成分配列表18,并进至步骤S30。
在计数器16的值未达到处理器数(S24“否”)并且分配候选线程组不是从执行等待队列30的末尾取出的情况下(S26“否”),分配列表生成部分12取出执行等待队列30的下一个线程组(S28),反复进行步骤S14以后的处理。
在步骤S30中,线程分配部分14将属于分配列表18中存储的线程组的各线程分配给在调度排列20中未被标记的处理器号。此时,已经被分配给未被标记的处理器号的线程被夺取对该处理器的分配。对于在分配列表18中存储的所有线程组,在对处理器号的分配处理完成的时刻,一系列的线程调度处理结束。
以下,使用几个例子说明上述线程调度步骤。图11~图13是说明图7的线程状态表34中所示的条件下的线程调度步骤的图。
假设多处理器系统的处理器总数为4。假设4个线程组都处于执行等待的状态,任何的线程都处于还未被分配给处理器的初始状态。此时的时刻设为t0。
图11(a)是执行等待队列30的初始状态,第一线程组的主线程pth1(以下称作第一主线程)在优先级1的条目中排队,第二线程组的主线程pth2(以下称作第二主线程)和第三线程组的主线程pth3(以下称作第三主线程)在优先级2的条目中排队,第四线程组的主线程pth4(以下称作第四主线程)在优先级4的条目中排队。
这里,第二主线程pth2比第三主线程pth3先排队。从而,执行等待队列30成为按照第一主线程pth1、第二主线程pth2、第三主线程pth3、第四主线程pth4的顺序决定优先顺序的等待行列。
图11(b)是说明分配列表生成部分12的标记处理和分配列表生成处理的过程的图。示出处理过程表15对分配列表生成部分12从执行等待队列30的前端依次取出的主线程进行标记处理或分配列表生成处理的其中哪一个,而且示出此时的计数器16的值。
分配列表生成部分12从图11(a)的执行等待队列30的前端取出第一主线程pth1,将第一线程组的线程数3加入计数器16中。调度排列20为空的状态,由于不会任何的线程都成为标记处理的对象,因此第一主线程pth1原样被存储在分配列表18中。
接着,分配列表生成部分12取出图11(a)的执行等待队列30的下一个条目——第二主线程pth2,并将第二线程组的线程数1加入计数器16中。第二主线程pth2同样不会成为标记处理的对象,被追加到分配列表18中。此时,计数器值成为4,由于达到了处理器总数,因此分配列表生成部分12结束生成分配列表18。
线程分配部分14将属于在图11(b)的分配列表18中列出的第一、第二线程组的所有线程分配给调度排列20的未被标记的处理器号。
图11(c)表示线程按照分配列表18被分配的调度排列20。任何的处理器号均未被标记,第一~第三处理器被分配第一线程组的三个线程th1a、th1b、th1c,第四处理器被分配第二线程组的一个线程th2a。由此,当前时刻t0的线程调度完成。
然后,在时刻t1,第一线程组的各线程成为同步等待,或中断,或结束等,成为既不是正在执行状态也不是执行等待状态的状态。图12(a)是表示时刻t1的实行等待队列30的图。由于第一主线程pth1既不是执行等待也不是正在执行,因此线程状态管理部分32将第一主线程pth1从执行等待队列30中除去。其结果,在时刻t1,执行等待队列30的前端为第二主线程pth2。
分配列表生成部分12接受线程状态管理部分32的通知,将计数器16和分配列表18初始化,从而开始调度。图12(b)表示时刻t1的分配列表生成部分12的标记处理和分配列表生成处理的过程。
分配列表生成部分12从执行等待队列30的前端取出第二主线程pth2,在计数器16中加入第二线程组的线程数1,将计数器值设为1。
分配列表生成部分12调查第二线程组的线程th2a是否在调度排列20中。在该时刻,调度排列20处于前一个时刻t0的图11(c)的状态,第二线程组的线程th2a被分配给处理器号4,因此如图12(c)所示,分配列表生成部分12对调度排列20的处理器号4添加标记。
接着,分配列表生成部分12取出执行等待队列30的下一个条目——第三主线程pth3,在计数器16中加入第三线程组的线程数2,将计数器值设为3。
分配列表生成部分12调查第三线程组的线程th3a、th3b是否在调度排列20中。由于第三线程组的线程th3a、th3b不在图11(c)所示的时刻t0的调度排列20中,因此分配列表生成部分12将第三主线程pth3追加到分配列表18中。
分配列表生成部分12取出执行等待队列30的再下一个条目——第四主线程pth4,在计数器16中加入第四线程组的线程数1,将计数器值设为4。
由于第四线程组的线程th4a不在调度排列20中,因此分配列表生成部分12同样在分配列表18中追加第四主线程pth4。由于计数器16的值达到了处理器总数4,因此分配列表生成部分12结束生成分配列表18。
线程分配部分14将属于在图12(b)的分配列表18中列出的第三、第四线程组的所有线程分配给调度排列20的未被标记的处理器号。
图12(c)是表示线程按照分配列表18被分配的调度排列20的图。由于处理器号4被标记,因此分配给该处理器号的第二线程组的线程th2a原样被维持分配。未被标记的处理器号1~3分别被分配第三线程组的两个线程th3a、th3b、第四线程组的一个线程th4a。由此,当前时刻t1的线程调度完成。
图13是表示图11以及图12中说明的线程调度引起的线程的分配状态的时间变化的图。在时刻t0,对第一~第三处理器(PE1~PE3)分别分配第一线程组的三个线程th1a~th1c,对第四处理器(PE4)分配第二线程组的线程th2a来执行。
在时刻t1,由于第一线程组的三个线程th1a~th1c通过成为同步等待等而从执行等待队列30中被除去,因此虽然进行再调度,但在该时刻,优先顺序最高的第二线程组的线程th2a以被分配给第四处理器的状态被继续执行,空闲的第一~第三处理器分别被分配第三线程组的两个线程th3a、th3b、第四线程组的一个线程th4a并执行。
图14~图16是说明其它线程调度例子的图。在本例中,说明产生“优先顺序的反转”的情况。
图14表示本例中的线程状态表34。仅在第三线程组的线程数为4这方面与图7的例子不同,除此以外的条件与图7的例子相同。从而,最初的时刻t0的调度结果与图11相同,因此省略说明。说明通过第一线程组的各线程成为同步等待等而从执行等待队列30中除去的时刻t1的调度步骤。
图15(a)是表示时刻t1的执行等待队列30的状态的图。与图12(a)同样,第一主线程pth1从执行等待队列30中被除去的结果,执行等待队列30的前端成为第二主线程pth2。
图15(b)是说明时刻t1的分配生成部分12的标记处理和分配列表生成处理的过程的图。
分配列表生成部分12从执行等待队列30的前端取出第二主线程pth2,在计数器16中加入第二线程组的线程数1,将计数器值设为1。
由于第二线程组的线程th2a在调度排列20中,因此如图15(c)这样,分配列表生成部分12在调度排列20中对被分配了线程th2a的处理器号4添加标记。
接着,分配列表生成部分12取出执行等待队列30的下一个条目——第三主线程pth3。分配列表生成部分12在计数器16中加入第三线程组的线程数4后,计数器值成为5,因此判定为不能进行第三线程组的分配,对于第三线程组从分配候选中除去,不进行标记处理和分配列表生成处理。
分配列表生成部分12取出执行等待队列30再下一个条目——第四主线程pth4。在计数器16中加入第四线程组的线程数1,将计数器值设为2。由于第四线程组的线程th4a不在调度排列20中,因此分配列表生成部分12在分配列表18中追加第四主线程pth4。第四线程组的线程th4a为执行等待队列30的最后的条目,因此分配列表生成部分12结束生成分配列表18。
线程分配部分14将属于在图15(b)的分配列表18中列出的第四线程组的所有线程分配给调度排列20的未被标记的处理器号。
图15(c)表示线程按照分配列表18被分配的调度排列20。被分配给被标记了的处理器号4的第二线程组的线程th2a原样被维持分配,未被标记的处理器号1被分配第四线程组的一个线程th4a。由此,当前时刻t1的线程的调度完成。
图16是表示本例的线程的分配状态的时间变化的图。时刻t0的线程的分配与图13相同。在时刻t1,应最被优先的第二线程组的线程th2a在正在执行被维持状态,这与图13相同,但由于接着应被优先的第三线程组的线程数为4,因此不能分配给空闲处理器,优先顺序低于第三线程组的第四线程组的线程th4a被分配给第一处理器并执行。
这样,由于存在将属于同一线程组的所有线程数同时分配给其中一个处理器的制约,因此即使以能够最大限度保持优先顺序的调度原则进行调度,为了提高处理器资源的利用效率有时也将优先顺序反转。
如上述例子这样,如果将线程调度中引起优先顺序的反转的条件进行一定格式化则如下。如果将H、M、L作为线程组,将P(X)设为线程组X的优先级,将N(X)设为属于线程组X的线程的个数,将n设为处理器总数,则关于优先级P(H)≥P(M)>P(L)成立的情况下,关于线程数,以下的关系成立时,引起优先顺序的反转。
N(H)+N(M)>nN(H)+N(L)≤n在上述关系式成立的情况下,不能将属于线程组M的所有线程分配给处理器,但是能够将属于优先级比它低的线程组N的所有线程能够分配给处理器,因此在本实施方式的线程调度方式中,为了提高处理器的使用效率,将优先顺序反转,分配优先顺序较低的线程组N。
图17~图22是说明其它的线程调度例子的图。在本例中,说明已经分配的线程被其它的优先顺序高的线程夺取对处理器的分配的状况。
图17是说明线程状态表34的图。有从第一线程组到第五线程组的线程组,线程数分别为2、3、1、1、3,优先级分别为1、2、3、4、5。
图18(a)~(c)是说明最初的时刻t0的调度的图。如图18(a)这样,执行等待队列30中,第一~第五主线程pth1~pth5以该顺序进入队列。
图18(b)表示分配列表生成部分12的标记处理和分配列表生成处理的过程。分配列表生成部分12从执行等待队列30的前端取出第一主线程pth1,在计数器16中加入线程数2,将计数器值设为2,同时将第一主线程pth1追加在分配列表18中。
分配列表生成部分12取出执行等待队列30的下一个条目——第二主线程pth2,但第二线程组的线程数为3,如果加入计数器16中则超过处理器总数4,因此第二线程组不能分配。
因此,分配列表生成部分12取出执行等待队列30的再下一个条目——第三主线程pth3,将第三线程组的线程数1加入计数器16中,将计数器值设为3,将第三主线程pth3追加到分配列表18中。由此,引起优先顺序比第二线程组低的第三线程组优先地被分配给处理器的优先顺序的反转。
而且,分配列表生成部分12取出执行等待队列30的下一个条目——第四主线程pth4,将第四线程组的线程数1加入计数器16中,将计数器值设为4,将第四主线程pth4追加到分配列表18中。由于计数器16的值达到处理器总数4,因此分配列表生成部分12结束生成分配列表18。
线程分配部分14将属于图18(b)的分配列表18中列出的第一、第三以及第四线程组的各线程分配给调度排列20。如图18(c)这样,对处理器号1、2分别分配第一线程组的两个线程1a、线程1b,对处理器号3分配第三线程组的线程3a,对处理器号分配第四线程组的线程th4a。
然后,在时刻t1假设第一线程组的各线程成为同步等待。其结果,如图19(a)这样,执行等待队列30的前端成为第二主线程pth2。
如图19(b)这样,分配列表生成部分12从执行等待队列30的前端取出第二主线程pth2,将第二线程组的线程数3加入计数器16中,将计数器值设为3。由于第二线程组的线程不在前一个时刻t0的调度排列20中,因此分配列表生成部分12将第二主线程pth2追加到分配列表18中。
接着,分配列表生成部分12取出执行等待队列30的下一个条目——第三主线程pth3,将第三线程组的线程数1加入计数器16中,将计数器值设为4。由于第三线程组的线程th3a在前一个时刻t0的调度排列20中,如图19(c)这样,分配列表生成部分12对在调度排列20中第三线程组的线程th3a被分配的处理器号3添加标记。
由于计数器16的值达到了处理器总数4,因此线程分配部分14如图19(c)这样,将属于分配列表18中列出的第二线程组的三个线程th2a、th2b、th2c分配给调度排列20的未被标记的处理器号1、2、4。此时,对处理器号4分配的第四线程组的线程th4a由第二线程组的线程th2c夺取对处理器的分配。
在时刻t2,假设第三线程组的线程th3a结束。由此,如图20(a)这样,第三主线程pth3从执行等待队列30中被除去。
如图20(b)这样,分配列表生成部分12从执行等待队列30的前端取出第二主线程pth2,将第二线程组的线程数3加入计数器16中,将计数器值设为3。由于第二线程组的各线程已经在调度排列20中,因此如图20(c)这样,分配列表生成部分12对被分配了第二线程组的线程th2a、th2b、th2c的处理器号1、2、4添加标记。
接着,分配列表生成部分12取出执行等待队列30的下一个条目——第四主线程pth4,将第四线程组的线程数1加入计数器16中,将计数器值设为4,由于第四线程组的线程不在调度排列20中,因此将第四主线程pth4追加到分配列表18中。
由于计数器16的值达到了处理器总数4,因此线程分配部分14如图20(c)这样,将属于分配列表18中列出的第四线程组的线程th4a分配给调度排列20的未被标记的处理器号3。
在时刻t3,假设第二线程组的线程th2a结束。由此,如图21(a)这样,从执行等待队列30除去第二主线程pth2。
如图21(b)所示,分配列表生成部分12从执行等待队列30的前端取出第四主线程pth4,将第四线程组的线程数1加入计数器16中,将计数器值设为1。由于第四线程组的各线程已经在调度排列20中,因此如图21(c)这样,分配列表生成部分12对被分配了第四线程组的线程th4a的处理器号3添加标记。
接着,分配列表生成部分12取出执行等待队列30的下一个条目——第五主线程pth5,将第五线程组的线程数3加入计数器16中,将计数器值设为4。由于第五线程组的线程不在调度排列20中,因此将第五主线程pth5追加到分配列表18中。
由于计数器16的值达到了处理器总数4,因此线程分配部分14如图21(c)这样,将属于分配列表18中列出的第五线程组的线程th5a、th5b、th5c分别分配给调度排列20的未被标记的处理器号1、2、4。
图22是表示本例中的线程的分配状态的时间变化的图。在时刻t0,对第一处理器、第二处理器分配第一线程组的两个线程th1a、th1b,对第三处理器分配第三线程组的线程th3a,对第四处理器分配第四线程组的线程th4a。
在时刻t1,第一线程组成为同步等待,引起再调度。此时,在该时刻由于优先顺序最高的第二线程组的三个线程th2a、th2b、th2c被分配,因此被分配给第四处理器的优先顺序低的第四线程组的线程th4a被抢占。但是,在时刻t2,第三线程组结束后,取而代之,第四线程组的线程th4a被分配给第三处理器。在时刻t3,第二线程组结束后,取而代之,第五线程组的线程th5a、th5b、th5c分别被分配给第一、第二、第四处理器。
如以上所述,根据本实施方式的调度装置200,通过将线程分组,属于同一线程组的多个线程同时被分配给其中一个处理器来执行,从而利用多处理器系统的同步/排他控制机构,能够在线程组内的线程之间高效率地参照互相的地址空间,或高效率地进行存储器的排他处理。此外,在线程间进行通信或共有存储器的情况下,由于线程组内的线程同时被分配给处理器,因此能够高效率地进行线程之间的通信或存储器的共有。
假设在属于同一线程组的多个线程中,存在被分配给处理器的线程和未被分配给处理器、线程的环境被转存到主存储器中的线程,则需要知道线程的实体现在在哪,查询核心并通过系统调用来进行数据的读出,用于此的处理机构复杂且成本高。但是,在本实施方式中,在某一线程在处理器上的情况下,保证同一线程组的其它的线程一定在其它的处理器上,因此能够提高处理效率。
在本实施方式的线程调度中,在将属于同一线程组的所有线程同时分配给处理器的条件下,能够将优先顺序高的线程尽可能设为最优先,并且将多处理器的资源利用率最大限度地提高。为了分配优先顺序高的线程组的线程,优先顺序比先分配的线程低的线程被抢占。通过该抢占而能够保持优先顺序。此外,由于处理器总数的制约,在不能进行某一线程组的分配的情况下,优先顺序更低的线程组被优先,有时也引起优先顺序的反转。通过该优先顺序的反转,能够提高处理器的利用效率。
本实施方式的执行等待队列30不仅对处于执行等待状态的线程组按照优先级顺序并且在同一优先级内按照FIFO顺序进行排队,而且对于处于正在执行状态的线程组也同样。由此,能够保持线程组的FIFO顺序来进行调度。假设处于正在执行状态的线程组从执行等待队列30中除去,则为了维持FIFO顺序而需要另外存储FIFO顺序,处理变得复杂,效率降低。但是,在本实施方式中,由于处于正在执行状态的线程组也按照FIFO顺序保持在执行等待队列30中,因此能够一边维持FIFO顺序一边集中进行分配处理。因此,分配处理的效率高并且处理也简单。
此外,在本实施方式中,分配列表生成部分12在调度排列20中进行标记处理,从而能够保证已经分配的线程的分配目的地的处理器不会被变更而再配置。在处于正在执行状态的线程继续被调度执行的情况下,由于在同一处理器中连续执行该线程,因此能够省略线程对处理器的分配处理,并且提高处理效率。
实施方式2实施方式2的多处理器系统与图1的多处理器系统结构相同,通过线程调度而在某一时刻对各处理器130分配一个线程,由多处理器系统整体并行地执行多个线程。
在本实施方式的多处理器系统中,多个处理器130内至少一个处理器130在线程调度的对象之外,线程通过线程调度被分配给剩余的处理器130,这与实施方式1不同。
此外,在实施方式1中,定义了包含一个以上线程的线程组,以线程组为单位进行调度,但在本实施方式中,未特别定义线程组,以线程为单位进行调度。线程调度方式可以按照实施方式1中说明的优先级顺序并且在同一优先级内按照FIFO顺序控制线程对处理器的分配,也可以采用通常的轮转方式或优先方式。
在线程的分配对象之外的处理部件100(以下称作非分配对象PE)的处理器130上,独占地占有该处理部件100内的资源的执行实体动作,该执行实体是调度对象之外,因此一旦被分配给处理器,则对该处理器的分配不会被夺取。以下,将不是在该非分配对象PE上动作的调度对象的执行实体称作“非调度对象执行实体”。
非调度对象执行实体能够占有非分配对象PE内的局部存储器140或存储器控制部分150内部的寄存器等所有资源来使用。这等同于通过线程调度被分配给处理部件100的线程能够占有处理部件100内的局部存储器140或存储器控制部分150内部的寄存器等所有资源来使用。此外,关于非调度对象执行实体所占有的资源,为了从外侧即其它处理部件100也能够访问,除了一部分不许可访问的关键资源,几乎所有的资源都被映射在地址空间中。
图23是说明从被分配给某一处理器130的线程方向看的地址空间170的图。在非分配对象PE上动作的非调度对象执行实体在时间上占有的资源被存储器映射到在其它的处理部件100上动作的各线程的地址空间170中。地址空间170中,含有包含共有数据的主存储器被映射的主存储器区域172和非调度对象执行实体的占有资源被映射的非调度对象执行实体映射区域176。
在非调度对象执行实体映射区域176中,在本例中,配置了两个非调度对象执行实体映射#1、#2。即,在本例中,两个处理部件100被选择作为非分配对象PE,非调度对象执行实体在各非分配对象PE上动作。各非调度对象执行实体映射#1、#2对各非调度对象执行实体在非分配对象PE内占有的资源进行了存储器映射,如标号177所示,包含局部存储器和用于从外部控制存储器控制部分150的寄存器组。寄存器组中,除了实施方式1中说明的用于同步通信的通信用寄存器之外,还有用于进行程序的执行或停止的程序控制用寄存器或用于控制DMA的DMA控制用寄存器等,与实施方式1中说明的图2的线程映射的情况不同,可以访问这些所有的寄存器。通过访问这些寄存器,能够直接且非常细致地操作非调度对象执行实体所占有的处理器资源。
将非调度对象执行实体基地址作为前端地址,对第一非调度对象执行实体映射#1分配非调度对象执行实体映射的大小的区域。第二非调度对象执行实体映射#2的前端地址为对非调度对象执行实体的基地址加上与非调度对象执行实体映射的大小对应的偏移值后的地址。在本例中,仅配置了两个非调度对象执行实体映射#1、#2,但一般为线程调度的对象之外,将非调度对象执行实体映射设置非调度对象执行实体动作的处理部件100的数。
在生成非调度对象执行实体时,由作为生成函数的返回值而返回的ID决定非调度对象执行实体映射的号,静态地决定该非调度对象执行实体使用地址空间170内的哪个非调度对象执行实体映射。各处理部件100的存储器控制部分150作为非调度对象执行实体映射的设定信息,保持各非调度对象执行实体正在使用哪个非调度对象执行实体映射。各处理部件100的存储器控制部分150通过非调度对象执行实体映射的设定信息,能够掌握各非调度对象执行实体的资源被存储器映射到哪个非调度对象执行实体映射,并且能够基于地址空间170的非调度对象执行实体映射,通过DMA处理对于非调度对象执行实体的资源的访问请求。
例如,在系统初始化时,第一、第二处理器被从线程调度的对象中除去,第一非调度对象执行实体R1在第一处理器中动作,第二非调度对象执行实体R2在第二处理器中动作。此外,线程被调度而分配给第三、第四处理器。
在生成第一、第二非调度对象执行实体R1、R2时,第一非调度对象执行实体R1的资源被存储器映射到线程的地址空间的第一区域ER1中,第二非调度对象执行实体R2的资源被存储器映射到线程的地址空间的第二区域ER2中。通过线程调度,第一线程A1被分配给第三处理器,第二线程A2被分配给第四处理器。
此时,如果在第三处理器上动作的第一线程A1访问第一非调度对象执行实体R1的非调度对象执行实体映射——第一区域ER1,则第一处理器的资源被作为第一非调度对象执行实体R1的资源来参照。从第一线程A1对第一非调度对象执行实体R1的非调度对象执行实体映射——第一区域ER1的访问,与第一非调度对象执行实体R1在哪个处理器上动作无关,保证一定是对第一非调度对象执行实体R1的资源的访问。第一线程A1访问第二非调度对象执行实体R2的非调度对象执行实体映射——第二区域ER2的情况也同样。
在第四处理器上动作的第二线程A2访问第一、第二非调度对象执行实体R1、R2的非调度对象执行实体映射——第一区域ER1、第二区域ER2的情况也完全同样。
这样,对其中一个处理器130分配的线程通过访问在地址空间170内设定的非调度对象执行实体映射的地址,从而能够通过DMA来直接访问非调度对象执行实体所占有的资源。
通过线程访问被存储器映射到地址空间中的非调度对象执行实体的占有资源,从而能够不经由系统调用而直接操作非调度对象执行实体动作的处理器的硬件资源,并且在线程所参照的地址空间内,由于非调度对象执行实体所占有的资源几乎都被映射,因此能够对用户管理委托更多的硬件资源的控制。例如,程序的执行、停止等操作也能够从外侧执行。
此外,在实施方式1中叙述的同步结构在本实施方式中也有效。通过线程进行在存储器映射到地址空间中的非调度对象执行实体的资源之一——存储器控制部分150内的通信用寄存器中写入值的操作,非调度对象执行实体等待对该通信用寄存器的写入完成,从而能够在非调度对象执行实体和线程之间取得同步。
作为非调度对象执行实体的其它使用方法,也可以实现将非调度对象执行实体的占有资源存储器映射到图形显示装置等装置的存储器空间中,非调度对象执行实体在处理部件100和图形显示装置之间利用非调度对象执行实体的占有资源的同步机构。
实施方式3在实施方式2的多处理器系统中,未定义线程组,但也可以与实施方式1同样将线程分组,以线程组为单位进行调度。实施方式3的多处理器系统采用在实施方式1的多处理器系统中将实施方式2中叙述的非调度对象执行实体的占有资源存储器映射到地址空间中的方法。
在本实施方式的多处理器系统中,与实施方式2同样,多个处理器130内至少一个处理器130在线程调度的对象之外,线程通过线程调度被分配给剩余的处理器130。而且,在本实施方式的多处理器系统中,与实施方式1同样,定义了包含一个以上线程的线程组,以线程组为单位进行调度。关于与实施方式1和实施方式2相同的结构和动作省略说明,仅说明不同的结构和动作。
图24是说明从分配给某一处理器130的线程方向看的地址空间170的图。地址空间170中含有包含共有数据的主存储器被映射的主存储器区域172、同一组内的各线程的占有资源被映射的线程映射区域174、非调度对象执行实体的占有资源被映射的非调度对象实体映射区域176。
线程映射区域174与实施方式1所述同样,非调度对象实体映射区域176与实施方式2所述同样。另外,标号175所示的各线程映射所包含的资源和标号177所示的各非调度对象执行实体映射所包含的资源的不同在于,线程映射所包含的资源中存在不许可访问的资源,但由于被映射的资源种类相同,因此两映射的大小相同,对于前端地址的偏移值为相同值。
线程映射区域174是对属于同一组的线程的地址空间设定的,从属于不同组的线程不能参照,但非调度对象执行实体映射区域176被固定配置而与线程所属的组无关,能够以相同地址参照。此外,非调度对象执行实体映射区域176不会被转存到主存储器120中,因此在线程的地址空间中何时都能参照。
图25是表示本实施方式的线程调度引起的线程的分配状态的时间变化的图。在本例中,如果第一以及第二处理器被选择作为非分配对象PE,则线程被调度分配给除此以外的第三~第六处理器。
在第一处理器中执行第一非调度对象执行实体,在第二处理器中执行第二非调度对象执行实体。这些非调度对象执行实体不是调度对象,因此在时间上持续占有各处理器,直到非调度对象执行实体被删除。
对于第三~第六处理器,线程以与图22中说明的实施方式1的线程调度的例子相同的方法以线程组为单位被调度而分配。
另外,也可以在非调度对象执行实体被删除,对处理器的分配被解放的情况下,该处理器被加入线程的分配对象。例如,也可以在第二非调度对象执行实体被删除,第二处理器被解放的情况下,在下一个调度的定时,将第二处理器追加到线程的分配对象中,对第二~第六处理器调度分配线程。
以上,基于实施方式说明了本发明。实施方式为例示,这些各构成要素或各处理过程的组合可以有各种变形例,而且这样的变形例也属于本发明的范围,这对于本领域技术人员应当理解。
在上述实施方式中,作为多处理器系统,以所有处理部件为相同结构的对称型多处理器系统为例进行说明,其结构为其中一个处理部件具有线程的管理/调度功能。多处理器系统可以是包含管理用处理部件的非对称型多处理器系统,也可以在管理用处理部件中具有线程的管理/调度功能。此外,调度功能可以作为操作系统(OS)的功能的一部分来实现,也可以作为在OS上动作的一个程序来实现。
在上述说明中,说明了将在处理内部生成的线程作为并行处理单位的线程调度,但本发明同样也能够应用于将处理作为并行处理单位的处理调度中。
产业上的可利用性本发明能够应用于多处理器的调度技术。
权利要求
1.一种调度方法,在多处理器系统中,对将并行处理的调度对象的执行单位分配给多个处理器的顺序进行调度,其特征在于,将一个以上的所述调度对象的执行单位进行分组,将资源映射到各执行单位所参照的地址空间中,以使能够互相参照属于同一组的所述执行单位的每一个所占有的处理器内的所述资源,在属于同一组的所有所述执行单位同时被分配给其中一个处理器的制约之下,控制对处理器分配组。
2.一种调度方法,在多处理器系统中,对将并行处理的调度对象的执行单位分配给多个处理器的顺序进行调度,其特征在于,将一个以上的所述调度对象的执行单位进行分组,以组为单位管理对处理器的分配,按照对每个所述组设定的优先级顺序,并且按照同一优先级内所述组到达等待行列的顺序,决定所述组的优先顺序,在属于同一组的所有所述执行单位同时被分配给其中一个处理器的制约之下,按照所述优先顺序对处理器分配处于执行等待以及正在执行的状态的组。
3.一种调度方法,在多处理器系统中,对将并行处理的调度对象的执行单位分配给多个处理器的顺序进行调度,其特征在于,从执行等待队列的前端起,依次取出组,仅在能够将属于取出的组的所有执行单位同时分配给其中一个处理器的情况下,将属于该组的所有执行单位分配给处理器,否则使此后从所述执行等待队列中取出的组的分配优先,所述执行等待队列将包含一个以上的所述调度对象的执行单位的所述组内、处于执行等待以及正在执行状态的组,按照对每个所述组设定的优先级顺序,并且在同一优先级内按到达顺序存储。
4.如权利要求3所述的调度方法,其特征在于,重复对处理器分配从所述执行等待队列中依次取出的组,直到对处理器分配的所述执行单位的数达到处理器总数,或者从所述执行等待队列的末尾取出所述组为止。
5.如权利要求3或4所述的调度方法,其特征在于,在属于从所述执行等待队列的前端依次取出的组的各执行单位已经被分配给其中一个处理器并且正在执行的情况下,确保该正在执行的执行单位对该处理器的分配,以使该正在执行的执行单位的分配目的地不会被变更而再配置为其它处理器。
6.一种调度装置,在多处理器系统中,对将并行处理的调度对象的执行单位分配给多个处理器的顺序进行调度,其特征在于,包含存储器控制部分,将一个以上的所述调度对象的执行单位进行分组,将资源映射到各执行单位所参照的地址空间中来进行管理,以使能够互相参照属于同一组的所述执行单位的每一个所占有的处理器内的所述资源;执行等待队列,存储处于执行等待以及正在执行的状态的组;以及分配部分,从所述执行等待队列的前端起依次取出组,仅在能够将属于取出的组的所有执行单位同时分配给其中一个处理器的情况下,将属于该组的所有执行单位分配给多个处理器。
7.如权利要求6所述的调度装置,其特征在于,该装置在将执行单位进行分组化的初始设定时,决定属于同一组的各执行单位所占有的所述资源映射到所述地址空间的目的地的区域,并保持与该资源的映射目的地的区域有关的设定信息,直到该组被删除为止。
8.如权利要求6或7所述的调度装置,其特征在于,对于属于由所述分配部分同时分配给其中一个处理器的同一组的第一以及第二执行单位,通过所述第一执行单位在映射到所述地址空间的同一组内的所述第二执行单位的资源区域中进行写入数据的操作,从而从同一组内的所述第一执行单位将数据传送给所述第二执行单位。
9.如权利要求6或7所述的调度装置,其特征在于,对于属于由所述分配部分同时分配给其中一个处理器的同一组的第一以及第二执行单位,通过所述第一执行单位在映射到所述地址空间的同一组内的所述第二执行单位的资源区域中进行写入数据的操作,并且所述第二执行单位等待对于该资源的数据的写入完成,从而在同一组内的所述第一执行单位和所述第二执行单位之间取得同步。
10.一种调度装置,在多处理器系统中,对将并行处理的调度对象的执行单位分配给多个处理器的顺序进行调度,其特征在于,包含执行等待队列,将包含一个以上的所述调度对象的执行单位的组内、处于执行等待以及正在执行状态的组,按照对每个所述组设定的优先级顺序,并且在同一优先级内按到达顺序存储;分配列表生成部分,从所述执行等待队列的前端依次取出组,仅在能够将属于取出的组的所有执行单位同时分配给其中一个处理器的情况下,将该组追加到存储了成为对处理器的分配候选的组的分配列表中;以及分配部分,将属于存储在由所述分配列表生成部分生成的所述分配列表中的组的所有执行单位,分配给多个处理器。
11.如权利要求10所述的调度装置,其特征在于,所述分配列表生成部分重复进行所述分配列表的生成处理,直到对处理器分配的执行单位的个数达到处理器总数,或者从所述执行等待队列的末尾取出所述组为止。
12.如权利要求10或11所述的调度装置,其特征在于,还包含调度表,其保持处于正在执行的状态的执行单位和该执行单位被分配的处理器的对应关系,在属于从所述执行等待队列依次取出的组的各执行单位在所述调度表中的情况下,所述分配列表生成部分在该执行单位被分配的处理器中设定标记,在属于从所述执行等待队列依次取出的组的各执行单位不在所述调度表中,而且能够将属于该组的所有执行单位同时分配给其中一个处理器的情况下,将该组追加到所述分配列表中,所述分配部分将属于在所述分配列表中存储的组的所有执行单位,分配给在所述调度表中未设定所述标记的处理器。
13.如权利要求10至12的任何一项所述的调度装置,其特征在于,资源被映射到各执行单位所参照的地址空间中,以使能够互相参照属于同一组的各执行单位分别所占有的处理器内的所述资源。
14.如权利要求13所述的调度装置,其特征在于,通过属于由所述分配部分同时分配给其中一个处理器的同一组的各执行单位对于属于映射到所述地址空间的同一组的各执行单位的资源区域写入数据,从而在属于同一组的多个执行单位之间进行数据的共有。
15.如权利要求13所述的调度装置,其特征在于,对于属于由所述分配部分同时分配给其中一个处理器的同一组的第一以及第二执行单位,通过所述第一执行单位在映射到所述地址空间的同一组内的所述第二执行单位的资源区域中进行写入数据的操作,从而从同一组内的所述第一执行单位将数据传送给所述第二执行单位。
16.如权利要求13所述的调度装置,其特征在于,对于属于由所述分配部分同时分配给其中一个处理器的同一组的第一以及第二执行单位,通过所述第一执行单位在映射到所述地址空间的同一组内的所述第二执行单位的资源区域中进行写入数据的操作,并且所述第二执行单位等待对于该资源的数据的写入完成,从而在同一组内的所述第一执行单位和所述第二执行单位之间取得同步。
17.一种多处理器系统,将并行处理的调度对象的执行单位分配给多个处理器来并行执行,其特征在于,一个处理器包含将所述调度对象的执行单位分配给其它多个处理器的调度器,所述调度器包含存储器控制部分,将一个以上的所述调度对象的执行单位进行分组,将资源映射到各执行单位所参照的地址空间中来进行管理,以使能够互相参照属于同一组的所述执行单位的每一个所占有的处理器内的所述资源;执行等待队列,存储处于执行等待以及正在执行的状态的组;以及分配部分,从所述执行等待队列的前端起依次取出组,仅在能够将属于取出的组的所有执行单位同时分配给其中一个处理器的情况下,将属于该组的所有执行单位分配给多个处理器。
18.一种多处理器系统,将并行处理的调度对象的执行单位分配给多个处理器来并行执行,其特征在于,一个处理器包含将所述调度对象的执行单位分配给其它多个处理器的调度器,所述调度器包含执行等待队列,将包含一个以上的所述调度对象的执行单位的组内、处于执行等待以及正在执行状态的组,按照对每个所述组设定的优先级顺序,并且在同一优先级内按到达顺序存储;分配列表生成部分,从所述执行等待队列的前端依次取出组,仅在能够将属于取出的组的所有执行单位同时分配给其中一个处理器的情况下,将该组追加到分配列表中;以及分配部分,将属于存储在由所述分配列表生成部分生成的所述分配列表中的组的所有执行单位,分配给多个处理器。
19.一种程序,其特征在于,使计算机执行以下步骤从执行等待队列的前端起依次取出组的步骤,所述执行等待队列将包含一个以上被并行处理的调度对象的执行单位的所述组内、处于执行等待以及正在执行状态的组,按照对每个所述组设定的优先级顺序,并且在同一优先级内按到达顺序存储;参照用于保持处于正在执行的状态的执行单位和该执行单位被分配的处理器的对应关系的调度表,在属于从所述执行等待队列依次取出的组的各执行单位在所述调度表中的情况下,在该执行单位被分配的处理器中设定标记的步骤;在属于从所述执行等待队列依次取出的组的各执行单位不在所述调度表中,而且能够将属于该组的所有执行单位同时分配给其中一个处理器的情况下,将该组追加到所述分配列表中的步骤;以及将属于在所述分配列表中存储的组的所有执行单位分配给在所述调度表中未设定所述标记的处理器的步骤。
20.一种调度方法,在多处理器系统中,对将并行处理的调度对象的执行单位分配给多个处理器的顺序进行调度,其特征在于,将多个处理器内至少一个处理器从并行处理的调度对象的执行单位的分配对象中除外,将资源映射到各执行单位所参照的地址空间内,并且控制对处理器分配所述执行单位的分配对象,以便能够从所述调度对象的执行单位参照由不是在非分配对象的处理器上动作的调度对象的执行单位所单独占有的该处理器内的资源。
21.一种调度装置,在多处理器系统中,对将并行处理的调度对象的执行单位分配给多个处理器的顺序进行调度,其特征在于,包含存储器控制部分,将多个处理器内至少一个处理器从并行处理的调度对象的执行单位的分配对象中除外,将资源映射到各调度对象的执行单位所参照的地址空间内从而进行管理,以便能够从所述调度对象的执行单位参照由在非分配对象的处理器上动作的不是调度对象的执行单位所独占地占有的该处理器内的所述资源;执行等待队列,存储了处于执行等待以及正在执行的状态的所述调度对象的执行单位;以及分配部分,从所述执行等待队列的前端起依次取出所述调度对象的执行单位,并分配给其中一个处理器。
22.如权利要求21所述的调度装置,其特征在于,由在非分配对象的处理器上动作的非调度对象的执行单位所单独占有的该处理器内的资源对所述地址空间的映射目的地的区域,从任何的调度对象的执行单位来看,都被固定在相同的地址。
23.如权利要求21或22所述的调度装置,其特征在于,通过由所述分配部分分配给其中一个处理器的所述调度对象的执行单位进行在映射到所述地址空间的非分配对象的处理器上动作的非调度对象的执行单位的资源区域中写入数据的操作,从而非分配对象的处理器的资源被直接控制。
24.如权利要求21或22所述的调度装置,其特征在于,通过由所述分配部分分配给其中一个处理器的所述调度对象的执行单位进行在映射到所述地址空间的非分配对象的处理器上动作的非调度对象的执行单位的资源区域中写入数据的操作,并且在所述非分配对象的处理器上动作的非调度对象的执行单位等待对于该资源的数据写入的完成,从而在所述调度对象的执行单位和所述非调度对象的执行单位之间取得同步。
全文摘要
线程状态管理部分(32)将多个线程分成组,管理线程组的状态。执行等待队列(30)按照优先级顺序,并且在同一优先级内按照FIFO(First In FirstOut)顺序将处于执行等待以及正在执行状态的线程组进行排队。分配列表生成部分(12)从执行等待队列(30)的前端起,依次取出线程组,仅在将属于该线程组的线程同时分配给其中一个处理器的情况下,将该线程组追加到线程分配列表(18)中。线程分配部分(14)将属于存储在线程分配列表(18)中的线程组的所有线程分配给处理器。
文档编号G06F9/50GK101069161SQ200580041278
公开日2007年11月7日 申请日期2005年11月25日 优先权日2004年12月1日
发明者西川尚宏 申请人:索尼计算机娱乐公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1