首页 > 其他分享 >随想录(rtos和一般os的区别)

随想录(rtos和一般os的区别)

时间:2022-11-23 12:01:16浏览次数:42  
标签:task 优先级 随想录 rtos raw 任务 mutex os



    现在在网上可以看到代码的os很多,既有rtos类型的微内核代码,也有大型的linux kernel代码。大型的os代码包括的内容很多,就拿linux来说,它就包括了调度、文件、网络、驱动等完整的代码内容。而一般的rtos呢,就拿大家熟悉的ucos2来说,只是包含了调度、同步、互斥、时钟等代码。如果系统工程师需要拿ucos2来做一个项目,那么他还需要bsp、lwip、ucGUI、fatfs、driver、framework等很多代码才能组成一个完成的系统。但是,在我看来,rtos和一般os就是两个主要的区别,


    a)rtos中调度的任务永远是优先级最高的

void raw_sched(void)
{
RAW_SR_ALLOC();

/*if it is in interrupt or system is locked, just return*/
if (raw_int_nesting || raw_sched_lock) {
return;
}

USER_CPU_INT_DISABLE();

get_ready_task(&raw_ready_queue);

/*if highest task is currently task, then no need to do switch and just return*/
if (high_ready_obj == raw_task_active) {
USER_CPU_INT_ENABLE();
return;
}

TRACE_TASK_SWITCH(raw_task_active, high_ready_obj);

CONTEXT_SWITCH();

USER_CPU_INT_ENABLE();

}

    这是rawos中调度的一段代码。事实上,任务调度的时机是比较固定的。一方面,任务可能会在资源阻塞的时候主动调度,另一方面就是任务在中断返回的时候发现了优先级更高的任务,这也可能发生调度。当然,不管什么时候发生调度,系统都会挑选优先级最高的任务。而在linux或者windows上面,系统会对任务的优先级进行灵活设置,每个任务都有一个固定优先级和浮动优先级,这是一个显著的特点。



    b)互斥量

/*Must release the mutex by self*/
if (raw_task_active != mutex_ptr->mtxtsk) {
RAW_CRITICAL_EXIT();
return RAW_MUTEX_NOT_RELEASE_BY_OCCYPY;
}

    这是互斥量显著的特点。一般来说,互斥量释放必须由占有mutex的任务自己完成。另外一方面就是,mutex可以避免优先级翻转的问题。换句话说,如果低优先级的任务率先抢占了mutex,那么后面申请mutex的高优先级任务会强迫低优先级任务抬高自己的优先级,这样可以尽快地把mutex让出来。仅此而已。





标签:task,优先级,随想录,rtos,raw,任务,mutex,os
From: https://blog.51cto.com/feixiaoxing/5880829

相关文章

  • 随想录(字节序和位序)
        最近家里面没有了网络,所以写文章的次数也少了。所以,暂时只能利用一下公司加班的时间,补充一下最近的心得。曾经有一段时间,自己对字节序和位序不是很清楚。所以,前......
  • 随想录(软件调试)
       对于很多程序员朋友来说,编写代码要比调试代码快乐的多。似乎创造软件比维护软件更能给人带来成就感。然而,在企业里面维护前人留下的代码也是工作中不可缺少的一项内......
  • 随想录(写给自己的C++编程规范)
       对于我这样一个C语言的程序员来说,编写C++的机会其实不太多。但是我还是比较喜欢写C++语言,原因主要有几个方面:(1)自己学C++语言的时间比较长了,也比较了解,如果从大一的时......
  • 随想录(png的读取和显示)
       之前在阅读FTK代码的时候,发现工程本身用到了PNGLIB的代码。虽然网上关于pnglib的描述文件很多,但是真正好用、可以用的却没有多少。所以,为了学习的方便,我自己做了一个......
  • 随想录(公司程序员的九层楼)
        就IT公司而言,都希望自己的程序员在单位时间内生产出效率最高的代码。但是,不同的人有不同的开发效率。至于说效率之间的差别究竟有多少,还真不得而知。这里写了几个......
  • 随想录(软件中的bug)
       软件由于其特殊性,始终和bug紧密地联系在一起。没有bug的软件是不存在的。为什么这么说呢?我们知道,软件是由很多人完成的,不同的人完成代码的水平是不一样的,一旦沟通不......
  • 随想录(锁的来由和使用)
       对于开发系统级别软件的朋友来说,无论你是主动的还是被动的,锁的应用都是少不了的。很多人用锁,可是却未必知道锁的前世今生,什么时候用锁,什么时候不用锁?该用什么样的锁?......
  • 随想录(编写用户侧定时器)
       定时器是我们在平时开发中经常使用到的工具,特别是在协议的编写上更是必不可少的组成部分。虽然系统本身给我们提供了定时器,但是有的时候,我们也想自己编写一个粗粒度......
  • 随想录(为什么循环队列具有先天的并行性)
       循环队列是很多人喜欢用的一种数据结构。本着先来先服务的特性,循环队列是一种十分简单、健壮的数据结构。不像链表、二叉树,如果使用不慎,就会造成很大的麻烦,但是在循......
  • 随想录(linux下的pv操作)
         关于pv操作部分的内容,其实算不上什么新的东西。但是它对于我们理解信号量、消息处理部分的工作还是有很大帮助的。之前我们给出了一个win32的处理方案,但是实现的......