嵌入式操作系统的多线程机制研究与实现 |
|
|
件资源,较高的实时性要求是对嵌入式操作系设计的基本要求。在操作系统当中可以同时存在多个进程,一个进程内又可以同时存在多个线程[2]。从理论上分析,一个操作系统中可以同时存在大量的进程和线程。但是嵌入式系统具有很强的功能专一性,同时运行大量的线程的情况很少存在。针对嵌入式系统的这些情况,本文设计的多线程模型如图1所示。 在这个多线程模型中,进程调度器与线程调度器都是内核的一部分,进程调度器只负责对进程的调度,线程调度器只对线程进行调度。当发生进程调度时,进程调度器从运行队列中选择将要运行的进程,然后启动线程调度器。线程调器启动后从该进程的线程队列中选择将要运行的线程,然后切换进程。当线程运行时发生调度,将直接启动线程调度器,进行线程之间的切换。 2 多线程机制在内核级的实现 多线程机制在内核级主要完成调度工作,接下来以ARM的Cortex-M3内核为例对多线程的实现进行研究。为了实现对多线程的支持,需要在进程TCB(task control block)结构中增加对线程的描述变量,其中最关键的两个变量是ThreadQueue和CurrentThread。ThreadQueue是线程队列的头指针,CurrentThread指向当前运行的线程。进程调度器完成对进程调度后启动线程调度器,图2是线程调度器的流程图,多线程调度器首先对ThreadQueue判断,查看是否有线程存在,如果没有线程存在,则返回。当有线程存在时,如果CurrentThread为空,则说明这是第一次运行线程,这时保存进程的ESP寄存器的内容,否则,保存当前线程(也就是CurrentThread所指向的线程)的ESP寄存器的内容。如果线程实现分时调度算法,则从当前线程位置开始,依次在线程队列中找到下一个满足执行条件的线程。因为线程可能处于睡眠状态,所以要判断线程是否处于等待状态。对于线程的睡眠,不必在每次启动线程调度器时都遍历线程链表中的所有的线程来判断线程的睡眠时间是否超时,这样做会增加调度器的运行时间,对于小型的嵌入式系统,这是不能容忍的。所以,可以在找到该线程时通过对线程进入睡眠时系统计数器加睡眠时间与当前系统计数器进行比较来判断是否睡眠超时[3]。因而,对于线程TCB块必须存在两个变量ThreadDly和ThreadCnt,ThreadDly用于保存需要上一页 [1] [2] [3] [4] [5] [6] [7] 下一页 |
|
|
|
上一个论文: 谈操作系统中的死锁问题 下一个论文: 操作系统教学方法研究 |
|