当内核启动的时候,除了设备驱动线程和用户级线程被创建以外,同时还创建了一个IDLE线程。IDLE线程的优先级最低,只有在其他线程都被阻塞的时候才会被执行。
内核为不同优先级的准备队列设置了头指针和尾指针。这样可以对准备队列中待调度的线程进行快速的增加和移除,提高调度性能。内核也提供了Mutex互斥量和信号量以实现多线程调度中的同步机制。
例如:在一个典型的系统中,等待调度的准备队列由4个优先级的队列组成:由高到低分别为KERNEL,HIGH,NORMAL和IDLE。调度程序将会选择处于优先级别最高的准备队列中的线程去执行完成,如中途因时间片用完则会将其再次放入相应优先级别的准备队列末尾,然后选择下一个线程去调度执行。在准备队列中采用的是简单的FCFS先到先服务的调度方法。采用FCFS调度策略可以说是最简单的调度算法,平均等待时间尽管不是最小,但是实现较为简单。
当一个线程希望进入睡眠时,线程将会被放入到睡眠队列中,并根据该线程的参数设置其睡眠时间。睡眠队列是由线程按需要睡眠的时间的多少,由小到大排列组成的队列。当位于队列前面的线程的睡眠时间结束后,就会从睡眠队列放回到原优先级的准备队列;同时将睡眠队列中的剩余线程按睡眠时间长短进行重新调整。当系统中所有的任务运行完毕时,系统将进入休眠。整个系统的唤醒将由睡眠队列中最早睡眠时间到期的线程所决定。
当线程在等待一个mutex互斥量,或者等待一个semaphore信号量的时候,线程将处于挂起状态(BLOCKED),线程将会被放入到mutex队列或是semaphore队列中,直到等待的资源获得满足,线程才能从mutex队列或是semaphore队列中放回到准备队列中等待新的调度。线程的切换状态如图所示。
下图阐明了一个嵌入式操作系统整体的调度机制。
对于嵌入式系统而言,内存可以说是最受约束的资源之一。为了避免增加额外负担,其内存管理非常简单。
目前系统中空闲内存是按照堆的结构进行管理,采用预先静态分配线程空间的方法,当线程创建和消亡时则由内核进行分配和回收。整个系统采用了简单的单地址空间技术,所有的任务都使用相同的地址空间,这样在任务切换时不需进行地址空间的切换,加快了任务切换的速度.同时,不同的任务相互间通信时也就不必在不同的地址空间中拷贝数据,这也同时提高了任务间通信的效率。
基本提示:
线性表中的每个线程项都包含了:堆栈的当前指针(sp)、基址指针(stack)和堆栈大小(stacksize)、线程的函数地址指针、线程的优先级和保存线程所用设备数量的变量、还有当线程加入到睡眠队列或是挂起队列时用来指向下一个线程的指针。因线程的上下文切换所需要保存的寄存器值等信息所需空间较大,因而采用只有当线程被分配成功后才为其上下文切换开辟存储堆栈的方式,大小由应用线程在创建时设定。
有人知道怎么做吗?我是菜鸟,都不能完全明白上面讲的是什么意思?
6 个解决方案
#1
我完全不知道你要问的是什么.
#2
嵌入式操作系统调度模块中线程的数据结构设计?我想问的就是这个东西怎么做,该从哪里下手
#3
嵌入式操作系统调度模块中线程的数据结构设计?我想问的就是这个东西怎么做,该从哪里下手
#4
帮顶
#5
我也很想帮你啊,可惜我们不会,你到j2me去问问吧.
还有你确定这些东西能用java写?
线性表中的每个线程项都包含了:堆栈的当前指针(sp)、基址指针(stack)和堆栈大小(stacksize)、线程的函数地址指针、线程的优先级和保存线程所用设备数量的变量、还有当线程加入到睡眠队列或是挂起队列时用来指向下一个线程的指针。因线程的上下文切换所需要保存的寄存器值等信息所需空间较大,因而采用只有当线程被分配成功后才为其上下文切换开辟存储堆栈的方式,大小由应用线程在创建时设定。
#6
如果没有操作系统方面的基础知识,的确很难理解上述内容。
楼主可以先找本操作系统方面的书看看。
楼主可以先找本操作系统方面的书看看。
#1
我完全不知道你要问的是什么.
#2
嵌入式操作系统调度模块中线程的数据结构设计?我想问的就是这个东西怎么做,该从哪里下手
#3
嵌入式操作系统调度模块中线程的数据结构设计?我想问的就是这个东西怎么做,该从哪里下手
#4
帮顶
#5
我也很想帮你啊,可惜我们不会,你到j2me去问问吧.
还有你确定这些东西能用java写?
线性表中的每个线程项都包含了:堆栈的当前指针(sp)、基址指针(stack)和堆栈大小(stacksize)、线程的函数地址指针、线程的优先级和保存线程所用设备数量的变量、还有当线程加入到睡眠队列或是挂起队列时用来指向下一个线程的指针。因线程的上下文切换所需要保存的寄存器值等信息所需空间较大,因而采用只有当线程被分配成功后才为其上下文切换开辟存储堆栈的方式,大小由应用线程在创建时设定。
#6
如果没有操作系统方面的基础知识,的确很难理解上述内容。
楼主可以先找本操作系统方面的书看看。
楼主可以先找本操作系统方面的书看看。