μC/OS操作系统学习之基本概念区分

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CSDNmianfeixiazai001/article/details/80764586

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就被修改了(任务和任务共用堆栈,而局部变量在堆栈中,堆栈是任务间私有,而全局变量是公共的)

    使用不可剥夺行内核,使用不可冲入函数和可重入函数都可以,而可剥夺内核只能用可重入函数

猜你喜欢

转载自blog.csdn.net/CSDNmianfeixiazai001/article/details/80764586
今日推荐