Linux內核之 基本概念

一直想寫寫Linux內核的文章,特別是進程這方面的,說實話,很差寫,也不太敢寫:)直到遇到了一本好書。《Linux內核設計與實現》,原書《Linux Kernel Development》Third Edition,做者Robert Love。網絡

在以前買了幾本厚書,好比《深刻理解Linux內核》、《深刻理解計算機系統》,對於我而言仍是太厚了。前者主要看了文件系統的一些知識,後者主要看內存管理的一些知識。函數

可是,我最愛的仍是《Linux內核設計與實現》。給個大寫的贊,讀起來很讓人興奮的那種。本書只有335頁,基本上不到上面兩本書的一半,可是卻很接地氣。由於做者是Linux內核開發人員,有豐富的內核開發經驗,並且是一位80後,語言簡潔幽默。因此該書比前面二者少了五分理論,多了五分實踐。值得一看。固然上面的書也能夠加深理解Linux內核。工具

 

首先,什麼是操做系統,沒有統一標準。書上的定義,操做系統是指在整個系統中負責完成最基本功能和系統管理功能的那些部分。這些部分應該包括內核、設備驅動程序、啓動引導程序、命令行Shell或者其餘種類的用戶界面、基本的文件管理工具和系統工具。spa

而系統則是指包含了操做系統和全部運行在它之上的應用程序。操作系統

因此,內核能夠稱做操做系統核心或者管理者。以下圖所示,應用系統、內核和硬件的關係。命令行

事實上該圖中,顯示了更多的關係。首先咱們說一個系統分爲三大層次,最底下是硬件,中間是內核空間,最上面是用戶空間。設計

咱們普通的應用程序通常運行在用戶態,也就是通常用戶能見到的。可是在實際運行過程當中,它須要使用硬件資源,例如可能須要計算用到CPU,須要寫文件用到硬盤和內存,顯示在屏幕上一樣須要內存還有終端。那怎麼訪問這些硬件的,其中的原理是什麼。這些都是中間的內核空間須要完成的事情,若是一個應用程序切換到內核空間運行,就處於內核態。blog

用戶態到內核態的切換每每經過系統調用接口來實現,而通常在系統調用接口之上還會封裝成標準的庫函數,例如C或者C++庫。接口

上面提到的硬件是各類物理設備,事實上,都須要有相應的驅動程序管理,例如硬盤、鍵盤、鼠標、顯示器等等。這些設備和驅動如何管理呢,內核子系統管理大部分,有一小部分直接封裝成系統調用接口。內核與硬件設備之間每每提供了中斷機制。隊列

 

咱們上面提到的程序,在通常操做操做系統中,也被稱爲進程。咱們再把上面的描述進行概括。

 

Linux內核有兩大基本抽象概念

  • 文件,Linux下一切皆文件
  • 進程,運行中的程序

若是說前者是靜態的抽象,那麼後者就是動態的抽象。 

 

Linux進程又有兩大虛擬機制

  • 虛擬處理器,CPU 時間的虛擬化
  • 虛擬內存 內存空間的虛擬化

因此一個運行的程序會自覺得擁有了全部的處理器和內存資源。

 

Linux內核有四大服務

  • 中斷服務,響應硬件設備的中斷提供中斷機制。與進程無關,在專門的中斷上下文中運行。

  • 進程管理與調度,管理多個進程以及如何分享處理器時間。

  • 內存管理,管理進程地址空間。

  • 網絡、進程間通訊,多個進程之間以及進程與外界如何通訊。


Linux內核空間兩大上下文

  • 進程上下文,表明某個特定的進程執行。
  • 中斷上下文,與任何進程無關,處理某個特定的中斷。

 

咱們通常對Linux內核的理解在於進程管理和虛擬內存的管理,而對中斷服務會有些陌生,更不知道中斷上下文。而此書很是清晰的介紹了中斷服務和中斷機制,以及中斷上下文。簡單歸納的話,中斷服務是專門針對硬件設備的,是設備驅動程序開發必定須要考慮的,是必須及時獲得響應的不能像進程能夠睡眠的,固然中斷能夠被另外的中斷打斷;當執行一箇中斷處理程序時,內核處於中斷上下文(interrupt context)。中斷也不能說徹底不能睡眠,中斷處理又能夠分爲兩部分:上、下半部,前面說的及時響應放在上半部(叫中斷處理程序),而能夠延遲執行的放在下半部,因此,下半部也能夠睡眠。因此它對應的機制又有不一樣,有多種機制,而個別機制(好比工做隊列)和進程調度的機制又有些接近。

對於進程管理、進程調度和進程上下文,後續文章將詳細介紹。因此對中斷和中斷處理的一些概念只是在這裏提一下。若是是設備驅動開發的,建議看看本書。

ps:對文件系統和虛擬內存本人以前有很多文章進行了介紹,必要時再進行補充。

相關文章
相關標籤/搜索