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

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

前言


  • 在分析 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、程序从内核态返回用户态
目录
相关文章
|
6月前
|
消息中间件 存储 算法
【软件设计师备考 专题 】操作系统的内核(中断控制)、进程、线程概念
【软件设计师备考 专题 】操作系统的内核(中断控制)、进程、线程概念
180 0
|
11天前
|
Linux 开发者 iOS开发
Python系统调用实战:如何在不同操作系统间游刃有余🐟
本文介绍了 Python 在跨平台开发中的强大能力,通过实际例子展示了如何使用 `os` 和 `pathlib` 模块处理文件系统操作,`subprocess` 模块执行外部命令,以及 `tkinter` 创建跨平台的图形用户界面。这些工具和模块帮助开发者轻松应对不同操作系统间的差异,专注于业务逻辑。
27 2
|
23天前
|
网络协议 Linux 调度
深入探索Linux操作系统的心脏:内核与系统调用####
本文旨在揭开Linux操作系统中最为核心的部分——内核与系统调用的神秘面纱,通过生动形象的语言和比喻,让读者仿佛踏上了一段奇妙的旅程,从宏观到微观,逐步深入了解这两个关键组件如何协同工作,支撑起整个操作系统的运行。不同于传统的技术解析,本文将以故事化的方式,带领读者领略Linux内核的精妙设计与系统调用的魅力所在,即便是对技术细节不甚了解的读者也能轻松享受这次知识之旅。 ####
|
19天前
|
缓存 算法 安全
深入理解Linux操作系统的心脏:内核与系统调用####
【10月更文挑战第20天】 本文将带你探索Linux操作系统的核心——其强大的内核和高效的系统调用机制。通过深入浅出的解释,我们将揭示这些技术是如何协同工作以支撑起整个系统的运行,同时也会触及一些常见的误解和背后的哲学思想。无论你是开发者、系统管理员还是普通用户,了解这些基础知识都将有助于你更好地利用Linux的强大功能。 ####
31 1
|
1月前
|
Linux 开发者 iOS开发
Python系统调用实战:如何在不同操作系统间游刃有余🐟
【10月更文挑战第2天】Python 以其卓越的跨平台能力和丰富的标准库,成为解决多操作系统环境下编程挑战的理想选择。本文将通过实际例子展示 Python 如何简化跨平台开发。从文件系统操作到系统调用,再到 GUI 应用开发,Python 提供了多种工具和模块,如 `os`、`pathlib` 和 `subprocess`,帮助开发者轻松应对不同平台间的差异,让你成为真正的跨平台高手。
16 5
|
3月前
|
Linux 开发者 iOS开发
Python系统调用实战:如何在不同操作系统间游刃有余🐟
【8月更文挑战第5天】Python系统调用实战展示了如何轻松应对跨平台挑战。通过`os`与`pathlib`模块处理文件系统操作,如创建目录及获取用户主目录,自动适配不同操作系统的路径格式。利用`subprocess`模块执行外部命令,智能选择`ls`或`dir`等系统特定指令。借助Tkinter创建图形用户界面,实现一次编写到处运行的目标。这些技巧让开发者专注于应用逻辑,简化跨平台开发流程。
45 0
|
6月前
|
Linux C语言
操作系统 | 添加系统调用
操作系统 | 添加系统调用
63 0
|
5月前
|
算法 Linux 调度
技术好文共享:详解操作系统中断
技术好文共享:详解操作系统中断
|
6月前
|
存储 程序员
操作系统的运行机制、中断和异常、系统调用
操作系统的运行机制、中断和异常、系统调用
95 1
|
6月前
|
Linux 开发工具 C语言
【操作系统】实验四 增加Linux系统调用
【操作系统】实验四 增加Linux系统调用
248 1