admin 管理员组

文章数量: 1086019


2024年3月20日发(作者:full service老板坏结局)

维普资讯

第2O卷第4期 

2 0 0 7年1 2月 

青岛大学学报(自然科学版) 

JOURNAL OF QINGDAO UNIVERSITY(Natural Science Edition)

vO1.20 N。.4 

Dec.2 0 0 7 

文章编号:1006—1037(2007)04—0064—05 

基于T—Kernel的POSIX线程库的研究 

陈 刚,蒋 静 

(青岛大学信息工程学院,青岛266071) 

摘要:在分析了T-Kernel对POS1X标准接口支持的基础上,结合MiniGU1在嵌入式操 

作系统T—Kernel上的移植,引入了任务与线程一一映射模式,实现了满足实时应用的基 

于T—Kernel的POS1X线程库。通过运行MiniGU1的应用程序,验证了其可以满足程序 

并发执行的要求。 

关键词:T-Kernel;嵌入式操作系统;POS1X线程库;MiniGU1 

中图分类号:TP311 文献标识码:A 

T—Kernel是由TRON发展而来,TRON是日本东京大学坂村健博士于1984年提出的嵌入式操作系统 

规范,目的是想构筑一种理想的计算机结构,实现新的计算体系——“普遍存在的计算环境”(Ubiquitous 

Computing Architecture)_1]。T引擎是由标准化硬件结构(T—Engine)与标准开源实时操作系统核心(T— 

Kerne1)组成的嵌入式系统的开放式标准开发平台 j,它通过标准扩展(Standard Extension)中间件,实现了 

比较完整的GU1支持,但费用较高,因此迫切需要实现T-Kernel对开源GU1的支持。目前,源码开放的轻 

量级的GUI大多基于Linux操作系统,它向支持POS1X线程标准接口的嵌入式操作系统移植比较简单,而 

向TRON标准的嵌入式操作系统移植,由于接口不兼容,实现起来相对较难。为了解决上述问题,本研究结 

合MiniGUI在TRON标准的嵌入式操作系统T-Kernel上的移植,对照任务和线程,采用一一映射模式实 

现基于T—Kernel的POSIX线程库,并给出了线程库的模块结构和实现方法。 

1任务与线程 

任务和线程都是执行并发程序运行的基本调度单位。它们都用信号量、互斥体等机制来实现同步。不 

同的是:任务由操作系统内核支持,不同的操作系统提供不同的调度规则、系统调用及API(Application 

Program Interface)等;线程既可以在系统内核态中实现,又可以通过线程库在用户态实现,而且接V1已经实 

现了标准化。 

1.1 T—Kernel任务 

在T—Kernel中,并行程序执行的基本逻辑单元称为“任务”。每个任务都有独立的内存空间,用来保存 

任务程序代码、任务堆栈和任务控制块。一个任务的程序是顺序执行的,而不同任务的程序可以并行执行。 

T—Kernel的并行是通过内核控制任务间的分时机制来实现的[2]。 

按照调度的需要,任务的状态可分为下面5种:运行状态、就绪状态、广义的等待状态(包括等待状态、挂 

起状态、等待一挂起状态)睡眠状态、不存在状态I2]。 

1.2 POSIX线程 

随着UNIX系统的发展,人们对多线程的定义及对支持多线程所需要的功能达成共识,为了统一多线 

程的接V1,出现了POSIX操作系统线程接V1标准I3]。 

收稿日期:2007—09—12 

作者简介:陈刚(1973一),男,山东青岛人,硕士研究生,主要研方向为嵌入式系统。 

维普资讯

第4期 陈刚,等:基于T—Kernel的POSIX线程库的研究与实现 65 

在POSIX中线程是“进程(Processes)”中某个单一顺序的控制流。一个进程可以拥有多个线程,一个 

线程必须有一个父进程,并且与父进程的其它线程共享该进程所拥有的全部资源。进程可以创建和撤消线 

程,从而实现程序的并发执行。从应用程序设计的角度来看,线程就是一个用来解决用户问题的函数和与之 

相关联的一些数据结构而构成的一个实体『4]。 

线程也称轻量级进程(Lightweight Processes)。就象进程一样,线程在程序中是独立的、并发的执行路 

径,每个线程有它自己的堆栈、自己的程序计数器和自己的局部变量。但是,与分隔的进程相比,进程中的线 

程之间的隔离程度要小。它们共享内存、文件句柄和其它每个进程应有的状态。 

线程具有就绪、阻塞、运行和结束四种基本状态,有5种基本操作:派生、阻塞、激活、调度、结束。 

综上可以得出: 

1)任务和线程的主要差别在于它们是操作系统资源管理的不同方式。任务有完全独立的地址空间;线 

程有自己的堆栈和局部变量,同时共享进程中的变量,便于线程问同步和通讯。 

2)任务和线程在状态和调度上稍有差别。任务的状态较多,调度机制灵活,能更好的满足实时需求。 

POSIX线程来源于通用操作系统UNIX,由进程派生,结构复杂,实时性较差。 

2线程库及其实现 

线程库是支持多线程接口的程序库,它包括以下功能: 

1)创建和销毁线程;2)在线程间传递消息和数据;3)线程调度;4)保存和恢复线程上下文。 

我们利用T—Kernel操作系统提供的系统调用函数和API函数,来实现移植所需的POSIX线程库的功 

能。 

2.1线程库 

线程库主要有3种模式: 

1)核心线程库:操作系统内核直接支持线程,线程的调度等操作都由操作系统内核负责,如Win32线程 

库。 

2)用户态线程库:操作系统内核不支持线程,由线程库提供线程机制,线程的调度等操作都由线程库完 

成。 

3)混合线程库:把线程库中的线程映射到操作系统的线程,但不一定是一一映射,线程的调用由线程 

库负责,如Solaris线程库。 

本研究中的线程库采用混合方式,用T—Kernel的任务作为内核线程,在映射上采用一一映射方式。这 

样可以充分利用操作系统本身的任务调度机制实现调度能力,可降低调度的复杂度,有利于在T—Kernel上 

实现线程库。 

2.2线程库的实现 

移植采用MiniGUI—Threads版本,这种版本运行 

在POSIX标准的多线程模式下,它的许多模块都以单独 

的线程运行。同时,MiniGUI还利用线程来支持多窗 

口。通过构造线程库来实现T—Kernel对MiniGUI的支 

持。 

2.2.1体系结构 

图1给出在T—Kernel上实现POSIX线程体系结构 

图。 

其中,线程在应用程序中创建,线程库完成线程和任 

务一一映射,以及同步和通信信号转换。调度和同步在 图1在T-Kernel上实现POSIX线程体系结构图 

操作系统T—Kernel中完成。对MiniGUI的用户,操作系统的系统调用和并行处理是透明的。 

维普资讯

66 

2.2.2模块划分 

青岛大学学报(自然科学版) 第20卷 

完成移植除了需要实现POSIX线程库的通用功能外,还要实现malloc/free等堆内存管理和printf/ 

sprintf等I/0功能,这些功能同样需要调用T—Kernel的相关系统调用和API来实现。因此,为了方便实 

现,按照功能和代码规模将线程库划分为5大模块。它们对应5个C语言的源文件。其中,Pthread、Pmu— 

tex、Psemaphore分别实现POSIX标准的线程、互斥体、信号量接口,Pmalloc和Pprintf实现内存管理和I/ 

O功能。所有模块实现后,将它们编译生成Tthread.a库文件,即线程库。 

2.2.3功能实现 

表1给出了POSIX线程创建对应的T—Kernel任务创建的系统调用。 

表1 POSIX线程接口与T-Kernel任务系统调用对照表 

功 

能 

项 

目 P0s1X 

i:nt : pt hread_ tc

rea

tet

rea

_

t 

th

rea

1.ID tskid=tk cre tsk 

att

id

ar

t 

c * , 

(T_CTSK*pk_ctsk)创建任务 

2.ER ercd—tk_sta_tsk(ID tskid,INT stacd)启动任务 

1.pk

etsk包管内谷: 

_

VP exinf任务扩展信息 

pthread_t thread: 

指向pthread_ 的变量,用来存放新线程的ID ̄

pthread

ATR tskatr任务属性 

FP 

task任务起始地址 

PRI itskD 任务初始优先级(】一14O越小越高) 

a r_ attr:

传 

创 

递 

与其他程序的交互,如果传递的是空指针 作为线 …一 三 … c… 

ttribut

e) 做

(NU LL) 

程属性,将以缺省的方式创建。 

试 ( )( d ). 

系统堆栈的大小(字节为单位) 

VP 

建 

线 

程 

参 

stkptr用户堆栈指针 

数 

指向线程运行程序的指针。 

通常类型如下: 

…  ,……. 

、1P 

tb任务空间页表 

或 

任 

务 

INTlsid逻辑空间ID 

V。id ( )(void )V。id arg,一个指向空类型的指针 ID 

resid资源ID 

(void*)。当线程运行时,这个指针将向线程运行程序传 uB d

sna me[8]Ds对象名称 

递参数。 2

IDtskidf ̄ID 

INT stacd仟务启动代码(俜涕给任务参数) 

返回值为ID tskid(任务ID或错误代码),初始状态为睡眠 

状态。 

返回错误代码,成功返回零,初始为激活状态 

返 

回 

错误代码如下: 

E_N0MEM内存不足 

E_LIMIT任务数目超出系统限制 

E_RSATR保留的属性 

错误代码: 

errno 

参 

数 

详见errno.h 

httpt“ N .1inux.org/ 

_

NOSPT不支持的功能(不支持TA) 

E_PAR参数错误 

E_ID无效ID(resid) 

E_NOC ̄P指定的协处理器不能使用 

从上表可以看出,POSIX线程创建与T—Kernel任务创建无论在调用格式还是参数及返回参数上都有 

较大差距。因此,用POSIX线程创建接口来封装T—Kernel任务创建的系统调用需要完成以下工作: 

1)编写头文件pthread.h对线程创建函数pthread_create()进行函数声明。 

2)在pthread.h中重新构造线程属性结构体pthread—attr—t,屏蔽T—Kernel任务不支持的竞争空间 

(scope)和调度策略(schedpolicy)等结构体成员。 

维普资讯

第4期 陈刚,等:基于T—Kernel的POSIX线程库的研究与实现 67 

3)在pthread.C中用T-Kernel的系统调用编写函数pthread—create()的实现程序,转换调用参数和返 

回参数,完成相应功能。 

对于线程库的其他功能的实现方案如下: 

1)利用任务的任务相关同步函数(任务状态转换)、同步和通信函数(信号量、事件、邮箱)和扩展同步和 

通信函数(互斥体、信息缓冲、集合点)实现在线程间传递消息和数据以及线程调度功能。 

2)将线程转换为任务后,保存和恢复线程上下文完全由T—Kernel内核的任务上下文保存和恢复来执 

行,不必在线程库中实现。 

3 系统测试 

构造基于T—Kernel线程库的主要目的是为了完成MiniGUI在T—Kernel上的移植,让使用MiniGUI开 

发的,具有良好图形用户界面的应用程序能够在T—Kernel上运行。 

3.1系统测试平台 

为了完成移植与测试,需要搭建一套系统测试平台,用来对移植程序进行调试和修改。 

系统测试平台包括以下3部分: 

1)宿主机:移植宿主机为装有WindowsXP操作系统及编译工具ADS(ARM Developer Suite)的PC 

机,它可以发出一些高层的调试命令,例如设置断点、访问内存等。 

2)调试器:移植源代码的调试采用ARM JTAG在线仿真,其作用是将调试主机的高层调试命令转换 

为底层的ARM JTAG调试命令。 

3)目标板:目标板采用的海尔软件自主开发的TK板,此板的CPU采用三星¥3C4510B CPU,用于接 

受和执行调试命令。 

3.2 MiniGUI的移植 

移植工作主要位于移植层(Portable Layer),其中包括对图形抽象层GAL(Graphics Abstract Layer)、 

IAL输入抽象层(Input Abstract Layer)、Pthread线程库的移植。抽象层定义了一组不依赖于任何特殊硬 

件的抽象接El,所有顶层的的图形操作和输入处理都建立在抽象接El之上。用来实现这一抽象接El底层代 

码称为图形引擎和输入引擎,类似于操作系统中的驱动程序[5]。将MiniGUI移植到T—Kernel上的体系结 

构如图2。 

3.3测试验证 

为了验证POSIX线程库功能,用MiniGUI编写了下拉菜单测试程序;然后,与按需求重新配置的 

MiniGUI源文件及POSIX线程库在ADS环境中进行编译;再把编译成功的移植源代码通过JTAG在线仿 

真调试器烧写到目标板上,调试成功后运行测试程序见图3。 

I 

MiniGUI Kernel

! ! !窒 堡! l 

(MiniGUI ̄) ] 

L 匝 卫 正亘 至二]卜 j 

图2带有MiniGUI T_Kemel体系结构 图3下拉菜单界面 

测试程序中的键盘响应、窗口创建、消息传递、菜单处理均运行正常,这表明线程库的运行是有效和可靠 

的,达到了预期目标。 

维普资讯

68 青岛大学学报(自然科学版) 第20卷 

4结论 

本研究采用线程库成功实现了针对MiniGUI用户图形界面的移植。移植采用在T—Kernel上开发 

POSIX线程库的方案,扩展了T—Kernel的应用领域,极大方便了Linux下开发的程序向T—Kernel的移植, 

扩展了MiniGUI的移植空间;同时,该方案为解决嵌入式软件的兼容性,降低嵌入式产品的开发成本提供了 

新途径。 

参考文献: 

E1]Jan Krikke.T-Engine:Japaffs Ubiquitous Computing Architecture Is Ready for Prime TimeEJ'].PERVASIVE compu— 

ting,2005,2:4—9. 

[2](日)坂村健,等.源码开放的嵌入式实时操作系统T—KernelEM'].北京:北京航空航天大学出版社,2005. 

[3]Josh Aas.Understanding the Linux 2.6.8.1 CPU SchedulerEM'].Silicon Graphics,Inc.(SGI).2005. 

[4]任哲.嵌入式实时操作系统uC/OS--II原理及应用[M].北京:北京航空航天大学出版社,2005. 

[5]北京飞漫软件技术有限公司.MiniGUI技术白皮书[0L/E].http://Ⅵr、vw.fmsoft.cn/whitepaper/MiniGUITechWhite— 

Paper.版本2.0 

Research on POSIX Thread Library 

Base on T——— Kernelernel 

CHEN Gang,JIANG Jing 

(College of Information Engineering,Qingdao University,Qingdao 266071,China) 

Abstract:Combining with the migration of MiniGUI on T—Kernel,this paper analyzes how to support 

POSIX(Portable Operating System Interface)by T--Kernel and introduces an one‘‘to‘‘one model between task 

and thread to implement the real time POSIX thread library.Through running the MiniGUI application 

program,the library was tested and verified to satisfy the requirements of concurrent procedure. 

Key words:T—Kernel;embedded RTOS;POSIX thread library;MiniGUI 


本文标签: 线程 任务 实现