“从零到一:揭秘操作系统的奇妙世界”【操作系统中断和异常】

一开始看王道网课,它说内中断就是异常。但是我一查ai,它又说内中断和异常不能等同,是两个概念,这时候我觉得天都塌了。内中断到底是不是异常啊?

我心想我今天一定要把这个搞懂,我来交作业了!我终于知道为什么了!

中断如果是广义的,就包括外中断和内中断对吧?那异常就分为陷阱、障碍和终止。

如果中断是狭义的,咱们知道外中断就是狭义的中断。咱们标题是啥,中断和异常啊对不对?

那此时异常就是内中断,实际上异常是属于内中断的,所以可以代表,所以它才会说异常就是内中断。所以异常我觉得也是狭义上的内中断。

就会有两种结构!啊啊啊啊啊啊啊听懂掌声。


那我现在分两种结构讲一下,先讲广义的。

广义上的中断与异常

【1】中断:

   - 定义:计算机系统中用于响应和处理异步事件的机制,包括外中断和内中断。
   - 例子:打印机完成打印任务后,会发送一个信号给计算机,这是一个中断,通知操作系统打印任务已完成。

【2】外中断:

   - 定义:由计算机外部事件引起的中断,如用户输入、硬件设备的请求等。
   - 例子:当你在使用电脑时,突然按下键盘上的“Print Screen”键,这个动作会触发一个外中断,告诉操作系统需要捕捉屏幕截图。

【3】内中断:

   - 定义:由计算机内部事件引起的中断,如硬件故障、非法操作等。
   - 例子:如果你的电脑内存条出现问题,可能会导致非法内存访问,触发一个内中断。

【4】异常:

   - 定义:程序执行过程中出现的非预期情况,需要特别处理。
   - 例子:在编程时,尝试除以零会触发一个异常,因为除以零在数学上是未定义的。

【5】终止:

   - 定义:程序或进程的正常或非正常结束。
   - 例子:当你关闭一个应用程序时,该程序的执行被终止。

【6】障碍:

   - 定义:程序执行过程中的错误,可能会导致程序无法继续执行。
   - 例子:在编程时,访问一个不存在的数组索引会触发一个障碍。

【7】陷阱:

   - 定义:程序中特意设置的中断,用于调试或系统调用。
   - 例子:在调试程序时,开发者可能会设置断点,当程序执行到这一点时,会触发一个陷阱,暂停程序执行。

易错点:

  1. 中断是一个广泛的概念,包括了外中断和内中断,它们都是异步事件,需要操作系统介入处理。
  2. 异常障碍都是程序执行过程中的错误,但异常通常是非预期的,而障碍可能是由于程序错误或硬件问题导致的。
  3. 终止是程序生命周期的结束,可能是由于程序正常完成执行或遇到严重错误。
  4. 陷阱是一种特殊的中断,通常用于系统调用或调试目的,与外中断和内中断不同,陷阱是程序有意触发的。
  5. 内中断和异常的区别:内中断通常是由硬件事件触发的,无论是硬件故障还是正常硬件操作。异常是由程序执行中的异常情况触发的,这些情况可能是软件错误或硬件异常。

狭义上的中断与异常

想象一下,你正在家里专心做作业,突然电话响了。这个电话铃声就是一个“中断”——它打断了你当前的工作(做作业),要求你立即处理(接电话)。在计算机中,中断也是类似的。当外部设备(比如键盘、鼠标或者打印机)需要与计算机的CPU(中央处理器)通信时,它会发送一个信号,告诉CPU:“嘿,我这里有事情需要处理。”CPU必须暂停当前的工作,去处理这个紧急的请求,比如读取键盘输入或者发送数据到打印机。处理完毕后,CPU会回到它之前被打断的地方,继续工作。

“异常”就像是你在做作业时遇到的一个意外问题。比如,你突然意识到你不知道某个单词怎么写,或者你遇到了一个你不会解的数学题。在计算机中,异常是程序执行过程中出现的错误或特殊情况,比如除以零、访问了不允许访问的内存区域等。当这些错误发生时,程序会触发一个“异常”,操作系统需要介入,决定如何处理这个问题。处理方式可能是修复错误、记录错误信息、关闭程序或者重启程序。

从中断的来源看,直观上可以分成两类:外中断和内中断。

  • 外中断——就是我们指的中断——是指由于外部设备事件所引起的中断,如通常的磁盘中断、打印机中断等;
  • 内中断——就是异常——是指由于 CPU 内部事件所引起的中断,如程序出错(非法指令、地址越界)。内中断(trap)也被译为“捕获”或“陷入”。

【1】外中断

1.定义:由外部设备向 CPU 发出的请求(比如打印),或者突发的外部事件或环境对计算机造成了影响(比如计算机烧了),在 CPU 外部产生。来自于 CPU 外部其它硬件设备的中断,就被称为 外中断,是狭义的 中断。它们通常是外部设备依照 CPU 时钟随机产生的,因此也被叫做异步中断。中断是让操作系统内核夺回cpu使用权的唯一途径

如果没有“中断”机制,那么一旦应用程序上CPU运行,CPU就会一直运行这个应用程序。如果这样的话,就无法实现操作系统的并发性。

2.触发原因:通常由外部事件触发,如硬件设备的输入/输出操作、用户输入、硬件故障等。

3.处理方式:当中断发生时,处理器会暂停当前执行的任务,保存当前状态,然后跳转到中断服务程序来处理中断。

4.恢复:中断服务程序执行完毕后,处理器会返回到被中断的地方继续执行。

5.可能引发外中断的两种情况

  • 时钟中断:计算机硬件时钟部件发出,可以实现计算机多道程序并发执行
  • IO中断:输入输出设备发出的中断信号,当输入输出任务完成后会向系统发出一个中断信号,通知cpu我的任务已经完成了。接下来cpu会对中断信号的应用程序进行处理

在每条指令执行结束之前,cpu都会例行检查是否有外中断信号需要处理。

【2】内中断

1.定义:CPU 在执行指令时遇到的异常情况 ,在 CPU 内部产生。通常将 CPU 内部产生的中断称为 异常,也称作 内中断。异常一般是 CPU 在执行指令时遇到了意外情况、因而必须暂停处理;在指令执行结束后才发出中断,因此也被叫做同步中断。

2.触发原因:由软件执行过程中的错误或异常情况触发,如非法操作、程序错误、算术溢出等。

3.处理方式:当异常发生时,处理器会触发一个异常处理程序(Exception Handler),这个程序负责诊断问题并采取相应的恢复措施。

4.恢复:异常处理程序执行完毕后,程序可能继续执行,也可能终止,这取决于异常的性质和处理结果。

5.可能引发内中断的三种情况:

由陷入指令引发,是应用程序故意的。如有时候应用程序向请求操作系统内核的服务,此时会执行一条特殊指令---陷入指令。该指令会引发一个内部中断信号。执行“陷入指令”意味着主动把cpu的使用权还给操作系统,系统调用就是通过过陷入指令完成的。但是请注意!!!陷入指令并不是特权指令!它是在用户态下执行的指令

由错误条件引起,可能被内核程序修复。修复完之后把CPU使用权还给应用程序。

处于用户态,还想执行特权指令

指令参数非法。比如,做除法计算时,除数为0。

由致命错误引起,内核程序无法修复该错误,因此一般不将CPU使用权还给应用程序。

【3】 如何判断是内中断还是外中断?

看中断信号的产生是否与当前执行指令有关。

【4】中断机制的基本原理

如何检查中断信号?

内中断:cpu在执行指令时会检查是否有异常发生

外中断:每个指令周期末尾,cpu都会检查是否有外中断信号需要处理。

一旦检测到中断信号,如何处理?

不同的中断信号,需要不同的中断处理程序去处理。当cpu检测到中断信号后,就会根据中断信号的类型,查询“中断向量表”,以此来找到中断处理程序在内存中的位置。

显然,中断处理程序就是一种内核程序,需要运行在内核态。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C#代码实现把中文录音文件(.mp3 .wav)转为文本文字内容

我们有一个中文录音文件.mp3格式或者是.wav格式,如果我们想要提取录音文件中的文字内容,我们可以采用以下方法,不需要使用Azure Speech API 密钥注册通过离线的方式实现。 1.首先我们先在NuGet中下载两个包 NAudio 2.2.1、Whisper.net 1.7.3…

Windows装Docker至D盘/其他盘(最新,最准确,直接装)

前言 Docker的默认安装路径为 C:\你的用户名\AppData\Local\Docker\wsl这样安装常常会导致C盘爆满。目前现有博客的安装方法往往不能把docker的container和image也装在非C盘。本博客旨在用最简单的方式,把Docker Deskstop的images和container装在D盘中。 安装前&a…

前端关于pptxgen.js个人使用介绍

官方文档链接:Quick Start Guide | PptxGenJS git地址:https://github.com/gitbrent/PptxGenJS/ 1. 安装命令 npm install pptxgenjs --save yarn add pptxgenjs 2. 示例demo import pptxgen from "pptxgenjs"; // 引入pptxgen // 1. Create a Presenta…

Vulnhub靶场Nginx解析漏洞复现

一.nginx_parsing 原理:这个解析漏洞其实是PHP CGI的漏洞,在PHP的配置⽂件中有⼀个关键的选项cgi.fix_pathinfo默认是开启的,当URL中有不存在的⽂件,PHP就会向前递归解析。在⼀个⽂件/xx.jpg后⾯加上/.php会将 /xx.jpg/xx.php 解…

harbor离线安装 配置https 全程记录

1. 下载harbor最新版本 下载网址: 找最新的版本: https://github.com/goharbor/harbor/releases/download/v2.11.2/harbor-offline-installer-v2.11.2.tgz 这里我直接使用迅雷下载, 然后上传 1.1解压 sudo tar -xf harbor-offline-installer-v2.11.2.tgz -C /opt/ 2. 配置Harb…

Next.js v15 - 服务器操作以及调用原理

约定 服务器操作是在服务器上执行的异步函数。它们可以在服务器组件和客户端组件中调用,用于处理 Next.js 应用程序中的表单提交和数据修改。 服务器操作可以通过 React 的 “use server” 指令定义。你可以将该指令放在 async 函数的顶部以将该函数标记为服务器操…

编译原理复习---目标代码生成

适用于电子科技大学编译原理期末考试复习。 1. 目标代码 是目标机器的汇编代码或机器码,在本课程中指的是类似于汇编代码的一种形式,由一条条的指令构成目标代码。 抽象机指令格式:OP 目的操作数,源操作数。 我们要做的&…

JaxaFx学习(三)

目录: (1)JavaFx MVVM架构实现 (2)javaFX知识点 (3)JavaFx的MVC架构 (4)JavaFx事件处理机制 (5)多窗体编程 (6)数据…

Type-C 接口电热毯:开启温暖智能新时代

在当今科技迅猛发展的时代,智能家居产品如同璀璨繁星般点缀着我们的生活,从智能灯光的温馨到温控系统的精准,处处都彰显着科技赋予生活的便捷与舒适。而在这股追求高效与智能化的洪流之中,一款极具创新的电热毯——Type-C 接口电热…

解决vscode ssh远程连接服务器一直卡在下载 vscode server问题

目录 方法1:使用科学上网 方法2:手动下载 方法3 在使用vscode使用ssh远程连接服务器时,一直卡在下载"vscode 服务器"阶段,但MobaXterm可以正常连接服务器,大概率是网络问题,解决方法如下: 方…

WSL Ubuntu

文章目录 1. 概述1.1 什么是适用于 Linux 的 Windows 子系统1.2 什么是 WSL 21.3 WSL 2 中的新增功能1.4 比较 WSL 2 和 WSL 1 2. 参考资料3. 修改存储位置4. 网络访问 1. 概述 1.1 什么是适用于 Linux 的 Windows 子系统 适用于 Linux 的 Windows 子系统可让开发人员按原样运…

clickhouse-数据库引擎

1、数据库引擎和表引擎 数据库引擎默认是Ordinary,在这种数据库下面的表可以是任意类型引擎。 生产环境中常用的表引擎是MergeTree系列,也是官方主推的引擎。 MergeTree是基础引擎,有主键索引、数据分区、数据副本、数据采样、删除和修改等功…

如何使用Python进行音频片断合成

以下是几种使用 Python 进行音频合成的方法: 使用 synthesizer 库 通过 pip install synthesizer 安装后,利用其提供的合成器类,可自定义振荡器类型,如锯齿波、方波或正弦波,并调制振幅来创造不同音色,还…

【SH】在Ubuntu Server 24中基于Python Web应用的Flask Web开发(实现POST请求)学习笔记

文章目录 Flask开发环境搭建保持Flask运行Debug调试 路由和视图可变路由 请求和响应获取请求信息Request属性响应状态码常见状态码CookieSession 表单GET请求POST请求 Flask 在用户使用浏览器访问网页的过程中,浏览器首先会发送一个请求到服务器,服务器…

CLION中运行远程的GUI程序

在CLION中运行远程GUI程序,很有可能会遇到下面错误 Gtk-WARNING **: cannot open display: 这是因为远程的GUI程序不能再本地机器上显示。这个问题一般有两种解决方法 通过SSH的ForwardX11的方法,就是将远程的GUI程序显示到本地机器上,一般在…

Unity 圆形循环复用滚动列表

一.在上一篇垂直循环复用滚动列表的基础上,扩展延申了圆形循环复用滚动列表。实现此效果需要导入垂直循环复用滚动列表里面的类。 1.基础类 using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; using …

中国人工智能学会技术白皮书

中国人工智能学会的技术白皮书具有多方面的重要作用,是极具权威性和价值的参考资料。 看看编委会和编写组的阵容,还是很让人觉得靠谱的 如何下载这份资料呢?下面跟着步骤来吧 步骤一:进入中国智能学会官网。百度搜索“中国智能学…

maui开发成生安卓apk,运行提示该应用与此设备的CPU不兼容

在生成.NET MAUI安卓应用时遇到“该应用与此设备的CPU不兼容”的问题,确保你的.NET MAUI应用支持的Android目标框架与设备CPU架构相匹配。例如,如果你的应用是为ARM64架构编译的,而你的设备是x86架构,就会出现不兼容的问题。 一、…

二叉树 -- 堆(详解)

目录 1、堆的概念及结构 2、堆的实现(附代码) 2.1、向下调整算法建堆 3、堆的应用(附代码) 3.1、堆排序 3.2、TOP-K问题 1、堆的概念及结构 如果有一个关键码的集合K { k0,k1 ,k2 ,…,k(n-1) },把它的所有元素…

windows环境下pytorch安装踩坑

目录 1 前言2 安装Anaconda3 安装CUDA4 创建Python3.9环境5 安装Pytorch环境5.1 conda方式5.2 pip方式 6 验证是否安装成功7 注意事项7.1 no module named torch问题7.12 torch.cuda.is_available()返回False问题 8 最佳实践9 总结 1 前言 这两天由于要使用Genesis,…