亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 00000003.htm

?? 本書詳細(xì)地介紹了Linux下一些主要函數(shù)的功能
?? HTM
字號:
<HTML><HEAD>  <TITLE>BBS水木清華站∶精華區(qū)</TITLE></HEAD><BODY><CENTER><H1>BBS水木清華站∶精華區(qū)</H1></CENTER>發(fā)信人:&nbsp;axp33a&nbsp;(無聊中...),&nbsp;信區(qū):&nbsp;Linux&nbsp;<BR>標(biāo)&nbsp;&nbsp;題:&nbsp;Linux內(nèi)核源代碼分析2-1&nbsp;<BR>發(fā)信站:&nbsp;BBS&nbsp;水木清華站&nbsp;(Thu&nbsp;Aug&nbsp;&nbsp;3&nbsp;11:18:30&nbsp;2000)&nbsp;WWW-POST&nbsp;<BR>&nbsp;<BR>第2章&nbsp;&nbsp;&nbsp;代&nbsp;碼&nbsp;初&nbsp;識
&nbsp;<BR>本章首先從較高層次介紹Linux內(nèi)核源程序的概況,這些都是大家關(guān)心的一些基本特點(diǎn)。&nbsp;<BR>隨后將簡要介紹一些實(shí)際代碼。最后介紹如何編譯內(nèi)核。
&nbsp;<BR>2.1&nbsp;&nbsp;&nbsp;Linux內(nèi)核源程序的部分特點(diǎn)
&nbsp;<BR>在過去的一段時(shí)期,Linux內(nèi)核同時(shí)使用C語言和匯編語言來實(shí)現(xiàn)。這兩種語言需要一定的&nbsp;<BR>平衡:C語言編寫的代碼移植性較好、易于維護(hù),而匯編語言編寫的程序則速度較快。一&nbsp;<BR>般只有在速度是關(guān)鍵因素或者一些因平臺相關(guān)特性而產(chǎn)生的特殊要求(例如直接和內(nèi)存管&nbsp;<BR>理硬件進(jìn)行通訊)時(shí)才使用匯編語言。
&nbsp;<BR>正如實(shí)際中所做的,即使內(nèi)核并未使用C++的對象特性,部分內(nèi)核也可以在g++(GNU的C++&nbsp;<BR>編譯器)下進(jìn)行編譯。同其他面向?qū)ο蟮木幊陶Z言相比較,相對而言C++的開銷是較低的&nbsp;<BR>,但是對于內(nèi)核開發(fā)人員來說,這已經(jīng)是太多了。
&nbsp;<BR>內(nèi)核開發(fā)人員不斷發(fā)展編程風(fēng)格,形成了Linux代碼獨(dú)有的特色。本節(jié)將討論其中的一些&nbsp;<BR>問題。
&nbsp;<BR>2.1.1&nbsp;&nbsp;&nbsp;gcc特性的使用
&nbsp;<BR>Linux內(nèi)核被設(shè)計(jì)為必須使用GNU的C編譯器gcc來編譯,而不是任何一種C編譯器都可以使&nbsp;<BR>用。內(nèi)核代碼有時(shí)要使用gcc特性,本書將陸續(xù)介紹其中的一部分。
&nbsp;<BR>一些gcc特有代碼只是簡單地使用gcc語言擴(kuò)展,例如允許在C(不只是C++)中使用inline&nbsp;<BR>關(guān)鍵字指示內(nèi)聯(lián)函數(shù)。也就是說,代碼中被調(diào)用的函數(shù)在每次函數(shù)調(diào)用時(shí)都會被擴(kuò)充,因&nbsp;<BR>而就可以節(jié)約實(shí)際函數(shù)調(diào)用的開銷。
&nbsp;<BR>一般情況下,代碼的編寫方式比較復(fù)雜。因?yàn)閷τ谀承╊愋偷妮斎耄琯cc能夠產(chǎn)生比其他&nbsp;<BR>輸入效率更高的執(zhí)行代碼。從理論上講,編譯器可以優(yōu)化具有相同功能的兩種對等的方法&nbsp;<BR>,并且得到相同的結(jié)果。因此,代碼的編寫方式是無關(guān)緊要的。但在實(shí)際上,用某種方法&nbsp;<BR>編寫所產(chǎn)生的代碼要比用另外一些方法編寫所產(chǎn)生的代碼執(zhí)行速度快許多。內(nèi)核開發(fā)人員&nbsp;<BR>知道怎樣才能產(chǎn)生更高效的執(zhí)行代碼,這不斷地在他們編寫的代碼中反映出來。
&nbsp;<BR>例如,考慮內(nèi)核中經(jīng)常使用的goto語句—為了提高速度,內(nèi)核中經(jīng)常大量使用這種一般要&nbsp;<BR>避免使用的語句。在本書中所包含的不到40&nbsp;000行代碼中,一共有500多條goto語句,大&nbsp;<BR>約是每80行一個(gè)。除匯編文件外,精確的統(tǒng)計(jì)數(shù)字是接近每72行一個(gè)goto語句。公平地說&nbsp;<BR>,這是選擇偏向的結(jié)果:比例如此高的原因之一是本書中涉及的是內(nèi)核源程序的核心,在&nbsp;<BR>這里速度比其他因素都需要優(yōu)先考慮。整個(gè)內(nèi)核的比例大概是每260行一個(gè)goto語句。然&nbsp;<BR>而,這仍然是我不再使用Basic進(jìn)行編程以來見過的使用goto頻率最高的地方。
&nbsp;<BR>代碼必需受特定編譯器限制的特性不僅與普通應(yīng)用程序的開發(fā)有很大不同,而且也不同于&nbsp;<BR>大多數(shù)內(nèi)核的開發(fā)。大多數(shù)的開發(fā)人員使用C語言編寫代碼來保持較高的可移植性,即使&nbsp;<BR>在編寫操作系統(tǒng)時(shí)也是如此。這樣做的優(yōu)點(diǎn)是顯而易見的,最為重要的一點(diǎn)是一旦出現(xiàn)更&nbsp;<BR>好的編譯器,程序員們可以隨時(shí)進(jìn)行更換。
&nbsp;<BR>內(nèi)核對于gcc特性的完全依賴使得內(nèi)核向新的編譯器上移植更加困難。最近Linus對這一問&nbsp;<BR>題在有關(guān)內(nèi)核的郵件列表上表明了自己的觀點(diǎn):“記住,編譯器只是一個(gè)工具。”這是對&nbsp;<BR>依賴于gcc特性的一個(gè)很好的基本思想的表述:編譯器只是為了完成工作。如果通過遵守&nbsp;<BR>標(biāo)準(zhǔn)還不能達(dá)到工作要求,那么就不是工作要求有問題,而是對于標(biāo)準(zhǔn)的依賴有問題。
&nbsp;<BR>在大多數(shù)情況下,這種觀點(diǎn)是不能被人所接受的。通常情況下,為了保證和程序語言標(biāo)準(zhǔn)&nbsp;<BR>的一致,開發(fā)人員可能需要犧牲某些特性、速度或者其他相關(guān)因素。其他的選擇可能會為&nbsp;<BR>后期開發(fā)造成很大的麻煩。
&nbsp;<BR>但是,在這種特定的情況下,Linus是正確的。Linux內(nèi)核是一個(gè)特例,因?yàn)槠鋱?zhí)行速度要&nbsp;<BR>比向其他編譯器的可移植性遠(yuǎn)為重要。如果設(shè)計(jì)目標(biāo)是編寫一個(gè)可移植性好而不要求快速&nbsp;<BR>運(yùn)行的內(nèi)核,或者是編寫一個(gè)任何人都可以使用自己喜歡的編譯器進(jìn)行編譯的內(nèi)核,那么&nbsp;<BR>結(jié)論就可能會有所不同了;而這些恰好不是Linux的設(shè)計(jì)目標(biāo)。實(shí)際上,gcc幾乎可以為所&nbsp;<BR>有能夠運(yùn)行Linux的CPU生成代碼,因此,對于gcc的依賴并不是可移植性的嚴(yán)重障礙。
&nbsp;<BR>在第3章中我們將對內(nèi)核設(shè)計(jì)目標(biāo)進(jìn)行詳細(xì)說明。
&nbsp;<BR>2.1.2&nbsp;&nbsp;&nbsp;內(nèi)核代碼習(xí)慣用語
&nbsp;<BR>內(nèi)核代碼中使用了一些顯著的習(xí)慣用語,本節(jié)將介紹常用的幾個(gè)。當(dāng)通讀源代碼時(shí),真正&nbsp;<BR>重要的問題并不在這些習(xí)慣用語本身,而是這種類型的習(xí)慣用語的確存在,而且是不斷被&nbsp;<BR>使用和發(fā)展的。如果你需要編寫內(nèi)核代碼,你應(yīng)該注意到內(nèi)核中所使用的習(xí)慣用語,并把&nbsp;<BR>這些習(xí)慣用語應(yīng)用到你的代碼中。當(dāng)通讀本書(或者代碼)時(shí),看看你還能找到多少習(xí)慣&nbsp;<BR>用語。
&nbsp;<BR>為了討論這些習(xí)慣用語,我們首先需要對它們進(jìn)行命名。為了便于討論,筆者創(chuàng)造了這些&nbsp;<BR>名字。而在實(shí)際中,大家不一定非要參考這些用語,它們只是對內(nèi)核工作方式的描述而已&nbsp;<BR>。
&nbsp;<BR>一個(gè)普通的習(xí)慣用語,筆者稱之為“資源獲取”(resource&nbsp;acquisition&nbsp;idiom)。在這&nbsp;<BR>個(gè)用語中,一個(gè)函數(shù)必須實(shí)現(xiàn)一系列資源的獲取,包括內(nèi)存、鎖等等(這些資源的類型未&nbsp;<BR>必相同)。只有成功地獲取當(dāng)前所需要的資源之后,才能處理后面的資源請求。最后,該&nbsp;<BR>函數(shù)還必須釋放所有已經(jīng)獲取的資源,而不必考慮沒有獲取的資源。
&nbsp;<BR>我采用“錯(cuò)誤變量”這一用語(error&nbsp;variable&nbsp;idiom)來輔助說明資源獲取用語,它使&nbsp;<BR>用一個(gè)臨時(shí)變量來記錄函數(shù)的期望返回值。當(dāng)然,相當(dāng)多的函數(shù)都能實(shí)現(xiàn)這個(gè)功能。但是&nbsp;<BR>錯(cuò)誤變量的不同點(diǎn)在于它通常是用來處理由于速度的因素而變得非常復(fù)雜的流程控制中的&nbsp;<BR>問題。錯(cuò)誤變量有兩個(gè)典型的值,0(表示成功)和負(fù)數(shù)(表示有錯(cuò))。
&nbsp;<BR>這兩個(gè)用語結(jié)合使用,我們就可以十分自然地得到符合模式的代碼如下:
&nbsp;<BR>(注意變量err是使用錯(cuò)誤變量的一個(gè)明確實(shí)例,同樣,諸如out之類的標(biāo)號則指明了資源&nbsp;<BR>獲取用語的使用。)
&nbsp;<BR>如果執(zhí)行到標(biāo)號out2,則都已經(jīng)獲取了r1和r2資源,而且也都需要進(jìn)行釋放。如果執(zhí)行到&nbsp;<BR>標(biāo)號out1(不管是順序執(zhí)行還是使用goto語句進(jìn)行跳轉(zhuǎn)到),則r2資源是無效的(也可能&nbsp;<BR>剛被釋放),但是r1資源卻是有效的,而且必需在此將其釋放。同理,如果標(biāo)號out能被&nbsp;<BR>執(zhí)行,則r1和r2資源都無效,err所返回的是錯(cuò)誤或成功標(biāo)志。
&nbsp;<BR>在這個(gè)簡單的例子中,對err的一些賦值是沒有必要的。在實(shí)踐中,實(shí)際代碼必須遵守這&nbsp;<BR>種模式。這樣做的原因主要在于同一行中可能包含有多種測試,而這些測試應(yīng)該返回相同&nbsp;<BR>的錯(cuò)誤代碼,因此對錯(cuò)誤變量統(tǒng)一賦值要比多次賦值更為簡單。雖然在這個(gè)例子中對于這&nbsp;<BR>種屬性的必要性并不非常迫切,但是我還是傾向于保留這種特點(diǎn)。有關(guān)的實(shí)際應(yīng)用可以參&nbsp;<BR>考sys_shmctl(第21654行),在第9章中還將詳細(xì)介紹這個(gè)例子。
&nbsp;<BR>2.1.3&nbsp;&nbsp;&nbsp;減少#if和#ifdef的使用
&nbsp;<BR>現(xiàn)在的Linux內(nèi)核已經(jīng)移植到不同的平臺上,但是我們還必須解決移植過程中所出現(xiàn)的問&nbsp;<BR>題。大部分支持各種不同平臺的代碼由于包含許多預(yù)處理代碼而已經(jīng)變得非常不規(guī)范,例&nbsp;<BR>如:
&nbsp;<BR>這個(gè)例子試圖實(shí)現(xiàn)操作系統(tǒng)的可移植性,雖然Linux關(guān)注的焦點(diǎn)很明顯是實(shí)現(xiàn)代碼在各種&nbsp;<BR>CPU上的可移植性,但是二者的基本原理是一致的。對于這類問題來說,預(yù)處理器是一種&nbsp;<BR>錯(cuò)誤的解決方式。這些雜亂的問題使得代碼晦澀難懂。更為糟糕的是,增加對新平臺的支&nbsp;<BR>持有可能要求重新遍歷這些雜亂分布的低質(zhì)量代碼段(實(shí)際上你很難能找到這類代碼段的&nbsp;<BR>全部)。
&nbsp;<BR>與現(xiàn)有方式不同的是,Linux一般通過簡單函數(shù)(或者是宏)調(diào)用來抽象出不同平臺間的&nbsp;<BR>差異。內(nèi)核的移植可以通過實(shí)現(xiàn)適合于相應(yīng)平臺的函數(shù)(或宏)來實(shí)現(xiàn)。這樣不僅使代碼&nbsp;<BR>的主體簡單易懂,而且在移植的過程中還可以比較容易地自動(dòng)檢測出你沒有注意到的內(nèi)容&nbsp;<BR>:如引用未聲明函數(shù)時(shí)會出現(xiàn)鏈接錯(cuò)誤。有時(shí)用預(yù)處理器來支持不同的體系結(jié)構(gòu),但這種&nbsp;<BR>方式并不常用,而相對于代碼風(fēng)格的變化就更是微不足道了。
&nbsp;<BR>順便說一下,我們可以注意到這種解決方法和使用用戶對象(或者C語言中充滿函數(shù)指針&nbsp;<BR>的struct結(jié)構(gòu))來代替離散的switch語句處理不同類型的方法十分相似。在某些層次上,&nbsp;<BR>這些問題和解決方法是統(tǒng)一的。
&nbsp;<BR>可移植性的問題并不僅限于平臺和CPU的移植,編譯器也是一個(gè)重要的問題。此處為了簡&nbsp;<BR>化,假設(shè)Linux只使用gcc來編譯。由于Linux只使用同一個(gè)編譯器,所以就沒有必要使用&nbsp;<BR>#if塊(或者#ifdef塊)來選擇不同的編譯器。
&nbsp;<BR>內(nèi)核代碼主要使用#ifdef來區(qū)分需要編譯或不需要編譯的部分,從而對不同的結(jié)構(gòu)提供支&nbsp;<BR>持。例如,代碼經(jīng)常測試SMP宏是否定義過,從而決定是否支持SMP機(jī)。
&nbsp;<BR>
&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>--&nbsp;<BR>※&nbsp;來源:·BBS&nbsp;水木清華站&nbsp;smth.org·[FROM:&nbsp;166.111.196.22]&nbsp;&nbsp;<BR><CENTER><H1>BBS水木清華站∶精華區(qū)</H1></CENTER></BODY></HTML>

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲人成网站色在线观看| 欧美成人欧美edvon| 日韩福利电影在线| 亚洲精品一区二区三区99| eeuss鲁一区二区三区| 日本不卡一区二区三区高清视频| 日韩午夜电影av| 99热精品一区二区| 国产一区在线观看麻豆| 亚洲免费大片在线观看| 色欧美日韩亚洲| 久久99精品国产麻豆婷婷 | 亚洲国产精品成人综合| 在线观看一区日韩| 成人av网站在线观看免费| 午夜影院久久久| 亚洲国产精品v| 日韩区在线观看| 91丨九色porny丨蝌蚪| 狠狠色丁香婷婷综合| 日韩精品1区2区3区| 亚洲素人一区二区| 久久久蜜桃精品| 精品剧情v国产在线观看在线| 一本大道av伊人久久综合| 国产麻豆视频精品| 免费成人av在线| 亚洲午夜视频在线| 国产精品丝袜一区| 精品卡一卡二卡三卡四在线| 欧美日韩五月天| 欧美亚洲动漫另类| 成人av电影免费观看| 国产一区二区三区综合| 精品综合免费视频观看| 日韩精品欧美精品| 亚洲一区二区三区影院| 一区二区欧美精品| 亚洲视频一区二区在线| 欧美极品少妇xxxxⅹ高跟鞋| 欧美精品一区二区蜜臀亚洲| 日韩一区二区在线看| 欧美日韩一区二区三区四区| 91久久精品日日躁夜夜躁欧美| 国产不卡免费视频| 国产精品系列在线播放| 精品影视av免费| 美女性感视频久久| 男女性色大片免费观看一区二区 | 国产精品久久久一本精品| 精品99999| 日韩午夜在线观看视频| 5566中文字幕一区二区电影| 欧美一级精品在线| 777午夜精品视频在线播放| 欧美在线观看一区二区| 欧美裸体bbwbbwbbw| 欧美日韩国产首页在线观看| 欧美三级在线看| 欧美一区二区在线不卡| 5566中文字幕一区二区电影| 欧美男人的天堂一二区| 欧美大片一区二区| 精品国产3级a| 久久久99精品免费观看| 国产精品亲子乱子伦xxxx裸| 国产精品久久毛片| 久久这里只有精品6| 久久中文字幕电影| 国产精品毛片大码女人| 亚洲乱码国产乱码精品精98午夜| 亚洲美女在线国产| 强制捆绑调教一区二区| 老司机一区二区| 国产精品综合网| 成人sese在线| 色久综合一二码| 日韩情涩欧美日韩视频| 久久久久国产一区二区三区四区| 成人sese在线| 丰满少妇久久久久久久| 99精品在线免费| 色综合久久久久综合体| 日韩免费观看高清完整版| 欧美精品一区二区三区蜜臀| 91精品国产综合久久香蕉的特点 | 欧美日免费三级在线| 欧美一区二区在线视频| 国产亚洲欧美日韩日本| 亚洲成a人片在线观看中文| 久久av老司机精品网站导航| 欧美zozozo| 亚洲精品成人天堂一二三| 天天影视涩香欲综合网| 国产精品中文字幕日韩精品| 在线观看中文字幕不卡| 亚洲精品在线观看网站| 亚洲欧洲日韩在线| 久99久精品视频免费观看| 9久草视频在线视频精品| 9191国产精品| 黄一区二区三区| 久久精品99国产精品| 丁香六月久久综合狠狠色| 欧美日韩久久一区二区| 亚洲精品在线三区| 亚洲综合清纯丝袜自拍| 国产成人精品免费网站| 精品视频一区 二区 三区| 国产日韩精品一区| 日日欢夜夜爽一区| 91黄色激情网站| 国产视频911| 卡一卡二国产精品| 欧美性一级生活| 欧美激情一区二区在线| 国产一区二区三区在线观看精品| 91极品视觉盛宴| 日本一区二区三区高清不卡| 九九九久久久精品| 欧美疯狂做受xxxx富婆| 国产精品久久久久毛片软件| 国产精品一品二品| 91麻豆精品国产自产在线| 一区二区三区精品| 成人av网址在线| 久久久久久久久久久99999| 欧美高清视频不卡网| 中文字幕中文乱码欧美一区二区| 久久99精品国产麻豆婷婷| 69堂精品视频| 亚洲综合精品自拍| 色哦色哦哦色天天综合| 中文字幕中文字幕在线一区| 国产精品456露脸| 国产日韩欧美高清在线| 韩国在线一区二区| 欧美v日韩v国产v| 激情欧美一区二区三区在线观看| 在线播放中文一区| 亚洲成人av电影| 欧美一级爆毛片| 日日欢夜夜爽一区| 欧美系列在线观看| 偷偷要91色婷婷| 精品视频在线看| 日本不卡视频在线| 日韩午夜在线观看| 喷白浆一区二区| 久久综合久色欧美综合狠狠| 麻豆国产精品一区二区三区| 欧美疯狂做受xxxx富婆| 久久99国产精品久久99果冻传媒| 91精品国产综合久久精品app| 婷婷激情综合网| 欧美一级免费大片| 久久精品av麻豆的观看方式| 久久这里只有精品视频网| 国产精品一区二区在线播放 | 日韩美女一区二区三区四区| 精品一区二区三区久久久| 日韩精品一区二区三区蜜臀 | 欧美mv日韩mv| 激情亚洲综合在线| 亚洲欧洲日韩综合一区二区| 91免费视频大全| 精品国产乱码91久久久久久网站| 国产一区二区三区免费看| 国产欧美精品一区| 99久久精品国产毛片| 亚洲国产精品人人做人人爽| 777色狠狠一区二区三区| 久久精品久久99精品久久| 国产偷v国产偷v亚洲高清| 成人免费视频免费观看| 亚洲欧美另类综合偷拍| 欧美三电影在线| 粉嫩aⅴ一区二区三区四区| 中文字幕在线不卡一区| 精品一区二区三区在线观看国产 | 在线综合亚洲欧美在线视频| 日韩国产欧美在线播放| 欧美国产日韩在线观看| 色妹子一区二区| 国内精品写真在线观看| 国产精品久久久久久亚洲毛片| 91成人网在线| 国产精品一区二区不卡| 一区二区三区在线播| 日韩三级免费观看| 在线亚洲高清视频| 日韩 欧美一区二区三区| 亚洲一级不卡视频| 欧美在线小视频| 国产高清精品网站| 日韩电影网1区2区| 中文字幕字幕中文在线中不卡视频| 欧美人牲a欧美精品| 91亚洲永久精品| 国产精品一区二区三区乱码|