1. 程式人生 > >驅動開發基礎 -- 使用者態、核心態、系統呼叫

驅動開發基礎 -- 使用者態、核心態、系統呼叫

1.在計算機系統中,許多硬體資源是受保護的,這層保護由作業系統提供,它就像一個圍牆,將這些資源包圍保護起來,然後它提供了一個門(系統呼叫)。只有通過系統呼叫,才能訪問到硬體資源。

2.系統呼叫是作業系統核心的一部分,作業系統提供了一些介面API,來允許程式呼叫核心。(特定的函式和引數)。

3.通過這些API介面呼叫核心後,系統會從使用者態變為核心態,在核心態模式下,系統可以毫無限制的訪問各種資源。

4.從使用者態轉變為核心態通過中斷的方式,作業系統通過中斷從使用者態變為核心態。

1.什麼是使用者態,什麼是核心態?
   一般現代CPU都有幾種不同的指令執行級別。在高執行級別下,程式碼可以執行特權指令,訪問任意的實體地址,這種CPU執行級別就對應著核心態;而在相應的低級別執行

狀態下,程式碼的掌控範圍會受到限制,只能在對應級別允許的範圍內活動。
  舉例:intel x86 CPU有四種不同的執行級別0-3,linux只使用了其中的0級和3級分別來表示核心態和使用者態。
這裡寫圖片描述

2.如何區分使用者態和核心態?
  CS暫存器的最低兩位表明了當前程式碼的特權級。linux只使用了其中的0級和3級分別來表示核心態和使用者態。
  一般來說在linux中,地址空間是一個顯著的標誌:0xc0000000以上的地址空間只能在核心態下訪問,0x00000000-0xbfffffff的地址空間在兩種狀態下都可以訪問。(注意:這裡所說的地址空間是邏輯地址而不是實體地址。

3.使用者態如何切換到核心態?
  使用者態切換到核心態分兩種:主動式和被動式
  被動式

:就是Linux在使用者態(ARM在使用者模式)工作,沒有主動發起請求、而被動地進入核心態;包括硬體中斷程式異常
  主動式:就是Linux在使用者態(ARM在使用者模式)工作,通過發起使用者態程式發起命令請求、ARM響應進入特權模式進而Linux切入核心態;就是系統呼叫

4.使用者態->系統呼叫->軟中斷->系統呼叫中斷服務程式(傳入系統呼叫號)->對應驅動程式。