歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux內核 >> 深度介紹Linux內核是如何工作的

深度介紹Linux內核是如何工作的

日期:2017/2/25 12:04:15   编辑:Linux內核

  【IT168 技術文檔】本文發表於Linux Format magazine雜志,作者從技術深度上解釋了Linux Kernel是如何工作的。相信對Linux開發者來說有不小的幫助。

  牛津字典中對"kernel"一詞的定義是:"較軟的、通常是一個堅果可食用的部分。"當然還有第二種定義:"某個東西核心或者最重要的部分。"對Linux來說,它的Kernel無疑屬於第二種解釋。讓我們來看看這個重要的東西是如何工作的,先從一點理論說起。

  廣義地來說kernel就是一個軟件,它在硬件和運行在計算機上的應用程序之間提供了一個層。嚴格點從計算機科學的角度來說,Linux中的Kernel指的是Linus Torvalds在90年代初期寫的那點代碼。

  所有的你在Linux各版本中看到的其他東西--Bash shell、KDE窗口管理器、web浏覽器、X服務器、Tux Racer以及所有的其他,都不過是運行在Linux上的應用而已,而不是操作系統自身的一部分。為了給大家一個更加直觀的感覺,我來舉個例子,比如 RHEL5的安裝大概要占據2.5GB的硬盤空間(具體多大當然視你的選擇安裝來定),在這其中,kernel以及它的各個模塊組件,只有47MB,所占比例約為2%。

  在kernel內部

  那麼kernel到底是如何工作的呢?如下面的圖表。Kernel通過許多的進入端口也就是我們從技術角度所說的系統調用,來使得運行在它上面的應用程序可用。Kernel使用的系統調用比如"讀"和"寫"來提供你硬件的抽象(abstraction)。

  

  從程序員的視角來看,這些看起來只是普通的功能調用,然而實際上系統調用在處理器的操作模式上,從用戶空間到Kernel空間有一個明顯的切換。同時,系統調用提供了一個"Linux虛擬機",可以被認為是對硬件的抽象。

  Kernel提供的更明顯的抽象之一是文件系統。舉例來說,這裡有一段短的程序是用C寫的,它打開了一個文件並將內容拷貝到標准的輸出:

1  #include
2
3   int main()
4
5   {
6
7   int fd, count; char buf[1000];
8
9   fd=open("mydata", O_RDONLY);
10
11   count = read(fd, buf, 1000);
12
13   write(1, buf, count);
14
15   close(fd);
16
17   }

  在這裡,你可以看到四個系統調用的例子:打開、讀、寫和關閉。不談這段程序語法的細節,重點是:通過這些系統調用Linux Kernel提供了一個文件的"錯覺",而實際上它不過是一堆數據有了個名字,這樣一來你就不必去與硬件底層的堆棧、分區、頭和指針、分區等交涉了,而是直接以例子中的方式與硬件"交流",這也就是我們所說的抽象(abstraction),將底層的東西以更易懂的方式表達出來。

上一頁123下一頁查看全文 內容導航
  • 第1頁:在kernel內部
  • 第2頁:台前幕後
  • 第3頁:模塊化的Kernel
Copyright © Linux教程網 All Rights Reserved