Linux之时钟中断

本文详细介绍了Linux操作系统中的时钟中断,包括时钟中断的物理产生、Linux如何实现时钟中断,以及与之相关的函数。时钟中断是操作系统的重要组成部分,用于维护系统时间、进程调度和其他关键任务。Linux通过初始化8253/8254定时/计数器,设置时钟中断的频率,并通过一系列函数如timer_interrupt()、do_timer_interrupt()、do_timer()来处理时钟中断事件。
摘要由CSDN通过智能技术生成

from:深入分析Linux内核源码(http://oss.org.cn/kernel-book/

 时钟中断的产生

     Linux的OS时钟的物理产生原因是可编程定时/计数器产生的输出脉冲,这个脉冲送入CPU,就可以引发一个中断请求信号,我们就把它叫做时钟中断。

“时钟中断”是特别重要的一个中断,因为整个操作系统的活动都受到它的激励。系统利用时钟中断维持系统时间、促使环境的切换,以保证所有进程共享CPU;利用时钟中断进行记帐、监督系统工作以及确定未来的调度优先级等工作。可以说,“时钟中断”是整个操作系统的脉搏。

时钟中断的物理产生如图所示:

                       
                                                              图 8253和8259A的物理连接方式

操作系统对可编程定时/计数器进行有关初始化,然后定时/计数器就对输入脉冲进行计数(分频),产生的三个输出脉冲Out0、Out1、Out2各有用途,很多接口书都介绍了这个问题,我们只看Out0上的输出脉冲,这个脉冲信号接到中断控制器8259A_1的0号管脚,触发一个周期性的中断,我们就把这个中断叫做时钟中断,时钟中断的周期,也就是脉冲信号的周期,我们叫做“滴答”或“时标”(tick)。从本质上说,时钟中断只是一个周期性的信号,完全是硬件行为,该信号触发CPU去执行一个中断服务程序,但是为了方便,我们就把这个服务程序叫做时钟中断。

Linux实现时钟中断的全过程

1.可编程定时/计数器的初始化

IBM PC中使用的是8253或8254芯片。有关该芯片的详细知识我们不再详述,只大体介绍以下它的组成和作用,如下表5.1所示:

 

表         8253/8254的组成及作用

名称

端口地址

工作方式

产生的输出脉冲的用途

计数器0

0x40

方式3

时钟中断,也叫系统时钟

计数器1

0x41

方式2

动态存储器刷新

计数器2

0x42

方式3

扬声器发声

控制寄存器

0x43

/

用于8253的初始化,接收控制字

 

计数器0的输出就是图5.3中的Out0,它的频率由操作系统的设计者确定,Linux对8253的初始化程序段如下(在/arch/i386/kernel/i8259.c的init_IRQ()函数中):

 

set_intr_gate(ox20, interrupt[0]);

/*在IDT的第0x20个表项中插入一个中断门。这个门中的段选择符设置成内核代码段的选择符,偏移域设置成0号中断处理程序的入口地址。*/

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值