1、操作系统分类
操作系统分为实时操作系统和分时操作系统:
(1)分时操作系统
将多个任务按照相同的时间片,轮流调度
(2)实时操作系统
在规定的时间内完成执行的操作
2、μC/OS-II操作系统
μC/OS-II 是一种基于优先级的抢占式多任务实时操作系统,包含了实时内核、任务管理、时间管理、任务间通信同步(信号量,邮箱,消息 队列)和内存管理等功能。它可以使各个任务独立工作,互不干涉,很容易实现准时而且无误执行,使实时应用程序的设计和扩展变得容易,使应用程序的设计过程大为减化。
μC /OS-II是一个完整的、可移植、可固化、可裁剪的抢占式实时多任务内核。μC/OS-II绝大部分的代码是用ANSII的C语言编写的,包含一小部分汇编代码,使之可供不同架构的微处理器使用。至今,从8位到64位,μC/OS-II已在超过40种不同架构上的微处理器上运行。μC/OS-II已经在世界范围内得到广泛应用,包括很多领域, 如手机、路由器、集线器、不间断电源、飞行器、医疗设备及工业控制上。实际上,μC/OS-II已经通过了非常严格的测试,并且得到了美国航空管 理局(Federal Aviation Administration)的认证,可以用在飞行器上。这说明μC/OS-II是稳定可靠的,可用于与人性命攸关的安全紧要(safety critical)系统。除此以外,μC/OS-II 的鲜明特点就是源码公开,便于移植和维护。
3、μC/OS-II和μC/OS-III关系
μC/OS-III是源码公开的商用嵌入式实时操作系统内核。
4、学习μC/OS参考数据
μC/OS操作系统:邵贝贝
5、使用操作系统和不使用操作系统
不使用操作系统,我们把它叫做前后台系统和多任务系统
(1)前后台系统
只有一个main函数,在main函数中有一个while(1),无线循环
前台行为:中断处理程序
后台行为:while(1)死循环里面执行的程序
(2)多任务系统
可以认为它有多个函数,每个函数都相当于一个main函数,里面都有一个while(1)死循环,然后操作系统就提供了一个任务调度机制:时间片轮转(为每个任务:带死循环的函数,平均分配处理时间)
(3)前后台任务和多 任务系统区别
前后台系统
优点:系统结构简单、程序体积小、占用内存小
缺点:对任务级任务响应时间不确定(main函数里面while循环内,排序靠后程序时间受排在他前面的程序执行的时间的影响)
多任务系统
优点:任务响应时间确定(每个任务执行时间是确定的)
缺点:由于加入了操作系统,所以操作系统会占用内存和CPU,对于小的系统是不能运行多任务的操作系统
6、内核调度算法
常见内核调度算法:时间片轮转和优先级调度
时间片轮转:为每个任务都分配一定的执行时间,然后按时间调度执行:一旦分配执行时间结束,立即移出内核
优先级级别:为每个任务分配不同的优先级别,按照优先级别调度执行:低优先级任务只有在高优先级任务执行完之后才能执行
时间片轮转和优先级别调度结合:同样还是为每个任务分配优先级,但是优先级可以相等,在不同优先级别的任务间使用优先级调度,在同等优先级别任务间使用时间片轮转:只有在高优先级任务调度结束之后,才会调度低优先级任务,而同等任务之间是在时间片轮转的方法下进行调度
7、优先级调度算法
在使用优先级别调度算法的内核中,又分为可剥夺内核和不可剥夺内核:
可剥夺内核:当一个高优先级任务由于等待资源或者延时主动放弃CPU的时候进入休眠的时候,一个低优先级的任务开始运行了,这时候,如果高优先级的任务解除了休眠或者等来满足的资源了,可以打断当前低优先级的任务
不可剥夺内核:和可剥夺内核相反,即使是高优先级也不能打断低优先级
8、可重入函数和不可入函数
可重入函数:每次调用函数执行的结果是一样的
例如,在函数中使用局部变量,每次进入只要传递实参一样,运行的结果是一样的
不可冲入函数:每次运行的结果不一样
例如,一个通过传递变量地址进行交换变量值的函数swap:
int temp;
void swap(int *x, int *y)
{
temp = *x;
*x = *y;
*y = temp;
}
当任务A、任务B都是调用swap完成数据交换的时候,当任务正好执行到temp = 100,而当任务B优先级别高于A,强占之后,调用swap时,temp=50,那么当任务A回来继续调度的时候temp就被修改了(任务和任务共用堆栈,而局部变量在堆栈中,堆栈是任务间私有,而全局变量是公共的)
使用不可剥夺行内核,使用不可冲入函数和可重入函数都可以,而可剥夺内核只能用可重入函数