第六课--定时器
- 格式:ppt
- 大小:609.00 KB
- 文档页数:34
7.1 定时器定时器对于计算机系统是不可缺少的,对于网络系统更是如此。
网络协议需要依靠定时器进行流量控制、丢包检测及恢复、队列调度等。
当以下任一情况发生时,定时器模块的性能成为一个问题。
(1)我们知道一次中断处理的开销为几个微秒,如果每个时钟滴答在微秒量级,那么中断开销是很大的。
(2)定时器粒度细,即使不用CPU处理每个时钟滴答的中断,启动/终止定时器的延迟也要很短。
Linux最细的时钟粒度是1ms。
(3)同时活跃的定时器数量很多:查找和操作定时器的延迟也要很短。
当网络速度提高时,以上问题会更加突出。
一方面,网络速度提高了,RTT变小(特别在局域网内),需要细粒度的定时器精确地测量RTT,以及实现更快速的重传和错误恢复。
其次,基本上每个包的收、发都会涉及到定时器的启动或终止,包速率提高了,启动/终止定时器的速度自然也要提高。
当前网络速度已经达到万兆以上,服务器同时处理的连接数至少也在百万量级,这给定时器管理带来巨大的压力。
定时器模块的组成一个定时器模块由4个例程组成。
(1)StartTimer (Interval, RequestID, ExpiryAction):客户调用该例程来启动一个定时器,定时器在Interval个时间单位后超时。
客户提供一个RequestID,用于区分客户启动的不同定时器。
ExpiryAction指出超时后采取什么动作,比如,调用一个客户指定的例程或设置一个事件标志。
(2)StopTimer (RequestID):该例程利用客户和RequestID的信息来定位定时器,并终止定时器。
(3)PerTickBookkeeping:每隔一个定时器滴答(由定时器的时间粒度决定),该例程检查是否有任何定时器超时;如果是,调用ExpiryProcessing例程。
(4)ExpiryProcessing:该例程执行StartTimer调用中指定的ExpiryAction。
前2个例程由客户调用,后两个例程由定时器管理程序调用,所用定时器通常是一个外部硬件时钟。
定时器实现原理
定时器是一种可以在特定时间间隔内重复执行特定任务的设备或程序。
它通常由计时器、计数器和控制逻辑构成。
定时器的原理是通过计时器来计算时间,当计时器达到设定的时间值时,触发计数器来执行相应的操作。
具体实现如下:
1. 使用计时器:定时器通常使用计时器来计量时间。
计时器可以通过硬件设备实现,也可以通过程序来模拟。
2. 设置计时器初始值:在定时器启动之前,需要设置一个计时器初始值。
该初始值表示定时器开始计时的时间。
3. 计时器开始工作:定时器启动后,开始随着时间的流逝而计时。
4. 每隔一段时间,检查计时器的值:定时器会不断地检查自身的计时值,判断是否达到了设定的时间间隔。
5. 触发计数器:当计时器的计时值达到设定的时间间隔时,触发计数器执行相应的操作。
这个操作可以是调用一个函数、发送一个信号,或者触发一个中断等。
6. 重置计时器:计数器执行完操作后,定时器会将计时器的计时值重置为初始值,继续开始新的计时周期。
通过以上步骤,定时器就能够实现在特定时间间隔内重复执行
特定任务的功能。
定时器广泛应用于各种领域,如操作系统中的定时任务调度、嵌入式系统中的定时中断等。