VxWorks实时性能探究
VxWorks
操作系统是一款硬实时操作系统,一直听闻其实时性能非常优秀,但是一直没有一个直观地概念。
笔者最近在使用 VxWorks , 由大名鼎鼎的风河(WindRiver)开发。本篇文章就是将VxWorks操作系统和市面上几种其他实时操作系统的实时性能进行对比。
前期知识准备
实时性能和响应时间有关,为此,先对计算机操作系统中的时间概念和时间尺度进行一下介绍。
1 s = 1000 ms = 1000000 us = 1000000000 ns,看不出来1 s时间还是很长的嘛
-
时钟周期:主频为4 GHz的CPU的时钟周期为1/4G = 0.25 ns,时钟周期是计算机中最基本的、最小的[时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。
-
CPU周期:CPU周期亦称机器周期,一条指令执行过程被划分为若干阶段,每一阶段完成所需时间。完成一个基本操作所需要的时间称为机器周期。通常用内存中读取一个指令字的最短时间来规定CPU周期。
-
指令周期:取出并执行一条指令的时间。想要详细了解可以看这篇文章【浅析】CPU中的指令周期、CPU周期和时钟周期
-
内存时钟周期:相比CPU,一般的DDR内存芯片速率仅为400 MHz,时钟周期达2.5 ns, 再加上总线延时,导致内存访问时间达到几十纳秒。CPU运行速率与内存访问速率比大致为100:1。
-
硬盘读取时间:硬盘的读写速度就更慢了,一般的机械硬盘的完成一次读写所需要的时间,主要取决寻道时间+旋转时间,完成一次读或者写的时间量级大致为ms级别,因此内存访问速率与磁盘存取速度比大致为1000:1。
上面是有关硬件方面的时间周期情况,对于操作系统或者应用程序来说,我们一般关注的是算法的时间复杂度和空间复杂度,这是从整理理想的情况来衡量一个算法的优劣。如果想要详细了解每条代码的执行所耗时间,我们需要更深入了解代码是怎么在计算机上执行的。
C语言代码都是经过预处理、编译,产生汇编代码(汇编代码几乎已经接近机器码了),一句高级语言代码相当于汇编语言的几行甚至几十行。而学过汇编语言的都应该知道,不同的汇编代码指令执行所耗费的时间也是不同的。一般来说,移位,加法,取反这种指令只需要一个时钟周期,而乘法,除法等指令需要几个乃至几十个时钟周期执行。
实时操作系统(RTOS)的实时性能评价指标
实时操作系统的实时性能评价指标一般有两个:
- 任务切换时间
当多任务应用程序运行在操作系统上时,它把正在运行的任务的状态保存到任务自己的栈区之中,然后把下一个将要运行的任务的当前状态从该任务的栈区装入CPU的寄存器,并开始这个任务的执行,这个过程就叫做任务切换。
- 中断响应时间
计算机接收到中断信号到操作系统做出响应,并完成切换转入中断服务程序的时间。
下图是几种实时操作系统的实时性能对比:
可以看出不管是任务切换时间还是中断响应,VxWorks都是最好的,当然VxWorks也是最贵的。
此外我们还可以看出不管是任务切换还是中断响应,时间尺度都是在几个us,根据CPU主频的不同,大概是几千个时钟周期的样子。 下面代码是测试执行100万次简单循环语句所耗费的时间:
int i = 1000000;
int j = 0;
while(i){
j += 0;
i--;
}
timer = 2033 us //执行100万次该循环所耗时间,可以将执行每次的时间和任务切换的时间进行对比