ARM RTX操作系统—Theory of Operation—System Task Manager & Task Management

System Task Manager

任务管理器是一个系统任务进程,在每次RTX内核时钟发生timer tick interrupt时会运行,也就是每次RTX内核时钟发生中断都会运行。这个进程拥有最高的优先级而不会被其他进程取代。这个进程的基本任务,就是负责调度用户的任务进程。

基于RTX内核的用户任务进程,并不真正意义上是同时运行,他们是分时间片来运行的,time-sliced。可用的CPU timer,会切分成很小的时间片。RTX内核将一个时间片分配给某个任务进程。因为一个时间片很短(默认的时间片是10ms),所以看起来任务进程像是同步运行的。

每个任务进程执行的最小时间长度是一个时间片的长度。如果任务进程通过调用os_tsk_pass交出了时间片或者调用了wait library中的一个API函数,那么RTX内核会切换到下一个ready进程去run。可以再RTX_Config.c中配置时间片长度。

任务管理器,是一个system tick timer任务进程,负责管理其他的所有任务进程。它管理进程的延时超时,将等待的进程置于sleep状态。当需要的事件发生时,它会将对应的进程重新置于read状态去run。这就是为什么它有最高优先级的原因。

任务管理器不仅在RTX内核时钟中断时才运行,同样当一个中断函数调用isr_函数时它也运行。这是因为中断并不能让当前任务进程处于等待状态,因为中断也无法做任务进程的切换工作。然后,中断可以产生事件、信号量、消息给高优先级的任务。高优先级的任务会在当前中断完成之后,抢占当前任务。

为了做到上述这一点,因此,当前中断将会在其将要完成之时,强制产生RTX内核时钟中断。这个强制产生的RTX内核时钟中断,会让任务管理器开始运行。这样任务管理器开始处理所有的任务进程,并将高优先级的任务进程置于running state。最后高优先级的任务进程得以运行。

注意:

任务管理进程,也叫system tick timer任务进程,是一个系统进程,所以由系统自动创建。

Cortex-M处理器的RTX Library使用该系列处理的增强特性,所有的RTX系统函数运行在SVC模式下。

Task Management

每个RTX任务进程,必定处于以下的一个确定状态下:

1,RUNNING

正在running的任务进程处于这个state。一个时刻只会有一个进程处于这个状态。os_tsk_self()可以返回当前正在跑的任务进程ID。

2,READY

已经准备好run的任务进程还没run,处于ready的状态。当处于running state的任务进程完成运行时,RTX内核会从处于READY状态的任务进程中挑出优先级最高的一个来运行。

3,WAIT_DLY

等待一段延时时间结束的任务进程,处于这个状态。当延时结束后,该任务进程会切换到READY状态。任务进程调用os_dly_wait()函数,可会处于WAIT_DLY状态。

4,WAIT_ITV

等待一个interval完成的任务进程,处于这个状态。当一个interval延时之后,该任务进程会切换到READY状态。任务进程调用os_itv_wait()函数,可会处于WAIT_ITV状态。

5,WAIT_OR

等待至少一个事件标志位被置位的任务进程,处于这个状态。当等待的事件发生之后,该任务进程会切换到READY状态。任务进程调用os_evt_wait_or()函数,可会处于WAIT_OR状态。

6,WAIT_AND

等待所有事件标识位被置位的任务进程,处于这个状态。当所有等待的事件都发生之后,该任务进程会切换到READY状态。任务进程调用os_evt_wait_and()函数,可会处于WAIT_AND状态。

7,WAIT_SEM

等待一个信号量的任务进程,处于这个状态。当token还给semaphore的时候,该任务进程会切换到READY状态。任务进程调用os_sem_wait()函数,可会处于WAIT_SEM状态。

8,WAIT_MUT

等待一个互斥锁的任务进程,处于这个状态。当互斥锁被释放之后,该任务进程会获得这个互斥锁并切换到READY状态。任务进程调用os_mut_wait()函数,可会处于WAIT_MUT状态。

9,WAIT_MBX

等待从mailbox接收一个消息的任务进程,处于这个状态。当消息抵达之后,该任务进程会切换到READY状态。任务进程调用os_mbx_wait()函数,可会处于WAIT_MBX状态。

当mailbox满的时候,需要发送消息的任务进程也会等待,也会被置于WAIT_MBX状态。知道有1个消息从mailbox中被取走,该任务进程会切换到READY状态。在这种情况下,该任务进程调用os_mbx_send(),就会使得该进程处于WAIT_MBX状态。

10,INACTIV

并没有被启动的任务进程,或者被注销的任务进程就处于这个状态。调用os_tsk_create(),会启动一个任务进程;可以通过调用os_tsk_delete()而是该进程处于INACTIV状态

Idle Task

当没有任务进程是准备好可以run的时候,RTX内核会执行idle任务进程os_idle_demon。该进程就是一个无限循环,例如:

for (;;);
一些ARM处理器提供了idle mode来节省功率消耗。当处理器处于idle mode时,program会被停止运行,除了中断和外设。

os_idle_demon是由系统创建的,并且在没有其他任务进程时运行,此时RTX 内核会设置处理器进入idle mode。当RTX内核时钟中断或者其他中断发生时,处理器会被唤醒,然后程序继续运行。

用户可以在os_idle_demon创建自己的程序代码。

时间: 2024-12-15 01:54:16

ARM RTX操作系统—Theory of Operation—System Task Manager & Task Management的相关文章

ARM RTX操作系统—Theory of Operation—System Resources & Scheduling Options

System Resources RTX内核通过任务进程控制模块,来标识一个任务进程.这个模块是一个动态分配的内存单元,存储着任务进程的所有控制和状态变量.当通过调用os_tsk_create or os_tsk_create_user函数来创建一个任务进程时,对应的TCB就被创建了. TCB所占用的内存大小,在RTX_Config.c中定义. RTX内核给任务进程分配了其自己的stack,这块stack内存区域随着TCB一同创建,并且TCB里面存储着这块内存区域的指针. Scheduling

ARM RTX操作系统—Overview—Product Specification

Technorati Tags: [版权说明: 本文是基于本人亲自写作而成,过程中了基于相关的互联网材料或者书籍,如果有原文段落的引用,都会在后面标注为参考材料. 任何转载,必须标注来自本文. 任何出版,必须得到本人许可] RTX内核library可以使用在以下ARM设备上: ARM7 and ARM9 Cortex-M0/M1, Cortex-M3, Cortex-M4, and Cortex-R4 Cortex-M处理器拥有增强的RTOS特性.这些特性使得RTX的内核移植过程更加自动化和低错

ARM RTX操作系统—Overview—Advantages

RTX内核基于并行进程的概念.在RTX内核中,一个任务进程在实现的时候,被划分成了很多更小的同时运行的进程. 使用RTX内核可以得到很多好处: 现实世界的很多任务都是并行处理的,这一概念可以很容易的基于RTX内核来编程实现. 可以创建不用的任务体,这些任务体可以允许在不同时刻运行.因为每个任务体都由一个单独的任务进程来实现,所以每个任务进程的运行是相互独立的. 任务进程之间可以实现按照优先级调度. 将整个软体拆分成小的相互独立的部分,可以减小系统的复杂度,错误数. RTX内核是可伸缩的,额外的任

第6章 RTX 操作系统源码方式移植

本章教程为大家将介绍 RTX 操作系统源码方式移植,移植工作比较简单,只需要用户添加需要的源码文件即可,不需要做任何的底层工作,也不需要用户做任何修改. 源码方式移植 RTX 系统 准备好工程模板后,就可以开始移植了. 首先要做的就是将所有需要的源码文件放到工程模板里面.下面分五步跟大家进行说明,当然,不限制必须使用下面的方法添加源码到工程,只要将需要的文件添加到工程模板即可.? 第 1 步:在工程模板创建 RTX 文件夹 文件 RTL.h 和 RTX_Config.h 在 MDK 安装目录中的

Operation System - Peterson's Solution算法 解决多线程冲突

Person's solution 是用来一种基于软件的解决关键区域问题的算法(critical-section). 它并不是完美的,有可能不对地工作.并且是限制解决两个进程同步的问题. 可是它非常easy,非常原始,学习起来也是非常轻松的. 代码例如以下: do { flag[i] = true; turn = j; while (flag[j] && turn == j); critical section flag[i] = false; remainder section } wh

Operation System - Peterson's Solution算法 解决多线程冲突

Person's solution 是用来一种基于软件的解决关键区域问题的算法(critical-section). 它并非完美的,有可能不正确地工作.而且是限制解决两个进程同步的问题. 但是它很简单,很原始,学习起来也是很轻松的. 代码如下: do { flag[i] = true; turn = j; while (flag[j] && turn == j); critical section flag[i] = false; remainder section } while (tr

System.Threading.Tasks.Task引起的IIS应用程序池崩溃

问题现象 IIS应用程序池崩溃(Crash)的特征如下: 1. 从客户端看,浏览器一直处于连接状态,Web服务器无响应. 2. 从服务器端看(Windows Server 2008 + IIS 7.0),在事件日志中会出现Event ID为5010的错误: A process serving application pool 'q.cnblogs.com' failed to respond to a ping. The process id was '20080'. 这个错误的意思是:IIS检

System.Threading.Tasks.Task引起的IIS应用池崩溃

接口服务运行一段时间后,IIS应用池就会突然挂掉,事件查看日志,会有事件日志Event ID为5011的错误 为应用程序池"PokeIn"提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误.该进程 ID 为"2268".数据字段包含错误号. 最后直接程序池直接被禁用 应用程序池"PokeIn"将被自动禁用,原因是为此应用程序池提供服务的进程中出现一系列错误. 查看管理事件 Applicat

System.Threading.Tasks.Task 任务引起的IIS应用程序池崩溃

转载:http://www.cnblogs.com/aaa6818162/p/4421305.html 问题现象 IIS应用程序池崩溃(Crash)的特征如下: 1. 从客户端看,浏览器一直处于连接状态,Web服务器无响应. 2. 从服务器端看(Windows Server 2008 + IIS 7.0),在事件日志中会出现Event ID为5010的错误: A process serving application pool 'q.cnblogs.com' failed to respond