操作系统 | 中断 & 系统调用浅析

简介: 操作系统 | 中断 & 系统调用浅析

前言


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


1. 中断机制


1.1 什么是中断?


  • 定义


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


相关概念 描述
中断分类 硬中断(Hardware Interrupt)& 软中断(Software Interrupt)
中断向量表(Interrupt Vector Table) 记录了中断号与中断服务程序内存地址的映射关系
中断服务程序 / 中断处理程序(Interrupt Service) 通过中断向量表定位到的特定处理程序

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、程序从内核态返回用户态
目录
相关文章
|
4天前
|
消息中间件 存储 算法
【软件设计师备考 专题 】操作系统的内核(中断控制)、进程、线程概念
【软件设计师备考 专题 】操作系统的内核(中断控制)、进程、线程概念
85 0
|
8月前
操作系统:中断和异常
内中断(异常):与当前CPU的执行的指令有关,中断信号来自CPU内部 外中断:与当前CPU的执行的指令无关,中断信号来自CPU外部 (注:在大部分教材中,“中断”是狭义的中断,指外中断;而内中断则称为异常)
131 0
|
4天前
|
Linux C语言
操作系统 | 添加系统调用
操作系统 | 添加系统调用
34 0
|
4天前
|
Linux 开发工具 C语言
【操作系统】实验四 增加Linux系统调用
【操作系统】实验四 增加Linux系统调用
14 1
|
6月前
|
存储 缓存 Linux
【看表情包学Linux】冯诺依曼架构 | 理解操作系统 | 基于 Pintos 实现新的用户级程序的系统调用
【看表情包学Linux】冯诺依曼架构 | 理解操作系统 | 基于 Pintos 实现新的用户级程序的系统调用
69 1
|
4天前
|
Unix 编译器 Linux
操作系统的启动和中断
操作系统的启动和中断
20 0
|
4天前
|
资源调度 调度 UED
CPU执行系统调用时发生中断,操作系统还能切回中断前的系统调用继续执行吗?
系统调用服务例程在执行过程中,通常不会被中断。系统调用服务例程的执行是一个原子操作,即在执行期间不会被中断。这是为了确保在系统调用服务例程执行期间对内核数据结构的一致性和完整性。
|
5月前
【操作系统】—中断和异常
【操作系统】—中断和异常
【操作系统】—中断和异常
|
6月前
|
存储 前端开发 Linux
操作系统实验一:时钟中断程序设计
操作系统实验一:时钟中断程序设计
84 0
|
6月前
|
存储 Unix Java
探索操作系统:内核、启动和系统调用的奥秘
操作系统是计算机不可或缺的一部分,它连接着硬件和应用程序。内核是操作系统的核心,负责管理进程和线程、内存、硬件设备以及提供系统调用接口。计算机启动过程中,ROM负责加载并执行BIOS程序,而RAM用于存储运行中的程序和数据。系统调用是操作系统提供给应用程序的接口,通过系统调用可以访问操作系统的功能。系统调用相当于一个办事大厅,应用程序需要通过系统调用来完成特定的操作或获取特定的服务。