中断与异常
文章平均质量分 77
superkiss2
这个作者很懒,什么都没留下…
展开
-
linux 2.6源代码情景分析笔记之中断与异常2
高级可编程控制器如果系统只有一个cpu,主pic输出线以直截了当的方式连接到cpu的intr引脚。如果系统中包含两个或多个cpu,就需要更加复杂的pic.intel从p3开始引入i/o高级可变成控制器(APIC)组件。80x86微处理器当前所有的cpu都含有一个本地apic。每个本地apic都有32位寄存器,一个内部时钟,一个本地定是设备以及为本地apic中断保留的两条额外的irq线l原创 2009-12-31 10:49:00 · 809 阅读 · 0 评论 -
linux 2.6源代码情景分析笔记之中断与异常3
初始化中断描述符表内核启用中断以前,必须把idt表的初始地址装到idtr寄存器,并初始化表中的每一项。这项工作是在初始化系统时完成。int指令允许用户态进程发出一个中断信号,其值可以是0-255的任意一个向量。因此。为了防止用户通过int指令模拟非法的中断和异常,idt的初始化必须非常小心。这可以通过把中断或者陷阱门描述符的dpl字段设置成0来实现。如果进程试图发出其中的一个中断信号,原创 2009-12-31 10:49:00 · 617 阅读 · 0 评论 -
linux 2.6源代码情景分析笔记之中断与异常6
每个中断向量都有自己的irq_desc_t描述符,所有的这些描述符组织在一起形成irq_desc数组。typedef struct irq_desc { hw_irq_controller *handler;指向pic对象(hw_irq_controller描述符),服务于irq线 void *handler_data;指向pic方法所使用的数据原创 2009-12-31 10:51:00 · 687 阅读 · 0 评论 -
linux 2.6源代码情景分析笔记之中断与异常4
IDT的初步初始化在实模式时,idt被初始化并由bios例程使用。一旦linux接管,idt就被移到ram的另一个区域,并进行第二次初始化,因为linux没有利用任何bios例程。IDT存放在idt_table表中,有256个表项。6字节的idt_descr变量指定了idt的大小和它的地址,只有当内核用lidt汇编指令初始化idtr寄存器时才用到这个变量。在内核初始化过程中,setup原创 2009-12-31 10:50:00 · 487 阅读 · 0 评论 -
linux 2.6源代码情景分析笔记之中断与异常1
中断(interrupt)通常被定义为一个事件,该事件改变处理器执行的指令顺序。这样的事件与cpu芯片内外部硬件电路产生的电信号相对应。中断通常分为同步(synchronous)中断和异步(asynchronous)中断:1.同步中断是当指令执行时由cpu控制单元产生的,之所以称为同步,是因为只有在一条指令终止执行后cpu才会发出中断。2.异步中断是由其他硬件设备依照cpu始终信号随机原创 2009-12-31 10:48:00 · 670 阅读 · 0 评论 -
linux 2.6源代码情景分析笔记之中断与异常5
中断处理依赖于中断类型,有三种主要的中断类型:i/o中断:某些i/设备需要关注;相应的中断处理程序必须查询设备以确定适当的操作过程。时钟中断:某种时钟(或者是一个本地apic时钟,或者是一个外部时钟)产生一个中断;这种中断告诉内核一个固定的时间间隔已经过去。这些中断大部分是作为i/o中断来处理的。处理器间中断:多处理器系统中一个cpu对另一个cpu发出的一个中断。I/O中断处理原创 2009-12-31 10:50:00 · 519 阅读 · 0 评论