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操作系统基本架构,熟悉进程管理.内存管理等主要模块知识. 通过阅读教复杂的代码,锻炼自己复杂项目代 ...
随机推荐
- Python高级编程之生成器(Generator)与coroutine(二):coroutine介绍
原创作品,转载请注明出处:点我 上一篇文章Python高级编程之生成器(Generator)与coroutine(一):Generator中,我们介绍了什么是Generator,以及写了几个使用Gen ...
- 虚拟化–操作系统级 LXC Linux Containers内核轻量级虚拟化技术
友情提示:非原文链接可能会影响您的阅读体验,欢迎查看原文.(http://blog.geekcome.com) 原文地址:http://blog.geekcome.com/archives/288 软 ...
- AD smart pdf 中文丢失
Altium Designer将原理图通过smart pdf导出,原理图中的中文丢失了. 将原理图中的所有中文字体改为宋体即可. 百度知道上的也有说: 打开软件后,点击左上角的[DXP]→[Prefe ...
- 嵌入式驱动开发之采集方式bypass mode---bypass mode
http://baike.baidu.com/link?url=HifFTlNRROR24lW_gSdTiG-eXooi08O0Eeq1mU6Yy0I1LOMW4kdumv25BOQbohV_428M ...
- Thinkphp整合各个功能
thinkphp整合Auth权限管理.支付宝.微信支付.阿里oss.友盟推送.融云即时通讯.云通讯短信.Email.Excel.PDF等等: 基于thinkphp扩展了大量的功能:而不改动thinkp ...
- Loadrunner_http长连接设置
最近协助同事解决了几个问题,也对loadrunner的一些设置加深了理解,关键是更加知其所以然. ljonathan http://www.51testing.com/html/48/202848-2 ...
- 《Programming with Objective-C》第四章 Encapsulating Data
Designated Initializer 不稳定的传送门 合成属性 Properties don’t always have to be backed by their own instance ...
- jquery获取设置input值
$("#input").val("123"),注意val()这个函数$("#input").val("123"),//给 ...
- Woody的Python学习笔记3
Python运算符 Python逻辑运算符 and布尔与-假设x为false.x and y返回false,否则它返回y的计算值. or 布尔或-假设x是true,它返回true.否则它返回y的计算值 ...
- Spring源码从开始到放弃(一)
参考<Spring技术内幕>分析. github上面有spring的源码(https://github.com/spring-projects/spring-framework) spri ...