测试Context Switch time(进程上下文切换时间)
--------------------------------------------------
创建两个进程(实时进程)并在它们之间传送一个令牌,如此往返传送一定的次数。其中一个进程在读取令牌时就会引起阻塞。另一个进程发送令牌后等待其返回时也处于阻塞状态。发送令牌带来的开销与上下文切换带来的开销相比,可以忽略不计。 (利用管道传递令牌)
测试程序(1) 使用gettimeofday()获取当前时间
--------------------------------------------------
#include <stdio.h> #include <stdlib.h> #include <sys/time.h> #include <time.h> #include <sched.h> #include <sys/types.h> #include <unistd.h> //pipe() int main() { int x, i, fd[2], p[2]; char send = 's'; char receive; pipe(fd); pipe(p); struct timeval tv; struct sched_param param; param.sched_priority = 0; while ((x = fork()) == -1); if (x==0) { sched_setscheduler(getpid(), SCHED_FIFO, ¶m); gettimeofday(&tv, NULL); printf("Before Context Switch Time %u us\n", tv.tv_usec); for (i = 0; i < 10000; i++) { read(fd[0], &receive, 1); write(p[1], &send, 1); } exit(0); } else { sched_setscheduler(getpid(), SCHED_FIFO, ¶m); for (i = 0; i < 10000; i++) { write(fd[1], &send, 1); read(p[0], &receive, 1); } gettimeofday(&tv, NULL); printf("After Context SWitch Time %u us\n", tv.tv_usec); } return 0; }