OS學習筆記一: 中斷與異常
一、基礎概念
1、缺頁異常
CPU通過地址匯流排可以訪問連線在地址匯流排上的所有外設,包括實體記憶體、IO裝置等等,但從CPU發出的訪問地址並非是這些外設在地址匯流排上的實體地址,而是一個虛擬地址,由MMU將虛擬地址轉換成實體地址再從地址匯流排上發出,MMU上的這種虛擬地址和實體地址的轉換關係是需要建立的,並且MMU還可以設定這個物理頁是否可以進行寫操作,當沒有建立一個虛擬地址到實體地址的對映,或者建立了這樣的對映,但那個物理頁不可寫的時候,MMU將會通知CPU產生了一個缺頁異常。
2、陷入指令
陷入指令(Traps),又叫做自陷指令或訪管指令,出現在計算機作業系統中,用於實現在使用者態下執行的程式呼叫作業系統核心程式,即當執行的使用者程式或系統實用程式欲請求作業系統核心為其服務時,可以安排執行一條陷入指令引起一次特殊異常。
3、CPU
處理器由運算器、控制器、一系列的 暫存器以及快取記憶體構成。
兩類暫存器:
- 使用者可見暫存器:高階語言編譯器通過優化演算法分配並使用之,以減少程式訪問記憶體次數
- 控制和狀態暫存器:用於控制處理器的操作通常由 作業系統 程式碼使用
4、控制和狀態暫存器
用於控制處理器的操作
在某種特權級別下可以 訪問、修改
常見的控制和狀態暫存器
程式計數器(PC :Program Counter ),記錄將要取出的指令的地址
指令暫存器(IR :Instruction Register ),記錄最近取出的指令
程式狀態字(PSW :Program Status Word ),記錄處理器的執行狀態 如 條件碼 、模式、控制位 等資訊
5、CPU狀態之間的切換
使用者態 → 核心態
唯一途徑 → 中斷/ 異常/ 陷入機制
核心態 → 使用者態
設定程式狀態字PSW
一條特殊的指令 :陷入指令(又稱訪 管 指令,因為核心態也被稱為supervisor mode)提供給使用者程式的介面,用於呼叫 作業系統 的功能 (服務)。
例如:int ,trap ,syscall ,sysenter/sysexit
二、中斷與異常的概念
CPU 對系統發生的某個事件作出的一種反應
CPU 暫停正在執行的程式,保留現場後自動轉去執行相應事件的處理程式,處理完成後返回斷點,繼續執行被打斷的
事件的發生改變了處理器的控制流
特點:
1、是隨機發生的
2、是自動處理的(硬體完成這一過程)
3、是可恢復的(被中斷的,在以後某個時刻繼續)
三、引入中斷與異常的原因
中斷的引入: 為了支援CPU 和裝置之間 的 並行操作
- 當CPU 啟動裝置進行 輸入/ 輸出後 ,裝置便 可以獨立工作,CPU 轉去處理與此次輸入/ 輸出不相關的 事情;當裝置完成輸入/ 輸出後,通過向CPU 發中斷報告此次 輸入/ 輸出的結果,讓CPU 決定如何處理以後 的 事情
異常的引入 :表示CPU 執行指令時本身 出現的問題
- 如算術溢位、除零、 取數時的奇偶錯,訪 存地址時越界或執行了“陷入指令” 等,這時硬體改變了CPU 當前 的執行流程,轉到相應的錯誤處理程式或 異常處理程式或執行系統呼叫
四、事件
中斷:外部 事件,正在執行的程式所不期望的
異常 :由正在執行的指令引發
五、中斷與異常小結
六、中斷、異常機制工作原理
中斷/ 異常機制是現代計算機系統的核心機制之一
硬體和軟體相互配合 而使計算機系統得以充分發揮能力
硬體該做什麼事? —— 中斷/ 異常響應
捕獲中斷源發出的中斷/ 異常請求,以一定方式響應,將處理器控制權交給特定的處理程式
軟體要做什麼事? —— 中斷/ 異常處理 程式
識別中斷/ 異常型別並完成相應的處理
七、中斷響應
中斷響應:
發現 中斷 、 接收中斷的過程
由中斷硬體 部件完成,處理器控制部件中 設有 中斷暫存器
中斷響應過程示意圖:
八、中斷向量表
中斷向量 :
一個記憶體單元,存放 中斷處理程式入口地址和程式執行時所需的處理機狀態字
九、linux中斷向量表
十、中斷響應示意圖
十一、中斷處理程式
設計作業系統時,為每一類中斷/ 異常事件編好相應的處理程式,並設定好中斷向量表
系統執行時若響應中斷,中斷硬體部件將CPU 控制權轉給中斷處理程式:
儲存相關暫存器資訊
分析中斷/ 異常的具體原因
執行對應的處理功能
恢復現場,返回被事件打斷的程式
軟體提前設定好 硬體部件來執行
十二、中斷例項
以裝置輸入輸出中斷為例:
印表機 給CPU 發中斷訊號(硬體)
CPU 處理完當前指令後檢測到中斷,判斷出中斷來源並向相關裝置發確認訊號(硬體)
CPU 開始為軟體處理中斷做準備(硬體):
處理器 狀態被切換到核心態
在系統棧中儲存被中斷程式的重要上下文環境,主要是 程式計數器PC 、程 序狀態字PSW
CPU 根據中斷碼查中斷向量表,獲得與該中斷相關的處理 程式 的入口地址,並將PC 設定成該地址,新的指令週期開始時,CPU 控制轉移到中斷處理程式(硬體)
中斷處理程式開始工作(軟體)
在系統棧中儲存現場資訊
檢查I/O 裝置的狀態資訊,操縱I/O 裝置或者在裝置
和記憶體之間傳送資料等等
中斷處理結束時,CPU 檢測到中斷返回指令 ,從 系統棧 中 恢復被中斷程式的上下文環境 ,CPU 狀態恢復成原來的狀態,PSW 和PC 恢復成中斷前的值,CPU 開始一個新的指令週期(硬體)
個人微信公眾號:
作者:jiankunking 出處:http://blog.csdn.net/jiankunking
相關文章
- OS筆記(中斷/異常機制)筆記
- C/C++學習筆記八(斷言與異常處理)C++筆記
- java學習筆記(異常)Java筆記
- 中斷的學習筆記筆記
- swoft 學習筆記之異常處理筆記
- Golang 學習筆記八 錯誤異常Golang筆記
- java學習筆記#3-異常/集合Java筆記
- Java學習筆記之自定義異常Java筆記
- os/signal學習筆記筆記
- STM32學習筆記——中斷筆記
- SpringMVC學習筆記10-異常處理SpringMVC筆記
- 【Flutter 學習筆記一】Mac OS 安裝 FlutterFlutter筆記Mac
- X86中斷/異常與APICAPI
- 異常和中斷
- OS學習筆記八:死鎖筆記
- python3.4學習筆記(二) 型別判斷,異常處理,終止程式Python筆記型別
- Python 3 學習筆記之——錯誤和異常Python筆記
- OS學習筆記四:同步機制筆記
- OS學習筆記五:儲存模型筆記模型
- OS學習筆記七:IO系統筆記
- Java核心技術筆記 異常、斷言和日誌Java筆記
- kotlin學習筆記-異常好玩的list集合總結Kotlin筆記
- Java 筆記《異常》Java筆記
- 一次異常記憶體消耗的診斷與解決記憶體
- Linux核心筆記009 - 中斷、異常、陷阱、Bottom half、訊號Linux筆記
- 異常處理 - Go 學習記錄Go
- OS學習筆記六:檔案系統筆記
- Java編譯異常捕捉與上報筆記Java編譯筆記
- C#學習筆記---異常捕獲和變數運算子C#筆記變數
- Hadoop學習筆記之TeraSort修改後輸出翻倍異常Hadoop筆記
- uc/os-iii學習筆記-資源管理(中斷、訊號、訊號量、互斥訊號量)筆記
- C++筆記--異常C++筆記
- OS學習筆記二: 程式執行緒模型筆記執行緒模型
- OS學習筆記三:處理器排程筆記
- 筆記:異常處理之report與render筆記
- 深度學習與神經網路學習筆記一深度學習神經網路筆記
- Linux系統中對中斷的處理(學習筆記)Linux筆記
- Java中的異常處理(隨堂筆記)Java筆記