首页 > 系统相关 >深入理解linux内核第三版(三)中断和异常

深入理解linux内核第三版(三)中断和异常

时间:2022-10-06 09:33:08浏览次数:86  
标签:eip 中断 第三版 指令 处理程序 内核 linux 异常

中断:也叫异步中断,是由外设产生的。

异常:也叫同步中断,是由CPU产生的,是指令执行过程中产生的。

中断信号的作用:中断信号提供了一种特殊的方式,使处理器转而去运行正常控制流之外的代码。

1 中断和异常的分类

中断:

  1. 可屏蔽中断:如果可屏蔽中断masked置位,则cpu忽略它
  2. 不可屏蔽中断:表示这个中断不可忽略,cpu必须识别并处理它

异常:

  1. 故障(fault):eip指向发生故障的指令,当异常处理程序终止时,重新执行eip所指向的指令。
  2. 陷阱(trap):eip指向下一条指令,当异常处理程序终止时,执行eip指向的下一条指令。
  3. 异常中止(abort):发生一个严重错误,异常处理程序会强制终止当前进程。
  4. 编程异常:也叫软中断

2 IRQ

外设和PIC(可编程中断控制器)的连线,称为IRQ线。

PIC的I/O端口通过数据总线和CPU的INTR引脚相连

PIC的作用:

  1. 监视IRQ线
  2. 如果一个IRQ线上有引发信号,则把这个引发信号转换为对应的向量。
  3. 把这个向量存放在PIC的I/O端口,从而允许CPU通过数据总线读取此向量
  4. 引发信号到达CPU的INTR引脚,产生一个中断。
  5. 等待CPU的中断应答。当CPU处理了中断后,会将确认信号写到PIC的一个I/O端口。PIC读取此确认信号,清INTR线。
  6. 返回第1步

IRQ线是从0开始编号的,默认的向量号是IRQ+32.

3 IDT(中断描述符表)

中断描述符表存放中断描述符。每一个中断描述符8字节。因为系统中最多256个中断向量,所以,中断描述符表最大为256*8=2048字节。

中断描述符类型:任务门、中断门、陷阱门。linux利用中断门处理中断,利用陷阱门处理异常。其格式如下所示:

 

4 中断和异常的硬件处理

cs可eip寄存器包含了下一条将要执行的指令的逻辑地址。如果发生一个中断或异常,那么控制单元执行下列操作:

  1. 确定中断向量i
  2. 读取由idtr寄存器指向的idt表中的第i项,获取到段选择符和偏移量
  3. gdtr寄存器获取gdt的基地址。并根据上一步获取的段选择符和偏移量定位到gdt中的某一项。这一步是确定中断或异常处理程序的地址。
  4. 保存上下文,具体是原进程的eflags、cs、eip入栈,其中eip中的指令是中断处理程序退出时需要执行的原代码中的下一条指令
  5. 硬件出错码入栈
  6. 装在中断处理程序的cs和eip寄存器,其值分别是idt表中第i项的段选择符和偏移量。这些值给出了中断或异常处理程序第一条指令的地址。

可参考:https://www.cnblogs.com/zhenjingcool/p/15999402.html,这篇文章介绍了0.11内核中断和异常处理过程。

5 中断和异常处理程序的嵌套执行

我们可以这样理解中断或者异常,每个中断或者异常其实是当前进程的一部分,或者说代表了当前进程在内核态执行的一些指令序列。

每个中断或者异常都会引起一个内核控制路径,内核控制路径可以任意嵌套,一个中断处理程序可以被另一个中断处理程序“中断”。

 

需要注意的是,中断处理程序必须永不阻塞,换句话说,中断处理程序运行期间不能发生进程切换。也就是说中断处理程序不能做任何耗时操作,必须小巧而精妙,耗时的操作需要放在其他地方执行,发生中断时,必须立即处理,然后立即应答。

事实上,内核控制路径恢复执行时需要的所有数据都存放在当前进程的内核态堆栈中。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

待续...

 

标签:eip,中断,第三版,指令,处理程序,内核,linux,异常
From: https://www.cnblogs.com/zhenjingcool/p/16757043.html

相关文章

  • Linux 磁盘管理
    导图 1.磁盘的结构服务器硬盘大小LFF:3.5寸,一般见到的那种台式机硬盘的大小SFF:SmallFormFactor小形状因数,2.5寸,注意不同于2.5寸的笔记本硬盘L、S分别是大、小的意......
  • 01#Linux 用户管理:添加用户
    认识passwd文件/etc/passwd是用来存储用户基本信息的文件,它类似于电子表格,一共有7列。useradd指令在创建用户时可以默认指定一些列的信息,例如:shell类型、GID(组ID)。-......
  • Mesa 新补丁大幅缩短 CS:GO for Linux 的启动时间
    AMD Linux 图形驱动程序工程师Pierre-Eric对Mesa的通用代码进行了改进,为Valve的CS:GO游戏带来更快的启动时间。早在2016年,很多Linux用户就发现CS:GO......
  • linux驱动移植-linux块设备驱动Nand Flash
    在介绍NandFlash块设备驱动之前,我们首先要了解Mini2440开发板所使用的K9F2G08U0C型号芯片,具体可以参考之前我们介绍的两篇博客:Mini2440裸机开发之NandFlash基础Mini2......
  • Linux新建用户设置root权限
    一、建立新用户1.登录root用户suroot2.创建新用户sudouseradd-r-m-s/bin/bash用户名其中参数的意义如下:        -r:建立系统账号        -m:......
  • linux --- 虚拟文件系统
    Linux内核包含了文件管理子系统组件,它主要实现了虚拟文件系统(VirtualFileSystem,VFS),虚拟文件系统屏蔽了各种硬件上的差异以及具体实现的细节,为所有的硬件设备提供统一的......
  • Linux系列
    入门到精通​01-Linux发展介绍​02-Linux系统安装​03-Linux-Shell​04-Linux文件管理​05-Linux文件编辑​06-Linux用户管理​07-Linux基本权限​08-Linu......
  • 如何将linux设置成网关
    如何将linux设置成网关打开网关linux的端口转发功能:echo'1'>/proc/sys/net/ipv4/ip_forward在VMWare中创建一个仅主机的内网:进入本机配置该网络IP分配为DHCP:......
  • Linux VI编辑器
    编辑保存退出基本命令就不多赘述了yy复制当前行(n)yy复制当前以下n行dd删除当前行(n)dd删除当前以下n行p粘贴/(搜索字符)搜索......
  • Linux-内存
    kswapd_init  kswapd_run    kswapd      kswapd_try_to_sleep        prepare_kswapd_sleep       ......