操做系統原理(二) —— 運行環境與運行機制

處理器狀態

  • 內核態 (Kernel Mode):運行操做系統程序。
  • 用戶態 (User Mode):運行用戶程序。
  • 用戶態 → 內核態:中斷/異常/陷入機制。
  • 內核態 → 用戶態:設置程序狀態字 PSW。
  • 特權指令 :只能由操做系統使用、用戶程序不能使用的指令。
  • 非特權指令 :用戶程序可使用的指令。

中央處理器

  • 處理器由運算器控制器、一系列的寄存器以及高速緩存構成。
  • 兩類寄存器算法

    • 用戶可見寄存器:高級語言編譯器經過優化算法分配並使用之,以減小程序訪問內存次數。
    • 控制和狀態寄存器:用於控制處理器的操做,一般由操做系統代碼使用。

控制和狀態寄存器

  • 用於控制處理器的操做。
  • 在某種特權級別下能夠訪問、修改。
  • 常見的控制和狀態寄存器編程

    • 程序計數器(PC :Program Counter ):記錄將要取出的指令的地址。
    • 指令寄存器(IR :Instruction Register ):記錄最近取出的指令。
    • 程序狀態字(PSW :Program Status Word ):記錄處理器的運行狀態,如條件碼 、模式、控制位。在 PSW 中專門設置一位,根據運行程序對資源和指令的使用權限而設置不一樣的 CPU 狀態。

中斷與異常機制

能夠說操做系統是由 「 中斷驅動 」 或者 「 事件驅動 」 的。緩存

主要做用

  • 及時處理設備發來的中斷請求。
  • 可以使操做系統捕獲用戶程序提出的服務請求。
  • 防止用戶程序執行過程當中的破壞性活動。

概念

  • CPU 對系統發生的某個事件作出的一種反應。
  • CPU 暫停正在執行的程序,保留現場後自動轉去執行相應事件的處理程序,處理完成後返回斷點,繼續執行被打斷的程序。
  • 中斷:外部事件,正在運行的程序所不指望的。
  • 異常:由正在執行的指令引起。

clipboard.png

工做原理

  • 硬件的工做(中斷/異常響應):捕獲中斷源發出的中斷/異常請求,以必定方式響應,將處理器控制權交給特定的處理程序。
  • 軟件的工做(中斷/ 異常處理程序):識別中斷/異常類型並完成相應的處理操做

clipboard.png

  • 中斷向量:一個內存單元,存放中斷處理程序入口地址和程序運行時所需的處理機狀態字。執行流程按中斷號/異常類型的不一樣,經過中斷向量錶轉移控制權給相應的中斷處理程序。

    clipboard.png
    clipboard.png

中斷響應示意圖

clipboard.png

中斷處理程序

  • 設計操做系統時,爲每一類中斷/異常事件編好相應的處理程序,並設置好中斷向量表。
  • 系統運行時若響應中斷,中斷硬件部件將 CPU 控制權轉給中斷處理程序:函數

    • 保存相關寄存器信息。
    • 分析中斷/異常的具體緣由。
    • 執行對應的處理功能。
    • 恢復現場,返回被事件打斷的程序。

系統調用

  • 用戶在編程時能夠調用的操做系統功能
  • 是操做系統爲用戶態運行的進程硬件設備進行交互提供的一組接口,即就是設置在應用程序和硬件設備之間的一個接口層。能夠說是操做系統留給用戶程序的一個接口。
  • 每一個操做系統都提供幾百種系統調用(進程控制、進程通訊、 文件使用、目錄操做、設備管 理、信息維護等)。

系統調用和庫函數之間的聯繫與區別

  • 系統調用所提供給用戶的是直接而純碎的高級服務,若是想要更加人性化,具備更符合特定狀況的功能,那麼就要咱們用戶本身定義,所以衍生了庫函數,它把部分系統調用包裝起來。好比當咱們要用 C 語言打印一句話的時候,若是沒有用到庫函數printf,那麼咱們就須要本身實現就須要調用 putc() 和 write() 等這樣一些系統函數。
  • 系統調用是爲了方便使用操做系統的接口,而庫函數則是爲了人們編程的方便。
  • 在移植性方面,不一樣操做系統的系統調用通常是不一樣的,移植性差;而在全部的ANSI C編譯器版本中,C庫函數是相同的。

執行過程

當 CPU 執行到特殊的陷入指令時:優化

  • 中斷/異常機制spa

    • 硬件保護現場
    • 經過查中斷向量表把控制權轉給系統調用總入口程序
  • 系統調用總入口程序操作系統

    • 保存現場
    • 將參數保存在內核堆棧裏
    • 經過查系統調用表把控制權轉給相應的系統調用 處理例程或內核函數
  • 執行系統調用例程
  • 恢復現場,返回用戶程序設計

相關文章
相關標籤/搜索