糯米文學吧

位置:首頁 > 計算機 > 操作系統

如何向外行解釋操作系統內核

如何向外行解釋操作系統內核呢?看看下面本站小編收集的相關內容,歡迎閲讀!

如何向外行解釋操作系統內核

既然操作系統的設計,實現和維護是我最大的興趣之一,而且我在第一時間就觀看了《黑客帝國》,於是便對電影裏的一些概念進行了思考,並認為它們與操作系統存在某種程度上的相似之處:

  The Matrix World:

相當於一個正在運行的具有用户空間的操作系統(我們人類居住的普通世界,內核(“Matrix”本身))。顯然的,這是一個頗有缺陷的操作系統。

  People:

相當於進程,包括內核進程和用户進程。一般進程,“非特權”進程和具有root權限的後台進程(“特工”)還是有很大的區別。具有root權限的後台進程可以使用特權端口,銷燬隨機進程,管理內存等等。

  Matrix:

相當於內核。它看上去是基於消息傳遞的內核結構,不一定是微內核結構(儘管它們具有微內核的某些部分,比如擁有大量內核進程,進程之間都是嚴格獨立的,以及已提到的消息傳遞機制)。內核管理所有的進程,以及進程上的操作(比如保持進程活躍,為進程服務,回收進程)。但是這仍有一個明顯的安全缺陷:某些用户進程能夠將它們的部分代碼傳送到內核空間並執行(因為一個bug)。只有某些系統調用受到影響(類似於 “phones”),這種擴大了的特權篡改了用户進程的返回棧,因此,如果該進程接收到一個信號,它會產生段錯誤並被作為垃圾回收(你如果在Matrix中被殺掉的話,那麼你就真的死掉了)。

  Oracle:

相當於進程(任務)調度器。擁有處理監聽(資源利用率)的所有數據以及提前(這很顯然)知道怎樣對它們進行最優調度。

  Agents:

相當於系統監控/入侵防護/具有啟發式操作的防護系統(IDS(入侵檢測系統)/IPS(信息處理系統))。它們中絕大多數都有一個內核部分(或內核模塊)但基本上卻是那些具有超級用户特權的後台進程在用户空間運行。它們的職責是發現試圖入侵系統安全的進程並銷燬掉。

  The trainman:

相當於內核和用户空間的網關/信息傳遞隊列。你如果想要合法地在用户空間和內核進行數據傳遞必須通過這裏來進行。當然,你也可能永遠被困在排隊隊列中。

  The Merovingian:

相當於網絡/IPC(進程間通信)棧。它的職責是掌握進程之間都發生了什麼。輸入/輸出數據的一個偶然錯誤將以一個bug的形式表現出來。

  Vampires/ghosts:

相當於老版本API/KPI的兼容器。由於歷史原因,這些代碼並不完善,但與某些內核進程相連的代碼卻不應該不完整。

  The Architect:

相當於硬件上的.內核監控(管理者),負責監控進程,銷燬那些“畸形”進程並對銷燬的進程進行重啟。由於它是一個實時的具有高度可靠性的系統,在硬件上進行調試和監控顯然具有最高的優先級,而且還絕對是可靠的(因此,為了降低出錯的可能性,也降低它的複雜性)。由於它頻繁地進行可用性檢查,造成了過度的錯誤配置,消耗了太多的資源,因此影響到了操作系統的正常運作。

  Keymaster:

相當於安全/特權子系統。它很穩定,但不幸的是需要依賴不完善的VM(虛擬內存)系統和IPC系統,因此它可被進程利用來獲取更多的特權。

  The Plot:

在系統高度負載的情況下(大量的進程,頻繁的內存讀寫),VM(虛擬內存)系統,進程管理系統和調度器之間有一個設計缺陷。這是一個複合錯誤,至少會導致三種問題的產生:1、內存頁被破壞或者內存頁分配給那些不屬於它們的進程。由於內核和用户空間共享虛擬內存,為了防止敏感數據的暴露,提高安全性,任何一方的進程都可以因為得到另一方的內存頁而被銷燬。2、進程間通信,這是非常糟糕的,甚至比進程的數據結構被破壞或者內存裝載太頻繁而造成死鎖,而不得不等待緩衝區還要糟糕。3、系統監控變得不穩定,循環地銷燬和重啟進程,察覺不到這樣的操作會額外增加內存和進程的負擔而變得更糟糕,最後極大地增長了進程間虛擬內存頁被破壞的速度。

  Agent Smith:

相當於有特權的IPC後台程序,具有部分內核模塊功能。它與內核模塊關係密切,且能夠不通過完整性檢查而與內核共享數據結構。一旦它被另一個特權進程銷燬掉,它也能藏身於一個系統調用中間以便於監控者重啟它,此時它的進程描述符也被破壞,這樣使得它的大部分程序代碼將在內核中執行。它將繼續以這種受損狀態長時間工作,鍥入到一個循環中,並將進程錯誤地標記為安全漏洞,同時重寫它的某些內存頁。

  Neo:

最初是一個用户空間的網絡服務進程,虛擬內存的損壞導致它被賦予了超級用户的特權以及具有CPU高優先級。最後它得到可執行的內存頁與IDS進程Simth的混合,但卻不是數據頁。很快它也開始銷燬進程,包括Smith和它自己被損壞的部分。

  The Ending:

最後Smith進程試圖殺死調度者進程,但由於他本是也是通過該調度者調度的,他並不能這麼做。系統變得畸形是因為調度者不能再執行任務,包括中斷服務,但是在調度者的虛擬內存鏡像(同樣該鏡像也偶然地與Neo進程進行了部分共享)裏的部分Smith代碼卻仍然可以執行。由於只有兩個進程可以運行,他們都想殺掉對方。與此同時,由於沒有中斷服務,硬件的監視時鐘別喚醒,它插入了一個NMI(不可屏蔽的中斷),這樣就又喚醒了監控系統。這就使得系統處於臨界狀態並開始殺掉所有的進程,然後重啟被殺掉的進程來使系統再次啟動。結束!

  事後分析:

在操作系統的設計時候有一個內在的缺陷,特別是在虛擬內存,進程間通信和監控子系統這幾方面,這將導致進程間的全局內存被破壞以及在少量進程的地址空間產生致命的缺陷。

  建議:

要保證適宜的進程優先級,必須進行更多的微調,減少優先級反轉和失衡。很可能要重寫虛擬內存系統,開發消耗更少資源的版本來取代IDS系統。如果系統負載處於某個閥值之上,系統監視器必須要進行修正,而不會再啟動大量的操作。