当前位置:  技术问答>linux和unix

kernel2.6 时钟中断问题

    来源: 互联网  发布时间:2016-12-10

    本文导语:  研究时钟和中断有一段时间了,想和大家讨论下,希望高手能帮助我揭开迷惑。。 我们都知道从保留中断以后的0号是时钟中断,它给两个计时器提供中断tick,一个是pic的pit另外一个是cpu内部的hpet。 当然读写rtc也许...

研究时钟和中断有一段时间了,想和大家讨论下,希望高手能帮助我揭开迷惑。。

我们都知道从保留中断以后的0号是时钟中断,它给两个计时器提供中断tick,一个是pic的pit另外一个是cpu内部的hpet。
当然读写rtc也许要pit的支持。

暂且不管tsc
在smp出来之前,pit和hpet基本上掌管各种内核和用户的定时操作。并且irq0通过pic只发送到cpu0
当smp出来以后,irq0需要发送到各个处理器,所以通过apic方式进行分发,可以设置,默认irqbalance来 调节。既然要分发,local apic就要来接收处理中断。
另一个方面,新加进来了一个local timer interrupt.这个是基于总线的时钟中断,不太理解这个意思,它也算是也时钟源,它是apic的,为啥叫基于总线的?这个和之前的时钟中断有啥关系么?

更奇怪的我最近用cat /proc/interrupts 这个命令发现,0号时钟中断都是200左右,很小的数字,显然现在这个已经不再是时钟源了,因为pit已经改变了工作方式,工作方式如下:
1. Mode 0:当通道处于“Terminal count”状态时产生中断信号。 
2. Mode 1:Hardware retriggerable one-shot。 
3. Mode 2:Rate Generator。
4. Mode 3:方波信号发生器。 
5. Mode 4:Software triggered strobe。 
6. Mode 5:Hardware triggered strobe。

tsc的源我还不是很清楚,只知道是cpu持续产生。
但是8254还有一小部分工作在做,因为它不是完全的0。而系统调度需要的各种定时以及用户定时已经由local timer interrupt 接管了,我用setitimer的read_time测试过,这个函数的系统调用函数我也看过了。0号中断仍然没有放映。说明是local timer 在起作用。测试内核2.6.33,0号中断类似,中断如下:
 CPU0       CPU1
  0:        299 (很小) 0   IO-APIC-edge      timer
  1:       3957        130   IO-APIC-edge      i8042
  7:     790772          0   IO-APIC-edge      parport0
  8:          0          0   IO-APIC-edge      rtc0
  9:          0          0   IO-APIC-fasteoi   acpi
12:     407933      21011   IO-APIC-edge      i8042
14:        184          0   IO-APIC-edge      libata
15:     246417          0   IO-APIC-edge      libata
16:     207215      14913   IO-APIC-fasteoi   libata, uhci_hcd:usb4
17:    1158775          0   IO-APIC-fasteoi   uhci_hcd:usb2, uhci_hcd:usb5, i915@pci:0000:00:02.0
18:     912392          0   IO-APIC-fasteoi   Intel ICH5
19:    8324586       1270   IO-APIC-fasteoi   uhci_hcd:usb3, eth0
20:       1600          0   IO-APIC-fasteoi   ehci_hcd:usb1
NMI:          0          0
LOC:    8980952    8845140(真正时钟源)
ERR:          0
MIS:          0

然而有些系统是如下:0号中断 仍然在用。
[root@seli-vaio ikarus]# cat /proc/interrupts 
           CPU0       CPU1       
  0:      30027 (正常时钟源)   0   IO-APIC-edge      timer
  1:        132          0   IO-APIC-edge      i8042
  9:       1282          0   IO-APIC-fasteoi   acpi
 12:        120          0   IO-APIC-edge      i8042
 14:       1377          0   IO-APIC-edge      libata
 15:          0          0   IO-APIC-edge      libata
 16:          0     225322   IO-APIC-fasteoi   uhci_hcd:usb4, eth0, ohci1394, yenta, nvidia
 17:       2507          0   IO-APIC-fasteoi   uhci_hcd:usb2, tifm_7xx1
 18:       6082          0   IO-APIC-fasteoi   uhci_hcd:usb3, ipw3945
 20:       6020          0   IO-APIC-fasteoi   libata
 21:          3          0   IO-APIC-fasteoi   uhci_hcd:usb1, ehci_hcd:usb5
 22:       2650          0   IO-APIC-fasteoi   HDA Intel
NMI:          0          0 
LOC:      23363      22114 (也是时钟源)
ERR:          0
MIS:          0

我不清楚什么情况下禁止0号为一般时钟中断的?是否有个开关?内核出处也行。我现在必须要用pic时钟(8254)作为系统时钟源,该怎么办,而且不能去掉smp。。大虾给我些提示都行,谢谢了。。。。

|
不会  帮不上忙  那就帮顶

|
支持楼主

|
lz好好研究哈 弄清楚告诉我们一下 

|
x86的不懂,在俺们ARM体系里面,时钟中断可以是任何的IRQ Number。帮顶!

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 求驱动程序源代码(能在RedHat7.2, Kernel2.4下编译,装载运行)每个100分
  • kernel2.4内核编译配置文件存放在哪里?
  • 帮忙提供有kernel2.6的Linux镜象文件下载地址!!!
  • 跪求Debian 5.0 amd64 kernel2.6.26的镜像
  • 请问哪里有rh kernel2.5以上的内核版本下载啊?(最好教育网内)
  • 有没有在东芝M18上编译过Kernel2.6.0的内核的?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3