rtos和os的7个差异

嵌入式系统和通用系统有不少区别,咱们来聊聊RTOS和OS这7个差异。首先是任务调度。普通操作系统用的是优先级抢先式,任务优先级可以随时调整。 但在嵌入式实时系统里,任务调度的方式不一样,它在编译时就把任务运行表烧进ROM里,运行时直接查表执行,这样任务顺序就非常固定。 为了防止关键数据被突然交换到硬盘,RTOS对内存访问做了很大改动。普通OS用LRU算法管理内存,速度虽然快,但也带来了不可预测性。 RTOS为了堵住这个漏洞,给出了两把锁:把最关键的页钉死在内存中,让页面替换程序无法把它们交换出去;另外还给每个任务分配固定的内存段,防止越界访问。 给中断处理也做了优化。普通OS允许设备驱动处理大部分中断,但中断处理程序优先级高于用户进程。 不过在嵌入式场景里,一旦中断打断一个重要任务,几毫秒的延迟都可能导致系统崩溃。所以RTOS把ISR也放进调度表中:高优先级ISR直接抢占低优先级任务;低优先级ISR必须限时返回。 如果共享资源的问题也得到了很好的解决。普通OS用信号量解决互斥问题简单可靠,但可能发生优先级反转导致系统卡住。 为了解决这个问题,RTOS对信号量进行了升级:资源拥有者升级优先级以避免低优先级任务被永久阻塞;资源请求方也被抬到最高优先级。 把系统调用变成有界执行时间也是一个亮点。普通OS的read()、write()等系统调用返回时间差异大,调试起来像猜谜一样。 RTOS把所有系统调用都设计成可预测的:最坏情况多少时间都写在手册里。这样工程师们就不用再去赌运气了。 核心态代码可重入性也得到了提升。普通OS的核心态代码不可重入,导致低优先级任务在执行文件操作时会阻塞高优先级任务。 RTOS把核心态改造成可重入内核:中断来了直接压栈继续执行;高优先级任务抢占时保存现场并切换上下文。 最后还有辅助工具方面的差别。普通OS出问题才去解决;而RTOS在项目早期就提供了一些工具:比如WCET估算工具能预估代码运行时间;实时性验证工具扫描调度表检查超时风险;任务仿真器在PC上模拟调度表运行情况。 简单总结一下:嵌入式系统既要处理网络协议、开源库这些复杂问题,又要满足硬实时指标;而通用系统追求易用性和丰富功能。 如果项目需要“毫秒级”的实时保证,那么RTOS就是唯一选择;如果只是桌面办公、刷视频这些应用,通用OS的虚拟内存和特效功能依然非常吸引人。