操作系统中经常用到的数据结构:
队列: 先进先出(可以用数组,也可以用链表)主要用于对象的排列
堆栈:先进后出(主要用数组实现)用于程序模块的嵌套运行
多任务系统:能用1个CPU并发(非同时)地运行多个程序的计算机管理系统
占有了PC的程序就是占有了CPU
所谓的切换就是PC(程序计数器) <-----目标地址
数据传送指令:
子程序返回指令
中断服务程序返回指令 都由堆栈弹出
任务的切换就是运行环境的切换
任务的三要素:程序代码、私有堆栈、任务控制块。
任务控制块TCB(任务在系统中的身份证): 主要作用是保存该任务的虚拟处理器的堆栈指针寄存器SP
同时还需要保存该任务的优先级别,任务的状态。
uc/os 2是用任务的优先级来作为任务的标识的。
多个任务靠任务控制块组成了一个任务链表。
uc/os2的任务代码结构是一个可以带有临界段的无限循环。
系统提供的空闲任务OSTaskIdle() : 只做计数工作。没有调用任务延时函数。
系统提供的统计任务OSTaskStat(): 每秒计算一次cpu在单位时间内被使用的时间,以方便应用程序了解CPU的使用率。
uc/os2把任务的优先级分为64个优先级别,数字越大表示优先级越低。
设置最低优先级别常数OS_LOWEST_PRIO意味着系统有OS_LOWEST_PRIO个优先级别。
队列: 先进先出(可以用数组,也可以用链表)主要用于对象的排列
堆栈:先进后出(主要用数组实现)用于程序模块的嵌套运行
多任务系统:能用1个CPU并发(非同时)地运行多个程序的计算机管理系统
占有了PC的程序就是占有了CPU
所谓的切换就是PC(程序计数器) <-----目标地址
数据传送指令:
子程序返回指令
中断服务程序返回指令 都由堆栈弹出
任务的切换就是运行环境的切换
任务的三要素:程序代码、私有堆栈、任务控制块。
任务控制块TCB(任务在系统中的身份证): 主要作用是保存该任务的虚拟处理器的堆栈指针寄存器SP
同时还需要保存该任务的优先级别,任务的状态。
uc/os 2是用任务的优先级来作为任务的标识的。
多个任务靠任务控制块组成了一个任务链表。
uc/os2的任务代码结构是一个可以带有临界段的无限循环。
系统提供的空闲任务OSTaskIdle() : 只做计数工作。没有调用任务延时函数。
系统提供的统计任务OSTaskStat(): 每秒计算一次cpu在单位时间内被使用的时间,以方便应用程序了解CPU的使用率。
uc/os2把任务的优先级分为64个优先级别,数字越大表示优先级越低。
设置最低优先级别常数OS_LOWEST_PRIO意味着系统有OS_LOWEST_PRIO个优先级别。
最低和倒数第二低级别的分别赋给了空闲任务和统计任务。
任务堆栈 TASK_STK_SIZE OS_STK TaskStk【TASK_STK_SIZE】
目的: 保存CPU寄存器的内容和存储任务私有数据。
创建任务的时候需要传递任务的堆栈指针和任务的优先级别
注意:使用OSTaskCreat()创建任务的时候,要确认CPU对于堆栈增长的方向是支持向上还是支持向下。
创建新任务的时候,必须把诸如任务指针、任务堆栈指针、程序状态字等CPU需要的数据放在任务堆栈里。
主要是通过调用OSTaskStkInit()
任务堆栈的初始化也就是对任务的虚拟处理器的初始化(复位)。