Linux 2.6 内核阅读笔记 中断和异常
2014年7月24日 中断门、陷阱门及中断门
中断是能够禁止的,能够通过告诉PIC停止对某个中断的公布。被禁止的中断是不会丢失的,在解除禁止后又会发送到CPU上。
禁止中断和屏蔽(mask)中断的不同之处是屏蔽是忽略掉某个中断,而禁止相当于延迟发送。
Intel提供了三种类型的中断描写叙述符:任务门、中断门及陷阱门描写叙述。
linux使用与inten稍有不同的细分分类和术语。把他们进行例如以下分类:
中断门:用户态进程不能訪问的一个intel中断门(DPL为0),全部的linux中断处理程序都通过中断门在内核态进行调用。
系统门:用户态进程能够訪问的一个intel陷阱门(DPL为3),通过系统门来訪问三个linux异常处理程序,在用户态下能够通过三个汇编指令来訪问:into,bound,int $0x80。
系统中断门:用户态进程主要通过这个门来使用系统调用(DPL为3),通过int $3汇编指令来进入。
陷阱门:用户态进程不能訪问的intel陷阱门(DPL为0),大部分linux异常处理程序通过这个门进入。
任务门:用户态进程不能訪问的intel任务门(DPL为0)。“Double Fault”(通常表示内后有严重的错误)异常使用通过这个门进入的。
2014年7月25日 中断处理
中断处理程序能够共享同一条IRQ线,每个从这条线来的中断。内核会调用每个注冊这条线上的全部的IRQ线,由中断处理程序推断是否是自己期望的设备的中断并处理这个中断。
在SMP架构上。中断的分发能够有两种方式:
静态分发:把中断信号传递给重定向表对应项所列出的本地APIC。中断马上传递给一个特定的cpu,或一组cpu或全部cpu。
动态分发:选择一个正在执行进程优先级最低的cpu。
每一个cpu的本地APIC里都有一个仲裁优先级寄存器。假设同一时候存在两个以上同样优先级的cpu,内核通过仲裁(arbitration)技术来分发中断给某个CPU来添加公平性和负载均衡,每其中断传递给一个cpu时,其对应的仲裁优先级自己主动置为0,其它每一个cpu都优先级都添加1。当仲裁优先级寄存器大于15时,就把它置为获胜cpu前一个仲裁优先级加1。
2014年7月26日 工作队列
在linux2.6的内核中引入了工作队列,用来取代2.4的任务队列,工作队列和中断的可延迟函数类似,都仅仅能执行在内核态而且不能訪问用户态地址空间。主要不同在于可延迟函数执行在中断上下文中。工作对列则是执行在进策划那个上下文中(确切的说应该是内核线程的上下文)。工作队列通过内核线程(kthread)和等待队列(wait_queue)来实现。
因为工作队列的手动创建开销比較大,内核引入了叫做events的内核提前定义工作队列,事实上就是一个包包含不同内核层函数和i/o驱动程序的标准工作队列和进行了一些简单封装,并提供了一些wapper函数(schedule_work,schedule_delayed_work,schedule_delayed_work_on,flush_scheduled_work)来方便高速使用工作队列。
Linux 2.6 内核阅读笔记 中断和异常的更多相关文章
- linux内核分析笔记----中断和中断处理程序【转】
转自:http://www.cnblogs.com/hanyan225/archive/2011/07/17/2108609.html 中断还是中断,我讲了很多次的中断了,今天还是要讲中断,为啥呢?因 ...
- linux内核分析笔记----中断和中断处理程序
中断还是中断,我讲了很多次的中断了,今天还是要讲中断,为啥呢?因为在操作系统中,中断是必须要讲的.. 那么什么叫中断呢, 中断还是打断,这样一说你就不明白了.唉,中断还真是有点像打断.我们知道linu ...
- LINUX0.11 内核阅读笔记
一.源码目录 图1 二.系统总体流程: 系统从boot开始动作,把内核从启动盘装到正确的位置,进行一些基本的初始化,如检测内存,保护模式相关,建立页目录和内存页表,GDT表,IDT表.然后进入main ...
- linux中断与异常
看了<深入理解linux内核>的中断与异常,简单总结了下,如果有错误,望指正! 一 什么是中断和异常 异常又叫同步中断,是当指令执行时由cpu控制单元产生的,之所以称之为异常,是因为只有在 ...
- 《Tsinghua os mooc》第1~4讲 启动、中断、异常和系统调用
资源 OS2018Spring课程资料首页 uCore OS在线实验指导书 ucore实验基准源代码 MOOC OS习题集 OS课堂练习 Piazza问答平台 暂时无法注册 疑问 为什么用户态和内核态 ...
- 《深入理解Linux内核》阅读笔记 --- 第四章 中断和异常
1.中断的作用:中断信号提供了一种方式,使处理器转而去运行正常控制流之外的代码.当一个中断信号到达时,CPU必须停止它当前所做的事,并切换到一个新的活动.为了做到这一点,就要在内核态堆栈保存程序计数器 ...
- [置顶] Linux协议栈代码阅读笔记(一)
Linux协议栈代码阅读笔记(一) (基于linux-2.6.21.7) (一)用户态通过诸如下面的C库函数访问协议栈服务 int socket(int domain, int type, int p ...
- Linux 0.11源码阅读笔记-中断过程
Linux 0.11源码阅读笔记-中断过程 是什么中断 中断发生时,计算机会停止当前运行的程序,转而执行中断处理程序,然后再返回原被中断的程序继续运行.中断包括硬件中断和软件中断,硬中断是由外设自动产 ...
- Linux 0.11源码阅读笔记-总览
Linux 0.11源码阅读笔记-总览 阅读源码的目的 加深对Linux操作系统的了解,了解Linux操作系统基本架构,熟悉进程管理.内存管理等主要模块知识. 通过阅读教复杂的代码,锻炼自己复杂项目代 ...
随机推荐
- Datatable添加数据,提示该行已经属于另一个表的解决方法
一.DataTable.Rows.Add(DataRow.ItemArray); 二.DataTable.ImportRow(DataRow) 三.设置DataTable的tablename,然后.R ...
- sort-uniq-cut-join命令练习
[root@linux Desktop]# cat> fruits.txt banana orange persimmon %%banana apple ORAGE cat> fruits ...
- [android] AndroidManifest.xml - 【 manifest -> 其他次要配置】
<uses-sdk> 作用:使应用程序的兼容性更好,指明应用程序需要的最小API,编译API以及最大支持的API.值都是整数 <uses-sdk android:minSdkVers ...
- C++ 百炼成钢20
题目56: 编写C++程序完成以下功能:(1)定义一个Point类,其属性包括点的坐标,提供计算两点之间距离的方法:(2)定义一个圆形类,其属性包括圆心和半径:(3)创建两个圆形对象,提示用户输入圆心 ...
- 关于Unity的C#基础学习(二)
一.Debug的使用 int a=3; Debug.Log("a="+a); 二.整数的定义 int m; Debug.Log(m); //C#比C更严谨,没有初始化的变量打印出 ...
- mysql 分页sql
-- pageSize=3 pageIndex total=7 -- 开始行号 startRowNum=(pageIndex-1)*pageSize+1; -- 结束行号 endRowNum=page ...
- PHP中strlen和mb_strlen函数的区别
strlen strlen — 获取字符串长度 int strlen ( string $string ) 返回给定的字符串 string 的长度. mb_strlen int mb_strlen ( ...
- 使用spring + ActiveMQ 总结
使用spring + ActiveMQ 总结 摘要 Spring 整合JMS 基于ActiveMQ 实现消息的发送接收 目录[-] Spring 整合JMS 基于ActiveMQ 实现消息的发送接 ...
- Ubuntu 编译安装搭配LNMP 环境
这里用Nginx1.2.0+mysql5.6.33+php5.6.2搭配安装环境 ---------------------------------------------Nginx BEGIN--- ...
- CSDN日报20170411 ——《怎样给自己的私活项目标价》
[程序人生]怎样给自己的私活项目标价 作者:瞬息之间 非常早之前讲过我们"怎么接私活的心得技巧".相信非常多同学听了心里痒痒的.据我认识的(无论是现实生活还是网上接触的)朋友来看. ...