擴展閱讀:什么是中斷

如果用一句話概括操作系統的原理,那就是:整個操作系統就是一個中斷驅動的死循環,用最簡單的代碼解釋如下:

while(true){doNothing();
}

其他所有事情都是由操作系統提前注冊的中斷機制和其對應的中斷處理函數完成的。我們點擊一下鼠標,敲擊一下鍵盤,執行一個程序,都是用中斷的方式來通知操作系統幫我們處理這些事件,當沒有任何需要操作系統處理的事件時,它就乖乖地待在死循環里不出來。

所以,中斷非常重要,它是讓我們理解整個操作系統的根基。

五花八門的中斷分類

在Intel CPU手冊中對中斷的定義有一個官方的標準答案。如下圖:

這段話概括起來的意思就是:中斷可以分為中斷和異常,異常又可以分為故障、陷阱和中止。

第一句話有點奇怪,啥叫中斷又可以分為中斷和異常呢?其他很多文章也是這么寫的,不知道你有沒有感到疑惑。

原文的意思準確的說就是,CPU提供了兩種中斷程序執行的機制,中斷和異常。第一個中斷是動詞,第二個中斷時真正的機制種類。

先說第一個機制---中斷(interrupt),中斷時一個異步事件,通常由I/O設備觸發。比如點擊一下鼠標,敲擊一下鍵盤。

再說第二個機制--異常,異常是一個同步事件,是CPU在執行指令時檢測到的反常條件。比如除法異常、錯誤指令異常、缺頁異常等。

這兩個機制,殊途同歸,都是讓CPU收到一個中斷號,至于CPU收到這個中斷號后干什么,我們暫且不管。

我們先看看收到中斷號之前,中斷和異常是怎么給CPU一個中斷號的。先說中斷。

有一個設備叫做可編程中斷控制器,它有很多IRQ引腳線,接入了一堆能發出中斷請求的硬件設備。當這些硬件設備給IRQ引腳發送一個信號時,由于可編程中斷控制器提前被設置好了IRQ與中斷號的對應關系,所以就轉化成了對應的中斷信號。把這個中斷號存儲在自己的一個端口上,然后給CPU的INTR引腳發送一個信號,CPU收到INTR引腳信號后,去剛剛的那個端口可讀取到這個終端號的值。

你看,最終的目標,就是讓CPU知道,有中斷了,并且也知道中斷號時多少。

比如按下圖3中的鍵盤,最終到CPU那里的反應就是,得到了一個中斷號0x21。

那異常的即使就更簡單了,時CPU自己執行指令時檢測到一些反常情況,然后自己給自己一個中斷號,無須外界提供。

比如,CPU執行到了一個無效指令,則自己給自己一個中斷號0x06,這個中斷號是CPU提前就規定好寫死了的硬布線邏輯。

好了,到目前位置,我們知道了無論是中斷還是異常

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/37306.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/37306.shtml
英文地址,請注明出處:http://en.pswp.cn/web/37306.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

重生之我要學后端100--計算機網絡部分概念(持續更新)

TCP/IP、DNS、負載均衡器等等 前言一、TCP/IP(傳輸控制協議/互聯網協議)二、DNS(域名系統)三、負載均衡器其他網絡概念 前言 了解網絡基礎知識對于后端開發者至關重要,因為這些知識有助于理解應用程序是如何在更廣闊的…

中英雙語介紹美國的州:麻省,馬塞諸塞州(Massachusetts)

中文版 馬薩諸塞州(Massachusetts)位于美國東北部的新英格蘭地區,是美國歷史最悠久、文化最豐富的州之一。以下是對馬薩諸塞州各方面的詳細介紹: 人口 截至2020年,美國人口普查數據顯示,馬薩諸塞州的人口…

C++ 之運算符

作用:用于執行代碼的運算 主要的運算符類型: 運算符類型作用算術運算符用于處理四則運算賦值運算符用于將表達式的值賦給變量比較運算符用于表達式的比較,并返回一個真值或假植邏輯運算符用于根據表達式的值返回真值或假植 1 算術運算符 …

Spring MVC中的DispatcherServlet、HandlerMapping和ViewResolver的作用

在Spring MVC框架中,DispatcherServlet、HandlerMapping和ViewResolver是核心組件,它們各自承擔著不同的角色和任務: 1.DispatcherServlet:它是Spring MVC生命周期中的前端控制器,負責接收HTTP請求并將它們分發給相應的…

5.x86游戲實戰-CE定位基地址

免責聲明:內容僅供學習參考,請合法利用知識,禁止進行違法犯罪活動! 本次游戲沒法給 內容參考于:微塵網絡安全 上一個內容:4.x86游戲實戰-人物狀態標志位 上一個內容通過CE未知的初始值、未變動的數值、…

機器學習SVR 隨機森林 RBF神經網絡做回歸預測的MATLAB代碼

SVR 參考這篇文章 Libsvm使用筆記【matlab】 close all; clc clear %% 下載數據 load(p_train.mat); load(p_test.mat); load(t_train.mat); load(t_test.mat); %% 數據歸一化 %輸入樣本歸一化 [pn_train,ps1] mapminmax(p_train); pn_train pn_train; pn_test mapminma…

設置用戶訪問hdfs

如果hadoop沒有啟Kerberos或者從Kerberos獲取的用戶為null,那么獲取HADOOP_USER_NAME環境變量,并將它的值作為Hadoop執行用戶。如果我們沒有設置HADOOP_USER_NAME環境變量,那么程序將調用whoami來獲取當前用戶,并用groups來獲取用…

JVM相關總結

JVM的些許問題 1.JVM內存區域劃分 2.JVM類加載過程 3.JVM的垃圾回收機制 1.JVM的內存區域劃分 一個運行起來的Java進程就是一個JVM虛擬機,需要從操作系統申請一大片內存,就會把內存劃分成幾個區域,每個區域都有不同的作用 常見的面試題 2.JVM類加載過程 熟練背誦 ! ! !…

printf內幕----編程內幕(1)

曾幾何時,您有沒有在夜深人靜的時候想過一個問題,printf內部究竟做了什么?為何可以輸出到屏幕上顯示出來? 先看看這段熟悉的代碼: // // Created by xi.chen on 2017/9/2. // Copyright © 2017 All rights rese…

WordPress中文網址導航欄主題風格模版HaoWa

模板介紹 WordPress響應式網站中文網址導航欄主題風格模版HaoWa1.3.1源碼 HaoWA主題風格除行為主體導航欄目錄外,對主題風格需要的小控制模塊都開展了敞開式的HTML在線編輯器方式的作用配備,另外預埋出默認設置的編碼構造,便捷大伙兒在目前…

入門JavaWeb之 JDBC 連接數據庫

JDBC:Java Database Connectivity,Java 數據庫連接 需要 jar 包支持: java.sql javax.sql mysql-connector-java(連接驅動,必須導入) 在 MySQL 先建個 jdbc 數據庫后 USE jdbc; 執行后再 CREATE TABLE…

15- 22題聚合函數 - 高頻 SQL 50 題基礎版

目錄 1. 相關知識點2. 例子2.15 - 有趣的電影2.16 - 平均售價2.17 - 項目員工 I2.18 - 各賽事的用戶注冊率2.19 - 查詢結果的質量和占比2.20 - 每月交易 I2.21 - 即時食物配送 II2.22 - 游戲玩法分析 IV 1. 相關知識點 函數 函數含義order by排序group by分組between 小值 an…

Chrome備份數據

Chrome備份數據 1、 導出谷歌瀏覽器里的歷史記錄 參考:https://blog.csdn.net/qq_32824605/article/details/127504219 在資源管理器中找到History文件,文件路徑: C:\Users\你的電腦用戶名\AppData\Local\Google\Chrome\User Data\Default …

堆排序思想分享

人不走空 🌈個人主頁:人不走空 💖系列專欄:算法專題 ?詩詞歌賦:斯是陋室,惟吾德馨 目錄 🌈個人主頁:人不走空 💖系列專欄:算法專題 ?詩詞歌…

丟失的數字(MissNumber)

丟失的數字 給定一個包含 [0, n] 中 n 個數的數組 nums ,找出 [0, n] 這個范圍內沒有出現在數組中的那個數。 示例 1: 輸入:nums [3,0,1] 輸出:2 解釋:n 3,因為有 3 個數字,所以所有的數字都…

五、Pentium 微處理器保護模式存儲管理,《微機系統》第一版,趙宏偉

一、分段存儲管理 Pentium支持分段存儲管理、分頁存儲管理和段頁式存儲管理。 1.1 分段存儲管理的基本思想 一個程序由多個模塊組成。 每一個模塊都是一個特定功能的獨立的程序段。 段式管理:把主存按段分配的存儲管理方式。 程序模塊→段→段描述符→段描述符…

【設計】在Java后端開發時使用JSONObject完全替代JAVABean(DTO,VO)是否可行?

其實這樣做你是得不償失,不過也要看什么項目,如果你的項目只在只需要實現功能,不在乎健壯性,可持續性那就完全可以。因為我現在公司老項目所有用的POJO的地方都是用JSONObject。代碼可讀性幾乎為0。你用了可能喪失以下功能&#x…

【微服務】后臺管理項目多數據源管理方案實戰

目錄 前言 1、使用Spring提供的AbstractRoutingDataSource 2、使用MyBatis注冊多個SqlSessionFactory 3、使用dynamic-datasource框架 前言 Java后臺使用MyBatis-plus 快速訪問多個數 據源,這里分享三種常用的多數據源管理方案 1、使用Spring提供的AbstractRout…

【C++深度探索】繼承機制詳解(一)

hello hello~ ,這里是大耳朵土土垚~💖💖 ,歡迎大家點贊🥳🥳關注💥💥收藏🌹🌹🌹 💥個人主頁:大耳朵土土垚的博客 &#x1…

代碼托管服務:GitHub、GitLab、Gitee

目錄 引言GitHub:全球最大的代碼托管平臺概述功能特點適用場景 GitLab:一體化的開發平臺概述功能特點適用場景 Gitee(碼云):中國本土化的代碼托管服務概述功能特點適用場景 功能對比結論 引言 在現代軟件開發中&#…