怎樣向一個外行人解釋操作系統(tǒng)內(nèi)核?去看《黑客帝國》
今年早些時候,我新加入了一個大多數(shù)從事研究社會科學(xué)和政治小組,然后我得向他們介紹一下我目前正在從事的工作。在這大概有10個人的小組中,有一兩個人對內(nèi)核的概念是有一個初步的了解(實(shí)際上因?yàn)樗麄兪枪た茖W(xué)生),但是小組中的其他人卻對內(nèi)核茫然無知—他們等著我給他們說明解釋一下。
那么,對于那些有點(diǎn)基本概念的工科生,首選方法就是打一個有關(guān)于汽車的比方(至少得是男性聽眾)。然而,實(shí)際上你能把汽車上的什么東西來比作內(nèi)核呢?你是不能直接把內(nèi)核比作發(fā)動機(jī),或者底盤,甚至是車輛行駛的道路。當(dāng)你試著去解釋一個內(nèi)核程序員能夠利用操作系統(tǒng)做什么的時候就更糟糕了。在將汽車作為喻體時,內(nèi)核到底是什么呢?一個內(nèi)核程序員并不能直接定義為一個技工。那么,定義為汽車設(shè)計師之類的嗎?經(jīng)過長時間的斷斷續(xù)續(xù)的解釋和遲疑,我試著先向小組中的女孩們解釋,這就像是內(nèi)核開發(fā)者為奔跑的汽車設(shè)計物理定律。很遺憾,她們?nèi)匀徊幌嘈拧?/p>
你有更好地解釋嗎?
《黑客帝國(The Matrix)》于1999年上映的,因此,很快我就對操作系統(tǒng)開始感興趣,最后我還在FreeBSD(一種免費(fèi)的Unix系統(tǒng))項(xiàng)目中成為一名內(nèi)核開發(fā)員。但是同時,我一直學(xué)習(xí)并癡迷于《黑客帝國(The Matrix)》,花費(fèi)了大量的時間。
在二十一世紀(jì)初的某個時候,大概是在03或04年,我寫下了一篇文章,我將《黑客帝國》中人物和他們發(fā)生的事以及它的續(xù)集與一個(虛擬的)操作系統(tǒng)做一個系統(tǒng)的類比。為了將久遠(yuǎn)的這篇文章保存下來,防止內(nèi)容的丟失在被遺忘的服務(wù)器上,就將它遷移到云上,我在下面復(fù)制粘貼了該文章的初始內(nèi)容。提示:你可以將該比喻引申的更遠(yuǎn)。
既然操作系統(tǒng)的設(shè)計,實(shí)現(xiàn)和維護(hù)是我最大的興趣之一,而且我在第一時間就觀看了《黑客帝國》,于是便對電影里的一些概念進(jìn)行了思考,并認(rèn)為它們與操作系統(tǒng)存在某種程度上的相似之處:
Matrix世界:
相當(dāng)于一個正在運(yùn)行的具有用戶空間的操作系統(tǒng)(我們?nèi)祟惥幼〉钠胀ㄊ澜?,?nèi)核(“Matrix”本身))。顯然的,這是一個頗有缺陷的操作系統(tǒng)。。。
民眾:
相當(dāng)于進(jìn)程,包括內(nèi)核進(jìn)程和用戶進(jìn)程。一般進(jìn)程,“非特權(quán)”進(jìn)程和具有root權(quán)限的后臺進(jìn)程(“特工”)還是有很大的區(qū)別。具有root權(quán)限的后臺進(jìn)程可以使用特權(quán)端口,銷毀隨機(jī)進(jìn)程,管理內(nèi)存等等。
Matrix:
相當(dāng)于內(nèi)核。它看上去是基于消息傳遞的內(nèi)核結(jié)構(gòu),而并非是微內(nèi)核結(jié)構(gòu)(盡管它們具有微內(nèi)核的某些部分,比如擁有大量內(nèi)核進(jìn)程,進(jìn)程之間都是嚴(yán)格獨(dú)立的,以及已提到的消息傳遞機(jī)制)。內(nèi)核管理所有的進(jìn)程,以及進(jìn)程上的操作(比如保持進(jìn)程活躍,為進(jìn)程服務(wù),回收進(jìn)程)。但是這仍有一個明顯的安全缺陷:某些用戶進(jìn)程能夠?qū)⑺鼈兊牟糠执a傳送到內(nèi)核空間并執(zhí)行(因?yàn)橐粋€bug)。只有某些系統(tǒng)調(diào)用受到影響(類似于 ”phones”),這種擴(kuò)大了的特權(quán)篡改了用戶進(jìn)程的返回棧,因此,如果該進(jìn)程接收到一個信號,它會產(chǎn)生段錯誤并被作為垃圾回收(你如果在Matrix中被殺掉的話,那么你就真的死掉了)。
先知(Oracle):
相當(dāng)于進(jìn)程(任務(wù))調(diào)度器。擁有處理監(jiān)聽(資源利用率)的所有數(shù)據(jù)以及提前(這很顯然)知道怎樣對它們進(jìn)行最優(yōu)調(diào)度。
特工(Agents):
相當(dāng)于系統(tǒng)監(jiān)控/入侵防護(hù)/具有啟發(fā)式操作的防護(hù)系統(tǒng)(IDS(入侵檢測系統(tǒng))/IPS(信息處理系統(tǒng)))。它們中絕大多數(shù)都有一個內(nèi)核部分(或內(nèi)核模塊)但基本上卻是那些具有超級用戶特權(quán)的后臺進(jìn)程在用戶空間運(yùn)行。它們的職責(zé)是發(fā)現(xiàn)試圖入侵系統(tǒng)安全的進(jìn)程并銷毀掉。
列車員:
相當(dāng)于內(nèi)核和用戶空間的網(wǎng)關(guān)/信息傳遞隊列。你如果想要合法地在用戶空間和內(nèi)核進(jìn)行數(shù)據(jù)傳遞必須通過這里來進(jìn)行。當(dāng)然,你也可能永遠(yuǎn)被困在排隊隊列中。
邪惡宗師—梅羅紋奇(Merovingian):
相當(dāng)于網(wǎng)絡(luò)/IPC(進(jìn)程間通信)棧。它的職責(zé)是掌握進(jìn)程之間都發(fā)生了什么。輸入/輸出數(shù)據(jù)的一個偶然錯誤將以一個bug的形式表現(xiàn)出來。
“鬼魅”(Ghost):
相當(dāng)于老版本API/KPI的兼容器。由于歷史原因,這些代碼并不完善,但與某些內(nèi)核進(jìn)程相連的代碼卻不應(yīng)該不完整。
“建筑師”(Architect):
相當(dāng)于硬件上的內(nèi)核監(jiān)控(管理者),負(fù)責(zé)監(jiān)控進(jìn)程,銷毀那些“畸形”進(jìn)程并對銷毀的進(jìn)程進(jìn)行重啟。由于它是一個實(shí)時的具有高度可靠性的系統(tǒng),在硬件上進(jìn)行調(diào)試和監(jiān)控顯然具有最高的優(yōu)先級,而且還絕對是可靠的(因此,為了降低出錯的可能性,也降低它的復(fù)雜性)。由于它頻繁地進(jìn)行可用性檢查,造成了過度的錯誤配置,消耗了太多的資源,因此影響到了操作系統(tǒng)的正常運(yùn)作。
關(guān)鍵人物—制鑰者:
相當(dāng)于安全/特權(quán)子系統(tǒng)。它很穩(wěn)定,但不幸的是需要依賴不完善的VM(虛擬內(nèi)存)系統(tǒng)和IPC系統(tǒng),因此它可被進(jìn)程利用來獲取更多的特權(quán)。
Matrix系統(tǒng)設(shè)計:
在系統(tǒng)高度負(fù)載的情況下(大量的進(jìn)程,頻繁的內(nèi)存讀寫),VM(虛擬內(nèi)存)系統(tǒng),進(jìn)程管理系統(tǒng)和調(diào)度器之間有一個設(shè)計缺陷。這是一個復(fù)合錯誤,至少會導(dǎo)致三種問題的產(chǎn)生:1、內(nèi)存頁被破壞或者內(nèi)存頁分配給那些不屬于它們的進(jìn)程。由于內(nèi)核和用戶空間共享虛擬內(nèi)存,為了防止敏感數(shù)據(jù)的暴露,提高安全性,任何一方的進(jìn)程都可以因?yàn)榈玫搅硪环降膬?nèi)存頁而被銷毀。2、進(jìn)程間通信,這是非常糟糕的,甚至比進(jìn)程的數(shù)據(jù)結(jié)構(gòu)被破壞或者內(nèi)存裝載太頻繁而造成死鎖,而不得不等待緩沖區(qū)還要糟糕。3、系統(tǒng)監(jiān)控變得不穩(wěn)定,循環(huán)地銷毀和重啟進(jìn)程,察覺不到這樣的操作會額外增加內(nèi)存和進(jìn)程的負(fù)擔(dān)而變得更糟糕,最后極大地增長了進(jìn)程間虛擬內(nèi)存頁被破壞的速度。
史密斯特工:
相當(dāng)于有特權(quán)的IPC后臺程序,具有部分內(nèi)核模塊功能。它與內(nèi)核模塊關(guān)系密切,且能夠不通過完整性檢查而與內(nèi)核共享數(shù)據(jù)結(jié)構(gòu)。一旦它被另一個特權(quán)進(jìn)程銷毀掉,它也能藏身于一個系統(tǒng)調(diào)用中間以便于監(jiān)控者重啟它,此時它的進(jìn)程描述符也被破壞,這樣使得它的大部分程序代碼將在內(nèi)核中執(zhí)行。它將繼續(xù)以這種受損狀態(tài)長時間工作,鍥入到一個循環(huán)中,并將進(jìn)程錯誤地標(biāo)記為安全漏洞,同時重寫它的某些內(nèi)存頁。
尼奧(Neo):
最初是一個用戶空間的網(wǎng)絡(luò)服務(wù)進(jìn)程,虛擬內(nèi)存的損壞導(dǎo)致它被賦予了超級用戶的特權(quán)以及具有CPU高優(yōu)先級。最后它得到可執(zhí)行的內(nèi)存頁與IDS進(jìn)程Simth的混合,但卻不是數(shù)據(jù)頁。很快它也開始銷毀進(jìn)程,包括Smith和它自己被損壞的部分。
結(jié)局:
最后Smith進(jìn)程試圖殺死調(diào)度者進(jìn)程,但由于他本是也是通過該調(diào)度者調(diào)度的,他并不能這么做。系統(tǒng)變得畸形是因?yàn)檎{(diào)度者不能再執(zhí)行任務(wù),包括中斷服務(wù),但是在調(diào)度者的虛擬內(nèi)存鏡像(同樣該鏡像也偶然地與Neo進(jìn)程進(jìn)行了部分共享)里的部分Smith代碼卻仍然可以執(zhí)行。由于只有兩個進(jìn)程可以運(yùn)行,他們都想殺掉對方。與此同時,由于沒有中斷服務(wù),硬件的監(jiān)視時鐘別喚醒,它插入了一個NMI(不可屏蔽的中斷),這樣就又喚醒了監(jiān)控系統(tǒng)。這就使得系統(tǒng)處于臨界狀態(tài)并開始?xì)⒌羲械倪M(jìn)程,然后重啟被殺掉的進(jìn)程來使系統(tǒng)再次啟動。結(jié)束!
分析總結(jié)
在操作系統(tǒng)的設(shè)計時候有一個內(nèi)在的缺陷,特別是在虛擬內(nèi)存,進(jìn)程間通信和監(jiān)控子系統(tǒng)這幾方面,這將導(dǎo)致進(jìn)程間的全局內(nèi)存被破壞以及在少量進(jìn)程的地址空間產(chǎn)生致命的缺陷。
建議:
要保證適宜的進(jìn)程優(yōu)先級,必須進(jìn)行更多的微調(diào),減少優(yōu)先級反轉(zhuǎn)和失衡。很可能要重寫虛擬內(nèi)存系統(tǒng),開發(fā)消耗更少資源的版本來取代IDS系統(tǒng)。如果系統(tǒng)負(fù)載處于某個閥值之上,系統(tǒng)監(jiān)視器必須要進(jìn)行修正,而不會再啟動大量的操作。
好了,這就是一篇有關(guān)The Matrix且不涉及任何形式“自由意志”的闡述。
原文鏈接:http://www.techug.com/jul-how-do-the-matrix-as-an-operating-system