在linux技術討論中經常會使用者態和核心態術語脫口而出,可你們想過嗎?使用者態和核心態代表是什麼?本片文章,就來談一談這個話題。
我們先來看一張linux整體架構圖。
從圖上我們可以看出來通過系統呼叫將linux整個體系分為使用者態和核心態(或者說核心空間和使用者空間)。那核心態到底是什麼呢?其實從本質上說就是我們所說的核心,它是一種特殊的軟體程式,特殊在哪兒呢?控制計算機的硬體資源,例如協調cpu資源,分配記憶體資源,並且提供穩定的環境**用程式執行。
使用者態就是提**用程式執行的空間,為了使應用程式訪問到核心管理的資源例如cpu,記憶體,i/o。核心必須提供一組通用的訪問介面,這些介面就叫系統呼叫。
系統呼叫時作業系統的最小功能單位。根據不同的應用場景,不同的linux發行版本提供的系統呼叫數量也不盡相同,大致在240-350之間。這些系統呼叫組成了使用者態跟核心態互動的基本介面,例如:使用者態想要申請一塊20k大小的動態記憶體,就需要brk系統呼叫,將資料段指標向下偏移,如果使用者態多處申請20k動態記憶體,同時又釋放呢?這個記憶體的管理就變得非常的複雜。
庫函式就是遮蔽這些複雜的底層實現細節,減輕程式設計師的負擔,從而更加關注上層的邏輯實現。它對系統呼叫進行封裝,提供簡單的基本介面給使用者,這樣增強了程式的靈活性,當然對於簡單的介面,也可以直接使用系統呼叫訪問資源,例如:open(),write(),read()等等。庫函式根據不同的標準也有不同的版本,例如:glibc庫,posix庫等。
shell顧名思義,就是外殼的意思。就好像把核心包裹起來的外殼。它是一種特殊的應用程式,俗稱命令列。為了方便使用者和系統互動,一般乙個shell對應乙個終端,呈現給使用者互動視窗。當然shell也是程式設計的,它有標準的shell語法,符合其語法的文字叫shell指令碼。很多人都會用shell指令碼實現一些常用的功能,可以提高工作效率。
我們再來看乙個更加細化的linux體系架構圖。我們可以總結下:核心控制並且管理硬體資源,包括程序的排程和管理、記憶體管理、檔案系統管理、裝置驅動管理、網路管理等等。並且提**用程式統一的系統呼叫介面。這種分層的架構,極大的提公升了系統的穩定性和擴充套件性,相容性。
往往我們的系統的資源是固定的,例如記憶體2g,cpu固定,磁碟2tb,網路介面固定。所以就需要作業系統對資源進行有效的利用。假設某個應用程式過分的訪問這些資源,就會導致整個系統的資源被占用,如果不對這種行為進行限制和區分,就會導致資源訪問的衝突。所以,linux的設計的初衷:給不同的操作給與不同的「許可權」。linux作業系統就將許可權等級分為了2個等級,分別就是核心態和使用者態。
各位有沒有發現,前面講了這麼多核心態和使用者態什麼不同,其實用一句話就能概括:它們許可權不同。使用者態的程序能夠訪問的資源受到了極大的控制,而執行在核心態的程序可以「為所欲為」。乙個程序可以執行在使用者態也可以執行在核心態,那它們之間肯定存在使用者態和核心態切換的過程。打乙個比方:c庫介面malloc申請動態記憶體,malloc的實現內部最終還是會呼叫brk()或者mmap()系統呼叫來分配記憶體。
那為問題又來了,從使用者態到核心態到底怎麼進入?只能通過系統呼叫嗎?還有其他方式嗎?
從使用者態到核心態切換可以通過三種方式:
異常:如果當前程序執行在使用者態,如果這個時候發生了異常事件,就會觸發切換。例如:缺頁異常。
外設中斷:當外設完成使用者的請求時,會向cpu傳送中斷訊號。
本片文章,沒有非常深入的linux核心實現,只是從巨集觀的角度闡述了下。看完上面的文章,也能得出一點結論就是:系統呼叫真的開銷蠻大的。涉及到上下文的切換。在上篇文章中【linux的直接i/o原理】中有講述到這些,linux核心真的是複雜的工程,更多技術細節,需要點滴積累。
計算機原理
關於 深入理解計算機系統 老趙的這一番話,深深的觸動了我,確實,這本書用怎麼說呢,並不是深入,而是涉及的知識比較廣,但又都是廣大程式猿不得不知道的知識,下面我們就來慢慢品嚐這本書吧。工作之餘,學習學習,總是好的。言歸正傳,接下來,享讀 computer systems a programmer s ...
計算機原理
計算機 實質是資料儲存和資料流動 資料是儲存在磁碟上的,磁碟是由磁顆粒點組成,磁顆粒點可以帶電,帶電是1,不帶電是0,磁碟上有保護膜,不直接與空氣接觸,乙個磁顆粒點就是1bit,1b 8bit,資料傳輸就是傳輸電平 1t 8 9萬億顆粒點 對顆粒點需要管理,機械盤內部有很多光碟,顆粒點在光碟的正反兩...
計算機組成原理cu 計算機組成原理 計算機概論
現代計算機樣式千奇百怪,常見的有我們的筆記本,台式電腦,也有各種伺服器 手機 攝像頭等都屬於計算機範疇。計算機包含我們看得見摸得著的計算機實體,稱為計算機硬體,如cpu 記憶體 各種掛接裝置等 還有我們看不見摸不著的軟體,它支援著硬體按照我們的預想在操作,包括系統軟體和應用軟體 計算機硬體樣式千奇百...