linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn) 第二章墨缘,從內(nèi)核出發(fā)

內(nèi)核開(kāi)發(fā)的特點(diǎn)

內(nèi)核編程時(shí)既不能訪問(wèn)c庫(kù),也不能訪問(wèn)標(biāo)準(zhǔn)的c頭文件零抬。

內(nèi)核編程必須使用镊讼,gnuc

內(nèi)核編程時(shí)缺乏像用戶空間那樣的內(nèi)存保護(hù)機(jī)制。

內(nèi)核編程時(shí)難以執(zhí)行浮點(diǎn)運(yùn)算平夜。

內(nèi)核給每個(gè)進(jìn)程只有一個(gè)很小的定長(zhǎng)堆棧蝶棋。

由于內(nèi)核支持異步中斷,搶占和smp忽妒,因此必須時(shí)刻注意同步和并發(fā)玩裙。

要考慮可移植的重要性。

定義一個(gè)內(nèi)聯(lián)函數(shù)的時(shí)候锰扶,需要使用static作為關(guān)鍵字,并且用inline限定它寝受,比如:

static inline void wolf()坷牛。內(nèi)聯(lián)函數(shù)必須在使用之前就定義好,由于使用了Static關(guān)鍵字進(jìn)行限制很澄,所以編譯時(shí)不會(huì)為內(nèi)聯(lián)函數(shù)單獨(dú)建立一個(gè)函數(shù)體京闰。如果一個(gè)內(nèi)聯(lián)函數(shù)僅僅在某一個(gè)源文件中使用颜及。那么也可以把它定義在該文件開(kāi)始的地方。

gcc編譯器支持在c函數(shù)中嵌入?yún)R編指令蹂楣,我們通常使用asm()指令嵌入?yún)R編代碼俏站。

對(duì)于條件選擇語(yǔ)句,gcc內(nèi)建了一條指令用于優(yōu)化在一個(gè)條件經(jīng)常出現(xiàn)痊土,或者該條件很少出現(xiàn)的時(shí)候肄扎,編譯器可以根據(jù)這條指定對(duì)條件分支選擇語(yǔ)句進(jìn)行優(yōu)化。內(nèi)核把這條指令封裝成了宏赁酝,比如likely()和unlikely()犯祠。

如果一個(gè)用戶進(jìn)程試圖進(jìn)行一次非法的內(nèi)存訪問(wèn)內(nèi)核,就會(huì)發(fā)現(xiàn)這個(gè)錯(cuò)誤酌呆,發(fā)送s i g s e g v信號(hào)衡载,并結(jié)束整個(gè)進(jìn)程。而如果內(nèi)核自己非法訪問(wèn)內(nèi)存隙袁,那后果就很難控制了痰娱。畢竟,誰(shuí)能照顧內(nèi)核呢菩收??jī)?nèi)核中發(fā)生的內(nèi)存錯(cuò)誤會(huì)導(dǎo)致oops梨睁,這是內(nèi)核中經(jīng)常出現(xiàn)的一種錯(cuò)誤,在內(nèi)核中不應(yīng)該去訪問(wèn)非法的內(nèi)存地址坛梁,引用空指針之類的事情而姐,否則他可能會(huì)死掉,卻根本不告訴你一聲划咐。在內(nèi)核風(fēng)險(xiǎn)風(fēng)長(zhǎng)比外面大一些拴念。

此外,內(nèi)核中的內(nèi)存都不分頁(yè)褐缠。也就是說(shuō)你每用掉一個(gè)字節(jié)政鼠,物理內(nèi)存就減少一個(gè)字節(jié)。

在用戶空間的進(jìn)程進(jìn)行浮點(diǎn)數(shù)操作的時(shí)候队魏,內(nèi)核會(huì)完成從整數(shù)操作到浮點(diǎn)數(shù)操作的模式轉(zhuǎn)換公般。在執(zhí)行浮點(diǎn)數(shù)指令時(shí)到底會(huì)做些什么呢?因體系結(jié)構(gòu)不同胡桨,內(nèi)核的選擇也不相同官帘,但是內(nèi)核通常捕獲陷阱并著手于整數(shù)到浮點(diǎn)方式的轉(zhuǎn)變。

與用戶空間進(jìn)程不同昧谊,內(nèi)核并不能完美的支持浮點(diǎn)操作刽虹,因?yàn)樗旧聿荒芟萑搿T趦?nèi)核中使用浮點(diǎn)數(shù)時(shí)呢诬,除了要人工保存和恢復(fù)浮點(diǎn)寄存器涌哲,還有其他一些瑣碎的事情要做胖缤。如果直接了當(dāng)?shù)幕卮穑蔷褪莿e這么做了阀圾,除了一些基礎(chǔ)的情況不要在內(nèi)核中使用浮點(diǎn)數(shù)操作哪廓。

用戶空間的程序可以從棧上分配大量的空間來(lái)存放變量,甚至巨大的結(jié)構(gòu)體或者是包含數(shù)以千計(jì)的數(shù)據(jù)項(xiàng)的數(shù)組都沒(méi)有問(wèn)題初烘。之所以可以這么做涡真,是因?yàn)橛脩艨臻g的棧本身比較大,而且還能隨著發(fā)展而不斷增大账月。

內(nèi)核棧的準(zhǔn)確大小隨著體系結(jié)構(gòu)而變综膀,再x86上,棧的大小局齿,在編譯時(shí)配置剧劝,可以是4KB也可以是8KB,從歷史上說(shuō)內(nèi)核棧的大小是兩頁(yè)抓歼,這意味著32位機(jī)的內(nèi)核棧是8KB讥此,而64位機(jī)是16KB,這是固定不變的谣妻,每個(gè)處理器都有自己的棧萄喳。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蹋半,隨后出現(xiàn)的幾起案子他巨,更是在濱河造成了極大的恐慌,老刑警劉巖减江,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件染突,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡辈灼,警方通過(guò)查閱死者的電腦和手機(jī)份企,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)巡莹,“玉大人司志,你說(shuō)我怎么就攤上這事〗嫡” “怎么了骂远?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)腰根。 經(jīng)常有香客問(wèn)我激才,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任贸营,我火速辦了婚禮,結(jié)果婚禮上岩睁,老公的妹妹穿的比我還像新娘钞脂。我一直安慰自己,他們只是感情好捕儒,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布冰啃。 她就那樣靜靜地躺著,像睡著了一般刘莹。 火紅的嫁衣襯著肌膚如雪阎毅。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天点弯,我揣著相機(jī)與錄音扇调,去河邊找鬼。 笑死抢肛,一個(gè)胖子當(dāng)著我的面吹牛狼钮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捡絮,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼熬芜,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了福稳?” 一聲冷哼從身側(cè)響起涎拉,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎的圆,沒(méi)想到半個(gè)月后鼓拧,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡略板,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年毁枯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叮称。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡种玛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瓤檐,到底是詐尸還是另有隱情赂韵,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布挠蛉,位于F島的核電站祭示,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏谴古。R本人自食惡果不足惜质涛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一稠歉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧汇陆,春花似錦怒炸、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至教寂,卻和暖如春捏鱼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背酪耕。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工导梆, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人迂烁。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓问潭,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親婚被。 傳聞我的和親對(duì)象是個(gè)殘疾皇子狡忙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容