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. 转 解决:error: Cannot find libmysqlclient_r under /usr/local/mysql.

    配置php的时候出现以下问题解决方案 checking for MySQL support... yeschecking for specified location of the MySQL UNI ...

  2. 通过ribbon 根据服务名获取所有服务实例的IP和端口列表

    代码使用SpringCloud版本E3 业务场景: 今天遇到一个业务场景,要求根据服务名获取当前微服务集群中所有的对应服务实例的IP和端口,通过分析源码推算出了写法. 原理简述: 如果代码中引入了sp ...

  3. codevs 3083 二叉树

    题目描述 Description 同学们都知道二叉树的定义,也都知道3个结点的二叉树有5种, 现给你二叉树的结点个数n,要你编程输出不同形态二叉树的种数. 输入描述 Input Description ...

  4. sparkmllib矩阵向量

    Spark MLlib底层的向量.矩阵运算使用了Breeze库,Breeze库提供了Vector/Matrix的实现以及相应计算的接口(Linalg).但是在MLlib里面同时也提供了Vector和L ...

  5. 跟我学Shiro---无状态 Web 应用集成

    无状态 Web 应用集成 在一些环境中,可能需要把 Web 应用做成无状态的,即服务器端无状态,就是说服务器端不会存储像会话这种东西,而是每次请求时带上相应的用户名进行登录.如一些 REST 风格的 ...

  6. A. Kyoya and Photobooks(Codeforces Round #309 (Div. 2))

    A. Kyoya and Photobooks   Kyoya Ootori is selling photobooks of the Ouran High School Host Club. He ...

  7. Linux修改终端提示符

    打开~/.bashrc可以看到命令提示的内容为:\u@\h\w\$ \u表示用户名,\h表示主机名,\w表示当前目录,\$表示命令提示符(普通用户$,超级用户#) 这个命令提示符有点长,很碍事,\u@ ...

  8. PIL笔记

    图片颜色的类型 1 (1-bit pixels, black and white, stored with one pixel per byte) L (8-bit pixels, black and ...

  9. 整理打印PI值

    准备锻炼背诵PI的小数,找到PI值: PI=3. 141592653589793238462643383279502884197169399375105820974944592307816406286 ...

  10. HDU Bomb Game 3622 (2-Sat)

    Bomb Game Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...