Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1566760
  • 博文数量: 77
  • 博客积分: 1205
  • 博客等级: 少尉
  • 技术积分: 4476
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-22 21:48
文章分类
文章存档

2018年(1)

2017年(1)

2015年(1)

2014年(18)

2013年(12)

2012年(44)

分类: LINUX

2012-05-15 21:54:29

本博文将为后续对内核时钟时间管理,ACPI等内容的讨论导入一些铺垫性的东西。

早先的单处理器系统,采用的是大家非常熟悉的8259芯片作为PIC,单个8259可以连接8个外设的中断信号线,主从级联的情形下可以达到15个。8259与处理器间的主要接口pin脚是INTR和INTA,一个用来触发CPU进入中断处理,另一个则是CPU响应外部中断信号。这种UP系统中,处理器与中断相关的外部引脚主要有两个INTR和NMI.8259一般位于主板的南桥芯片中,只适用于UP系统。

现在多处理器(SMP)系统已经非常普遍,因为8259采用pin脚直连的方式,所以在SMP系统中8259已经被APIC(Advanced Programmable Interrupt Controller)所取代。SMP系统中APIC一般分成两个组成部分:LAPIC和IOAPIC。LAPIC即Local APIC,一个集成在处理器内部的芯片,它即可产生中断也能接收来自IOAPIC的中断,同时它还有一个Timer功能,可以为所属的处理器提供本地时钟功能,此外它还可以给发送中断消息给其他处理器IPI(Inter Processor Interrupt)。IOAPIC一般位于南桥芯片上,与8259功能类似,主要作external device interrupts hub,它通过system bus以interrupt message的形式与各处理器中的LAPIC进行互动,IOAPIC即可用于UP系统,也可用于SMP系统。在集成了LAPIC的处理器中,处理器与中断相关的外部引脚为LINT0和LINT1(参考intel开发者手册V3A Figure 8.4. Local APIC Structure)。相对于8259,IOAPIC可以处理更多的外设中断,比如ICH9中单个IOAPIC总共可以支持24个中断,而且可以将接收到的中断分发到不同的处理器中,这与8259有本质的区别。

即便MP已经非常普及,但为了兼容性方面的考虑,8259在现有的平台上依然存在,我这样说,有两个依据:一是最近我通过ACPI来获取系统中APIC的信息,这段代码的输出结合ACPI规范,可以很清晰地看到所谓的dual 8259在我的测试平台上存在。另一个是,几年前我仿照Linux内核写得一个非常小的半成品内核,其中关于中断部分,只用到了8259,在尘封了七八年之后,我几个月前又用新的gcc编译了那个小内核,在最新的几个测试平台(intel和amd的都有)都能正常运行。

阅读(4901) | 评论(5) | 转发(0) |
给主人留下些什么吧!~~

honest5812015-03-27 11:07:44

说实话,这个写的是滥竽充数

MagicBoy20102012-05-16 21:21:57

十七岁的回忆: 呵呵,很深刻啊~~~博主的文章很给力!.....
必须的

十七岁的回忆2012-05-16 20:58:53

呵呵,很深刻啊~~~博主的文章很给力!

MagicBoy20102012-05-16 20:43:36

夏冰软件: 写的不错,支持一下.....
多谢鼓励。这篇博文其实是为后续的Linux内核时钟,ACPI相关内容准备的。铺垫性质的。。。

夏冰软件2012-05-16 16:42:54

写的不错,支持一下