gd32f303 设计中断优先级_操作系统 | 中断 & 系统调用浅析

前言

  • 在分析 Android 源码的过程中,往往会经历 app -> framework -> native -> kernel 的过程,最终就来到了用户程序与内核层序的边界,即:系统调用(System Call)
  • 清晰地理解系统调用的相关概念,对于后续深刻理解其他重点知识大有裨益。在这篇文章里,我将简单分析 中断 &系统调用 的相关概念,如果能帮上忙,请务必点赞加关注,这真的对我非常重要。

1. 中断机制

1.1 什么是中断?

  • 定义

中断(interrupt)是计算机系统中的基本机制之一。即:在计算机运行过程中,当发生某个事件后,CPU 会停止当前程序流,转而去处理该事件,并在处理完毕后继续执行原程序流。

3fe3d4d9e13659910ec76c078d2dceea.png

1.2 为什么引入中断?

中断机制的好处是 化主动为被动,避免 CPU 轮询等待某条件成立。如果没有中断机制,那么“某个条件成立”就需要 CPU 轮询判断,这样就会增加系统的开销。而使用中断机制,就可以在条件成立之后,向 CPU 发送中断事件,强制中断 CPU 执行程序,转而去执行中断处理程序。

1.3 硬中断

硬中断由外部设备(例如:磁盘,网卡,键盘,时钟)产生,用来通知操作系统外设状态变化。

时钟中断: 一种硬中断,用于定期打断 CPU 执行的线程,以便切换给其他线程以得到执行机会。

硬中断的处理流程如下:

  • 1、外设 将中断请求发送给中断控制器;
  • 2、中断控制器 根据中断优先级,有序地将中断传递给 CPU;
  • 3、CPU 终止执行当前程序流,将 CPU 所有寄存器的数值保存到栈中;
  • 4、CPU 根据中断向量,从中断向量表中查找中断处理程序的入口地址,执行中断处理程序;
  • 5、CPU 恢复寄存器中的数值,返回原程序流停止位置继续执行。

1.4 软中断

软中断是一条 CPU 指令,由当前正在运行的进程产生。

软中断模拟了硬中断的处理过程:

  • 1、无
  • 2、无
  • 3、CPU 终止执行当前程序流,将 CPU 所有寄存器的数值保存到栈中;
  • 4、CPU 根据中断向量,从中断向量表中查找中断处理程序的入口地址,执行中断处理程序;
  • 5、CPU 恢复寄存器中的数值,返回原程序流停止位置继续执行。
系统调用: 是一种软中断处理程序,用于让程序从用户态陷入内核态,以执行相应的操作。

2. 系统调用

2.1 操作系统与应用的边界

  • 内核空间

操作系统(Operating System)是管理计算机硬件与软件资源的程序,操作系统内核驻留在受保护的内核空间。

  • 用户空间

应用是运行在操作系统上运行的程序,工作在用户空间。

  • 隔离

处于安全性和稳定性考虑,用户空间程序无法直接执行内核代码(例如:I/O 读写、创建新进程/线程),也无法访问内核数据,必须通过系统调用。

2.2 系统调用的定义

系统调用(Syscall) 是一种软中断处理程序,用于让程序从用户态陷入内核态,以执行相应的操作。

2.3 系统调用的作用

当发生系统调用时,会让程序从用户态陷入内核态,以执行相应的操作。

2.4 系统调用中断处理程序的流程

  • 1、程序从用户态陷入内核态
  • 2、根据系统调用号,在系统调用表中查找对应的系统调用函数的内存地址,执行系统调用函数。
  • 3、程序从内核态返回用户态

参考资料

  • 《程序是怎样跑起来的》(第 9、11 章)—— [日]矢泽久雄 著
  • 《Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理(第2版)》(第 1 章)—— 新设计团队 著
  • 《Linux内核分析及应用》(第1.5 节、第 4 章)—— 陈科 著
  • 《Linux 系统调用(syscall)原理》 —— Gityuan 著
  • 《Linux内核分析-系统调用用户态到内核态流程(四、五)》
  • 《程序员的自我修养·链接、装载与库》(第 12 章)—— 俞甲子 石凡 潘爱民 著

推荐阅读

密码学 | Base64是加密算法吗?​www.jianshu.com 算法面试题 | 回溯算法解题框架​www.jianshu.com 算法面试题 | 链表问题总结​www.jianshu.com
24ea77f8147a60d99e48014b3c665748.png
计算机组成原理 | Unicode 和 UTF-8是什么关系?​www.jianshu.com 计算机组成原理 | 为什么浮点数运算不精确?(阿里笔试)​www.jianshu.com 计算机网络 | 图解 DNS & HTTPDNS 原理​www.jianshu.com Android | 带你探究 LayoutInflater 布局解析原理​www.jianshu.com
e8e2668104d5122228654c31a30444fb.png
Android | 面试必问的 Handler,你确定不看看?​www.jianshu.com
e8e2668104d5122228654c31a30444fb.png
Android | View & Fragment & Window 的 getContext() 一定返回 Activity 吗?​www.jianshu.com
e8e2668104d5122228654c31a30444fb.png

感谢喜欢!你的点赞是对我最大的鼓励!欢迎关注彭旭锐的GitHub!

88acf205e86b7288db3128b6df76230d.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值