深入理解Linux内核-中断和异常
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内核-中断和异常的更多相关文章
- Linux内核中断和异常分析(中)
在linux内核中,每一个能够发出中断请求的硬件设备控制器都有一条名为IRQ的输出线.所有现在存在的IRQ线都与一个名为可编程中断控制器的硬件电路的输入引脚相连,上次讲到单片机的时候,我就讲到了单片机 ...
- Linux内核中断和异常分析(上)
中断,通常被定义为一个事件.打个比方,你烧热水,水沸腾了,这时候你要去关掉烧热水的电磁炉,然后再去办之前手中停不下来的事情.那么热水沸腾就是打断你正常工作的一个信号机制.当然,还有其它的情况,我们以后 ...
- Linux内核中断和异常分析(下)
这节,我们继续上,中(以前的日志有)篇目进行分析,结合一个真实的驱动案例来描述linux内核中驱动的中断机制,首先我们先了解一下linux内核中提供的中断接口. 这个接口我们需要包含一个头文件:#in ...
- Linux内核中断顶半部和底半部的理解
文章目录 中断上半部.下半部的概念 实现中断下半部的三种方法 软中断 软中断模版 tasklet tasklet函数模版 工作队列 工作队列函数模版 进程上下文和中断上下文 软中断和硬中断的区别 硬中 ...
- 《深入理解Linux内核》 读书笔记
深入理解Linux内核 读书笔记 一.概论 操作系统基本概念 多用户系统 允许多个用户登录系统,不同用户之间的有私有的空间 用户和组 每个用于属于一个组,组的权限和其他人的权限,和拥有者的权限不一样. ...
- Linux 内核中断内幕
转自:http://www.ibm.com/developerworks/cn/linux/l-cn-linuxkernelint/index.html#resources Linux 内核中断内幕 ...
- 读书笔记之Linux系统编程与深入理解Linux内核
前言 本人再看深入理解Linux内核的时候发现比较难懂,看了Linux系统编程一说后,觉得Linux系统编程还是简单易懂些,并且两本书都是讲Linux比较底层的东西,只不过侧重点不同,本文就以Linu ...
- 【读书笔记::深入理解linux内核】内存寻址【转】
转自:http://www.cnblogs.com/likeyiyy/p/3837272.html 我对linux高端内存的错误理解都是从这篇文章得来的,这篇文章里讲的 物理地址 = 逻辑地址 – 0 ...
- 【读书笔记::深入理解linux内核】内存寻址
我对linux高端内存的错误理解都是从这篇文章得来的,这篇文章里讲的 物理地址 = 逻辑地址 – 0xC0000000:这是内核地址空间的地址转换关系. 这句话瞬间让我惊呆了,根据我的CPU的知识,开 ...
随机推荐
- Selenium得到当前页面的URL
/** * getCurrentURL:(get the current page URL address). * @author huchan * @param driver --- the web ...
- 7、redis之使用spring集成commons-pool来操作常见数据类型
环境的搭建参见:http://www.cnblogs.com/yangzhilong/p/4729857.html 下面直接贴具体的测试代码: package com.yzl; import java ...
- fnmatch源码阅读
源码下载地址如下: http://web.mit.edu/freebsd/csup/fnmatch.h http://web.mit.edu/freebsd/csup/fnmatch.c 代码整体不错 ...
- Linux常见命令缩写
缩写,是简介高效地表达 unix unix-like Linux 00.命令简写 ls:list(列出目录内容)cd:Change Directory(改变目录)su:switch user ...
- Arduino和C51开发DHT11温湿度传感器
技术:51单片机.Arduino.DHT11.温湿度传感器.传感器 概述 学习单片机离不开对传感器的学习,本文主要介绍DHT11温湿度传感器的使用方法,同学也可以了解更多的传感器,这对你以后开发产 ...
- android适配不同分辨率的手机
android中不同手机分辨率适配问题 在项目开发的过程中,同一个布局对应不同的手机会显示出不同的效果.导致这个现象产生的原因是不同手机的分辨率不同.在android sdk提供的帮助文档中,我们可以 ...
- 图片异步加载之EGOImageLoading
下载地址 http://pan.baidu.com/share/link?shareid=2690186349&uk=923776187 引入目录 简单实用 http://blog.csdn ...
- iOS获取ipa素材、提取ipa资源图片文件
当我们看到一款优秀的App时,我们可能对它的一些素材比较感兴趣,或者我们也想仿写一款类似app,那么怎么能获取到它的素材资源文件呢? 下面我以ofo举例: 1.打开iTunes,搜索ofo关键字,选择 ...
- keras的训练引擎:train_array.py和train_generator.py
keras的Model支持两种模式的训练: 直接传入数组,最终会调用train_array.py中的fit_loop()函数 直接传入生成器,最终会调用train_generator.py中的fit_ ...
- 禁止logback输出状态信息
一.问题描述 22:18:07,299 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resourc ...