CN101673223A - 基于片上多处理器的线程调度实现方法 - Google Patents
基于片上多处理器的线程调度实现方法 Download PDFInfo
- Publication number
- CN101673223A CN101673223A CN200910197530A CN200910197530A CN101673223A CN 101673223 A CN101673223 A CN 101673223A CN 200910197530 A CN200910197530 A CN 200910197530A CN 200910197530 A CN200910197530 A CN 200910197530A CN 101673223 A CN101673223 A CN 101673223A
- Authority
- CN
- China
- Prior art keywords
- thread
- priority
- ready
- bitmap
- processor
- 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.)
- Granted
Links
Images
Landscapes
- Multi Processors (AREA)
Abstract
本发明属于嵌入式操作系统技术领域,具体涉及一种基于片上多处理器的线程调度实现方法。本发明以三维就绪位图为基础,所有处理器共用此就绪位图,每一个就绪线程在此位图上标记,提出操作系统的基于此位图的线程分配算法,操作系统运行在一个处理器核上。本发明通过三维位图、注册表、判决表等的使用大大提高系统的实时性能,同时分配多线程于多个处理器核上并行处理,提高了整体执行速度。
Description
技术领域
本发明属于嵌入式操作系统技术领域,具体涉及一种基于片上多处理器的线程调度实现方法。
背景技术
处理器的性能提升主要依靠提高其主频,然而随着主频的不断提升,处理器的晶体管数目也不断增大,功耗问题逐渐显现,显然工艺的提升可以解决部分功耗问题,但工艺提升本身就是一个耗资巨大的工程。由于多种因素的合力作用下,人们目前几乎已不再具备制造更大更快的单核处理器的能力。现在的处理器制造厂商开始采用一种新的微处理器设计模式:片上多处理器(chip multiprocesseor,CMP)。片上多处理器就是集成到一个处理器芯片上,作为一个整体工作的一组单核处理器,此时几个较小的处理器内核填满了本来被单个大型单核处理器占用的芯片面积。
在程序员看来,CMP系统中的多核处理器内核是不同的实体,因此需要将传统的冯·诺依曼计算模型替换为全新的并行编程模型(parallel programming model)。实用这种模型,程序员必须将应用程序划分为多个线程,每个线程是一个“半”独立的实体,多个线程可在CMP系统中不同的处理器内核上并行执行。此时如何合理的调度线程在各处理器上运行成为一个重要问题。传统的调度算法有很多,例如:先来先服务,最短剩余时间调度,优先级调度,轮转调度等。由于多核系统的兴起时间不常,传统的实时操作系统大多不支持片上多处理器,但随着片上多处理器的应用日益广泛,一些商用的实时操作系统也开始对片上多处理器的支持。各厂商支持片上多处理器的方案各有不同,实现方式大体可分为以下三种:
1.基于同步原语扩展的实时操作系统。这一方案就是在每个处理器上运行一个独立的实时操作系统,然后通过扩展的组件库来提供同步原语实现各处理器的通信。如风河公司的VxWorks。
2.传统的SMP结构的实时操作系统。这是传统的SMP结构,即一个实时操作系统调度各线程到各CPU上运行,由Linux发展来的操作系统一般采用这种方案。
3.基于微内核和分布式技术的实时操作系统。加拿大QNX公司的QNX实时操作系统就采用这一方案。
以上三种方法实现多线程调度修改原操作系统代码庞大,线程调度效率以及实时性不高,不太适用于硬实时系统。
发明内容
本发明的目的在于提出一种基于片上多处理器的线程调度实现方法。
本发明提出的基于片上多处理器的线程调度实现方法,包括基于三维位图的多线程就绪队列、实时内核控制、线程分配,具体步骤如下:
(1)基于三维位图的多线程就绪队列
假设单芯片上有N个处理器核,把线程按M个优先级标记,在同一个优先级下可以有N个相同优先级的线程,每个相同优先级的线程按创建进入就绪态的先后标记,这样可以同时创建M*N个线程,让这样一个线程队列就绪时注册在一张三维的就绪位图中,位图中的每一位代表一个线程的状态,为1时表示就绪态,0表示非就绪态;
(2)实时内核控制
通过设置注册表参数实时记录当前已注册的进程,同时为每个线程分配各自的线程栈记录线程的context(上下文),设置优先级位便于线程恢复就绪态,在采用优先级判决表中找出最高优先级的同时,利用注册表控制查找当前需要调度运行N个线程的循环次数;
(3)线程分配
在片上多处理器的一个处理器核上运行操作系统,用于管理线程的状态和分配工作。在线程控制块结构体中设置成员变量标记该线程是否被调度和被调度的CPU号,采用位图副本便于修改记录线程的调度情况。用线程控制块指针唯一标识各个线程,在找出最高优先级的N个要调度的线程后,判断各个CPU正在运行的线程,相同的继续运行,不同的线程分配在剩余的CPU上运行,避免线程的多余切换,各个CPU主动调用切换函数完成此工作。
本发明具有的有益效果是:本发明是一种基于片上多处理器的线程调度实现方法,合理有效的实现多处理器上的线程调度,同时具有很好的实时性能。
附图说明
图1是8个处理器核64个优先级的线程就绪位图示意图。
图2是本发明的实施过程示意图。
图3是操作系统启动完毕后的数据结构示意图。
具体实施方式
以下结合附图说明本发明的方法。
实施例1:
基于片上多处理器的线程调度实现方法,包括以下过程:
1)线程控制块的定义。
线程控制块(Thread Control Block,TCB)是包含线程相关信息的数据结构,包含了线程执行过程中所需的所有信息。其成员变量包括:指向线程栈的指针(TCBstkptr)、线程的优先级(TCBprio)、线程的优先级位,记录同一优先级线程在位图中的位置(TCBprioBit)、记录线程是否被调度和被调度的CPU号,未调度为-1(CPUID)、双向链表中指向该线程的前后线程控制块(TCBnext、TCBprev)、线程控制块的位置(TCBX、TCBY、TCBBitX、TCBBitY)(这四项用于加速线程进入就绪态,在线程创建初始化时赋值)等一些其他变量。
2)基于三维位图的多线程就绪队列。
线程就绪位图用于管理就绪线程,这里以8个处理器核64个优先级为例说明就绪位图。创建好的就绪位图如图1所示,此时在一个优先级下可以有8个相同优先级的线程,同时可以创建管理512个不同的线程。
定义四个变量:char ReadyGroup;char ReadyLayer[8];char ReadyTable[8][8];char RegisterTable[64];8位变量ReadyGroup的每一位代表一组线程,8个优先级的64个线程。变量ReadyLayer[8]的每一项元素的每一位表示该组中各优先级下有无线程。变量ReadyTable[8][8]一共有8*8=64个元素,每一个元素是一个8位的二进制数表示一个优先级,每一位代表该优先级下可以创建的8个线程。变量RegisterTable[64]是一张注册表,用于记录64个优先级的线程在该优先级下注册登记的位置,该位置由创建注册先后决定。
3)实时内核控制。
通过线程就绪位图的设置,协同以下算法提高操作系统的实时性。
定义五个变量:TCB*TCBPrioTable[64][8];TCB*TCBHighReady[8];TCB*TCBcur[8];char MapTable[8];char DecisionTable[256];变量TCBPrioTable[64][8]用于保存每个线程的线程控制块指针,此变量在各线程创建初始化时赋值。变量TCBHighReady[8]保存当前要被调度的8个最高优先级线程的线程控制块指针。而变量TCBcur[8]保存当前正在运行的8个线程的线程控制块指针。变量MapTable[8]={00000001,00000010,00000100,00001000,00010000,00100000,01000000,10000000};变量DecisionTable[256]是一张
优先级判决表,其值可以这样得到,例如:44=00101100,二进制数00101100从右往左数第一个1在第三个位置,既得DecisionTable[44]=3。
优先级为prio的线程进入就绪态时的伪代码如下:
ReadyGroup|=MapTable[prio>>3];//登记该线程所在组
ReadyLayer[prio>>3]|=MapTable[prio&0x07];//登记该线程所在层
TCBprioBit=MapTable[RegisterTable[prio]++];//确定该线程优先级位
ReadyTable[prio>>3][prio&0x07]|=TCBprioBit;//在位图中登记
优先级位prio、优先级位为TCBprioBit的线程退出就绪态的伪代码如下:
if(ReadyTable[prio>>3][prio&0x07]&=~TCBprioBit==0)
if(ReadyLayer[prio>>3]&=~MapTable[prio&0x07]==0)
ReadyGroup&=~MapTable[prio>>3];
当ReadyTable[prio>>3][prio&0x07]所有位为0时,ReadyLayer[prio>>3]的相应位才清0,当ReadyLayer[prio>>3]所有位为0时,ReadyGroup的相应位才清0。
由于有8个处理器核,要求找出8个最高优先级线程完成调度,下一过程中说明这部分类容,这里先说明采用判决表找出进入就绪态的最高优先级线程的优先级prio的伪代码:
High3Bit=DecisionTable[ReadyGroup];
Low3Bit=DecisionTable[ReadyLayer[High3Bit]];
prio=(High3Bit<<3)+Low3Bit;
4)线程分配。
线程分配是把当前就绪进程中优先级最高的8个线程找出,然后和当前正在运行的8个线程比较,将不同的线程做切换,详细过程如图2所示。首先要复制位图副本,包括变量ReadyGroup、ReadyLayer[8]、ReadyTable[8][8],利用位图副本找出当前最高优先级的线程的prio,接着记录该优先级下最先就绪线程的TCB的指针于TCBHighReady[8],删除位图副本中该线程(算法同线程退出就绪态),然后判断是否查找最高优先级的8个线程完毕,没有完毕接着判断当前优先级prio下的所有就绪进程是否记录完毕,如果完毕回到利用位图副本找出当前最高优先级的线程的prio,为完毕则跳到记录该优先级下最先就绪线程的TCB的指针于TCBHighReady[8],直到查找最高优先级的8个线程完毕。这部分算法可由一下伪代码实现:
复制位图副本;
int ChooseN=0;
while(1)
{找出当前最高优先级的线程的prio;//算法在过程3)中已描述
for(int j=0;j<RegisterTable[prio];j++)//避免全局遍历提高实时性
{TCBHighReady[ChooseN]=TCBPrioTable[prio][MapTable[j]];
删除位图副本中该线程;//同过程3)中线程退出就绪态
If(++ChooseN>=8)//这里已8个处理器核为例
跳出while循环结束;}}
上述TCBHighReady[8]查找完毕,接着依次判断个CPU上运行的线程是否包含于TCBHighReady[8],标记相同的线程为已调度,该CPU为已调度,然后为未调度的CPU分配为调度的线程。具体流程如图2。
当线程分配完毕后,各CPU主动调用线程切换函数完成保护现场及线程切换工作。
5)操作系统启动后的数据结构。
操作系统初始化时建立一个由M*N个线程控制块TCB构成的单向空线程链表,当线程被建立时,链表的第一个TCB就赋给该线程,线程被删除时归还空线程链表。建立好的线程TCB构成一个双向链表,其地址由指针数组TCBPrioTable[64][8]保存。这里假设操作系统初始化时创建了1个优先级位0的线程,3个优先级位1的线程,3个优先级为2的线程,2个优先级为3的线程,系统自动创建8个优先级为63的IDLE线程。则操作系统启动后的数据结构如图3所示。此时TCBHighReady[8]、TCBcur[8]指向相同的8个线程。
Claims (1)
1、一种基于片上多处理器的线程调度实现方法,其特征在于包括基于三维位图的多线程就绪队列、实时内核控制、线程分配,具体步骤如下:
(1)基于三维位图的多线程就绪队列
设单芯片上有N个处理器核,把线程按M个优先级标记,在同一个优先级下有N个相同优先级的线程,每个相同优先级的线程按创建进入就绪态的先后标记,即可同时创建M*N个线程,该线程队列就绪时注册在一张三维的就绪位图中;位图中的每一位代表一个线程的状态,为1时表示就绪态,0表示非就绪态;
(2)实时内核控制
通过设置注册表参数实时记录当前已注册的进程,同时为每个线程分配各自的线程栈记录线程的上下文,设置优先级位便于线程恢复就绪态;在采用优先级判决表快速找出最高优先级的同时,利用注册表控制查找当前需要调度运行N个线程的循环次数;
(3)线程分配
在片上多处理器的一个处理器核上运行操作系统,用于管理线程的状态和分配工作;在线程控制块结构体中设置成员变量标记该线程是否被调度和被调度的CPU号,采用位图副本便于修改记录线程的调度情况;用线程控制块指针唯一标识各个线程,在找出最高优先级的N个要调度的线程后,判断各个CPU正在运行的线程,相同的线程继续运行,不同的线程分配在剩余的CPU上运行,避免线程的多余切换,各个CPU主动调用切换函数完成此工作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009101975309A CN101673223B (zh) | 2009-10-22 | 2009-10-22 | 基于片上多处理器的线程调度实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009101975309A CN101673223B (zh) | 2009-10-22 | 2009-10-22 | 基于片上多处理器的线程调度实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101673223A true CN101673223A (zh) | 2010-03-17 |
CN101673223B CN101673223B (zh) | 2012-03-21 |
Family
ID=42020458
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009101975309A Expired - Fee Related CN101673223B (zh) | 2009-10-22 | 2009-10-22 | 基于片上多处理器的线程调度实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101673223B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101833476A (zh) * | 2010-05-28 | 2010-09-15 | 西安交通大学 | 基于cmp的推测多线程机制下的独立栈函数调用方法 |
CN102495762A (zh) * | 2011-11-16 | 2012-06-13 | 华为技术有限公司 | 一种线程调度方法、线程调度装置及多核处理器系统 |
CN102538979A (zh) * | 2011-12-31 | 2012-07-04 | 北京毕威康坶技术有限公司 | 一种红外热成像处理方法和系统 |
CN102799414A (zh) * | 2011-05-24 | 2012-11-28 | 中国科学技术大学 | 改进推测多线程的方法及装置 |
CN102831007A (zh) * | 2011-06-14 | 2012-12-19 | 中兴通讯股份有限公司 | 实时处理系统中的共享资源访问方法和实时处理系统 |
CN104050028A (zh) * | 2013-03-13 | 2014-09-17 | 英特尔公司 | 用于触发和跟踪初级可调节结构内的片上系统结构事务的方法和装置 |
CN104239134A (zh) * | 2013-06-21 | 2014-12-24 | 华为技术有限公司 | 一种众核系统的任务管理方法和装置 |
CN107506286A (zh) * | 2017-09-26 | 2017-12-22 | 郑州云海信息技术有限公司 | Cpu和内存块的自动上下线方法和系统 |
CN108351808A (zh) * | 2015-11-12 | 2018-07-31 | 华为技术有限公司 | 用于基于实时上下文进行隔离和虚拟化的系统和方法 |
WO2021212885A1 (zh) * | 2020-04-23 | 2021-10-28 | 苏州大学 | 一种嵌入式实时操作系统的线程信号操作方法与系统 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6567839B1 (en) * | 1997-10-23 | 2003-05-20 | International Business Machines Corporation | Thread switch control in a multithreaded processor system |
US7159216B2 (en) * | 2001-11-07 | 2007-01-02 | International Business Machines Corporation | Method and apparatus for dispatching tasks in a non-uniform memory access (NUMA) computer system |
JP4606142B2 (ja) * | 2004-12-01 | 2011-01-05 | 株式会社ソニー・コンピュータエンタテインメント | スケジューリング方法、スケジューリング装置およびマルチプロセッサシステム |
-
2009
- 2009-10-22 CN CN2009101975309A patent/CN101673223B/zh not_active Expired - Fee Related
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101833476B (zh) * | 2010-05-28 | 2013-08-14 | 西安交通大学 | 基于cmp的推测多线程机制下的独立栈函数调用方法 |
CN101833476A (zh) * | 2010-05-28 | 2010-09-15 | 西安交通大学 | 基于cmp的推测多线程机制下的独立栈函数调用方法 |
CN102799414A (zh) * | 2011-05-24 | 2012-11-28 | 中国科学技术大学 | 改进推测多线程的方法及装置 |
CN102799414B (zh) * | 2011-05-24 | 2015-11-25 | 中国科学技术大学 | 改进推测多线程的方法及装置 |
CN102831007A (zh) * | 2011-06-14 | 2012-12-19 | 中兴通讯股份有限公司 | 实时处理系统中的共享资源访问方法和实时处理系统 |
CN102831007B (zh) * | 2011-06-14 | 2017-04-12 | 中兴通讯股份有限公司 | 实时处理系统中的共享资源访问方法和实时处理系统 |
CN102495762A (zh) * | 2011-11-16 | 2012-06-13 | 华为技术有限公司 | 一种线程调度方法、线程调度装置及多核处理器系统 |
CN102495762B (zh) * | 2011-11-16 | 2014-04-02 | 华为技术有限公司 | 一种线程调度方法、线程调度装置及多核处理器系统 |
CN102538979A (zh) * | 2011-12-31 | 2012-07-04 | 北京毕威康坶技术有限公司 | 一种红外热成像处理方法和系统 |
CN104050028B (zh) * | 2013-03-13 | 2017-10-13 | 英特尔公司 | 用于触发和跟踪初级可调节结构内的片上系统结构事务的方法和装置 |
CN104050028A (zh) * | 2013-03-13 | 2014-09-17 | 英特尔公司 | 用于触发和跟踪初级可调节结构内的片上系统结构事务的方法和装置 |
CN104239134A (zh) * | 2013-06-21 | 2014-12-24 | 华为技术有限公司 | 一种众核系统的任务管理方法和装置 |
US10002023B2 (en) | 2013-06-21 | 2018-06-19 | Huawei Technologies Co., Ltd. | Method and apparatus for managing one or more tasks of a many-core system using one or more task descriptor entries |
CN108351808A (zh) * | 2015-11-12 | 2018-07-31 | 华为技术有限公司 | 用于基于实时上下文进行隔离和虚拟化的系统和方法 |
CN108351808B (zh) * | 2015-11-12 | 2021-09-14 | 华为技术有限公司 | 用于基于实时上下文进行隔离和虚拟化的系统和方法 |
CN107506286A (zh) * | 2017-09-26 | 2017-12-22 | 郑州云海信息技术有限公司 | Cpu和内存块的自动上下线方法和系统 |
WO2021212885A1 (zh) * | 2020-04-23 | 2021-10-28 | 苏州大学 | 一种嵌入式实时操作系统的线程信号操作方法与系统 |
Also Published As
Publication number | Publication date |
---|---|
CN101673223B (zh) | 2012-03-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101673223B (zh) | 基于片上多处理器的线程调度实现方法 | |
CN101727351B (zh) | 面向多核平台的虚拟机监控器非对称调度器及其调度方法 | |
CN103559014B (zh) | 用于处理嵌套流事件的方法和系统 | |
CN102902512B (zh) | 一种基于多线程编程及消息队列的多线程并行处理方法 | |
CN100573456C (zh) | 一种并行多处理器虚拟机系统 | |
US20150067356A1 (en) | Power manager for multi-threaded data processor | |
CN101013415A (zh) | 用于多处理器阵列的线程感知分布式软件系统 | |
CN102779072B (zh) | 一种嵌入式系统及其应用进程的休眠与唤醒方法 | |
CN101366004A (zh) | 用于带有专用线程管理的多核处理的方法和设备 | |
CN102841674B (zh) | 基于新型存储器的嵌入式系统及其进程的休眠与唤醒方法 | |
US20140143783A1 (en) | Thread consolidation in processor cores | |
CN102982505A (zh) | 虚拟gpu | |
CN103023805A (zh) | 一种MapReduce系统 | |
CN101788920A (zh) | 一种基于处理器分区技术的cpu虚拟化方法 | |
US8645963B2 (en) | Clustering threads based on contention patterns | |
CN102096596A (zh) | 一种基于虚拟机内存模板的云计算服务Cache系统 | |
CN107463442B (zh) | 一种星载多核SoC任务级负载均衡并行调度方法 | |
CN103336744A (zh) | 一种固态存储设备的垃圾回收方法及其系统 | |
CN103067425A (zh) | 虚拟机创建方法、虚拟机管理系统及相关设备 | |
CN103365726A (zh) | 一种面向gpu集群的资源管理方法和系统 | |
CN102708009B (zh) | 一种基于cuda实现多任务共享gpu的方法 | |
CN105117285B (zh) | 一种基于移动虚拟化系统的非易失性存储器调度优化方法 | |
CN103412755A (zh) | 一种硬件实时操作系统 | |
CN103885811B (zh) | 虚拟机系统全系统在线迁移的方法、系统与装置 | |
CN113296883B (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 |
Granted publication date: 20120321 Termination date: 20141022 |
|
EXPY | Termination of patent right or utility model |