Linux 定时器应用
实验目的
阅读 Linux 相关源代码,学习 Linux 系统中的时钟和定时器原理,即,ITIMER_REAL
实时计数,ITIMER_VIRTUAL 统计进程在用户模式执行的时间,ITIMER_PROF 统计进程
在用户模式和核心模式下的执行时间。
理解这些定时器的实现机制。
掌握操作定时器的命令,掌握定时器的使用。
实验内容
ITIMER_REAL 实时计数;ITIMER_VIRTUAL 统计进程在用户模式(进程本身执行)
执行的时间;ITIMER_PROF 统计进程在用户模式(进程本身执行)和核心模式(系统代表
进程执行)下的执行时间,与 ITIMER_VIRTUAL 比较,这个计时器记录的时间多了该进程
核心模式执行过程中消耗的时间。
针对一个计算 i 数的进程,设定三个定时器,获取该进程在用户模式的运行时
间,在核心模式的运行时间,以及总的运行时间。
实验提示
一、一个应用定时器的简单例子
我们首先来看一个关于 ITIMER_REAL 定时器的例子。在这个例子里面我们将会设置
一个 ITIMER_REAL 类型的定时器,它每过一秒都会发出一个信号,等到定时到达的时候
(即定时器时间值减到 0),程序将统计已经经过的时间。下面是具体的代码:
/*我们在使用 signal 和时钟相关的结构体之前,需要包含这两个头文件*/
#include <>
#include <sys/>
/*声明信号处理函数,信号相关内容将在第八章同步机制中讲述,读者在这里只要明白这个函数是
在进程收到信号的时候调用就可以了*/
static void sig_handler(int signo);
long lastsec,countsec; /*这两个变量分别用来保存上一秒的时间和总共花去的时间*/
int main(void)
{
struct itimerval v; /*定时器结构体,结构体内容请参阅第三节中的介绍*/
long nowsec,nowusec; /*当前时间的秒数和微秒数*/
/*注册 SIGUSR1 和 SIGALARM 信号的处理函数为 sig_handler*/
if(signal(SIGUSR1,sig_handler)==SIG_ERR)
{
printf("Unable to create handler for SIGUSR1\n");
exit(0);
}
if(signal(SIGALRM,sig_handler)==SIG_ERR)
{
printf("Unable to create handler for SIGALRM\n");
exit(0);
}
/*初始化定时器初值和当前值*/
=9;
=999999;
=9;
=999999;
/*调用 setitimer 设置定时器,并将其挂
实验4 定时器的应用 来自淘豆网www.taodocs.com转载请标明出处.