<linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)>讀書(shū)摘要

花了一晚上的時(shí)間讀了幾章形病,挑一些印象深刻的寫(xiě)下來(lái)mark下紧阔。

單內(nèi)核和微內(nèi)核

單內(nèi)核:內(nèi)核是一個(gè)大過(guò)程,同時(shí)運(yùn)行在一個(gè)單獨(dú)的地址空間烤黍。因此知市,這樣的內(nèi)核通常以單個(gè)靜態(tài)二進(jìn)制文件的形式存放于磁盤(pán)(如果裝過(guò)Ubuntu這種玩過(guò)傻盟,通常也能看到內(nèi)核是一個(gè)文件)。因?yàn)檎麄€(gè)系統(tǒng)是一個(gè)統(tǒng)一的內(nèi)核嫂丙,所以其內(nèi)部調(diào)用效率很高娘赴。缺點(diǎn)各模塊之間的界限并不特別清晰,模塊間的調(diào)用比較容易跟啤,不太容易維護(hù)诽表。

書(shū)上說(shuō) Linux是單內(nèi)核,但是因?yàn)樵O(shè)計(jì)的非常好隅肥,模塊化依然非常清晰竿奏。

微內(nèi)核:微內(nèi)核的功能被劃分為獨(dú)立的過(guò)程,每個(gè)過(guò)程叫做一個(gè)服務(wù)器武福。所有的服務(wù)器都保持獨(dú)立并運(yùn)行在各自的地址空間议双。因此痘番,就不可能像單模塊內(nèi)核那樣直接調(diào)用 函數(shù)捉片,而是通過(guò)消息傳遞處理微內(nèi)核通信。優(yōu)點(diǎn)就是服務(wù)之間不會(huì)互相影響汞舱,缺點(diǎn)就是性能沒(méi)有單內(nèi)核都高伍纫。

內(nèi)核中沒(méi)有標(biāo)準(zhǔn)C庫(kù),比如沒(méi)有printf昂芜,只有printk

進(jìn)程

vfork和fork

vfork 不會(huì)復(fù)制父進(jìn)程的頁(yè)莹规,但父進(jìn)程阻塞,直到子進(jìn)程退出或者exec()(子進(jìn)程進(jìn)入自己的新空間)泌神,子進(jìn)程不能寫(xiě)父進(jìn)程內(nèi)存空間良漱。但這樣效率不是特別高。

fork 會(huì)復(fù)制父進(jìn)程的頁(yè)欢际,內(nèi)核會(huì)有意讓子進(jìn)程(非保證的)先執(zhí)行母市,但是 linux現(xiàn)在有寫(xiě)時(shí)復(fù)制機(jī)制,所以區(qū)別不大损趋。

寫(xiě)時(shí)復(fù)制是指父子進(jìn)程在寫(xiě)共享的空間的時(shí)候患久,如果誰(shuí)要寫(xiě),發(fā)現(xiàn)這個(gè)共享區(qū)還有其他進(jìn)程占用浑槽,就會(huì)自己復(fù)制一份蒋失。所以這也是為什么內(nèi)核要有意讓子進(jìn)程先運(yùn)行,因?yàn)樽舆M(jìn)程往往是執(zhí)行exec函數(shù)桐玻,可以避免父進(jìn)程先執(zhí)行導(dǎo)致的寫(xiě)時(shí)復(fù)制的開(kāi)銷(xiāo)篙挽。

進(jìn)程和線程

進(jìn)程:用task_struct保存,保存在內(nèi)核棧尾端镊靴,用匯編計(jì)算它都位置非常容易铣卡,根據(jù)不同CPU有做匯編優(yōu)化观腊,x86僅需要指針就可以計(jì)算出來(lái),不需要用寄存器算行。

線程:從內(nèi)核角度看梧油,Linux是沒(méi)有線程這個(gè)概念的。Linux內(nèi)核沒(méi)有專(zhuān)門(mén)表征線程都數(shù)據(jù)結(jié)構(gòu)州邢,實(shí)際上也是把線程當(dāng)進(jìn)程來(lái)實(shí)現(xiàn)的儡陨。線程的創(chuàng)建和進(jìn)程類(lèi)似,只不過(guò)clone的時(shí)候使用了一些參數(shù)來(lái)表示需要共享資源量淌。

任務(wù)調(diào)度

Linux是搶占式多任務(wù)(非搶占就是當(dāng)前任務(wù)必須執(zhí)行完T_T)骗村,支持內(nèi)核搶占。最重要的就是優(yōu)先級(jí)調(diào)度策略了呀枢,這個(gè)大學(xué)的操作系統(tǒng)書(shū)里面都有講胚股。

系統(tǒng)調(diào)用

用戶(hù)空間訪問(wèn)系統(tǒng)空間都接口,提供機(jī)制而不是策略裙秋,系統(tǒng)調(diào)用是有一張表的琅拌,可以自己去修改表,增加系統(tǒng)調(diào)用摘刑,系統(tǒng)調(diào)用的id也不允許重復(fù)使用进宝,即使卸載了,這個(gè)Id也不會(huì)回收利用枷恕。內(nèi)核提供系統(tǒng)調(diào)用党晋,所以可以控制應(yīng)用程序的訪問(wèn)資源權(quán)限。

中斷

中斷程序分為上下兩部分徐块,上半部分做一些響應(yīng)實(shí)時(shí)性都操作未玻,下半部分做一些實(shí)際耗時(shí)都處理性操作。下半部有軟中斷胡控、tasklet和工作隊(duì)列三種機(jī)制扳剿。

中斷上下文是指當(dāng)執(zhí)行一個(gè)中斷處理程序或下半部,內(nèi)核處于中斷上下文铜犬。中斷上下文和進(jìn)程上下文是有區(qū)別的舞终,它沒(méi)有current宏關(guān)聯(lián)當(dāng)前進(jìn)程。進(jìn)程上下文是以進(jìn)程上下文的形式鏈接到內(nèi)核中都癣猾,所以進(jìn)程上下文是可以睡眠敛劝、調(diào)用調(diào)度程序。中斷上下文是不可以睡眠的纷宇。

自旋鎖和信號(hào)量

自旋鎖是一種輪詢(xún)鎖(輪詢(xún)標(biāo)記位)夸盟,不會(huì)引起進(jìn)程睡眠,不能遞歸調(diào)用像捶。優(yōu)點(diǎn)是效率高上陕,適合短時(shí)間等待的場(chǎng)景桩砰。
信號(hào)量會(huì)引起進(jìn)程睡眠,適合長(zhǎng)時(shí)間(相對(duì))等待的場(chǎng)景

中斷上下文中是不能睡眠的释簿,所以只能使用自旋鎖亚隅。
KVM和Docker

KVM是基于硬件的虛擬化,虛擬化分為全虛擬化(軟件/硬件輔助的虛擬化)庶溶,半虛擬化煮纵。
Docker則是基于操作系統(tǒng)級(jí)的,基于Linux Namespace實(shí)現(xiàn)的(太深入的就不懂了@_@)偏螺。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末行疏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子套像,更是在濱河造成了極大的恐慌酿联,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件夺巩,死亡現(xiàn)場(chǎng)離奇詭異贞让,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)劲够,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)震桶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)休傍,“玉大人征绎,你說(shuō)我怎么就攤上這事∧ト。” “怎么了人柿?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)忙厌。 經(jīng)常有香客問(wèn)我凫岖,道長(zhǎng),這世上最難降的妖魔是什么逢净? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任哥放,我火速辦了婚禮,結(jié)果婚禮上爹土,老公的妹妹穿的比我還像新娘甥雕。我一直安慰自己,他們只是感情好胀茵,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布社露。 她就那樣靜靜地躺著,像睡著了一般琼娘。 火紅的嫁衣襯著肌膚如雪峭弟。 梳的紋絲不亂的頭發(fā)上附鸽,一...
    開(kāi)封第一講書(shū)人閱讀 52,196評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音瞒瘸,去河邊找鬼坷备。 笑死,一個(gè)胖子當(dāng)著我的面吹牛情臭,可吹牛的內(nèi)容都是我干的击你。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼谎柄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼丁侄!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起朝巫,我...
    開(kāi)封第一講書(shū)人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤鸿摇,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后劈猿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體拙吉,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年揪荣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了筷黔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡仗颈,死狀恐怖佛舱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情挨决,我是刑警寧澤请祖,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站脖祈,受9級(jí)特大地震影響肆捕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜盖高,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一慎陵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧喻奥,春花似錦席纽、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春仆救,著一層夾襖步出監(jiān)牢的瞬間抒和,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工彤蔽, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留摧莽,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓顿痪,卻偏偏與公主長(zhǎng)得像镊辕,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蚁袭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

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

  • 又來(lái)到了一個(gè)老生常談的問(wèn)題征懈,應(yīng)用層軟件開(kāi)發(fā)的程序員要不要了解和深入學(xué)習(xí)操作系統(tǒng)呢? 今天就這個(gè)問(wèn)題開(kāi)始揩悄,來(lái)談?wù)劜?..
    tangsl閱讀 4,134評(píng)論 0 23
  • 一卖哎、溫故而知新 1. 內(nèi)存不夠怎么辦 內(nèi)存簡(jiǎn)單分配策略的問(wèn)題地址空間不隔離內(nèi)存使用效率低程序運(yùn)行的地址不確定 關(guān)于...
    SeanCST閱讀 7,818評(píng)論 0 27
  • Android跨進(jìn)程通信IPC整體內(nèi)容如下 1、Android跨進(jìn)程通信IPC之1——Linux基礎(chǔ)2删性、Andro...
    隔壁老李頭閱讀 15,609評(píng)論 19 113
  • 01 “下周一蹬挺,公司派我去美國(guó)出差维贺。”琳達(dá)吃著飯還不忘盯著電腦上的報(bào)表巴帮。 “哦溯泣,這次要去多久?”大偉夾著菜晰韵,連頭也...
    慕宸海閱讀 1,499評(píng)論 28 39
  • 昨天下午和紅星印刷以每本4.5的價(jià)格敲定了維保單的合同发乔,一共八百本。今天上午雪猪,經(jīng)理看合同的時(shí)候突然提出華興印務(wù)的價(jià)...
    美人給個(gè)小紅花閱讀 178評(píng)論 0 0