Linux内核定时器笔记

发表于:2010-2-05 10:49

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

#
Linux
#
linux
分享:

  80X86体系结构上,常用的定时器电路

  实时时钟(RTC)

  RTC内核通过IRQ8上发出周期性的中断,频率在2-8192HZ之间,掉电后依然工作,内核通过访问0x70和0x71 I/O端口访问RTC。

  时间戳计时器(TSC)

  利用CLK输入引线,接收外部振荡器的时钟信号,该计算器是利用64位的时间戳计时器寄存器来实现额,与可编程间隔定时器传递来的时间测量相比,更为精确。

  可编程间隔定时器(PIT)

  PIT的作用类似于微波炉的闹钟,PIT永远以内核确定的固定频率发出中断,但频率不算高。

  CPU本地定时器

  利用PIC或者APIC总线的时钟计算。

  高精度时间定时器(HPET)

  功能比较强大,家机很少用,也不去记了。

  ACPI电源管理定时器

  它的时钟信号拥有大约为3.58MHZ的固定频率,该设备实际上是一个简单的计数器,为了读取计算器的值,内核需要访问某个I/O端口,需要初始化

  定时器的数据结构

  利用timer_opts描述定时器

  Timer_opts的数据结构

  Name :标志定时器员的一个字符串

  Mark_offset :记录上一个节拍开始所经过的时间,由时钟中断处理程序调用

  Get_offset 返回自上一个节拍开始所经过的时间

  Monotonic_clock :返回自内核初始化开始所经过的纳秒数

  Delay:等待制定数目的“循环”

  定时插补

  就好像我们要为1小时35分34秒进行定时,我们不可能用秒表去统计,肯定先使用计算时的表,再用计算分的,最后才用秒表,在80x86架构的定时器也会使用各种定时器去进行定时插补,我们可以通过cur_timer指针来实现。

  单处理器系统上的计时体系结构

  所有与定时有关的活动都是由IRQ线0上的可编程间隔定时器的中断触发。

  初始化阶段

  1. 初始化间,time_init()函数被调用来建立计时体系结构

  2. 初始化xtime变量(xtime变量存放当前时间和日期,它是一个timespec类型的数据结构)

  3. 初始化wall_to_monotonic变量,它跟xtime是同一类型的,但它存放将加在xtime上的描述和纳秒数,这样即使突发改变xtime也不会受到影响。

  4. 看是否支持高精度计时器HPET

  5. 调用select_timer()挑选系统中可利用的最好的定时资源,并让cur_timer变量指向该定时器

  6. 调用setup_irq(0,&irq0)来创建与IRQ相应的中断门。

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号