内核中断体系概括

文章目录

  • 前言
  • 一、Linux的中断机制
    • 1、分类
    • 2、代码结构
  • 二、中断的工作流程
    • 1、中断的工作流程
    • 2、Linux 中中断的工作流程
    • 3、中断的代码实现过程
  • 三、内核中断体系结构


前言

本文对内核中断进行概括以及讲述中断的具体实现方法在内核是怎么做的,会结合内核源码中的一些 .s 文件和 .c 文件来具体分析一下内核在中断中的实现方式。

  • 学习中断的目的:
    • 1、硬件的中断响应 --------> 内核驱动中的中断
    • 2、系统调用的函数响应(sys_call)--------> 系统调用
    • 3、自定义中断--------> 软件的软中断模式
    • 4、信号中断(kill -signalnum)--------> 对了解信号的使用、创建等有很大帮助
    • 5、系统的异常和错误 --------> 系统的异常获取,了解系统异常的作用

一、Linux的中断机制

1、分类

Linux的中断分为硬件中断和软件中断

  • 硬中断:由电脑中主机的 8259A 类似的硬件中断控制芯片发出的中断或 ARM 中断控制器发出的中断
  • 软中断:称为异常
    • 第一类:CPU 自行保留的中断
    • 第二类:系统调用异常

2、代码结构

汇编文件对应的c文件
linux/kernel/asm.strap.c
linux/kernel/system_call.sfork.c signal.c exit.c sys.c

二、中断的工作流程

1、中断的工作流程

  • ①. 做 CPU 工作模式的转化
  • ②. 进行寄存器的拷贝与压栈
  • ③. 设置中断异常向量表
  • ④. 保存正常运行的函数返回值
  • ⑤. 跳转到对应的中断服务函数上运行
  • ⑥. 进行模式的复原以及寄存器的复原
  • ⑦. 跳转回正常工作的函数地址继续运行

2、Linux 中中断的工作流程

  • ①. 将所有寄存器值入栈
    • (8086中)SS寄存器、EFLAG寄存器、ESP寄存器、CS寄存器、EIP寄存器
    • 错误码
    • ARM 中的 r0-r15
  • ②. 将异常码(中断号)入栈
  • ③. 将当前的函数返回值进行入栈(为了在中断执行后能够找到在哪中断的,能够复原)
  • ④. 调用对应的中断服务函数
  • ⑤. 出栈函数返回值
  • ⑥. 返回所有入栈的寄存器值

asm.s 和 system_call.s所做的工作是 ① ② ③ ⑤ ⑥,剩余 .c 文件所做工作是 ④

如图所示:
在这里插入图片描述
上图与 linux 源码对应关系如下:

中断前的处理过程,中断后的回复过程中断的执行过程
硬件中断的处理过程linux/kernel/asm.straps.c
软件及系统调用的处理过程linux/kernel/system_call.sfork.c signal.c exit.c sys.c

3、中断的代码实现过程

这里仅分析asm.s 和 trap.c

中断前的处理过程,中断后的回复过程中断的执行过程
硬件中断的处理过程linux/kernel/asm.strap.c

在这里插入图片描述

具体详细内容参考 Linux内核完全注释:基于0.11内核(修正版V3.0).pdf P55~P62P256~P279

三、内核中断体系结构

  • 1、trap_init
    • set_trap_gate 设置的权限较高,只能由用户程序调用
    • set_system_gate 设置的权限较低,能有用户和系统所有的进程调用
      在这里插入图片描述
  • 2、system_call
    • 所有的系统调用 C 函数放到了一个统一的 sys_call_table
    • 系统调用的操作码
    • fn_ptr sys_call_table[] = { sys_setup, sys_exit, sys_fork, sys_read,
      sys_write, sys_open, sys_close, sys_waitpid, sys_creat, sys_link,
      sys_unlink, sys_execve, sys_chdir, sys_time, sys_mknod, sys_chmod,
      sys_chown, sys_break, sys_stat, sys_lseek, sys_getpid, sys_mount,
      sys_umount, sys_setuid, sys_getuid, sys_stime, sys_ptrace, sys_alarm,
      sys_fstat, sys_pause, sys_utime, sys_stty, sys_gtty, sys_access,
      sys_nice, sys_ftime, sys_sync, sys_kill, sys_rename, sys_mkdir,
      sys_rmdir, sys_dup, sys_pipe, sys_times, sys_prof, sys_brk, sys_setgid,
      sys_getgid, sys_signal, sys_geteuid, sys_getegid, sys_acct, sys_phys,
      sys_lock, sys_ioctl, sys_fcntl, sys_mpx, sys_setpgid, sys_ulimit,
      sys_uname, sys_umask, sys_chroot, sys_ustat, sys_dup2, sys_getppid,
      sys_getpgrp, sys_setsid, sys_sigaction, sys_sgetmask, sys_ssetmask,
      sys_setreuid,sys_setregid };
    • system_call.s ----------> Sched.c

我的qq:2442391036,欢迎交流!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/704759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Flink】Flink 中的时间和窗口之窗口(Window)

1. 窗口的概念 Flink是一种流式计算引擎,主要是来处理无界数据流,数据流的数据是一直都有的,等待流结束输入数据获取所有的流数据在做聚合计算是不可能的。为了更方便高效的处理无界流,一种方式就是把无限的流数据切割成有限的数…

c语言-day1(ubuntu操作系统及指令)

1:思维导图 2: (1): (2) (3) (4) (5)

通过盲注脚本复习sqllabs第46关 order by 注入

sql-lab-46 order by 注入是指其后面的参数是可控的, order by 不同于我们在 where 后的注入点,不能使用 union 等注入,其后可以跟接 报错注入 或者 时间盲注。 数字型order by注入时,语句order by2 and 12,和order by2 and 11显示的结果一…

前端框架的CSS模块化(CSS Modules)

创作纪念日之际,来给大家分享一篇文章吧 聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们…

Vue前端对请假模块——请假开始时间和请假结束时间的校验处理

开发背景:Vueelement组件开发 业务需求:用户提交请假申请单,请假申请的业务逻辑处理 实现:用户选择开始时间需要大于本地时间,不得大于请假结束时间,请假时长根据每日工作时间实现累加计算 页面布局 在前…

二进制部署k8s之网络部分

1 CNI 网络组件 1.1 K8S的三种接口 CRI 容器运行时接口 docker containerd podman cri-o CNI 容器网络接口 flannel calico cilium CSI 容器存储接口 nfs ceph gfs oss s3 minio 1.2 K8S的三种网络 节点网络 nodeIP 物理网卡的IP实现节点间的通信 Pod网络 podIP Pod与Po…

视频和音频使用ffmpeg进行合并和分离(MP4)

1.下载ffmpeg 官网地址:https://ffmpeg.org/download.html 2.配置环境变量 此电脑右键点击 属性 - 高级系统配置 -高级 -环境变量 - 系统变量 path 新增 文件的bin路径 3.验证配置成功 ffmpeg -version 返回版本信息说明配置成功4.执行合并 ffmpeg -i 武家坡20…

GOOGLE Colab Pro会员订阅开通购买付费充值教程

一、简介 colab由谷歌团队开发,用于机器学习、数据分析,教育等目的,他的会员也非常的昂贵,最基本的套餐要10美金,最高要50美金一个月,如何省钱,往下看。 一般来说土区的价格比较便宜&#xff0…

Day02:Web架构前后端分离站Docker容器站集成软件站建站分配

目录 常规化站点部署 站库分离 前后端分离 集成软件搭建Web应用 Docker容器搭建Web应用 建立分配站 静态 与 伪静态 总结 章节知识点: 应用架构:Web/APP/云应用/三方服务/负载均衡等 安全产品:CDN/WAF/IDS/IPS/蜜罐/防火墙/杀毒等 渗…

怎么把pdf转换成word?

怎么把pdf转换成word?Pdf和word在电脑上的使用非常广泛,pdf和word分别是由 Adobe和Microsoft 分别开发的电脑文件格式。PDF 文件可以在不同操作系统和设备上保持一致的显示效果,无论是在 Windows、Mac 还是移动设备上查看,都能保持…

配置多个后端 API 代理

在开发 React 应用时,通常会涉及到与后端 API 的交互。而在开发过程中,我们经常需要在开发环境中使用代理来解决跨域请求的问题。Create React App 提供了一种简单的方式来配置代理,即通过创建一个名为 setupProxy.js 的文件来配置代理规则。…

《数据治理简易速速上手小册》第4章 数据安全与合规性(2024 最新版)

文章目录 4.1 数据安全的基本原则4.1.1 基础知识4.1.2 重点案例:在线零售商的数据加密4.1.3 拓展案例 1:医疗机构的访问控制4.1.4 拓展案例 2:金融服务提供商的数据备份和恢复 4.2 遵循数据合规性的策略4.2.1 基础知识4.2.2 重点案例&#xf…

PHPStudy无法解析php(7.3.4)文件

#告诉服务器,对于以.fcgi、.php或.phtml为后缀的请求,应该使用FPM进行处理。 AddHandler fcgid-script .fcgi .php .phtml #设置了全局默认使用的PHP版本路径 FcgidInitialEnv PHPRC "D:/phpstudy_pro/Extensions/php/php7.3.4nts" #告诉服务器…

Django学习笔记-ModelForm使用(完全依赖)

1.创建模型 ,code,name,sex,entrydate 2.模型映射 python manage.py makemigrations myapp01,python manage.py migrate 3.创建模型表单,继承forms.ModelForm,Meta:元数据,models需引入,fields填写引用的模型变量 4.创建testModelForm.html,添加urls 5.views编写testmodelfo…

simple-pytest 框架使用指南

simple-pytest 框架使用指南 一、框架介绍简介框架理念:框架地址 二、实现功能三、目录结构四、依赖库五、启动方式六、使用教程1、快速开始1.1、创建用例:1.2、生成py文件1.3、运行脚本1.3.1 单个脚本运行1.3.2 全部运行 1.4 报告查看 2、功能介绍2.1、…

设计模式(八)外观模式

相关文章设计模式系列 1.外观模式简介 外观模式介绍 当我们开发Android的时候,无论是做SDK还是封装API,我们大多都会用到外观模式,它通过一个外观类使得整个系统的结构只有一个统一的高层接口,这样能降低用户的使用成本。 外观…

面试redis篇-10Redis集群方案-主从复制

在Redis中提供的集群方案总共有三种: 主从复制哨兵模式分片集群主从复制 单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。 主从数据同步原理 Replication Id:简称replid,是数据集的标记,id一致则说明是同一数据集。每…

Java SpringBoot 创建项目工程输出 Hello World

Java SpringBoot 创建项目工程输出 Hello World 1、新建项目 2、创建 controller 3、编写 Hello World 代码 package com.zhong.demo01.controller;import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.Res…

本地项目如何上传到gitee

文章目录 一、在gitee上新建远程仓库二、初始化本地仓库三、执行git命令上传代码 一、在gitee上新建远程仓库 仓库名称必填,路径自动跟仓库名称保持一致 解释说明: 仓库名称:必填,每个仓库都需要有一个名称,同一个码…

kubectl 命令行管理K8S

目录 陈述式资源管理方式 介绍 命令 项目的生命周期 创建 kubectl create命令 发布 kubectl expose命令 更新 kubectl set 回滚 kubectl rollout 删除 kubectl delete 陈述式资源管理方式 介绍 1.kubernetes 集群管理集群资源的唯一入口是通过相应的方法…