IOS內(nèi)核架構(gòu)淺談

內(nèi)核是操作系統(tǒng)中最為關(guān)鍵的部分。內(nèi)核是負(fù)責(zé)接觸底層的,因此大部分都是用C語言寫的矢赁,有的甚至用匯編。IOS的核心是XNU內(nèi)核贬丛,先從一些內(nèi)核基本知識(shí)談起撩银。

目錄

  • 內(nèi)核基礎(chǔ)
    • 硬件
    • 任務(wù)
    • 并發(fā)
    • 安全
  • 內(nèi)核架構(gòu)
    • 巨內(nèi)核
    • 微內(nèi)核
    • 混合內(nèi)核
    • XNU
  • 用戶態(tài)與內(nèi)核態(tài)
  • 用戶態(tài)與內(nèi)核態(tài)轉(zhuǎn)換機(jī)制
  • 系統(tǒng)調(diào)用處理

內(nèi)核基礎(chǔ)

4個(gè)角度來說明內(nèi)核的作用及必要性。

硬件

所有現(xiàn)代操作系統(tǒng)都包含內(nèi)核組件豺憔,內(nèi)核向開發(fā)者提供各種服務(wù)额获。如果沒有內(nèi)核,我們編寫開發(fā)程序就會(huì)陷入編寫硬件接口和操作環(huán)境的泥潭恭应,做飯還需要自己種水稻抄邀,鉆木取火,那多麻煩啊昼榛。好了境肾,現(xiàn)在我們擁有了內(nèi)核,一些底層的東西我們不需要關(guān)心胆屿,我們只要使用內(nèi)核API就能達(dá)成我們的目的奥喻。

任務(wù)

現(xiàn)代操作系統(tǒng)都是搶占式的多任務(wù),允許多個(gè)任務(wù)并發(fā)執(zhí)行非迹。因此內(nèi)核要滿足任務(wù)的調(diào)度要求环鲤,能夠判斷任務(wù)運(yùn)行在哪一個(gè)處理器上。

并發(fā)

如果有多任務(wù)憎兽,就要考慮并發(fā)問題冷离,內(nèi)核得知道哪些設(shè)備能夠同時(shí)訪問,哪些不能同時(shí)訪問纯命,需要提供某些措施來防止并發(fā)問題西剥。

安全

內(nèi)核還得提供安全服務(wù),保證系統(tǒng)中各種資源的完整性扎附、隱私性蔫耽。任何敏感操作都是需要內(nèi)核的安全審核來確保該操作的合法性。

內(nèi)核架構(gòu)

內(nèi)核架構(gòu)分為三種:巨內(nèi)核留夜、微內(nèi)核匙铡、混合內(nèi)核。后面單獨(dú)說XNU內(nèi)核碍粥。

1.巨內(nèi)核

巨內(nèi)核顧名思義鳖眼,就是包含所有的服務(wù),上至內(nèi)存管理嚼摩,下至設(shè)備驅(qū)動(dòng)钦讳,應(yīng)有盡有矿瘦。這是一種很流行的架構(gòu),Linux與UNIX都是采用這種架構(gòu)愿卒。這種方式的內(nèi)核功能實(shí)現(xiàn)都在同一個(gè)地址空間缚去,同時(shí)將這段地址空間映射到每一個(gè)進(jìn)程的內(nèi)存中。例如在Linux中琼开,32位操作系統(tǒng)可尋址的(可使用)內(nèi)存空間為4GB易结,其中1/4都是內(nèi)核。Linux程序的實(shí)例在體現(xiàn)為進(jìn)程柜候,每一個(gè)程序都會(huì)映射成一個(gè)或者多個(gè)進(jìn)程搞动。而每一個(gè)進(jìn)程中,都有一份內(nèi)核內(nèi)存的拷貝渣刷。我們從用戶層面切換到內(nèi)核層面的開銷就會(huì)十分小鹦肿,也就是一次線程切換的開銷。


2.微內(nèi)核

微內(nèi)核把巨內(nèi)核精簡(jiǎn)辅柴,只包括最核心的功能(硬件訪問箩溃、調(diào)度、虛擬內(nèi)存管理)碌识。既然微內(nèi)核存在碾篡,那么必有可取之處。相比巨內(nèi)核筏餐,微內(nèi)核有如下優(yōu)點(diǎn):

  • 正確性(代碼少)
  • 健壯性(崩潰少)
  • 靈活性

雖然它有這么多優(yōu)點(diǎn)开泽,那為什么現(xiàn)在基本沒有操作系統(tǒng)的內(nèi)核架構(gòu)選用微內(nèi)核呢?這主要是因?yàn)樗幸粋€(gè)致命的性能缺點(diǎn)魁瞪。微內(nèi)核的服務(wù)程序之間通信采用消息傳遞機(jī)制(發(fā)送-排隊(duì)-執(zhí)行)穆律,而在內(nèi)核中,消息傳遞需要通過內(nèi)存復(fù)制操作以及數(shù)次上下文切換操作來實(shí)現(xiàn)导俘,這對(duì)性能是一種拖累峦耘。

3.混合內(nèi)核

混合內(nèi)核試圖包含前兩種內(nèi)核好處÷帽。混合內(nèi)核的核心部分支持底層服務(wù)辅髓,就像微內(nèi)核一樣,而其他服務(wù)雖然不在該核心的“微內(nèi)核”中少梁,但是也包含在該核心中洛口,其他服務(wù)可以調(diào)用該核心的“微內(nèi)核”】Γ混合內(nèi)核相比于其他內(nèi)核架構(gòu)第焰,犧牲了微內(nèi)核的健壯性換來巨內(nèi)核一樣的運(yùn)行效率。

4.XNU內(nèi)核



如圖所示XNU內(nèi)核是一個(gè)混合內(nèi)核妨马,它的核心是一個(gè)叫Mach的微內(nèi)核挺举,Mach中也是消息傳遞機(jī)制杀赢,但是它使用的是指針形式傳遞,因?yàn)榇蟛糠址?wù)都在XNU內(nèi)核中湘纵,所以Mach沒有昂貴的復(fù)制操作脂崔,只用指針就可以完成消息傳遞。

用戶態(tài)與內(nèi)核態(tài)

內(nèi)核控制著操作系統(tǒng)最核心的部分瞻佛,為了防止應(yīng)用程序崩潰而導(dǎo)致的內(nèi)核崩潰脱篙,內(nèi)核與應(yīng)用程序之間需要進(jìn)行嚴(yán)格的分離∩吮基于軟件的分離會(huì)產(chǎn)生巨大的開銷,因此現(xiàn)代的操作系統(tǒng)都是依靠硬件來分離文搂。分離的結(jié)果就是用戶態(tài)與內(nèi)核態(tài)适刀。

與電腦的inter處理器不一樣,iphone手機(jī)上的處理器為ARM處理器煤蹭。在ARM處理器中笔喉,提供了一個(gè)特殊的寄存器--當(dāng)前程序狀態(tài)寄存器(CPSR),通過修改CPSR來改變ARM的模式。下表是ARM處理器模式:

模式 用途
USR 用戶模式
SVC 內(nèi)核模式
SYS 系統(tǒng)模式
FIQ 快速中斷請(qǐng)求
IRQ 普通中斷請(qǐng)求
ABT 中止模式
UND 未定義模式

上述一共有7種模式硝皂,除了第一種用戶模式以外常挚,其余6種都可以通過修改CPSR來切換模式。

內(nèi)核態(tài)/用戶態(tài)轉(zhuǎn)換機(jī)制

用戶態(tài)轉(zhuǎn)換成內(nèi)核態(tài)轉(zhuǎn)換機(jī)制有兩種類型:

  • 自愿轉(zhuǎn)換:當(dāng)應(yīng)用程序需要調(diào)用內(nèi)核服務(wù)的時(shí)候稽物,應(yīng)用程序可以通過一個(gè)預(yù)定義的硬件指令開始進(jìn)入內(nèi)核態(tài)的切換奄毡,換句話說這就是系統(tǒng)調(diào)用。
  • 非自愿轉(zhuǎn)換:當(dāng)發(fā)生執(zhí)行異常的時(shí)候贝或,代碼就會(huì)掛起并保留案發(fā)現(xiàn)場(chǎng)吼过。控制權(quán)被轉(zhuǎn)交給預(yù)定義的內(nèi)核態(tài)錯(cuò)誤處理程序或者中斷服務(wù)程序咪奖。

在ARM中盗忱,任何非用戶態(tài)都是通過一個(gè)異常或者中斷進(jìn)入的羊赵。因此系統(tǒng)調(diào)用是利用SVC指令通過模擬的中斷完成的趟佃。當(dāng)這條指令執(zhí)行的時(shí)候,CPU自動(dòng)將控制權(quán)轉(zhuǎn)交給機(jī)器的陷阱向量昧捷,在陷阱向量中有一個(gè)預(yù)定義的內(nèi)核指令正在等待通常是分之跳轉(zhuǎn)到某個(gè)具體處理程序的指令闲昭。

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

當(dāng)用戶態(tài)的程序需要內(nèi)核服務(wù)的時(shí)候,會(huì)發(fā)出一個(gè)系統(tǒng)調(diào)用料身,系統(tǒng)調(diào)用將控制權(quán)轉(zhuǎn)交給內(nèi)核汤纸。在XNU中,系統(tǒng)調(diào)用有四種類別:

  • BSD系統(tǒng)調(diào)用
  • Mach陷阱
  • 機(jī)器相關(guān)調(diào)用
  • 診斷調(diào)用

四種類型的調(diào)用都差不多芹血,它們的函數(shù)原型接受一個(gè)指向狀態(tài)快照的指針贮泞,其中狀態(tài)快照包含了處理器中所有寄存器的導(dǎo)出值楞慈。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市啃擦,隨后出現(xiàn)的幾起案子囊蓝,更是在濱河造成了極大的恐慌,老刑警劉巖令蛉,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件聚霜,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡珠叔,警方通過查閱死者的電腦和手機(jī)蝎宇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來祷安,“玉大人姥芥,你說我怎么就攤上這事』惚蓿” “怎么了凉唐?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)霍骄。 經(jīng)常有香客問我台囱,道長(zhǎng),這世上最難降的妖魔是什么读整? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任簿训,我火速辦了婚禮,結(jié)果婚禮上绘沉,老公的妹妹穿的比我還像新娘煎楣。我一直安慰自己,他們只是感情好车伞,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布择懂。 她就那樣靜靜地躺著,像睡著了一般另玖。 火紅的嫁衣襯著肌膚如雪困曙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天谦去,我揣著相機(jī)與錄音慷丽,去河邊找鬼。 笑死鳄哭,一個(gè)胖子當(dāng)著我的面吹牛要糊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播妆丘,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼锄俄,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼局劲!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起奶赠,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤鱼填,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后毅戈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體苹丸,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年苇经,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赘理。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡塑陵,死狀恐怖感憾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情令花,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布凉倚,位于F島的核電站兼都,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏稽寒。R本人自食惡果不足惜扮碧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望杏糙。 院中可真熱鬧慎王,春花似錦、人聲如沸宏侍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谅河。三九已至咱旱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绷耍,已是汗流浹背吐限。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留褂始,地道東北人诸典。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像崎苗,于是被迫代替她去往敵國(guó)和親狐粱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子舀寓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

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

  • 內(nèi)核架構(gòu) 內(nèi)核的基礎(chǔ)知識(shí) 所有現(xiàn)代的操作系統(tǒng)在設(shè)計(jì)師都包含一個(gè)稱為內(nèi)核(kernel)的組件,是整個(gè)系統(tǒng)的核心脑奠。內(nèi)...
    CoderKo1o閱讀 2,791評(píng)論 1 4
  • 如果你看完書中的所有例子基公,你很可能已經(jīng)做完你的實(shí)驗(yàn)和在已經(jīng)越獄的iPhone上的研究。因?yàn)楹驮S多人一樣宋欺,幾乎所有的...
    fishmai0閱讀 16,098評(píng)論 2 42
  • 虛擬化(Virtualization)這種起源于上世紀(jì)60年代IBM大型機(jī)系統(tǒng)的技術(shù)在處理器性能大幅度提升的當(dāng)下轰豆,...
    古斟布衣閱讀 4,485評(píng)論 0 7
  • 有閨蜜要結(jié)婚了,也讓我狗血的回憶了當(dāng)時(shí)自己結(jié)婚的時(shí)候齿诞。 擺酒什么的酸休,還不如好好拍照秀恩愛。 來幾張我覺得不錯(cuò)的照片...
    小寶尼閱讀 364評(píng)論 0 1
  • 隨著網(wǎng)絡(luò)信息的普遍化和幾乎毫無遺漏的覆蓋化祷杈,知識(shí)信息像大爆炸一樣鋪天蓋地席卷而來斑司,能系統(tǒng)的接收自己看到的信息...
    闌十三閱讀 384評(píng)論 0 11