Devyn的Linux內(nèi)核專題:介紹
本文作者戴文.科利爾.約翰遜(Devyn Collier Johnson)今年才19歲,但是他在Linux內(nèi)核、人工智能、編程語言方面擁有豐富的經(jīng)驗,本文是其在linux.org上連載的一系列關于內(nèi)核的文章。文章寫的深入淺出,本站不揣淺陋,由LCTT成員geekpi進行了系列翻譯,以分享給廣大Linux愛好者。
在1991年,一個叫林納斯·本納第克特·托瓦茲的芬蘭學生制作了一個現(xiàn)在非常流行的操作系統(tǒng)的內(nèi)核。他于1991年9月發(fā)布了Linux 0.01,并且于1992年以GPL許可證的方式授權了該內(nèi)核。GNU通用許可證(GPL)允許人們使用、擁有、修改,以及合法和免費的分發(fā)源代碼。這使得內(nèi)核變得非常流行,因為任何人都可以免費地下載?,F(xiàn)在任何人都可以生成他們自己的內(nèi)核,這有助于人們學習如何獲取、編輯、配置、編譯并安裝Linux內(nèi)核。
內(nèi)核是操作系統(tǒng)的核心。操作系統(tǒng)是一系列的管理硬件并允許用戶在電腦上運行應用的程序。內(nèi)核控制著硬件和應用。應用并不直接和硬件打交道,而是首先和內(nèi)核交互??傊?,軟件運行在內(nèi)核上,而內(nèi)核操作著硬件。沒有內(nèi)核,電腦就是一個沒用的物件。
用戶制作他們自己的內(nèi)核有各種各樣的原因。許多用戶也許想要一個只包含他們需要的代碼的系統(tǒng)內(nèi)核。比如說我的內(nèi)核包含了火線設備驅(qū)動,但是我的電腦缺乏這些端口。當系統(tǒng)啟動時,時間和內(nèi)存就會浪費在那些我系統(tǒng)上并沒有安裝的設備上。如果我想要簡化我的內(nèi)核,我會制作自己不包含火線驅(qū)動的內(nèi)核。至于另外一個理由,某個用戶可能擁有一臺有特殊硬件的設備,但是最新的Ubuntu版本中的內(nèi)核缺乏所需的驅(qū)動。這個用戶可以下載最新的內(nèi)核(比當前Ununtu的Linux內(nèi)核要新),并制作他們自己的有相應驅(qū)動的內(nèi)核。不管怎樣,這兩個原因是用戶想要制作自己的Linux內(nèi)核的普遍原因。
在下載內(nèi)核前,我們應該討論一些重要的術語和事實。Linux內(nèi)核是一個宏內(nèi)核,這意味著整個操作系統(tǒng)都運行在內(nèi)核預留的內(nèi)存里。說的更清楚一些,內(nèi)核是放在內(nèi)存里的。內(nèi)核所使用的空間是內(nèi)核預留的。只有內(nèi)核可以使用預留的內(nèi)核空間。內(nèi)核擁有這些內(nèi)存空間,直到系統(tǒng)關閉。與內(nèi)核空間相對應的還是用戶空間。用戶空間是內(nèi)存上用戶程序擁有的空間。比如瀏覽器、電子游戲、文字處理器、媒體播放器、壁紙、主題等都是放在內(nèi)存里的用戶空間。當一個程序關閉的時候,任何程序都可以使用新釋放的空間。在內(nèi)核空間,一旦內(nèi)存被占用,則沒有任何其他程序可以使用這塊空間。
Linux內(nèi)核也是一個搶占式多任務內(nèi)核。這意味該內(nèi)核可以暫停一些任務來保證任何應用都有機會來使用CPU。舉個例子,如果一個應用正在運行但是正在等待一些數(shù)據(jù),內(nèi)核會把這個應用暫停并允許其他的程序使用新釋放的CPU資源,直到數(shù)據(jù)到來。否則的話,系統(tǒng)就會浪費資源給那些正在等待數(shù)據(jù)或者其他程序執(zhí)行的的任務。內(nèi)核將會強制程序去等待或者停止使用CPU。沒有內(nèi)核的允許,應用程序不能脫離暫?;蛘呤褂肅PU。
Linux內(nèi)核使得設備作為文件顯示在/dev文件夾下。舉個例子,USB端口位于/dev/bus/usb。硬盤分區(qū)則位于/dev/disk/分區(qū)。因為這個特性,許多人說:“在Linux上,一切皆文件”。舉個例子,如果一個用戶想要訪問在存儲卡上的數(shù)據(jù),他們能通過設備文件訪問這些數(shù)據(jù)。(譯注:此處原文是“If a user wanted to access data on their memory card, for example, they cannot access the data through these device files.”,但根據(jù)上下文和實際經(jīng)驗看,應該是“can 能”)
Linux內(nèi)核是可移植的??梢浦残允荓inux流行的一個最重要的原因??梢浦残允沟脙?nèi)核可以工作在各種處理器和系統(tǒng)上。一些內(nèi)核支持的處理器的型號包括:Alpha、AMD、ARM、C6X、Intel、x86、Microblaze、MIPS、PowerPC、SPARC、UltraSPARC等,這還不是全部的列表。
在引導文件夾(/boot),用戶會看到諸如“vmlinux”或者“vmlinuz”的文件。這兩者都是已編譯的Linux內(nèi)核。以“z”結尾的是已壓縮的。“vm”代表虛擬內(nèi)存。在SPARC處理器的系統(tǒng)上,用戶可以看見一個zImage文件。一小部分用戶可以發(fā)現(xiàn)一個bzImage文件,這也是一個已壓縮的Linux內(nèi)核。無論用戶有哪個文件,這些引導文件都是不能更改的,除非用戶知道他們正在做什么。否則系統(tǒng)會變成無法引導,也就是說系統(tǒng)啟動不了了。
內(nèi)核源代碼就是程序編碼。有了源代碼,程序員可以修改內(nèi)核并能觀察到內(nèi)核是如何工作的。
下載內(nèi)核:
現(xiàn)在我們想更多地了解了內(nèi)核,就要下載內(nèi)核源代碼了。進入kernel.org并點擊那個巨大的下載按鈕。下載完成后,解壓下載的文件。
對于本文,我使用的源代碼是Linux kernel 3.9.4.這個文章系列的所有指導對于所有的內(nèi)核版本是相同的(或者非常相似的)
via: http://www.linux.org/threads/%EF%BB%BFthe-linux-kernel-introduction.4203/