实时系统和非实时系统的区别

嵌入式操作系统分为实时系统和非实时系统两类,常见的实时系统有:ThreadX、FreeRTOS、ucOS;常见的非实时系统有:windows、linux、Android。两类操作系统的主要区别在于任务调度处理方式不同,常用的任务调度方式有两种:基于任务优先级的任务调度方式和基于时间片的任务调度方式:

  1. 基于任务优先级的调度方式:一旦内核把资源分配给某进程后,便让该进程一直执行,直到该进程完成或发生某事件而被阻塞(常见的方式主动调用delay),才再把处理机分配给其他进程,否则高优先级的任务会一直运行。所以这种情况下,如果某个高优先级的任务运行时间过长最好有阻塞机制,来让出CPU使其他低优先级的任务也有机会运行。
  2. 基于时间片的调度方式:这种方式下,所有任务的优先级相同,当内核给该进程分配的时间片结束后,内核会停止正在执行的这个进程,下一个时间片分配给其他进程执行,即便这个任务没有执行完也没有主动delay自己

实时非实时任务调度的区别
实时操作系统:一般使用基于优先级的调度方式,所以不同优先级的任务,完全基于优先权原则来运行,一旦高优先的任务就绪他可以无条件的,抢占任何正在执行的,低于自己优先级的进程,无论正在运行的进程是否已经进入内核调度。同时也存在基于时间片调度方式,如Freertos系统也有时间片调度模式,当几个任务的优先级相同时,会按照时间片来管理,在优先级相同的任务间切换运行。
非实时操作系统:一般情况下没有任务优先级的概念(例外情况见补充说明),所有任务默认优先级相同,任务调度采用时间片调度方式。

补充说明
有些非实时系统也有优先级的概念,如果非实时系统也定义了优先级和实时操作系统的任务调度方式也是有区别的具体如下:
 任务调度原则不同:
前提Task2 优先级大于Task1且Task1先准备就绪并且已经开始运行
非实时系统:当Task2准备就绪时,不会马上切换到Task2,要等待Task1的时间片结束或者Task1主动挂起后,Task2才开始运行,然后一直运行,直到结束,系统才会再次给低优先级的Task1分配时间片。
实时系统:当Task2准备就绪的那一刻开始,Task1直接就被内核挂起,Task2开始执行,直到结束,系统才会再次给低优先级的Task1分配时间片。
 任务调度的时间不同:
非实时系统:任务调度不是严格实时的,如linux调度时间的最小单位为10ms,windows系统时间片也只是ms级别。
实时系统:调度时间是us级的,而且一般小于10us。
 任务调度算法不同:
实时系统:包含专有的任务调度算法,而且这也是实时系统的核心所在。
非实时系统:无论是linux还是windows,都缺乏有效的实时任务的调度机制和调度算法。

你可能感兴趣的:(实时系统和非实时系统的区别)