RT-Thread内核之线程调度

对于刚接触操作系统的人来说,进程/线程等专有名词会让人感到头晕,一大堆的概念…而国内的专业书籍往往喜欢一上来就弄一堆的专业词汇来解释,让人越看月糊涂。笔者以菜鸟的身份来发表自己对这些概念的理解,如果错误之处,还请勿喷^_^!

在我们生活这个社会中就可以看成是一个系统,而把人看成是这个系统中的最小实体。而对于操作系统而言,进程/线程/任务就可以看成是操作系统这个系统中的“人”,整个系统就是由这些“人”组成。每个线程有自己的生命周期(生老病死),特殊之处在于这些“人”的命运掌握在使用系统的使用者手上。

在RT-Thread系统中的“人”被称为“线程”,叫啥根本不重要。既然有了“线程”这种实体,必然需要去管理它们。因此,在操作系统这个系统软件肩负了管理这些“线程”的使命,可不能让这些“线程”乱来。这点类比现实的社会也是这样:可以把国家比喻成操作系统,自然人比喻成线程。那么,国家就会指定一些条条框框来管理人。操作系统也是一样的,在有限的资源(CPU,内存等)如何让这些线程有序的使用,必然需要指定一系列的规则,而线程管理就是为此而生!!

后续将进行详细的代码分析。。。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-09-29 11:18:23

RT-Thread内核之线程调度的相关文章

RT Thread学习历程(1):串口乱码问题

因为学习实时系统,最近接触到RT Thread. 把RT Thread官网上的示例代码烧录到STM32的板子上之后,在串口软件上接收到的全是乱码,一开始以为是串口软件的问题,换了2个软件之后情况都一样,最后发现是晶振的问题,我用的是STM32F407VGT6,晶振要设为8MHz,代码相应的设置晶振的部分也要修改.

RT-thread内核之线程调度算法分析

一个操作系统如果只是具备了高优先级任务能够“立即”获得处理器并得到执行的特点,那么它仍然不算是实时操作系统.因为这个查找最高优先级线程的过程决定了调度时间是否具有确定性,例如一个包含n个就绪任务的系统中,如果仅仅从头找到尾,那么这个时间将直接和n相关,而下一个就绪线程抉择时间的长短将会极大的影响系统的实时性.当所有就绪线程都链接在它们对应的优先级队列中时,抉择过程就将演变为在优先级数组中寻找具有最高优先级线程的非空链表. RT-Thread内核中采用了基于位图(bitmap)的优先级算法(时间复

RT-thread内核之线程调度器分析

一.前言 RT-Thread中提供的线程调度器是基于全抢占式优先级的调度,在系统中除了中断处理函数.调度器上锁部分的代码和禁止中断的代码是不可抢占的之外,系统的其他部分都是可以抢占的,包括线程调度器自身.系统总共支持256个优先级(0 - 255,数值越小的优先级越高,0为最高优先级,255分配给空闲线程使用,一般用户不使用.在一些资源比较紧张的系统中,可以根据情况选择只支持8个或32个优先级的系统配置).在系统中,当有比当前线程优先级还要高的线程就绪时,当前线程将立刻被换出,高优先级线程抢占处

RT-thread内核之线程调度器

http://www.cnblogs.com/King-Gentleman/p/4278012.html 一.前言 RT-Thread中提供的线程调度器是基于全抢占式优先级的调度,在系统中除了中断处理函数.调度器上锁部分的代码和禁止中断的代码是不可抢占的之外,系统的其他部分都是可以抢占的,包括线程调度器自身.系统总共支持256个优先级(0 - 255,数值越小的优先级越高,0为最高优先级,255分配给空闲线程使用,一般用户不使用.在一些资源比较紧张的系统中,可以根据情况选择只支持8个或32个优先

RT-Thread内核之线程调度(五)

scheduler.c分析 /** * 中断嵌套的层数 */ extern volatile rt_uint8_t rt_interrupt_nest; extern int __rt_ffs(int value); /** * 调度器锁的层数 */ static rt_int16_t rt_scheduler_lock_nest; /** * 线程优先级链表数组: 是一个含有RT_THREAD_PRIORITY_MAX * 个数组元素的链表 */ rt_list_t rt_thread_pri

STM32 + RT Thread OS 串口通讯

1.   创建项目 a)   禁用Finsh和console b)   默认情况下,项目文件包含了finsh,它使用COM1来通讯,另外,console输出(rt_kprintf)也使用了COM1.因此,在运行scons命令生成项目文件之前,修改rtconfig.h,禁用这两项.(下图L65, L70) c)   生成项目文件 运行scons --target=mdk4 –s 打开生成的项目文件,可以看到,文件组finsh已经不再被包含进来了. d)   创建echo.c 新建一个C文件echo

RT-Thread内核之线程调度(三)

4.RT-Thread中的线程? /** * 线程结构 */ struct rt_thread { /** Object对象 */ char        name[RT_NAME_MAX];                      /**< 线程的名字 */ rt_uint8_t  type;                                   /**< 对象的类型 */ rt_uint8_t  flags;                                

RT thread 设备驱动之串口设备

本文以stm32f4xx平台介绍串口驱动,主要目的是: 1.RTT中如何编写中断处理程序 2.如何编写RTT设备驱动接口代码 3.了解串行设备的常见处理机制 所涉及的主要源码文件有:usart.c,usart.h,serial.c,serial.h 一.RTT的设备驱动程序概述 编写uart的驱动程序,首先需要了解RTT的设备框架,这里以usart的驱动来具体分析RTT的IO设备管理.注:参考<RTT实时操作系统编程指南> I/O设备管理一章. 我们可以将USART的硬件驱动分成两个部分,如下

RT-Thread内核之线程调度(四)

以下为线程部分的源码分析: extern rt_list_t rt_thread_priority_table[RT_THREAD_PRIORITY_MAX]; extern struct rt_thread *rt_current_thread; extern rt_list_t rt_thread_defunct; /****************************************************************************************

RT-Thread内核之线程调度(二)

1.什么是临界区? 临界区是指访问共用资源的程序片段.通俗来说,临界区是一段程序代码,但这段代码在访问公共的资源(如全局变量,如某个硬件设备),因此,这段代码的执行必须加锁以保证互斥访问. 2.什么是调度器? 调度器的本质就是一个调度函数,该调度函数的本质就是按照一定的调度算法选出一个最优的个体(线程.进程或任务),并切换到该实体去执行,实质就是让该实体获得CPU的使用权.那么调度器在系统中什么时候会被调用呢?最容易想到的就是系统时钟中断处理程序中,正占用CPU的实体主要让出CPU时,有新的实体