測試Context Switch time(進程上下文切換時間)
--------------------------------------------------
建立兩個進程(實時進程)並在它們之間傳送一個令牌,如此往返傳送必定的次數。其中一個進程在讀取令牌時就會引發阻塞。另外一個進程發送令牌後等待其返回時也處於阻塞狀態。發送令牌帶來的開銷與上下文切換帶來的開銷相比,能夠忽略不計。 (利用管道傳遞令牌) 測試
測試程序(1) 使用gettimeofday()獲取當前時間 code
--------------------------------------------------
進程
#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; }