今天長安保定百度愛第2章代碼初識 本章首先從較高層次介紹linux內(nèi)核源程序的概況,這些都

今天長安保定百度愛第2章代碼初識 本章首先從較高層次介紹linux內(nèi)核源程序的概況,這些都

ID:14789272

大小:60.00 KB

頁數(shù):22頁

時間:2018-07-30

今天長安保定百度愛第2章代碼初識 本章首先從較高層次介紹linux內(nèi)核源程序的概況,這些都_第1頁
今天長安保定百度愛第2章代碼初識 本章首先從較高層次介紹linux內(nèi)核源程序的概況,這些都_第2頁
今天長安保定百度愛第2章代碼初識 本章首先從較高層次介紹linux內(nèi)核源程序的概況,這些都_第3頁
今天長安保定百度愛第2章代碼初識 本章首先從較高層次介紹linux內(nèi)核源程序的概況,這些都_第4頁
今天長安保定百度愛第2章代碼初識 本章首先從較高層次介紹linux內(nèi)核源程序的概況,這些都_第5頁
資源描述:

《今天長安保定百度愛第2章代碼初識 本章首先從較高層次介紹linux內(nèi)核源程序的概況,這些都》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫

1、今天長安保定百度愛第2章代碼初識本章首先從較高層次介紹Linux內(nèi)核源程序的概況,這些都的的范德薩的地方愛的規(guī)格好文章第2章代碼初識本章首先從較高層次介紹Linux內(nèi)核源程序的概況,這些都是大家關(guān)心的一些基本特點。隨后將簡要介紹一些實際代碼。最后介紹如何編譯內(nèi)核。2.1Linux內(nèi)核源程序的部分特點在過去的一段時期,Linux內(nèi)核同時使用C語言和匯編語言來實現(xiàn)。這兩種語言需要一定的平衡:C語言編寫的代碼移植性較好、易于維護,而匯編語言編寫的程序則速度較快。一般只有在速度是關(guān)鍵因素或者一些因平臺相關(guān)特性而產(chǎn)生的特殊要求(例如直接和內(nèi)存管理硬件進行通訊)時才使用匯

2、編語言。正如實際中所做的,即使內(nèi)核并未使用C++的對象特性,部分內(nèi)核也可以在g++(GNU的C++編譯器)下進行編譯。同其他面向?qū)ο蟮木幊陶Z言相比較,相對而言C++的開銷是較低的,但是對于內(nèi)核開發(fā)人員來說,這已經(jīng)是太多了。內(nèi)核開發(fā)人員不斷發(fā)展編程風格,形成了Linux代碼獨有的特色。本節(jié)將討論其中的一些問題。2.1.1gcc特性的使用Linux內(nèi)核被設計為必須使用GNU的C編譯器gcc來編譯,而不是任何一種C編譯器都可以使用。內(nèi)核代碼有時要使用gcc特性,本書將陸續(xù)介紹其中的一部分。一些gcc特有代碼只是簡單地使用gcc語言擴展,例如允許在C(不只是C++)中

3、使用inline關(guān)鍵字指示內(nèi)聯(lián)函數(shù)。也就是說,代碼中被調(diào)用的函數(shù)在每次函數(shù)調(diào)用時都會被擴充,因而就可以節(jié)約實際函數(shù)調(diào)用的開銷。一般情況下,代碼的編寫方式比較復雜。因為對于某些類型的輸入,gcc能夠產(chǎn)生比其他輸入效率更高的執(zhí)行代碼。從理論上講,編譯器可以優(yōu)化具有相同功能的兩種對等的方法,并且得到相同的結(jié)果。因此,代碼的編寫方式是無關(guān)緊要的。但在實際上,用某種方法編寫所產(chǎn)生的代碼要比用另外一些方法編寫所產(chǎn)生的代碼執(zhí)行速度快許多。內(nèi)核開發(fā)人員知道怎樣才能產(chǎn)生更高效的執(zhí)行代碼,這不斷地在他們編寫的代碼中反映出來。例如,考慮內(nèi)核中經(jīng)常使用的goto語句—為了提高速度,內(nèi)

4、核中經(jīng)常大量使用這種一般要避免使用的語句。在本書中所包含的不到40000行代碼中,一共有500多條goto語句,大約是每80行一個。除匯編文件外,精確的統(tǒng)計數(shù)字是接近每72行一個goto語句。公平地說,這是選擇偏向的結(jié)果:比例如此高的原因之一是本書中涉及的是內(nèi)核源程序的核心,在這里速度比其他因素都需要優(yōu)先考慮。整個內(nèi)核的比例大概是每260行一個goto語句。然而,這仍然是我不再使用Basic進行編程以來見過的使用goto頻率最高的地方。代碼必需受特定編譯器限制的特性不僅與普通應用程序的開發(fā)有很大不同,而且也不同于大多數(shù)內(nèi)核的開發(fā)。大多數(shù)的開發(fā)人員使用C語言編寫

5、代碼來保持較高的可移植性,即使在編寫操作系統(tǒng)時也是如此。這樣做的優(yōu)點是顯而易見的,最為重要的一點是一旦出現(xiàn)更好的編譯器,程序員們可以隨時進行更換。內(nèi)核對于gcc特性的完全依賴使得內(nèi)核向新的編譯器上移植更加困難。最近Linus對這一問題在有關(guān)內(nèi)核的郵件列表上表明了自己的觀點:“記住,編譯器只是一個工具?!边@是對依賴于gcc特性的一個很好的基本思想的表述:編譯器只是為了完成工作。如果通過遵守標準還不能達到工作要求,那么就不是工作要求有問題,而是對于標準的依賴有問題。在大多數(shù)情況下,這種觀點是不能被人所接受的。通常情況下,為了保證和程序語言標準的一致,開發(fā)人員可能需

6、要犧牲某些特性、速度或者其他相關(guān)因素。其他的選擇可能會為后期開發(fā)造成很大的麻煩。但是,在這種特定的情況下,Linus是正確的。Linux內(nèi)核是一個特例,因為其執(zhí)行速度要比向其他編譯器的可移植性遠為重要。如果設計目標是編寫一個可移植性好而不要求快速運行的內(nèi)核,或者是編寫一個任何人都可以使用自己喜歡的編譯器進行編譯的內(nèi)核,那么結(jié)論就可能會有所不同了;而這些恰好不是Linux的設計目標。實際上,gcc幾乎可以為所有能夠運行Linux的CPU生成代碼,因此,對于gcc的依賴并不是可移植性的嚴重障礙。在第3章中我們將對內(nèi)核設計目標進行詳細說明。2.1.2內(nèi)核代碼習慣用語

7、內(nèi)核代碼中使用了一些顯著的習慣用語,本節(jié)將介紹常用的幾個。當通讀源代碼時,真正重要的問題并不在這些習慣用語本身,而是這種類型的習慣用語的確存在,而且是不斷被使用和發(fā)展的。如果你需要編寫內(nèi)核代碼,你應該注意到內(nèi)核中所使用的習慣用語,并把這些習慣用語應用到你的代碼中。當通讀本書(或者代碼)時,看看你還能找到多少習慣用語。為了討論這些習慣用語,我們首先需要對它們進行命名。為了便于討論,筆者創(chuàng)造了這些名字。而在實際中,大家不一定非要參考這些用語,它們只是對內(nèi)核工作方式的描述而已。一個普通的習慣用語,筆者稱之為“資源獲取”(resourceacquisitionidio

8、m)。在這個用語中,一個函數(shù)必須實現(xiàn)一

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。