Linux内核代码查看

http://androidxref.com/
中断:被定义位一个事件,它能改变处理器执行指令的顺序。它对应硬件(CPU、其他硬件设备)电路产生的电信号。

同步中断:指令执行时CPU控制单元产生;称为同步,是因为只有在一条指令终止执行后CPU才回发出中断。也被称为异常
异步中断:其他硬件设备按照CPU时钟信号随机产生的。也被简称中断
中断的约束:1、中断必须尽快处理完成;中断一般被分两部分执行:关键而且紧急的部分,内核立即执行;其余部分内核稍后执行;
     2、中断的处理必须能满足嵌套,即当正在处理一个中断时,另一个中断又发生了的情况,必须尽量支持
      3、中断可以被禁止,但必须尽可能的限制使用 中断:可屏蔽中断、非屏蔽中断
异常:处理器探测异常(故障、陷阱、异常终止),编程异常

引入信号的动机:

IRQ(Interrupt Request)如何引起中断:

IRQ:能发出中断请求的硬件设备都又一条名为IRQ都输出线;
IRQ line:与可编程中断控制器的硬件电路的输入引脚相连。 可编程中断控制器(IPC):
1、监视IRQ线,如果两条或者以上的IRQ线产生信号,选择引脚编号较小
2、如果只有一个引发信号 a、将它转化为对应的向量;b、将向量存放到中断控制器的IO端口,允许CPU通过数据总线读取;c、把引发信号发送到处理器的INTR引脚,即产生中断
  d、等待,直到CPU通过吧这个中断信号写入可编程中断控制器的一个I\O端口来确认它,清除INTR线;
3、返回第一步。 I/O APIC(I/O 高级可编程中断控制器):

80x86微处理器如何在硬件级处理中断和异常:

异常处理程序的结构:
1、在内核堆栈中保存大多数寄存器的内容
2、用高级的c函数处理异常
3、通过ret_from_exception() 函数从异常处理程序退出。

如果初始化中断结构必须的数据结构:

内核启用中断前,必须把IDT(中断描述符表)的初始地址装到idtr寄存器,并初始化其中的每一项。系统初始化时就需要完成。

IDT的初始化:
1、当计算机还运行在实模式的时候IDT被初始化,由BIOS例程使用,
2、当linux接管之后,IDT被移到RAM的一个区域,进行二次初始化。 内核初始化的过程中,先用一个中断门填充IDT的256个表项,然后用有意义的陷阱和中断处理程序替换它。 完成初始化之后,对于每一个PIC确认的IRQ,IDT都有一个专门的中断门。

如何在软件级处理中断信号:

中断处理流程:
1、硬件通过IRQ线通知PIC
2、PIC将中断向量放到寄存器
3、处理器读取寄存器,存如RAM。由中断处理例程处理(ISR)
4、通知PIC 注意:内核启用中断之前,必须知道IRQ号与I/O设备之间的对应关系,否则内核不知道那个向量对应哪个设备,如果处理。
IRQ号与设备之间的对应关系,在初始化设备驱动程序的时候建立的。

深入理解Linux内核-中断和异常的更多相关文章

  1. Linux内核中断和异常分析(中)

    在linux内核中,每一个能够发出中断请求的硬件设备控制器都有一条名为IRQ的输出线.所有现在存在的IRQ线都与一个名为可编程中断控制器的硬件电路的输入引脚相连,上次讲到单片机的时候,我就讲到了单片机 ...

  2. Linux内核中断和异常分析(上)

    中断,通常被定义为一个事件.打个比方,你烧热水,水沸腾了,这时候你要去关掉烧热水的电磁炉,然后再去办之前手中停不下来的事情.那么热水沸腾就是打断你正常工作的一个信号机制.当然,还有其它的情况,我们以后 ...

  3. Linux内核中断和异常分析(下)

    这节,我们继续上,中(以前的日志有)篇目进行分析,结合一个真实的驱动案例来描述linux内核中驱动的中断机制,首先我们先了解一下linux内核中提供的中断接口. 这个接口我们需要包含一个头文件:#in ...

  4. Linux内核中断顶半部和底半部的理解

    文章目录 中断上半部.下半部的概念 实现中断下半部的三种方法 软中断 软中断模版 tasklet tasklet函数模版 工作队列 工作队列函数模版 进程上下文和中断上下文 软中断和硬中断的区别 硬中 ...

  5. 《深入理解Linux内核》 读书笔记

    深入理解Linux内核 读书笔记 一.概论 操作系统基本概念 多用户系统 允许多个用户登录系统,不同用户之间的有私有的空间 用户和组 每个用于属于一个组,组的权限和其他人的权限,和拥有者的权限不一样. ...

  6. Linux 内核中断内幕

    转自:http://www.ibm.com/developerworks/cn/linux/l-cn-linuxkernelint/index.html#resources Linux 内核中断内幕 ...

  7. 读书笔记之Linux系统编程与深入理解Linux内核

    前言 本人再看深入理解Linux内核的时候发现比较难懂,看了Linux系统编程一说后,觉得Linux系统编程还是简单易懂些,并且两本书都是讲Linux比较底层的东西,只不过侧重点不同,本文就以Linu ...

  8. 【读书笔记::深入理解linux内核】内存寻址【转】

    转自:http://www.cnblogs.com/likeyiyy/p/3837272.html 我对linux高端内存的错误理解都是从这篇文章得来的,这篇文章里讲的 物理地址 = 逻辑地址 – 0 ...

  9. 【读书笔记::深入理解linux内核】内存寻址

    我对linux高端内存的错误理解都是从这篇文章得来的,这篇文章里讲的 物理地址 = 逻辑地址 – 0xC0000000:这是内核地址空间的地址转换关系. 这句话瞬间让我惊呆了,根据我的CPU的知识,开 ...

随机推荐

  1. 〖Android〗代理与正常网络分开同步CyangenMod源码

    为了同步CyanogenMod源代码,你也学会了FQ,对吗? 通常 .repo/manifest.xml 文件有Google AOSP的Project,也有Github的Project: 访问Gith ...

  2. 江南白衣整理和开发的java常用工具类

    江南白衣的公众号的介绍文章:http://mp.weixin.qq.com/s/6JUo1vmUa-7SuDH6yIxKeQ github的地址:https://github.com/springsi ...

  3. 4、redis之使用commons-pool

    增加池的配置文件redis-pool.properties: #最大能够保持idel状态的对象数 redis.pool.maxIdle=200 #当池内没有返回对象时,最大等待时间 redis.poo ...

  4. Asp.Net通过ODBC连接Oracle数据库

    本来有个项目是通过安装Oracle client然后让asp.net引用System.Data.OracleClient来访问Oracle数据库的,但是不知道为什么老是报:ORA-12170:连接超时 ...

  5. ios中摄像头和图片调用

    推荐文章 http://www.xuanyusong.com/archives/1493 http://blog.csdn.net/ryantang03/article/details/7830996

  6. ios core plot设置xy坐标

    #import "ViewController.h" @interface ViewController () //要绘制基于x,y轴的图形 @property(nonatomic ...

  7. Delphi单元文件引用名称问题

    Delphi新版本的单元文件格式变化了,如windows变成了winapi.windows,如果想在单元引用中使用简称,则需要在工程选项中配置: 这样就可以使用全名或简写来引用单元了.

  8. TestNg的IReporter接口的使用

    IReporter接口是干嘛的?就是让用户自定义报告的,很多人想要自定义报告,于是乎找各种插件,比如什么testng-xslt啊,reportng啊,各种配置,最后出来的结果,还不能定制化,但为什么不 ...

  9. Mac 下查看网络端口占用情况

    1.Mac 下查看网络端口占用情况 有的时候关闭了服务器,但是端口还是占用,解决的方法是 kill 掉占用该端口的进程. # 查看 8009 端口的占用情况 $ lsof -i:8009 可以看到,该 ...

  10. Oracle 12C -- in-database archiving

    在同一张表中,通过将row置为inactive状态来实现数据的归档.数据库中,可以对那些inactive row进行压缩优化.在实现归档的同时,应用可以被限制只访问那些active状态的数据.默认情况 ...