时间片轮询多任务操作系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

•TN_OS_TASK_HANDLE tnOsTaskCreate(void (*pfuncTask)(void),

idata unsgined char *pucStk)
•{
•TN_OS_TASK_HANDLE thRt;
• 通常,为了提高可移植性,采用一个宏或函数来

•for •
(tEihfRA(_t=_编8=G000;t写C;cbt5hT实1Ra系ts现k<s列[T开thNR单_中tO].片Su断c_TM机和aAs,kX关S_t故aT中tA=直S断=K_接S程_;T使tN序hR_用Tt。+A+“S由)K{E_于AFLT=G0i_n”Dy和EOL“S)5{E1A仅=适1”合。// 禁止中断
•与任务控制块相关代码:
•#define __TN_TASK_FLG_DEL •#define __TN_TASK_FLG_RDY •#define __TN_TASK_FLG_DLY
0x00 0x01
0x02
// 任务被删除 // 任务就绪 // 任务延时
•struct tn_os_tcb {
• jmp_buf
时钟节拍处理函数

tnOsTwenku.baidu.commeTick()
• 提供操作系统的一种基本服务——延时服务,延 时以时钟节拍为单位。
• 在TinyOS51中,时钟节拍中断由用户实现,在时 钟节拍中断处理函数中调用tnOsTimeTick()。
PPT文档演模板
时间片轮询多任务操作系统
资源配置与示例
• 全局变量定义
•static idata unsigned char __GucTaskStk[2][32];
时间片轮询多任务操作系统
创建任务函数tnOsTaskCreate()
• 由于tnOsTaskCreate()要操作TCB,而时钟节拍中断中也要操作TCB,因 此tnOsTaskCreate()中操作TCB的代码为临界区代码,要避免被时钟节拍中断 打断。
• TinyOS51中采用开/关中断的方式解决此问题。
•t
•任务的运行时间
•t
•时间片轮询系统中任务运行情况
• 在时间片轮询操作系统中,CPU的执行时间被划分为若干时间 片,然后让处于就绪状态的任务,按顺序轮流占用CPU。当时间片 用完时,即使任务未执行完,系统也剥夺此任务的CPU使用权力。
•所有任务相同对待,分时运行。
PPT文档演模板
时间片轮询多任务操作系统
PPT文档演模板
时间片轮询多任务操作系统
TinyOS51从V1.0到V1.1的改变
•TinyOS51 V1.0和TinyOS51 V1.1的API不同点
TinyOS51 V1.0
TinyOS51 v1.1
任务调度函数 任务延时函数
tnOsSched() 无
__tnOsSched() tnOsTimeDly()
•1 •时间片轮询
•2 •优先级调度
•3 •带优先级调度的时间片轮

• 这种调度算法情况较复杂,类型 较多,自己去学习了解。
PPT文档演模板
时间片轮询多任务操作系统
任务切换时机
•使用时间片轮询调度的操作系统中,会在两种下进行任务切换。
•1 •任务主动请求调度
• 任务在调用操作系统提供的“管理”类服 务(如删除任务等)和“等待”类服务(如延 时、获取信号量、等待消息等)时,会主动请 求调度。
调度算法
•1 •时间片轮询 •2 •优先级调度
•任务A •+ 低优先级 •任务B •+ 中优先级 •任务C •+ 高优先级
•3 •带优先级调度的时间片轮询
•t
•高优先级任务先运行
•t
•高优先级任务抢占低优先级任务
•不同任务不同对待,优先级高任务的先运行。
PPT文档演模板
时间片轮询多任务操作系统
调度算法
时间片轮询多任务操作 系统
PPT文档演模板
2020/11/16
时间片轮询多任务操作系统
目录
•1 •概述 •2 •整体规划 •3 •任务控制块 •4 •内部变量初始化 •5 •创建任务 •6 •启动多任务环境
PPT文档演模板
•7 •任务调度 •8 •时钟节拍中断 •9 •longjmpInIsr() •10 •任务延时 •11 •删除任务
PPT文档演模板
时间片轮询多任务操作系统
目录
PPT文档演模板
•2 •整体规划 •3 •任务控制块
•4 •内部变量初始化
•5 •创建任务 •6 •启动多任务环境
时间片轮询多任务操作系统
tnOsInit()
• 由于TCB增加了一个uiTicks,则在tnOsInit()中进行初始化。
•OS初始化函数代码:
时间片轮询多任务操作系统
协作式多任务系统
• 协作式多任务系统中,任务切换需正在运行的任务主动让出CPU,这不 仅带来一些安全隐患,而且使程序设计相当的复杂。
•任务调度交给操作系统,引入调度算法
•任务 调度
•任务
•安全 •如果一个任务死掉,势必

造成整个系统死掉。
•复杂 性
•运行的任务难以得知其他任 务状态,任务切换时机难以把

setTaskJmp(pfuncTask, pucStk, __GtcbTasks[thRt].jbTaskContext);

__GtcbTask[thRt].ucTaskStat = __TN_TASK_FLG_RDY;

EA = 1;
// 允许中断

return thRt;

}

EA = 1;

__GtcbTasks[thTask].uiTicks = 0;
// 设置初值
•}

• __GthTaskCur = 0;
// 初始运行0号任务
•}
PPT文档演模板
时间片轮询多任务操作系统
目录
PPT文档演模板
•3 •任务控制块 •4 •内部变量初始化
•5 •创建任务
•6 •启动多任务环境 •7 •任务调度
握。
•协作式多任务系统的特点
PPT文档演模板
时间片轮询多任务操作系统
调度算法
•1 •时间片轮询 •2 •优先级调度 •3 •带优先级调度的时间片轮

PPT文档演模板
时间片轮询多任务操作系统
调度算法
•1 •时间片轮询
•任务A •任务B •任务C
•2 •优先级调度
•3 •带优先级调度的时间片轮询
•时间片长度Δt一般为1~10ms
•2 •分配给任务的时间片已到
• 操作系统采用一个周期性的中断来管理时 间片,在这个中断服务函数中,判断运行的任 务是否用完了时间片。
PPT文档演模板
时间片轮询多任务操作系统
目录
PPT文档演模板
•1 •概述
•2 •整体规划
•3 •任务控制块 •4 •内部变量初始化
时间片轮询多任务操作系统
时间片轮询操作系统规划
jbTaskContext;
• unsigned char ucTaskStat;
• unsigned int uiTicks;
•};
•typedef struct tn_os_tcb TN_OS_TCB;
// 任务上下文 // 任务状态 // 任务延时时间
•static data TN_OS_TCB __GtcbTasks[TN_OS_MAX_TASKS]; // 任务控制块数组
•void tnOsInit (void) •{ • TN_OS_TASK_HANDLE thTask;
// 操作的任务
• for (thTask = 0; thTask < TN_OS_MAX_TASKS; thTask++) {

__GtcbTasks[thTask].ucTaskStat = __TN_TASK_FLG_DEL; // 任务初始处于删除状态
➢•
• • •
如是uiT果否ic处ukiisfT于来(i_c延__i判kfG_s(G时不断t_c_tbc状G为任Tb_taTc_态s0务abGks,Tsk。t是[acsts则b[hkt这否TThsauaT[s是ts超aihkTksTs]ki因时[.ca]uts.hkiuk为T。Tsi]Tia.-cusT-ikcki,iTsk]n.is!uyc即-=ck-O;Ts0缩aS)=s{5=k短S10t延更)at{时高|=时的_间版_T。本N_未具TA使有SK用超_//F任时缩LG务功短_R状能延D时态,Y时;标需间志要判使断用任务
• void tnOsStart (void)
•{

EA = 1;

longjmp (__GtcbTask[0].jbTaskContext);
•}
•tnOsInit()中__GthTaskCur = 0, •即当前运行任务为0号任务。
// 允许中断 // 执行0号任务
PPT文档演模板
时间片轮询多任务操作系统
•协作式 •多任务系

•TinyOS51 V1.0
•时间片轮询 调度算法
•时间片轮询 多任务
•操作系统
•TinyOS51 V1.1
• TinyOS51 V1.1采用最简单的时间片轮询调度算法,在每个时钟节拍中 断时调度,即分配给任务的时间片为一个时钟节拍。
• 这样,在任务控制块中不仅不需要保存时钟任务剩余的时钟节拍,而 且也不必编写计算任务的剩余时间和设置任务时间片的代码。
PPT文档演模板
•••••即 •••••v{oi••••••••••d/v{}****TTTTTEwtoa/MLHRF一_iThs••••••••d_k00/v{}0i00***O*lG个}t0oewa/_(D用并isu••••••••••v(d_h简k1/v{coG****i*===户调t=t1=)=olTini/_单eu(dm231i{a0(O011vd_0实用c)...T(s;x;e;oG的x1Ts初创启tttkmMr0innnT0)a现tu0d00nOOOa任0si{O始建动cI)+m;kiO;S时Tsssn+D0务ITTeRa(化任系sn。+vT钟aasT(&i+,kossvit系务统ickk(0i;mo节)dk0CC无+i;统)(dex+rr拍)T)Fee;限/;/////aa//0i_//中ctt)_中循初初eeki((|断(ntt断0环始始)aat。xess服kkr。0中化化r011务u,,;让时tpi__函tm1__钟GGe数r节uu0,cc,拍TTaasskkSSttkks[1[0])];;
•static unsigned char
__GucTask0;
•static unsigned char
__GucTask1;
• 函数实现
•// 分配任务堆栈 •// 任务0测试变量 •// 任务1测试变量
任务函数 •task0()和task1() 时钟节拍中断服务函数 •timer0ISR() main函数 •main()
目录
PPT文档演模板
•5 •创建任务 •6 •启动多任务环境
•7 •任务调度
•8 •时钟节拍中断 •9 •longjmpInIsr()
时间片轮询多任务操作系统
__tnOsSched()
• 任务调度函数__tnOsSched()中也要操作TCB,因此也需要加入开/关中 断代码包含临界区。另外,__tnOsSched()不再提供给任务直接调用,仅供内 部调用,因此添加前缀“__”。
• } • tnOsStart();
•}
•}
时间片轮询多任务操作系统
目录
PPT文档演模板
•1 •概述 •2 •整体规划
•3 •任务控制块
•4 •内部变量初始化 •5 •创建任务
时间片轮询多任务操作系统
任务控制块
• TinyOS51 V1.1增加了延时服务功能,因此,在TCB中增加了一个记录 时间的成员uiTicks。
时间片轮询多任务操作系统
时钟节拍中断
• 大多数操作系统中的延时管理和中断服务程序中的任务切换功能,分 别是用两个函数实现的,由于TinyOS51 V1.1是纯粹的时间片轮询操作系统, 非时钟节拍中断的中断服务程序不进行任务切换操作,因此将二者合二为一。
•1 •延时管理 •2 •任务切换
•for (thTask = 0; thTask < TN_OS_MAX_TASKS;thTask++) {
// 允许中断
•}
PPT文档演模板
时间片轮询多任务操作系统
目录
PPT文档演模板
•4 •内部变量初始化 •5 •创建任务
•6 •启动多任务环境
•7 •任务调度 •8 •时钟节拍中断
时间片轮询多任务操作系统
tnOsStart()
• 在TinyOS51 V1.1中,如果不允许中断,则时钟节拍中断服务程序不会 运行,因此,在tnOsStart()中增加允许中断的代码。
•tnOsSched()
•TinyOS51 V1.0
•保护临界资源
•开/关中断代码
•__tnOsSched()
•TinyOS51 V1.1
PPT文档演模板
时间片轮询多任务操作系统
目录
PPT文档演模板
•6 •启动多任务环境 •7 •任务调度
•8 •时钟节拍中断
•9 •longjmpInIsr() •10 •任务延时
相关文档
最新文档