2024年3月31日发(作者:)
VxWorks
1. VxWorks 任务
任务:在执行时每个程序都被称之为任务。
共享方式访问大多数系统资源,
境。
(1) 任务状态:
就绪(READY):该状态时任务仅等待
睡眠(DELAY):出于睡眠的任务状态。
操作系统学习笔记
VxWorks操作系统中,任务可以直接地或者以
每个任务必须保持有足够的上下文环为了维护各自的线程,
CPU的状态,不等待其他任何资源。
阻塞(PEND):任务由于一些资源不可用而被阻塞时的状态。
挂起(SUSPEND):该状态时任务不执行,主要用于调试用。挂起仅仅约束任务的执行,并
不约束状态的转换,因此
态时任务可以唤醒。
DELAY+S:既处于睡眠又处于挂起的任务状态。
PEND+S:既处于阻塞又处于挂起的任务状态。
PEND+T:带有超时值处于阻塞的任务状态。
PEND+S+T:带有超时值处于阻塞,同时又处于挂起的任务状态。
state+I:任务处于state且带有一个继承优先级。
------------------------------------------------------------------------
| ready | ——> | pended | semTake () / msgQReceive () |
| ready | ——> | delayed | taskDelay () |
| ready | ——> | suspended | taskSuspend () |
| pended | ——> | ready | semGive () / msgQSend () |
| pended | ——> | suspended | taskSuspend () |
| delayed | ——> | ready | expired delay |
| delayed | ——> | suspended | taskSuspend () |
| suspended | ——> | ready | taskResume () / taskActivate () |
| suspended | ——> | pended | taskResume () |
| suspended | ——> | delayed | taskResume() |
------------------------------------------------------------------------
(2) Wind任务调度
在Wind内核中,默认算法是基于优先级的抢占式调度算法,也可以使用轮转调度算法。
任务调度控制函数:
--------------------------------------------------------------
| 调用| 描述|
|
|
|
|
| kernelTimeSlice() | 控制轮转调度
| taskPrioritySet() | 改变任务优先级
| taskLock() | 禁止任务调度
| taskUnlock() | 允许任务调度
--------------------------------------------------------------
基于优先级的抢占式任务调度:
当一个新任务优先级高于系统当前执行任务的优先级时,它将抢占CPU执行。因此,系统
pended-suspended状态时任务可以解锁,delayed-suspended状
内核将确保CPU分配给处于就绪状态的具有最高优先级的任务执行。
缺点:当多个相同优先级的任务需要共享一台处理器时,如果某个执行的任务永不阻塞,那
么它将一直独占处理器,其他相同优先级的任务就没有机会执行。
轮转式调度:
当所有相同优先级的任务处于就绪状态时,轮转算法倾向于平均使用
优先级的任务,通过时间片获得相同的
抢占上锁:
通过调用taskLock()和taskUnlock()函数,可以禁止使用
抢占上锁只能阻止任务的上下文切换,并不禁止中断。
taskLock()和intLock()比较
任务优先级:所有应用任务的优先级应该在
中断服务程序关联的任务)优先级能够位于
(3) 任务异常处理:
(4) 共享代码和重入
VxWorks操作系统中,大多数函数是可重入的。
应函数ldiv_r(),则ldiv() 是不可重入的。
重入技术:
. 动态堆栈变量
. 被信号保护的全局和静态变量
. 任务变量:taskVarAdd(), taskVarDelete()
(5) 操作系统任务VxWorks
/target/config/all/usrConfig.c下函
和taskVarGet()
但若存在一个对应于命名为someName_r()
的函数,someName() 因作为函数重入的版本将认为是不可重入的。例如,ldiv() 有一个对
100-250之间;但是驱动程序支持的任务(与
51-99。
Wind内核调度程序或启用Wind
内核调度程序。当禁止使用调度程序时,若该任务正在执行,不会发生基于优先级的抢占。
CPU处理时间。
CPU,对于所有相同
. tUserRoot:内核执行的首个任务,入口点是安装目录
务、网络任务和
且被删除。
. tLogTask:日志任务
. tExcTask:异常处理任务,必须拥有系统的最高优先级。
. tNetTask:网络任务,用于
数usrRoot(),可初始化VxWorks操作系统的大部分程序,发起诸如日志任务、异常处理任
tRlogind后台程序。正常情况下根任务在所有初始化结束后,终止任务并
VxWorks网络任务级程序处理。通常配置INCLUDE_NET_LIB
组件的VxWorks操作系统可以发起网络任务。
. tWdbTask:目标代理任务,用
理功能。
. 可选组建的任务
. tShell
. tRlogind
INCLUDE_WDB组件配置的VxWorks操作系统包括目标代


发布评论