- 1、本文档共40页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
SMP结构中的中断机制和进程调度
Linux源代码阅读 SMP结构中的中断机制和进程调度 概要 SMP结构中的中断机制 分布式中断处理 中断初始化 处理器间中断IPI SMP结构中的进程调度 分布式中断处理 APIC简介 SMP结构中的中断控制硬件机构 全局APIC 本地APIC 高级可编程中断控制器APIC 为了充分利用smp体系结构的并行性,要求动态分配中断请求,也就是说可以向任意cpu发出中断请求. 传统的i386处理器都采用8259A中断控制器,其作用是提供多个外部中断源与单一cpu之间的连接.如果在SMP结构中还是采用8259A中断控制器,那就只能静态的把所有的外部中断源划分成若干组,分别把每一组都连接到一个8259A,而8259A则与cpu有一对一的连接.这样就达不到动态分配中断请求的目的. 为了更好的支持smp结构,从Pentium开始,Intel设计了一种更为通用的中断控制器,称为高级可编程中断控制器APIC (Advanced Programmable Interrupt Controller). SMP结构中的中断控制硬件机构 分布式中断处理硬件机制概述 两种APIC:本地APIC和全局APIC,通过中断控制器通信(Interrupt Controller Communication,ICC)总线相连. 本地APIC集成在cpu内部,通过内部APIC可以向其他cpu发送中断请求. 全局APIC负责把来自外部设备的中断请求提交和分配给系统中各个cpu的任务. 全局APIC 组成 全局APIC由一组IRQ线路,一个有24个表项的中断重定向表(Interrupt Redirection Table),一个可编程寄存器和一个用来发送和接受经过ICC总线的APIC消息的消息单元组成. 和8259A的IRQ引脚不同,中断优先级和引脚号无关,重定向表中的每个表项都可以被单独编程来说明中断向量和优先级,目标处理器以及如何选定处理器.重定向表中的消息用来把外部IRQ信号转换成通过ICC总线发往一个或多个本地APIC单元的消息. 全局APIC 工作模式 固定模式 把IRQ信号发送到相应的重定向表表项所列出的本地 APIC上. 最低优先级模式 把IRQ信号发送到正在执行优先级最低的进程的处理器的本地APIC上.所有的本地APIC都有一个可编程任务优先级寄存器(task priority register),它包含了当前正在运行的进程的优先级.在每次任务切换时这个寄存器的值必须由内核进行修改. 本地APIC 组成 每个本地APIC都有几个32位的寄存器,一个内部时钟,一个定时器设备,240个不同的中断向量(从0x20~0xff,0~0x1f用于cpu本身的陷阱)以及两条为局部中断保留的IRQ线路,这两条线路用于重启系统. 本地APIC的一个重要功能是实现处理器间中断IPI 当一个cpu想要向其他cpu发送中断时,将中断向量和目标处理器的本地apic标志符保存到自己本地apic的中断命令寄存器中,然后通过ICC总线向目标处理器的本地apic发送一条消息, 目标处理器的本地apic就向自己的cpu发出相应的中断. SMP结构中的中断控制硬件机构 概要 SMP结构中的中断机制 分布式中断处理 中断初始化 处理器间中断IPI SMP结构中的进程调度 中断初始化 smp相关的几个主要中断向量 设置中断门 中断响应程序的建立 相关中断处理程序代码 smp_reschedule_interrupt() smp_call_function_interrupt() smp相关的几个主要中断向量 smp结构专用的几个IRQ向量定义在include/asm-i386/apic.h中 #define SPURIOUS_APIC_VECTOR 0xff #define ERROR_APIC_VECTOR 0xfe #define INVALIDATE_TLB_VECTOR 0xfd #define RESCHEDULE_VECTOR 0xfc #define CALL_FUNCTION_VECTOR 0xfb #define LOCAL_TIMER_VECTOR 0xef 其他不常用的向量合并到CALL_FUNCTION_VECTOR中以节省向量空间,使用比较频繁的是TLB、reschedule和local APIC中断向量. 设置中断门 void __init init_IRQ(void) { … for (i = 0; i NR_IRQS; i++) { int
文档评论(0)