天天看點

宏觀了解使用者态與核心态

宏觀了解使用者态與核心态

從圖上我們可以看出來通過系統調用将Linux整個體系分為使用者态和核心态(或者說核心空間和使用者空間)。那核心态到底是什麼呢?其實從本質上說就是我們所說的核心,它是一種特殊的軟體程式,特殊在哪兒呢?控制計算機的硬體資源,例如協調CPU資源,配置設定記憶體資源,并且提供穩定的環境供應用程式運作。當軟體程式要控制計算機硬體工作的時候,他會告訴作業系統我要操作硬體了,然後把程式代碼拿到核心當中運作。

使用者态就是提供應用程式運作的空間,為了使應用程式通路到核心管理的資源例如CPU,記憶體,I/O。核心必須提供一組通用的通路接口,這些接口就叫系統調用。如果程式隻進行邏輯運算那程式隻運作在使用者态中。

系統調用時作業系統的最小功能機關。根據不同的應用場景,不同的Linux發行版本提供的系統調用數量也不盡相同,大緻在240-350之間。這些系統調用組成了使用者态跟核心态互動的基本接口,例如:使用者态想要申請一塊20K大小的動态記憶體,就需要brk系統調用,将資料段指針向下偏移,如果使用者态多處申請20K動态記憶體,同時又釋放呢?這個記憶體的管理就變得非常的複雜。

庫函數就是屏蔽這些複雜的底層實作細節,減輕程式員的負擔,進而更加關注上層的邏輯實作。它對系統調用進行封裝,提供簡單的基本接口給使用者,這樣增強了程式的靈活性,當然對于簡單的接口,也可以直接使用系統調用通路資源,例如:open(),write(),read()等等。庫函數根據不同的标準也有不同的版本,例如:glibc庫,posix庫等。

shell顧名思義,就是外殼的意思。就好像把核心包裹起來的外殼。它是一種特殊的應用程式,俗稱指令行。為了友善使用者和系統互動,一般一個shell對應一個終端,呈現給使用者互動視窗。當然shell也是程式設計的,它有标準的shell文法,符合其文法的文本叫shell腳本。很多人都會用shell腳本實作一些常用的功能,可以提高工作效率。

整理自知乎某部落格!

繼續閱讀