rtems线程管理与调度(一)
rtemsahi一个以线程为基本调度单位的实施操作系统,调度算法是基于优先级的抢占式线程调度,支持256个线程优先级,0代表最高优先级,主要用于内部线程,255是最低线程,是空闲线程的优先级,用户线程的优先级在1-254之间,支持创建同优先级的多个线程,采用时间片轮转调度,调度器寻找下一个最高优先级就绪线程的时间是恒定的,这也是实时性得到保障的一个关键机制。为了保障硬实时的特性,选择了静态调度算法-速率单调调度(rate monitonic scheduling 简称RMS)是为周期性任务解决多任务调度的一种很好的方法。
rtems并没有从底层独立实现这三种API(POSIX、CLASSIC、ITRON),实际上都是在rtems的核心层上的thread handler组件进行封装的。rtems中的threadxxx文件包含的thread_xxx函数就是线程管理的super core层,也就是核心层thread handler的主要实现。
核心层的thread handler组件
提供了thread_control结构体和以此配套的一组基本的线程管理数据和管理函数,涉及线程初始化、线程启动、线程暂停、线程恢复执行、线程切换等,不同的高层api接口实现只是对这些结构和函数的封装,这样线程管理就可以分为两层,对rtems支持不同API接口扩展会很方便。
线程控制块:
thread control block 简称TCB,是thread control handler组件对线程的静态基本情况和动态运行变化过程的描述,包含了与管理线程运行所需要的所有信息集合,是线程存在的唯一标识,因为线程的创建主要体现在为该线程生成一个TCB,终止主要体现在回收其TCB。管理也是。
应用层任务可以通过系统核心层提供的系统调用接口来改变TCB内部的成员变量,同时需要注意的是TCB是rtems中唯一的能经由用户扩展例程被应用访问的rtems内部的数据结构。
线程调度机制:
每个线程运行时间很短,基本上都是采用可抢占的调度方式,为了更加灵活,提供四种机制让用户对线程调度进行干预:
1.用户指定线程优先级。
2.线程抢占控制
3.线程时间片控制
4.主动放弃处理器:可使用rtems_task_wake_after函数主动放弃对处理器的占用。
转载于:https://www.cnblogs.com/sichenzhao/p/9320315.html
rtems线程管理与调度(一)相关推荐
- 操作系统知识点大总结【进线程管理与调度】
文章目录 一.进程管理 二.进程的组成 1.进程的概念 2.进程的程序段.数据段.PCB 三.进程的特征与状态 1.进程的特征 2.进程的基本状态 3.进程的运行状态 四.进程的控制 五.进程的通信与 ...
- Linux内核线程kernel thread详解--Linux进程的管理与调度(十)【转】
转自:https://blog.csdn.net/gatieme/article/details/51589205 版权声明:本文为博主原创文章 && 转载请著名出处 @ http:/ ...
- RTEMS线程调度算法(RMS)详解
RTEMS是以线程为基本调度单位的,调度算法基于优先级的抢占式线程调度,支持256个线程优先级.当然RTEMS值hi创建同等优先级线程,相同优先级的线程采用时间片轮转调度.调度器寻找下一个最高优先级就 ...
- Unix进程和线程管理及其异同
Unix进程和线程管理及其异同 一,进程 1,什么是进程 在最初的单处理器系统中,系统中的多道程序按照一定规则切换而实现多任务处理,后来发现多个程序并发导致系统资源被共享,为了描述和管理程序对共享资源 ...
- Linux进程退出详解(do_exit)--Linux进程的管理与调度(十四)
Linux进程的退出 linux下进程退出的方式 正常退出 从main函数返回return 调用exit 调用_exit 异常退出 调用abort 由信号终止 _exit, exit和_Exit的区别 ...
- Linux进程描述符task_struct结构体详解--Linux进程的管理与调度(一)
转自:http://blog.csdn.net/gatieme/article/details/51383272 日期 内核版本 架构 作者 GitHub CSDN 2016-05-12 Linux- ...
- Linux 操作系统原理 — 进程与线程管理
目录 文章目录 目录 前言 进程与线程 内核线程,用户线程与轻量级进程 内核线程 轻量级进程 用户线程 轻量级进程与用户线程的区别 用户线程与轻量级进程的混合模式 用户线程和内核线程的区别 线程的实现 ...
- Linux内核——进程管理与调度
进程的管理与调度 进程管理 进程描写叙述符及任务结构 进程存放在叫做任务队列(tasklist)的双向循环链表中.链表中的每一项包括一个详细进程的全部信息,类型为task_struct,称为进程描写叙 ...
- Linux下1号进程的前世(kernel_init)今生(init进程)----Linux进程的管理与调度
Linux下有3个特殊的进程,idle进程(PID=0PID=0), init进程(PID=1PID=1)和kthreadd(PID=2PID=2) * idle进程由系统自动创建, 运行在内核态 i ...
最新文章
- 台积电新工艺路线图披露:7nm最快明年4月试产
- Leaflet中实现添加比例尺控件与自定义版权控件与链接
- python中的__iter__ __reversed__ __next__
- MaxCompute(ODPS)上处理非结构化数据的Best Practice
- 反序列化 php R类型,pikachu-PHP反序列化、XXE、SSFR
- 110_Power Pivot特殊结算日期及财年日期
- Javascript document对象常用的方法和属性
- 如何成为信息安全专家
- Linux内存管理:kmemcheck介绍
- PNG和PVR之间互相转换的脚本
- [js]promise学习2
- html5 progress css,CSS内容:HTML5进度上的attr()不起作用
- 计算机刷bios版本,怎么升级Bios?教你快速更新升级Bios
- 软件工程 | 第三章 需求分析
- 加密word文档脱壳教程
- 阿里oss客户端直传
- 车架号OCR识别算法
- 【Linux】《Linux命令行与shell脚本编程大全》阅读笔记
- Android错误:unexpected text found in layout file
- C++开源游戏推荐,植物大战僵尸(Cocos2dx开源项目)
热门文章
- 作为HTC在MWC2012移动世界大会上推出的全新系列产品。
- SQL SERVER定时备份数据库
- Android Vector笔记
- MySQL InnoDB锁机制全面解析分享
- AutoIt3(AU3)开发的智能驱动安装工具,用于系统封装,支持参数静默启动
- OC动态创建的问题变量数组.有数组,在阵列13要素,第一个数据包阵列,每3元素为一组,分成若干组,这些数据包的统一管理。最后,一个数组.(要动态地创建一个数组).两种方法...
- (转)C#操作XML的完整例子——XmlDocument篇
- 初涉网络实验-路由器端口的开启与配置
- read-sequence的返回值
- 部署 kubernetes 集群(CentOS7.3,K8S1.8.3)