首页 > 系统相关 >《Linux内核完全注释》学习笔记:2.2 Linux中断机制

《Linux内核完全注释》学习笔记:2.2 Linux中断机制

时间:2024-05-14 18:41:29浏览次数:23  
标签:中断向量 中断 芯片 内核 Linux 2.2 8259A CPU

在使用80x86组成的PC中,采用了两片8259A可编程中断控制芯片

每片可以管理8个中断源。通过多片的级联方式,能构成最多管理64个中断向量的系统。

在 PC/AT 系列兼容机中,使用了两片8259A芯片,共可管理15级中断向量。其级联示意图见图2-5。其中从芯片的 INT 引脚连接到主芯片的 IR2 引脚上。8259A芯片的端口基地址是0x20,8259A芯片是0xA0。

image

图2-5 PC/AT 微机级联式8259控制系统

在总线控制器控制下,8259A芯片可以处于编程状态和操作状态。

编程状态是 CPU 使用 IN 或 OUT 指令对 8259A 芯片进行初始化编程的状态。

完成了初始化编程,芯片即进入操作状态,此时芯片即可随时响应外部设备提出的中断请求(IRQ0~IRQ15)。

通过中断判优选择,芯片将选中当前最高优先级的中断请求作为中断服务对象,并通过CPU引脚 INTR 通知 CPU 外中断请求的到来,CPU响应后,芯片从数据总线 D7~D0 将编程设定的当前服务对象的中断号送出,CPU由此获取对应的中断向量值,并执行中断服务程序。

对于Linux内核来说,中断信号通常分为两类:

  • 硬件中断
  • 软件中断(异常)。

每个中断是由 0~255 之间的一个数字来标识。

对于中断 int0~int31(0x00~0x1f),每个中断的功能由 Intel 公司固定设定或保留用,属于软件中断,但 Intel 公司称之为异常。因为这些中断是在 CPU 执行指令时探测到异常情况而引起的。通常还可分为故障(fault)和陷阱(traps)两类。

中断 int32~int255(0x20~0xff)可以由用户自己设定。在Linux系统中,则将 int32~int47(0x20~0x2f)对应于 8259A 中断控制芯片发出的硬件中断请求信号 IRQ0~IRQ15,并把程序编程发出的系统调用(system_call)中断设置为 int128(0x80)。

在Linux 0.11内核源代码的 head.s 程序中,内核首先使用一个哑中断向量(中断描述符)对中断描述符表(Interrupt Descriptor Table,IDT)中所有256个描述符进行了默认设置(boot/head.s,78行)。这个哑中断向量指向一个默认的“无中断”处理过程(boot/head.s,150行)。当发生了一个中断而又没有重新设置过该中断向量时就会显示信息“未知中断(unknown in-terrupt)”。

因此,对于系统需要使用的一些中断,内核必须在其继续初始化的处理过程中(init/main.c)重新设置这些中断的中断描述符项,让它们指向对应的实际处理过程。通常,硬件异常中断处理过程(int0~int 31)都在traps.c的初始化函数中进行了重新设置(kernel/traps.c,181行),而系统调用中断 int128 则在调度程序初始化函数中进行了重新设置(kernel/sched.c,385行)。

int0~int 31 这里不是intel保留的软件中断或者说是异常吗?
为何说是硬件异常中断

标签:中断向量,中断,芯片,内核,Linux,2.2,8259A,CPU
From: https://www.cnblogs.com/Larcvz/p/18191945

相关文章

  • Linux-硬件信息收集
    使用lshw来做收集。importcopyimportjsonimportos硬件详细报表_dict={}def命令执行(ip:str,cmd:str,port:int=22)->str:'''对指定的IP执行命令,使用ssh方式,bash解释器应该确保对方主机信任本机。返回命令执行的结果(读取的是stdout)'''cmd......
  • Linux-IO监控
    importpymysqlimportosimportreimporttimeimportdatetime'''建表语句:CREATETABLE`r_linux_io_monitor`(`up_date`datetimeDEFAULTCURRENT_TIMESTAMPCOMMENT'监测时间',`ip`varchar(16)DEFAULTNULLCOMMENT'IP地址',......
  • Linux启动流程
    参考链接:https://www.ruanyifeng.com/blog/2013/02/booting.htmlhttps://www.ruanyifeng.com/blog/2013/08/linux_boot_process.htmlhttps://www.runoob.com/linux/linux-system-boot.html第一阶段:计算机启动(硬件启动流程)1.BIOS(BasicInputOutputSystem基本输入输出系统)阶......
  • 在Linux中,如何配置防火墙和安全规则?
    在Linux中,配置防火墙和安全规则通常涉及使用iptables或较新的firewalld工具。以下是使用这两种工具的基本步骤和概念:1.使用iptables配置防火墙规则iptables是Linux内核的Netfilter框架的一部分,用于配置防火墙规则。它通过一系列链(chains)和规则(rules)来决定数据包的处理方式(如允......
  • 在Linux中,什么是入侵检测系统(IDS)和入侵防御系统(IPS)?
    在Linux环境中,入侵检测系统(IntrusionDetectionSystem,IDS)和入侵防御系统(IntrusionPreventionSystem,IPS)是两种关键的网络安全组件,用于增强网络的安全性和防护能力。下面是对这两个概念的详细解释:1.入侵检测系统(IDS)入侵检测系统是一种监控工具,其主要职责是实时或定期监控......
  • [转]查杀linux隐藏挖矿病毒rcu_tasked
    记录一次项目中挖矿病毒的经历这是黑客使用的批量蔓延病毒的工具,通过如下脚本[[email protected]]#cat/home/pischi/.bash_historycd/root/nvidia-smi;ls-a;cd.cfg;ls-a;wc-lip./key20-fippass22"nproc;nvidia-smi;rm-rf.cfg;mkdir.cfg;cd.cfg;wget193.42......
  • 常用的Linux命令
    grep-rxxx递归的查找目录中的文件内容wc-l统计数量cut-d":"-f6使用特定的分隔符进行分割,并取值grep-E使用正则表达式grep-c统计行数mount挂载chmod设置权限awk{print$1}显示某列find./-name找文件名find/path/to/directory-size+20M找文......
  • linux安装华为高斯数据库
     华为安装部署流程:https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/2.23.07.210/install/qlh_04_0025.html高斯数据库文档说明书下载:https://support.huawei.com/enterprise/zh/cloud-computing/gaussdb-pid-251517148https://www.modb.pro/db/11248用docker快速安装:https:/......
  • Linux 使用 curl 发送请求
    前言请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i、提示:以下是本篇文章正文内容,下面案例可供参考#get请求json入参curlhttp://xxx.xxx:60512/scrm/chat/msg/selectFullChatListForDay-d'{"key":"215EACF20778586C788FFD9187AB0F72","qrDay":"2023-04-25"}�......
  • linux 文件系统扩容
    pvcreate/dev/sdbvgcreatevg_nc/dev/sdblvcreate-l+100%FREE-nlv_ncvg_ncmkfs.xfs/dev/vg_nc/lv_ncmount/dev/vg_nc/lv_nc/ncxfs文件系统扩展vgextendvg_nc/dev/sdclvextend-l+100%FREE/dev/vg_nc/lv_ncdf-Th--查看文件系统类型[root@ht19c01~]#df-......