大話操作系統之運行機制

運行機制

什麼是機器指令?
能夠讓CPU直接識別,執行的指令就是機器指令。因爲CPU只認識0和1,所以機器指令是由)01組成的指令集。

程序代碼怎樣轉化成機器指令的?
程序代碼是通過編譯器,進過一下四個步驟形成最終二進制可執行文件:

  1. 預處理:程序經過CPP預處理器,刪除註釋,刪除define,展開宏定義,添加行號,文件名標識等一些列操作,形成一個.i文件。
  2. 編譯:把預處理完成的.i文件,進行詞法分析、語法分析、語義分析以及優化後產生彙編代碼文件.asm。
  3. 彙編: 編譯器把彙編代碼轉化爲CPU可以執行的二進制機器指令模塊.o文件。
  4. 鏈接:程序代碼的各個引用模塊是獨立地編譯的,將各模塊“組裝”起來,這個過程就是鏈接,鏈接形成最後的CPU可執行文件。(例如windows下的.exe文件)

所謂宏,就是一些命令組織在一起,作爲一個單獨命令完成一個特定任務。

機器指令的分類
操作系統將機器指令分爲,特權指令(不允許用戶程序使用指令),和非特權指令。
CPU作爲計算機的大腦,用執行機器指令的方式支配計算機內/外部設備。一些非常危險的指令是不允許用戶直接使用的,如內存清零指令。
爲了在不同的情況下運行分別運行兩種指令,操作系統又把CPU分爲兩種狀態:用戶態(此時cpu只能執行非特權指令)和核心態(特權和非特權指令都可以執行)。

操作系統內核

CPU用戶態下運行應用程序。
CPU內核態下運行內核程序。

應用程序完成一次完整的設備調用的步奏:

  1. 應用程序首先,利用操作系統提供的庫函數,進行系統調用(執行陷入指令),請求操作系統的內核服務,CPU從用戶態切換到內核態。
  2. 內核程序,調用用硬件驅動程序操作硬件設備,完成以後利用中斷處理程序,將CPU內核態再切回用戶態。

內核程序

內核是計算機上配置的底層軟件,是操作系統最基本,最核心的部分。實現操作系統內核功能的那些程序就是內核程序。

內核程序功能主要包括兩個方面

  • 系統調度管理:時鐘管理,中斷處理,原語。
  • 系統資源管理,進程管理,內存管理,存儲管理,設備管理。

原語:是一種特殊的程序,其執行具有原子性(設備驅動,CPU切換),要麼不執行,要麼一次性執行完畢中間不能中斷。類似宏的概念。

中斷和異常

CPU用戶態核心態是怎樣切換實現的呢?答案是中斷
由於操作系統管理工作,比如進程切換,分配I/O設備等,都需要特權指令,因此CPU需要從用戶態轉爲核心態,中斷可以使CPU從用戶態切換爲內核態,使操作系統獲得計算機的控制權。

中斷分類
中斷可以分爲內中斷和外中斷兩種類型。

  • 內中斷:應用程序進行系統調用,硬件故障(比如內存缺頁),軟件故障(比如整數除0)等引起的中斷。
  • 外中斷:比如I/O設備完成,發出的中斷信號,用戶強行kill一個進程。

按照中斷信號來源於區分

  • CPU內部,與當前指令執行相關的就是內中斷,
  • 來自於CPU外部,與當前指令執行無關的就是外中斷。

一個完整外中斷處理步驟:

  1. CPU在用戶態下,依次執行機器指令,每次執行完一個指令以後,CPU都要檢查是否有外部中斷信號。
  2. 如果檢測到外部中斷信號,在從用戶態切換到核心態之前,需要保護被中斷進程運行的上下文環境。
  3. 根據中斷信號,轉入相應操作系統中斷處理程序,處理中斷,CPU從用戶態切換到核心態執行系統調用。
  4. 完成處理以後,需要恢復中斷進程的CPU環境,運行現場。然後從核心態轉到用戶態,切回原來進程繼續往下執行。

系統調用

操作系統作爲用戶和計算機硬件之間的中間層,需要向上層的用戶應用程序提供一些簡單易用的服務接口;主要包括命令接口和程序接口。
用戶可以直接通過終端(terminal)輸入命令(cd,cat,netstat,ps,df等 ),直接完成系統調用;還可以通過編寫應用程序調用操作系統提供的程序接口(open(…),write(…)),完成系統調用。
在這裏插入圖片描述

“系統調用” 是操作系統提供給應用程序使用的一組接口,是一種可供應用程序調用的特殊函數;應用程序可以發出系統調用請求來獲得操作系統的服務。計算機中的各種共享資源都由操作系統統一管理,用戶程序想要操作系統資源,例如文件管理,必須通過系統調用的方式向操作系統發出服務請求,由操作系統代爲完成。保證系統的穩定和安全性,防止用戶非法操作。

需要注意的是操作系統提供的系統調用,並不是我們通常編寫程序時所使用的庫函數。爲了降低編程的複雜度,現代高級語言一般會把相應的系統調用封裝成庫函數,方便程序員使用。
在這裏插入圖片描述
應用程序執行一個系統調用的完整步驟:

  1. 傳遞系統調用參數,例如write(參數)
  2. 執行陷入指令,中斷操作(CPU從用戶態向核心態切換)
  3. CPU進入核心態, 執行系統調用相應的服務程序
  4. 執行完畢,中斷,從核心態向用戶態切換,返回用戶程序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章