在嵌入式系统中,我们使用RTOS,而在服务器或个人电脑等性能要求更高的地方我们经常使用Linux,这两者到底有什么区别?本文较详细的介绍了RTOS与Linux系统的特点,并做了简单的对比。
实时操作系统(Real Time Operating System,简称RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,调度一切可利用的资源完成实时任务,并控制所有实时任务协调一致运行的操作系统。提供及时响应和高可靠性是其主要特点。
实时多任务操作系统( RTOS)是嵌入式应用软件的基础和开发平台,是一段嵌入在目标代码中的软件,用户的其他应用程序都建立在 RTOS 之上。 RTOS 通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器 Browser 等。RTOS 还是一个标准的内核,将 CPU 时间、中断、 I/O、定时器等资源都包装起来,留给用户一个标准的 API,并根据各个任务的优先级,合理地在不同任务之间分配 CPU 时间。随着应用的复杂化,一个嵌入式控制器系统可能要同时控制 /监视很多外设,要求有实时响应,有很多处理任务,各个任务之间有多种信息传递, 如果仍采用原来的程序设计方法存在两个问题。一是中断可能得不到及时响应,处理时间过长,这对于一些控制场合是不允许的,对于网络通信方面则会降低系统整体的信息流量。二是系统任务多,要考虑的各种可能也多,各种资源如调度不当就会发生死锁,降低软件可靠性,程序编写任务量成指数增加。
RTOS与其他系统的区别在于它严格按照任务优先级执行,而在非实时操作系统(例如Linux)上,虽然任务也分优先级,但对于长时间未处理的低优先级任务,它会在有其他优先级更高的任务时处理该任务,这样照顾了系统的性能,但是带来了不确定性,对于RTOS来说,每一个任务的处理顺序都是固定的、可预见的,因为它一直响应优先级高的任务,即”实时性“。
14种主流的RTOS,分别为μClinux、μC/OS-II、eCos、FreeRTOS、mbed OS、RTX、Vxworks、QNX、NuttX,国产的嵌入式操作系统包括都江堰操作系统(djyos)、Alios Things、Huawei LiteOS、RT-Thread、SylixOS。
分时操作系统中的基本调度单位一般是进程(或者线程),而对于实时操作系统,其内核调
度的基本单位是任务。任务一般由任务控制块、程序区、数据区、堆栈区组成,堆栈又分为
系统堆栈和用户堆栈。 任务的驱动一般是基于消息或者事件的, 即任务的设计是按照依次
处理可能接收到的消息和事件,周而复始轮询循环的。实时操作系统中的任务有四种状态:
运行( Executing),就绪( Ready),挂起( Suspended),冬眠( Dormant )。
主要实时操作系统的任务间同步和通信的机制有:消息、事件、信号量;少部分实时操作系
统仍使用邮箱机制;还有一些实时操作系统提供了共享内存的任务间通信机制。
实时操作系统内存管理模式可以分为实模式与保护模式。目前主流的实时操作系统一般都可
以提供两种模式,让用户根据应用自主选择。另外,实时操作系统的内存管理还有对于内存
的优化分配,以尽量减少整个系统的内存占有量的要求。
实时时钟是系统调度的基础,也是系统定时服务器的基础。实时时钟服务一般包括定时唤醒
(tm_wkafter 或者 tm_wkwhen )、定时事件( tm_evafter 或者 tm_evwhen )机制。
是操作系统的一个核心和基本的功能。实时操作系统要求中断处理程序更加短小、精悍,以
减少中断禁止时间和中断延迟时间。
1)硬件抽象层(HAL)包含了所有和硬件平台相关的代码,如上下文切换和 I/O 寄存器访问
等等。它存在于 RTOS 的最底层,直接访问和控制硬件,对其上层的 RTOS 的机器无关代
码提供访问和控制服务。 这样可以简化 RTOS 内核的移植工作, 除了设备驱动程序之外,
在移植的时候只需要修改 HAL 的代码就可以了。
2)RTOS 内核(Kernel)是用来为大多数程序乃至 OS(网络、文件系统、驱动程序)构建一
系列在抽象的文件上工作的抽象机,使用户程序及上层 OS 组件对系统设备透明。
3)在提供的 RTOS 接口上需要有对用户程序提供的函数接口,专门为用户定制网络、图形、
视频等接口。并且提供驱动程序开发界面,方便开发者对不同需求的设备定制驱动程序。一
般来说,RTOS 内核的实现都为微内核的体系结构。 所谓微内核技术是指将必需的功能(如
进程管理、任务通信、中断处理、进程调度)放在内核中,而将那些不是非常重要的核心功
能和服务(文件系统、存储管理、网络通信、设备管理)等等作为内核之上可配置的部分。
这样,整个操作系统就是由提供一些基本服务机制的微内核加上一些服务进程构成,系统的
各个系统调用和服务都是由内核发消息到不同的服务进程, 服务进程执行相应的操作, 然
后以消息的方式返回内核。
(1)保证任务执行的实时性;(2)简化多任务切换和资源分配及网络消息管理;(3)模块
化便于软件扩展、移植和再使用;(4)提高编写出的软件可靠性;(5)使软件开发从 “小
生产阶段 ”进入到 “大生产阶段 ”。
Linux,全称GNU/Linux,是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。伴随着互联网的发展,Linux得到了来自全世界软件爱好者、组织、公司的支持。它除了在服务器方面保持着强劲的发展势头以外,在个人电脑、嵌入式系统上都有着长足的进步。使用者不仅可以直观地获取该操作系统的实现机制,而且可以根据自身的需要来修改完善Linux,使其最大化地适应用户的需要。
Linux不仅系统性能稳定,而且是开源软件。其核心防火墙组件性能高效、配置简单,保证了系统的安全。在很多企业网络中,为了追求速度和安全,Linux不仅仅是被网络运维人员当作服务器使用,甚至当作网络防火墙,这是Linux的一大亮点。
Linux具有开放源码、没有版权、技术社区用户多等特点,开放源码使得用户可以自由裁剪,灵活性高,功能强大,成本低。尤其系统中内嵌网络协议栈,经过适当的配置就可实现路由器的功能。这些特点使得Linux成为开发路由交换设备的理想开发平台。
全世界大部分的服务器运行着Linux操作系统,其中99%的超级计算机都是使用Linux。
提供了先进的网络支持、多任务、多用户、符合 IEEE POSIX 标准、支持数十种文件系统格式、完全运行于保护模式、开放源代码、采用先进的内存管理机制,更加有效地利用物理内存。Linux 低成本开发系统、可应用于多种硬件平台 、可定制的内核 、性能优异 、良好的网络支持。
前面提到过,RTOS是实时的,也就是优先级高于一切,正在执行的任务,不管完成度是多少,都会与其他任务的优先级进行比较,一旦有优先级更高的任务,该任务就会中断,而在Linux中,虽然有优先级划分,但正在执行的任务不再与其他任务做比较,以处理效率优先。
————————————————
Linux操作系统在2.5版本以后改进使得进程可抢占,但Linux并不能保证可预见性和确定性。Linux中一个最大的问题是优先级倒置现象。比如,一个当一个低优先级进程在临界区时,高优先级进程必须等待低优先级进程;或者,一个低优先级中断服务进程正在运行,那高优先级进程必须等待。这种现象会造成极大不确定性。还有就是,Linux使用的自旋锁。自旋锁会导致一个进程不停的进行自循环,并持续占有cpu资源,在多核处理器上,这会导致某个核心上的进程无故停等。
值得一说的是,linux中虽然也存在优先级调度,但在linux中高优先级不是一定会优先运行,且linux中任务的优先级是会发生改变的,如下所述:
我们一般把频繁等待的线程称之为IO密集型线程,而把很少等待的线程称为CPU密集型线程,而把很少等待的线程称为CPU密集型线程, IO密集型线程总是比CPU密集型线程容易得到优先级的提升。
在优先级调度下,存在一种饿死的现象,一个线程被饿死,是说的优先较低,在它执行前总有比它优先级高的任务要执行,导致它无法执行。为了避免饿死现象,调度系统常常会逐步提升那些等待了过长时间的得不到执行的线程的优先级。
所以虽然linux的实时性有所提高,但它并不是实时操作系统。
相比于Linux, RT-Linux在实时性方面进行了改进,它是在Linux的基础上,提出了一个RT补丁,加入到Linux,将Linux改进成实时操作系统。
它的主要工作就是对Linux的优先级倒置、自旋锁等问题,进行改进,达到实时操作系统的要求。
————————————————
版权声明:本文为CSDN博主「胡涂涂~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/KUNPLAYBOY/article/details/121897318