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 内核阅读笔记 中断和异常的更多相关文章

  1. linux内核分析笔记----中断和中断处理程序【转】

    转自:http://www.cnblogs.com/hanyan225/archive/2011/07/17/2108609.html 中断还是中断,我讲了很多次的中断了,今天还是要讲中断,为啥呢?因 ...

  2. linux内核分析笔记----中断和中断处理程序

    中断还是中断,我讲了很多次的中断了,今天还是要讲中断,为啥呢?因为在操作系统中,中断是必须要讲的.. 那么什么叫中断呢, 中断还是打断,这样一说你就不明白了.唉,中断还真是有点像打断.我们知道linu ...

  3. LINUX0.11 内核阅读笔记

    一.源码目录 图1 二.系统总体流程: 系统从boot开始动作,把内核从启动盘装到正确的位置,进行一些基本的初始化,如检测内存,保护模式相关,建立页目录和内存页表,GDT表,IDT表.然后进入main ...

  4. linux中断与异常

    看了<深入理解linux内核>的中断与异常,简单总结了下,如果有错误,望指正! 一 什么是中断和异常 异常又叫同步中断,是当指令执行时由cpu控制单元产生的,之所以称之为异常,是因为只有在 ...

  5. 《Tsinghua os mooc》第1~4讲 启动、中断、异常和系统调用

    资源 OS2018Spring课程资料首页 uCore OS在线实验指导书 ucore实验基准源代码 MOOC OS习题集 OS课堂练习 Piazza问答平台 暂时无法注册 疑问 为什么用户态和内核态 ...

  6. 《深入理解Linux内核》阅读笔记 --- 第四章 中断和异常

    1.中断的作用:中断信号提供了一种方式,使处理器转而去运行正常控制流之外的代码.当一个中断信号到达时,CPU必须停止它当前所做的事,并切换到一个新的活动.为了做到这一点,就要在内核态堆栈保存程序计数器 ...

  7. [置顶] Linux协议栈代码阅读笔记(一)

    Linux协议栈代码阅读笔记(一) (基于linux-2.6.21.7) (一)用户态通过诸如下面的C库函数访问协议栈服务 int socket(int domain, int type, int p ...

  8. Linux 0.11源码阅读笔记-中断过程

    Linux 0.11源码阅读笔记-中断过程 是什么中断 中断发生时,计算机会停止当前运行的程序,转而执行中断处理程序,然后再返回原被中断的程序继续运行.中断包括硬件中断和软件中断,硬中断是由外设自动产 ...

  9. Linux 0.11源码阅读笔记-总览

    Linux 0.11源码阅读笔记-总览 阅读源码的目的 加深对Linux操作系统的了解,了解Linux操作系统基本架构,熟悉进程管理.内存管理等主要模块知识. 通过阅读教复杂的代码,锻炼自己复杂项目代 ...

随机推荐

  1. hive 和Hbase的pom文件

    <hadoop-common></hadoop-common> <hadoop-hdfs></hadoop-hdfs> <dependency&g ...

  2. [转]基于Storm的实时数据处理方案

    1 文档说明 该文档描述的是以storm为主体的实时处理架构,该架构包括了数据收集部分,实时处理部分,及数据落地部分. 关于不同部分的技术选型与业务需求及个人对相关技术的熟悉度有关,会一一进行分析. ...

  3. 关于对象序列化json 说说

    下面一个json格式图(说一下,json 其实就是js 数组和对象的一种字符串表现形式 var obj=[] 或者var obj={}  ) var json= {} 如下 从图中看 json中有两个 ...

  4. android onTouchEvent

    触摸屏幕时,没搞懂每个事件的启动顺序.本文记录onTouchEvent发生时,每个事件启动的顺序. 测试代码 @Override public boolean onTouchEvent(MotionE ...

  5. mysql -- 存储过程中 declare 和 set 定义变量的区别

    mysql存储过程中,定义变量有两种方式:1.使用set或select直接赋值,变量名以 @ 开头.例如:set @var=1;可以在一个会话的任何地方声明,作用域是整个会话,称为会话变量. 2.以 ...

  6. 转载: crypto:start() 错误。

    错误信息: Eshell V5.10.3  (abort with ^G)1> crypto:start().** exception error: undefined function cry ...

  7. gomobile build

    You need to set the NDK path in gomobile init using the -ndk flag - if you follow these instructions ...

  8. string类(四、字符串比较相关)

    string类比较相关: 1. string.Compare [static] 1/ string.Compare(string A, string B); 比较两个string,返回整数表示二者在排 ...

  9. MySQL------代码1024,can't get hostname for your address解决方法

    1.hosts文件问题 进入C:\Windows\System32\drivers\etc\hosts 查看里面是否包含: # 127.0.0.1 localhost 没有则添加,再重启MySQL服务 ...

  10. shell脚本学习总结09--分支与循环结构

    if 条件语句 = start ]];then echo start app elif [[ $ = stop ]];then echo stop appelif [[ $1 = ... ]];the ...