Linux和Windows中的时间管理

22 篇文章 0 订阅
3 篇文章 0 订阅

原文地址:http://blog.csdn.net/ariesjzj/article/details/7220482

首先是两个常用概念:Cycle和Tick。Cycle是由CPU主频决定的,而CPU主频是由CPU的物理特性决定的,因此它可以说是平台无关的。现在的主流CPU主频都是以G为单位了,所以1个cycle的单位一般在纳秒级别。Tick泛指一段时长(一般为两次timer interrupt间的时长,毫秒级),由操作系统指定(Linux中由Kernel决定,Windows 中由硬件抽象层HAL决定)。


Windows中,还有一个概念叫qunatum,它是线程调度的时间单位。它可分为若干个(如Vista中为2,Windows Server中为12个)Clock intervals(ticks)。Clock interval即两次timer interrupt间的时间间隔。一个clock interval一般为若干个毫秒(如x86单核体系中为10,x86和x64多核体系中为15),该值以100纳秒为单位存并放在KeMaximumIncrement这个内核变量中。quantums以1/3个tick为单位存放,因此1个tick就等于3个quantum单位。这样,Vista中一个quantum就有6个单位。注意.Net中DateTime::Ticks中的tick表示100纳秒,用于记录日期,和前面提到的tick不是一个概念。

Vista之前的系统以clock interval timer来作为quantum的计时。Vista(含Vista)之后,都是转化为clock cycle为计数。这之间的换算关系系统在启动时就算好并放在内核变量KiCyclesPerClockQuantum中。


Linux中有两种计时机制-Low resolution和High-resolution计时。由timer interrupt来记录的为low-resolution计时方式。timer interrupt的时长由开机时确定的体系相关值HZ(范围在12 - 1535 ticks/second之间,默认值50 - 1200 ticks/second,在如VirtualBox此类虚拟机里跑就更低些)确定。HZ就是一秒内的tick数。Linux特有概念jiffies就是最近一次开机后的ticks数,jiffies在每次timer interrupt时更新。High-resolution计时方式则是直接用clock cycles计数。具体方法是用x86体系中的rdtsc读取模型相关寄存器(MSR)。既然是模型相关了,那就意味着这种方式以移植性换取了精确性。


可见,Linux中的Low resolution和High-resolution计时机制的思想分别类似于Windows Vista之前和之后的计时方式。前者用clock tick计时,后者用clock cycle计时。

 


相关文献:

Linux内核的时钟中断机制:http://www.linuxdiyf.com/bbs/thread-15981-1-1.html

Determining and changing the rate of timer interrupts a guest operating system requests: http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1005802

Timekeeping in VMware Virtual Machines:http://www.vmworld.com/docs/DOC-2117/diff?secondVersionNumber=2

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值