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操作系统基本架构,熟悉进程管理.内存管理等主要模块知识. 通过阅读教复杂的代码,锻炼自己复杂项目代 ...
随机推荐
- /proc/modules分析
参考:redhat linux deployment guide--5.2.21. /proc/modules This file displays a list of all modules lo ...
- 点击edittext并显示其内容
package com.example.sum;//sum import com.example.sum.R;//sum import android.app.Activity; import and ...
- MyBatis学习4---使用MyBatis_Generator生成Dto、Dao、Mapping
由于MyBatis属于一种半自动的ORM框架,所以主要的工作将是书写Mapping映射文件,但是由于手写映射文件很容易出错,所以查资料发现有现成的工具可以自动生成底层模型类.Dao接口类甚至Mappi ...
- 使用命令行操控VirtualBox虚拟机
(1)启动虚拟机:$ VBoxManage startvm <VMNAME> --type gui #执行结束后,就会启动指定的虚拟机,几乎和平时没什么区别. $ VBoxManage ...
- zabbix2.0 添加自定义监控项
1. key的创建 客户端配置文件如下: root@192.168.100.254:/usr/local/zabbix/sbin# egrep -v "(^#|^$)" ../et ...
- AngularJS------各种版本下载地址
转载: http://blog.csdn.net/Rongbo_J/article/details/51325606 下载地址: github https://github.com/angular/a ...
- Python学习笔记6-字典Dict
Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度. >>> person ...
- iOS 7 SDK: 如何使用后台获取(Background Fetch)
本文转载至 http://www.cocoachina.com/applenews/devnews/2013/1114/7350.html 本文主要教你如何使用iOS 7 SDK多任务处理API--B ...
- 在Eclipse中显示.project和.classpath和.setting目录
在Eclipse中显示.project, .classpath, .gitignore文件和.setting文件夹 在Eclipse中使用git,并显示.gitigonre文件,进行项目管理 在Ecl ...
- Delphi XE5通过WebService开发Web服务端和手机客户端
Delphi XE5通过WebService开发Web服务端和手机客户端介绍 我们开发一个三层的android程序 建立一个webservices stand-alone vcl applicati ...