這一章開始學習系統調用的有關內容,在linux內核分析中,系統調用是繞不去的一個坎。下面就是我這周的讀書感覺。linux
一.幾個重要的基本概念程序員
API:系統調用在用戶空間和硬件設備上添加了一箇中間層(應用編程接口API),這個層的主要做用以下:1首先爲用戶空間提供了一種硬件的抽象接口。2.保證系統的穩定和安全3.系統調用是用戶訪問內核的惟一手段:除異常和陷入外編程
系統調用號:每一個系統被賦予了一個系統調用號,一旦分配就不能有變動,這個表被存儲在arch/i386/kernel/syscall.64.c當中。安全
系統調用處理程序:經過軟中斷的方式,引起一個異常來促使系統切換到內核態處理應用程序函數
二.系統調用的幾個重要思想學習
Unix的接口有一句格言:「提供機制而不是策略。」操作系統
三.系統調用的具體過程:3d
有了用戶態和內核態的基本知識瞭解以後,咱們能夠以系統調用爲例,看一看中斷具體是怎麼執行的blog
系統調用的意義:接口
操做系統爲用戶態進程與硬件設備進行交互提供了一組接口——系統調用
把用戶從底層的硬件編程中解放了出來
極大地提升了系統的安全性
使用戶程序具備可移植性:用戶程序與具體硬件已經被抽象接口所替代
操做系統提供的API和系統調用的關係
API(應用程序編程接口)和系統調用:
應用編程接口和系統調用是不一樣的:
1.API只是一個函數定義
2.系統調用經過軟中斷向內核發出了一個明確的請求
Libc庫定義的一些API引用了封裝例成,惟一目的就是發佈系統調用
1.通常每一個系統調用對應一個封裝例程
2.庫函數再用這些封裝例程定義出給用戶的API(把系統調用封裝成不少歌方便程序員使用的函數)
不是每一個API都對應一個特定的系統調用)
API可能直接提供用戶態的服務 如:一些數學函數
1.一個單獨的API可能調用幾個系統調用
2.不一樣的API可能調用了同一個系統調用
返回值
大部分封裝例程返回一個整數,其值的含義依賴於相應的系統調用
-1在多數狀況下表示內核不能知足進程的請求
Libc中定義的errno變量包含特定的出錯碼
系統調用的工做過程: