在SYS/BIOS中,广义上指被处理器执行的任何独立的指令流。线程是一个能够调用一个函数或者中断服务程序的单点控制。在sysbios系统中一共有硬件中断(HWI)、软件中断(SWI)、任务(Task)、空闲线程(Idle)这四种线程,它们的优先级依次从高到低。关于HWI与SWI的创建笔者分别在SYSBIOS学习笔记---硬件中断(HWI)的创建SYSBIOS学习笔记---软件中断(SWI)的创建这两篇博客中进行了详细的讲解,本次将继续介绍Task与Idle线程的创建,并对比这四种的线程的特点及注意事项。

Task与Idle线程的创建方式与HWI一样,或者说所有线程的创建都分为静态创建和动态创建这两种。下图是一个Task静态创建的配置界面图:

所不同的是任务是有自己独立的栈(stack)的,这就意味着它可以被挂起。内核会为每个任务对象维护一份处理器关键寄存器的副本,以保证被挂起时不会丢失相关的数据。

下面是软件中断线程的一些特点:

1、SYS/BIOS系统内核组件

2、一般在硬件中断线程(HWI)触发

3、0-31优先级(默认0-15)

4、无限制数量(内存允许情况下)

5、不能被挂起必须一直运行到结束除非被抢占

6、与硬件中断线程共用系统堆栈

下面是任务线程的一些特点:

1、SYS/BIOS系统内核组件

2、0-31优先级(默认0-15,优先级0被空闲线程使用,任务最低优先级为1)

3、无限制数量(内存允许情况下)

4、独立内存堆栈

5、更先进的调度技术

- 可以为等待某一事件的发生而被挂起

- 任务会被其他更高优先级的线程打断

6、数量和状态可以在程序执行时动态的更改

7、优先级可以动态的修改

下面是空闲(后台)线程的一些特点:

1、SYS/BIOS系统内核组件

2、非实时性线程

3、当且仅当没有任何其他线程(HWI / SWI / TASK)运行时才会运行

4、所有空闲线程运行在同一个优先级

5、有数量限制

6、可以被任何其它线程随时抢占

7、默认任务堆栈,如果任务线程被禁用使用系统堆栈

8、一个接一个运行,每一个空闲线程函数都会从开始执行到结束。所有函数执行完成之后再从第一个函数开始执行,周而复始。

9、不要在空闲线程使用阻塞语句。

下面给出的是动态创建一个任务线程的代码:

  1. Void TskInit(Void)
  2. {
  3. Task_Params taskParams;
  4. // 动态创建任务
  5. Task_Params_init(&taskParams);
  6. taskParams.priority = 1;
  7. tsk1 = Task_create(UserKEYTsk, &taskParams, NULL);
  8. }

此段代码创建了一个名字叫UserKEYTsk的任务,它的优先级为1,句柄为tsk1。

下图对比了各种线程的一些特性:

 

下图显示出了线程抢占的关系:

硬件中断的内存消耗:

软件中断的内存消耗:

任务的内存消耗:

可见任务线程的内存消耗还是相当大的,对于C6000的来说,是其硬件中断的10倍了。

SYSBIOS学习笔记---线程(Threads)的更多相关文章

  1. JavaSE中线程与并行API框架学习笔记——线程为什么会不安全?

    前言:休整一个多月之后,终于开始投简历了.这段时间休息了一阵子,又病了几天,真正用来复习准备的时间其实并不多.说实话,心里不是非常有底气. 这可能是学生时代遗留的思维惯性--总想着做好万全准备才去做事 ...

  2. Java学习笔记 线程池使用及详解

    有点笨,参考了好几篇大佬们写的文章才整理出来的笔记.... 字面意思上解释,线程池就是装有线程的池,我们可以把要执行的多线程交给线程池来处理,和连接池的概念一样,通过维护一定数量的线程池来达到多个线程 ...

  3. python学习笔记——线程threading (二)重写run()方法和守护进程daemon()

    1 run()方法 1.1 单个线程 在threading.Thread()类中有run()方法. from time import ctime,sleep import threading # 定义 ...

  4. 【多线程】Android多线程学习笔记——线程池

    Java线程池采用了享元设计模式,在系统中维持一定数量的线程,用于处理异步或并发需求,在平时处理异步或并发任务时被广泛使用.这里基于JDK1.8和Android28来整理一些关于线程池的知识点. 一. ...

  5. struts2学习笔记--线程安全问题小结

    在说struts2的线程安全之前,先说一下,什么是线程安全?这是一个网友讲的, 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码.如果每次运行结果和单线程运行的结果是一样 ...

  6. <<Windows via C/C++>>学习笔记 —— 线程优先级【转】

    转自:http://www.cnblogs.com/wz19860913/archive/2008/08/04/1259807.html 每个线程都有一个“优先级”,范围是0-31,0为最低优先级,3 ...

  7. 笔记 线程(threads)

    线程:CPU使用的基本单元(线程ID.程序计数器.寄存器集合.栈). 多线程:一个进程有多个线程 多线程的优点: 增加响应度:当一个交互程序部分阻塞,该程序能继续执行 一个应用程序在同一地址空间有多个 ...

  8. Qt学习笔记 线程(一)

    Qt中的线程是与平台无关的 QThread 提供了创建一个新线程的方法 新建一个线程,继承QThread并重写它的run()当调用 start()函数时会调用重载的run()函数 例: #ifndef ...

  9. 《Java并发编程实战》学习笔记 线程安全、共享对象和组合对象

    Java Concurrency in Practice,一本完美的Java并发参考手册. 查看豆瓣读书 推荐:InfoQ迷你书<Java并发编程的艺术> 第一章 介绍 线程的优势:充分利 ...

随机推荐

  1. .Net Identity OAuth 2.0 SecurityStamp 使用

    起源: 近期帮别人做项目,涉及到OAuth认证,服务端主动使token失效,要使对应用户不能再继续访问,只能重新登陆,或者重新授权. 场景: 这种场景OAuth2.0是支持的,比如用户修改了密码,那所 ...

  2. disk_free_space

    $df = disk_free_space('/')/1024/1024/1024; $df_c = disk_free_space("c:"); $df_d = disk_fre ...

  3. Borg Maze---poj3026最小生成树+bfs

    题目链接:http://poj.org/problem?id=3026 题意:可以理解为给你一个地图上面有S和A的表示一个一个的点,#表示墙,所以需要我们用bfs来计算各点之间的距离: b[i][j] ...

  4. tcp3次握手,https加密,ca认证

    参考: https://baijiahao.baidu.com/s?id=1570143475599137&wfr=spider&for=pc

  5. Jedis 对 Redis 的操作详解

    1. JedisUtil2. 键操作3. 字符串操作4. 字节串4. 整数和浮点数5. 列表6. 集合(Set)7. 散列8. 排序sort 本篇主要阐述Jedis对redis的五大类型的操作:字符串 ...

  6. PHP生成zip压缩包

    /* * $res = new MakeZip($dir,$zipName); *@ $dir是被压缩的文件夹名称,可使用路径,例 'a'或者'a/test.txt'或者'test.txt' *@ $ ...

  7. [lr & ps] 色彩空间管理

    色彩空间 • 定义 色彩空间,Color Space,又称作色域.在色彩学中,人们建立了许多色彩模型,以一维.二维.三维甚至四维空间坐标来表示某一色彩,这种坐标系统所能定义的色彩范围即色彩空间.我们经 ...

  8. 在Win7系统下, 使用VS2015 打开带有日文注释程序出现乱码的解决方案

    在Win7系统下, 使用VS2015 打开带有日文注释程序出现乱码的解决方案 下载: apploc.msi (下载地址:http://microsoft-applocale.software.info ...

  9. 通过脚本获取form表单的数值而不是submit

    jQuery的serialize()方法通过序列化表单值,创建URL编码文本字符串,我们就可以选择一个或多个表单元素,也可以直接选择form将其序列化,如: <form action=" ...

  10. 【环境变量】Linux 下三种方式设置环境变量

    1.在Windows 系统下,很多软件安装都需要配置环境变量,比如 安装 jdk ,如果不配置环境变量,在非软件安装的目录下运行javac 命令,将会报告找不到文件,类似的错误. 2.那么什么是环境变 ...