SMP结构中的中断机制和进程调度

SMP结构中的中断机制和进程调度

ID:45858489

大小:168.50 KB

页数:40页

时间:2019-11-18

SMP结构中的中断机制和进程调度_第1页
SMP结构中的中断机制和进程调度_第2页
SMP结构中的中断机制和进程调度_第3页
SMP结构中的中断机制和进程调度_第4页
SMP结构中的中断机制和进程调度_第5页
资源描述:

《SMP结构中的中断机制和进程调度》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Linux源代码阅读SMP结构中的中断机制和进程调度张飞概要SMP结构中的中断机制分布式中断处理中断初始化处理器间中断IPISMP结构中的进程调度分布式中断处理APIC简介SMP结构中的中断控制硬件机构全局APIC本地APIC高级可编程中断控制器APIC为了充分利用smp体系结构的并行性,要求动态分配中断请求,也就是说可以向任意cpu发出中断请求.传统的i386处理器都采用8259A中断控制器,其作用是提供多个外部中断源与单一cpu之间的连接.如果在SMP结构中还是采用8259A中断控制器,那就只能静态的把所有的外部中断源划分成若干组,分别把每一组都连接

2、到一个8259A,而8259A则与cpu有一对一的连接.这样就达不到动态分配中断请求的目的.为了更好的支持smp结构,从Pentium开始,Intel设计了一种更为通用的中断控制器,称为高级可编程中断控制器APIC(AdvancedProgrammableInterruptController).SMP结构中的中断控制硬件机构cpu0本地APICcpu1本地APIC本地APICcpun全局APIC本地中断请求本地中断请求本地中断请求ICC(中断控制器通信)总线外部中断请求分布式中断处理硬件机制概述两种APIC:本地APIC和全局APIC,通过中断控制器通

3、信(InterruptControllerCommunication,ICC)总线相连.本地APIC集成在cpu内部,通过内部APIC可以向其他cpu发送中断请求.全局APIC负责把来自外部设备的中断请求提交和分配给系统中各个cpu的任务.全局APIC组成全局APIC由一组IRQ线路,一个有24个表项的中断重定向表(InterruptRedirectionTable),一个可编程寄存器和一个用来发送和接受经过ICC总线的APIC消息的消息单元组成.和8259A的IRQ引脚不同,中断优先级和引脚号无关,重定向表中的每个表项都可以被单独编程来说明中断向量和优

4、先级,目标处理器以及如何选定处理器.重定向表中的消息用来把外部IRQ信号转换成通过ICC总线发往一个或多个本地APIC单元的消息.全局APIC工作模式固定模式把IRQ信号发送到相应的重定向表表项所列出的本地APIC上.最低优先级模式把IRQ信号发送到正在执行优先级最低的进程的处理器的本地APIC上.所有的本地APIC都有一个可编程任务优先级寄存器(taskpriorityregister),它包含了当前正在运行的进程的优先级.在每次任务切换时这个寄存器的值必须由内核进行修改.本地APIC组成每个本地APIC都有几个32位的寄存器,一个内部时钟,一个定时器

5、设备,240个不同的中断向量(从0x20~0xff,0~0x1f用于cpu本身的陷阱)以及两条为局部中断保留的IRQ线路,这两条线路用于重启系统.本地APIC的一个重要功能是实现处理器间中断IPI当一个cpu想要向其他cpu发送中断时,将中断向量和目标处理器的本地apic标志符保存到自己本地apic的中断命令寄存器中,然后通过ICC总线向目标处理器的本地apic发送一条消息,目标处理器的本地apic就向自己的cpu发出相应的中断.SMP结构中的中断控制硬件机构cpu0本地APICcpu1本地APIC本地APICcpun全局APIC本地中断请求本地中断请求

6、本地中断请求ICC(中断控制器通信)总线外部中断请求概要SMP结构中的中断机制分布式中断处理中断初始化处理器间中断IPISMP结构中的进程调度中断初始化smp相关的几个主要中断向量设置中断门中断响应程序的建立相关中断处理程序代码smp_reschedule_interrupt()smp_call_function_interrupt()smp相关的几个主要中断向量smp结构专用的几个IRQ向量定义在include/asm-i386/apic.h中#defineSPURIOUS_APIC_VECTOR0xff#defineERROR_APIC_VECTOR

7、0xfe#defineINVALIDATE_TLB_VECTOR0xfd#defineRESCHEDULE_VECTOR0xfc#defineCALL_FUNCTION_VECTOR0xfb#defineLOCAL_TIMER_VECTOR0xef其他不常用的向量合并到CALL_FUNCTION_VECTOR中以节省向量空间,使用比较频繁的是TLB、reschedule和localAPIC中断向量.设置中断门void__initinit_IRQ(void){…for(i=0;i

8、VECTOR+i;if(vector!=SYSCALL_VECTOR)set_i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。