處理器狀態
- 內核態 (Kernel Mode):運行操做系統程序。
- 用戶態 (User Mode):運行用戶程序。
- 用戶態 → 內核態:中斷/異常/陷入機制。
- 內核態 → 用戶態:設置程序狀態字 PSW。
- 特權指令 :只能由操做系統使用、用戶程序不能使用的指令。
- 非特權指令 :用戶程序可使用的指令。
中央處理器
- 處理器由運算器、控制器、一系列的寄存器以及高速緩存構成。
-
兩類寄存器算法
- 用戶可見寄存器:高級語言編譯器經過優化算法分配並使用之,以減小程序訪問內存次數。
- 控制和狀態寄存器:用於控制處理器的操做,一般由操做系統代碼使用。
控制和狀態寄存器
- 用於控制處理器的操做。
- 在某種特權級別下能夠訪問、修改。
-
常見的控制和狀態寄存器編程
- 程序計數器(PC :Program Counter ):記錄將要取出的指令的地址。
- 指令寄存器(IR :Instruction Register ):記錄最近取出的指令。
- 程序狀態字(PSW :Program Status Word ):記錄處理器的運行狀態,如條件碼 、模式、控制位。在 PSW 中專門設置一位,根據運行程序對資源和指令的使用權限而設置不一樣的 CPU 狀態。
中斷與異常機制
能夠說操做系統是由 「 中斷驅動 」 或者 「 事件驅動 」 的。緩存
主要做用
- 及時處理設備發來的中斷請求。
- 可以使操做系統捕獲用戶程序提出的服務請求。
- 防止用戶程序執行過程當中的破壞性活動。
概念
- CPU 對系統發生的某個事件作出的一種反應。
- CPU 暫停正在執行的程序,保留現場後自動轉去執行相應事件的處理程序,處理完成後返回斷點,繼續執行被打斷的程序。
- 中斷:外部事件,正在運行的程序所不指望的。
- 異常:由正在執行的指令引起。
![clipboard.png clipboard.png](http://static.javashuo.com/static/loading.gif)
工做原理
- 硬件的工做(中斷/異常響應):捕獲中斷源發出的中斷/異常請求,以必定方式響應,將處理器控制權交給特定的處理程序。
- 軟件的工做(中斷/ 異常處理程序):識別中斷/異常類型並完成相應的處理操做。
![clipboard.png clipboard.png](http://static.javashuo.com/static/loading.gif)
- 中斷向量:一個內存單元,存放中斷處理程序入口地址和程序運行時所需的處理機狀態字。執行流程按中斷號/異常類型的不一樣,經過中斷向量錶轉移控制權給相應的中斷處理程序。
![clipboard.png clipboard.png](http://static.javashuo.com/static/loading.gif)
![clipboard.png clipboard.png](http://static.javashuo.com/static/loading.gif)
中斷響應示意圖
![clipboard.png clipboard.png](http://static.javashuo.com/static/loading.gif)
中斷處理程序
系統調用
- 用戶在編程時能夠調用的操做系統功能。
- 是操做系統爲用戶態運行的進程和硬件設備進行交互提供的一組接口,即就是設置在應用程序和硬件設備之間的一個接口層。能夠說是操做系統留給用戶程序的一個接口。
- 每一個操做系統都提供幾百種系統調用(進程控制、進程通訊、 文件使用、目錄操做、設備管 理、信息維護等)。
系統調用和庫函數之間的聯繫與區別
- 系統調用所提供給用戶的是直接而純碎的高級服務,若是想要更加人性化,具備更符合特定狀況的功能,那麼就要咱們用戶本身定義,所以衍生了庫函數,它把部分系統調用包裝起來。好比當咱們要用 C 語言打印一句話的時候,若是沒有用到庫函數printf,那麼咱們就須要本身實現就須要調用 putc() 和 write() 等這樣一些系統函數。
- 系統調用是爲了方便使用操做系統的接口,而庫函數則是爲了人們編程的方便。
- 在移植性方面,不一樣操做系統的系統調用通常是不一樣的,移植性差;而在全部的ANSI C編譯器版本中,C庫函數是相同的。
執行過程
當 CPU 執行到特殊的陷入指令時:優化
-
中斷/異常機制spa
- 硬件保護現場
- 經過查中斷向量表把控制權轉給系統調用總入口程序
-
系統調用總入口程序操作系統
- 保存現場
- 將參數保存在內核堆棧裏
- 經過查系統調用表把控制權轉給相應的系統調用 處理例程或內核函數
- 執行系統調用例程
恢復現場,返回用戶程序設計