LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 711|回复: 4

问一个关于sleep和HZ的问题

[复制链接]
发表于 2009-4-22 00:29:40 | 显示全部楼层 |阅读模式
sleep/usleep是依照什么来实现的呢? 我看以前的帖子觉得是依照HZ的值决定的,再精确也应该不会超过1s/HZ,但是我实验了一下,发现似乎又不是这样的。


HZ为250:

root@myUbuntu:/mnt/lfs# cat /proc/interrupts | grep timer && sleep 1 && cat /proc/interrupts | grep timer
  0:        308   IO-APIC-edge      timer
LOC:    1913564   Local timer interrupts
  0:        308   IO-APIC-edge      timer
LOC:    1913805   Local timer interrupts


tseong@myUbuntu:~/my_progm/14_time$ cat us.c
#include <sys/time.h>
#include <unistd.h>
#include <stdio.h>

main()
{
        struct timeval tv;
        struct timezone tz;
        gettimeofday (&tv,&tz);
        printf("sec %u usec %u\n",tv.tv_sec,tv.tv_usec);
       
        usleep(2);

        gettimeofday (&tv,&tz);
        printf("sec %u usec %u\n",tv.tv_sec,tv.tv_usec);

}

tseong@myUbuntu:~/my_progm/14_time$ ./us
sec 1240331351 usec 159986
sec 1240331351 usec 160175
tseong@myUbuntu:~/my_progm/14_time$ ./us
sec 1240331360 usec 724019
sec 1240331360 usec 724103
tseong@myUbuntu:~/my_progm/14_time$ ./us
sec 1240331423 usec 375991
sec 1240331423 usec 376182

时间精度似乎比1s/250高得多, 为什么?

tseong@myUbuntu:~$ uname -a
Linux myUbuntu 2.6.24-24-generic #1 SMP Wed Mar 25 12:16:54 UTC 2009 i686 GNU/Linux


另一方面,观察不同HZ的kenel下发现确实和HZ高低值有关。
发表于 2009-4-22 04:35:25 | 显示全部楼层
man 7 time, "High-Resolution Timers"
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-22 21:00:51 | 显示全部楼层
$ man 7 sleep
在第 7 节中没有关于 sleep 的手册页条目。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-22 21:23:46 | 显示全部楼层
不知道sleep要不要经过进程调度
回复 支持 反对

使用道具 举报

发表于 2009-4-23 01:21:38 | 显示全部楼层
Post by xxdaystar;1978119
$ man 7 sleep
在第 7 节中没有关于 sleep 的手册页条目。


不好意思,是 man 7 time
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表