Linux操作系統基礎
阿新 • • 發佈:2018-06-13
Linux 運維 內核(Kernel):
Linux中的操作系統,重點在於管理計算機的所有活動以及驅動系統中的所有硬件
ABI(Application Binary Interface):
應用程序二進制接口 描述了應用程序和操作系統之間,一個應用和它的庫之間,或者應用的組成部分之間的低接口。
API(Application Programming Interface):
應用程序編程接口 是一些預先定義的函數,目的是提供應用程序與開發人員基於某軟件或硬件得以訪問一組例程的能力,而又無需訪問源碼,或理解內部工作機制的細節。
用戶空間(User space):
用戶程序的運行空間,只能執行簡單的運算,不能直接調用系統資源,必須通過系統調用(system call),才能向內核發出指令
內核空間(Kernel space):
Linux內核的運行空間,可以執行任意命令,調用系統的一切資源。
系統調用(System call):
運行在用戶空間的應用程序向操作系統內核請求某些服務的調用過程。 系統調用提供了用戶程序與操作系統之間的接口。一般來說,系統調用都在內核態執行。由於系統調用不考慮平臺差異性,由內核直接提供,因而移植性較差(幾乎無移植性)。
上下文切換(Context switch):
指CPU從一個進程或線程切換到另一個進程或線程。會犧牲CPU效率
庫函數(Library function):
是由用戶或組織自己開發的,具有一定功能的函數集合,一般具有較好平臺移植性,通過庫文件(靜態庫或動態庫)向程序員提供功能性調用。程序員無需關心平臺差異,由庫來屏蔽平臺差異性。
區別
函數庫調用 | 系統調用 |
---|---|
在所有的ANSI C編譯器版本中,C庫函數是相同的。平臺移植性好 | 各個操作系統的系統調用是不同的。依賴於內核,不保證移植性 |
它調用函數庫中的一段程序(或函數) | 它調用系統內核的服務 |
與用戶程序相聯系 | 是操作系統的一個入口點 |
在用戶地址空間執行 | 在內核地址空間執行 |
它的運行時間屬於“用戶時間” | 它的運行時間屬於“系統時間” |
屬於過程調用,調用開銷較小 | 需要在用戶空間和內核上下文環境間切換,開銷較大 |
在C函數庫libc中有大約300個函數 | 在UNIX中大約有90個系統調用 |
典型的C函數庫調用:system fprintf malloc | 典型的系統調用:chdir fork write brk; |
示例:
str = “July” //用戶空間
x = x+100 //用戶空間
file.write(str) //切換到內核空間
y = x+200 //切換回用戶空間
第一行和第二行都是簡單的賦值運算,在用戶空間執行。第三行需要寫入文件,就要切換到內核空間,因為用戶不能直接寫入文件,必須通過內核安排。第四行又是賦值運算,就切換回用戶空間。
Linux操作系統基礎