Chinaunix首页 | 论坛 | 博客
  • 博客访问: 33103
  • 博文数量: 7
  • 博客积分: 250
  • 博客等级: 二等列兵
  • 技术积分: 82
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-10 08:44
文章分类

全部博文(7)

文章存档

2011年(2)

2008年(5)

我的朋友
最近访客

分类: LINUX

2008-09-10 14:16:08

时钟硬件:


RTC(real time clock): 一种时钟芯片,pc掉电后,继续工作,保持时间
I/0端口: 0x70 寄存器地址索引端口   0x71 数据端口
Linux内核对RTC的唯一用途就是RTC用作“离线”或“后台”的时间与日期维护器。当Linux内核启动时,它从RTC中读取时间与日期的基准值。然后再运行期间内核就完全抛开RTC,从而以软件的形式维护系统的当前时间与日期,并在需要时将时间回写到RTC芯片中。
PIT(可编程间隔定时器): 每个pc都有一个PIT,以通过IRQ0产生周期性的时钟中断信号,普遍的是 inter 8254
I/0端口: 0x40 ~0x43
Intel 8254 PIT3个计时通道:
通道0用来负责更新系统时钟。每当一个时钟滴答过去时,它就会通过IRQ0向系统产生一次时钟中断。
通道1通常用于控制DMACRAM的刷新
通道2被连接到PC机的扬声器,以产生方波信号。
TSC(时间戳记数器): 该寄存器实际上是一个不断增加的计数器,它在CPU的每个时钟周期到来时加1

LINUX对时间的表示


  • 时钟周期(clock cycle)的频率:对由晶振产生的时钟周期进行计数,晶振在1秒时间内产生的时钟脉冲个数就是时钟周期的频率。如(include/asm-mips/timex.c中)                            #define CLOCK_TICK_RATE 1193182    
  • 时钟滴答(clock tick):当PIT通道0的计数器减到0值时,它就在IRQ0上产生一次时钟中断,也   即一次时钟滴答。PIT通道0的计数器的初始值决定了要过多少时钟周期才产生一次时钟中断,因此也 就决定了一次时钟滴答的时间间隔长度。    
  • 时钟滴答的频率(HZ):也即1秒时间内PIT所产生的时钟滴答次数,make menuconfig时,有HZ的专门选项,一般龙芯选择 250HZ   
  • 时钟滴答的时间间隔:Linux用全局变量tick来表示时钟滴答的时间间隔长度,该变量定义在 kernel/timer.c文件中 如:                                                       long tick = (1000000 + HZ/2) / HZ; /* timer interrupt period */     
  • 宏LATCH:Linux用宏LATCH来定义要写到PIT通道0的计数器中的值,它表示PIT将每隔多少个时钟   周期产生一次时钟中断:                                                        LATCH=(1秒之内的时钟周期个数)÷(1秒之内的时钟中断次数)=(CLOCK_TICK_RATE)÷(HZ)                                                                        #define LATCH ((CLOCK_TICK_RATE + HZ/2) / HZ) /* For divider */  

表示系统当前时间的内核数据结构


  • 全局变量jiffies32位的无符号整数,表示自内核启动以来的时钟滴答次数。每发生一次时钟滴答,内核的时钟中断处理函数timer_interrupt()都要将该全局变量jiffies1
  • 全局变量xtime:  表示当前时间距UNIX时间基准19700101 000000的相对秒数值
  • 全局变量sys_tztimezone类型,表示系统当前的时区信息。                                 


引用:
如果想知道的更详细,参看
文件:kernel_clock.pdf
大小:1148KB
下载:下载
阅读(850) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:linux 内核难解宏,函数

给主人留下些什么吧!~~