虛擬還是真實?『黑客帝國』帶你進入瘋狂的矩陣世界

Editor發表於2018-12-04

最近天氣越來越冷了,非常適合下了班後,宅在被窩裡,來觀看一部好電影。今天就為大家推薦一部程式設計師們非常值得一看的電影——《黑客帝國》。


第一次遇見《黑客帝國》是看到它狂拽酷炫的海報,但提到黑客帝國,相信大多數看過電影的人都對電影中那個經典的“子彈飛”場景,過目不忘。


虛擬還是真實?『黑客帝國』帶你進入瘋狂的矩陣世界


這是一部科幻電影的經典作品,充滿了哲學、宗教、科技、武打、槍戰等諸多元素,當裡面的主角各個身穿黑客大衣,戴著黑色墨鏡,用乾淨利落的中國功夫過招時,實在是令人歎為觀止!


電影中用到的視覺特效,更是讓人連連驚呼:居然1999年就能拍出這麼牛的片子了嗎?虛擬還是真實?『黑客帝國』帶你進入瘋狂的矩陣世界


更加難得的是,除了華麗的特效,電影中還有極其深刻的科幻思考,引發了巨大的轟動。


虛擬還是真實?『黑客帝國』帶你進入瘋狂的矩陣世界


《黑客帝國》一共有三部,講述了一名在矩陣中生活的網路黑客尼奧(Neo)發現看似正常的現實世界實際上是由一個名為“矩陣”的計算機人工智慧系統控制的,並在一名神祕女郎崔妮蒂的引導下見到了黑客組織的首領墨菲斯。尼奧在墨菲斯的指引下,回到了真正的現實中,逃離了矩陣,三人走上了抗爭矩陣征途的故事。



What is Matrix?



《黑客帝國》的英文名為“The Matrix”。


Matrix在英文中最為常見的兩個釋義,一個為“發源地”,而另一個為“矩陣”。


虛擬還是真實?『黑客帝國』帶你進入瘋狂的矩陣世界


在電影中,Matrix是一套複雜的模擬系統程式,它是由具有人工智慧的機器建立的,模擬了人類以前的世界,連線著無數人的意識,系統分配給他們不同的角色,就像電腦遊戲中的角色扮演一樣,用以控制人類。


Matrix不僅是一個虛擬程式,也是一個實際存在的地方。在這裡,人類的身體被放在一個盛滿營養液的器皿中,身上插滿了各種插頭以接受電腦系統的感官刺激訊號。


虛擬還是真實?『黑客帝國』帶你進入瘋狂的矩陣世界


人類就依靠這些訊號,生活在一個完全虛擬的電腦幻景中。機器用這樣的方式佔領了人類的思維空間,用人類的身體作為電池以維持自己的執行。人類通過這種聯網的虛擬生活來維持自身的生存需要,只是他們沒有選擇角色的權利和意識。


在Matrix中出現的人物,都可以看做是具有人類意識特徵的程式。這些程式根據所附著的載體不同有三類:一類是附著在生物載體上的,就是在矩陣中生活的普通人;一類是附著在電腦晶片上的,就是具有人工智慧的機器,這些載體通過硬體與Matrix連線;而另一類則是自由程式,它沒有載體,再諸如特工、先知、建築師、梅羅文加、火車人等。


Matrix中的智慧程式,也就是先知的角色,發現在系統中有1%的人由於自主意識過強,不能相容系統分配的角色,如果對他們不進行控制就會導致系統的不穩定,進而導致系統崩潰。因此編寫Matrix的智慧程式,也就是建築師製造了“救世主”,讓他有部分自主意識,併成為覺醒人類的領袖,帶領他們建造了錫安。



The Matrix as an Operating System



這一次,讓我們一起來嘗試將Matrix看做一個作業系統來理解。


The Matrix World:


整個矩陣世界,相當於一個正在執行的具有使用者空間的作業系統(我們人類居住的普通世界)。顯然的,這是一個頗有缺陷的作業系統。


People:


居住在Matrix中的人類,則相當於程式,包括核心程式和使用者程式。一般程式,“非特權”程式和具有root許可權的後臺程式(“特工”)還是有很大的區別。具有root許可權的後臺程式可以使用特權埠,銷燬隨機程式,管理記憶體等等。


Matrix:


相當於核心。它看上去是基於訊息傳遞的核心結構,不一定是微核心結構(儘管它們具有微核心的某些部分,比如擁有大量核心程式,程式之間都是嚴格獨立的,以及已提到的訊息傳遞機制)。


核心管理所有的程式,以及程式上的操作(比如保持程式活躍,為程式服務,回收程式)。但是這仍有一個明顯的安全缺陷:某些使用者程式能夠將它們的部分程式碼傳送到核心空間並執行(因為一個bug)。


只有某些系統呼叫受到影響(類似於 “phones”),這種擴大了的特權篡改了使用者程式的返回棧,因此,如果該程式接收到一個訊號,它會產生段錯誤並被作為垃圾回收(你如果在Matrix中被殺掉的話,那麼你就真的死掉了)。



虛擬還是真實?『黑客帝國』帶你進入瘋狂的矩陣世界

The Architect:


相當於硬體上的核心監控(管理者),負責監控程式,銷燬那些“畸形”程式並對銷燬的程式進行重啟。由於它是一個實時的具有高度可靠性的系統,在硬體上進行除錯和監控顯然具有最高的優先順序,而且還絕對是可靠的(因此,為了降低出錯的可能性,也降低它的複雜性)。


由於它頻繁地進行可用性檢查,造成了過度的錯誤配置,消耗了太多的資源,因此影響到了作業系統的正常運作。



虛擬還是真實?『黑客帝國』帶你進入瘋狂的矩陣世界


Oracle:


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



虛擬還是真實?『黑客帝國』帶你進入瘋狂的矩陣世界


Agents:


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



虛擬還是真實?『黑客帝國』帶你進入瘋狂的矩陣世界


The Trainman:


相當於核心和使用者空間的閘道器/資訊傳遞佇列。你如果想要合法地在使用者空間和核心進行資料傳遞必須通過這裡來進行。當然,你也可能永遠被困在排隊佇列中。

 

虛擬還是真實?『黑客帝國』帶你進入瘋狂的矩陣世界


The Merovingian:


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



虛擬還是真實?『黑客帝國』帶你進入瘋狂的矩陣世界


Vampires/ghosts:


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



虛擬還是真實?『黑客帝國』帶你進入瘋狂的矩陣世界


Keymaster:


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



虛擬還是真實?『黑客帝國』帶你進入瘋狂的矩陣世界


Agent Smith:


相當於有特權的IPC後臺程式,具有部分核心模組功能。它與核心模組關係密切,且能夠不通過完整性檢查而與核心共享資料結構。


一旦它被另一個特權程式銷燬掉,它也能藏身於一個系統呼叫中間以便於監控者重啟它,此時它的程式描述符也被破壞,這樣使得它的大部分程式程式碼將在核心中執行。


它將繼續以這種受損狀態長時間工作,鍥入到一個迴圈中,並將程式錯誤地標記為安全漏洞,同時重寫它的某些記憶體頁。


電影中的特工史密斯實際上就是矩陣這個程式世界中的防毒程式,他們在矩陣中是沒有身體的,由於他們是防毒程式,所以他們被矩陣賦予了超越常人的能力。在矩陣中他們具有改寫人類角色程式的能力,所以可以不斷借用他人身體。


尼奧最後可以戰勝特工,實際上是因為他復活後具有了識別矩陣程式碼的能力,並可以輕鬆改寫這些程式碼,所以特工就不能再利用超能力戰勝他了。


特工史密斯被尼奧消滅後,因為在他被尼奧消滅前明明是他先殺死了尼奧,所以這就導致了一個邏輯錯誤。因為這種程式上的邏輯運算錯誤,導致了特工史密斯不但拒絕被系統刪除,而且由防毒程式變成了病毒,最後危害到了整個矩陣世界。


因為這個邏輯錯誤是由尼奧導致的,所以特工史密斯就變成了和尼奧相對的負極。最後尼奧選擇了讓史密斯感染自己,在複製過程中矩陣掌握了史密斯的程式碼,最後才得以將他們兩個同時刪除,使矩陣回到了平衡。



虛擬還是真實?『黑客帝國』帶你進入瘋狂的矩陣世界


Neo:


最初是一個使用者空間的網路服務程式,虛擬記憶體的損壞導致它被賦予了超級使用者的特權以及具有CPU高優先順序。最後它得到可執行的記憶體頁與IDS程式Smith的混合,但卻不是資料頁。很快它也開始銷燬程式,包括Smith和它自己被損壞的部分。



The Plot:


在系統高度負載的情況下(大量的程式,頻繁的記憶體讀寫),VM(虛擬記憶體)系統,程式管理系統和排程器之間有一個設計缺陷。這是一個複合錯誤,至少會導致三種問題的產生:


1、記憶體頁被破壞或者記憶體頁分配給那些不屬於它們的程式。由於核心和使用者空間共享虛擬記憶體,為了防止敏感資料的暴露,提高安全性,任何一方的程式都可以因為得到另一方的記憶體頁而被銷燬。


2、程式間通訊,這是非常糟糕的,甚至比程式的資料結構被破壞或者記憶體裝載太頻繁而造成死鎖,而不得不等待緩衝區還要糟糕。


3、系統監控變得不穩定,迴圈地銷燬和重啟程式,察覺不到這樣的操作會額外增加記憶體和程式的負擔而變得更糟糕,最後極大地增長了程式間虛擬記憶體頁被破壞的速度。



The Ending:


虛擬還是真實?『黑客帝國』帶你進入瘋狂的矩陣世界


最後Smith程式試圖殺死排程者程式,但由於他本身也是通過該排程者排程的,他並不能這麼做。系統變得畸形是因為排程者不能再執行任務,包括中斷服務,但是在排程者的虛擬記憶體映象(同樣該映象也偶然地與尼奧程式進行了部分共享)裡的部分Smith程式碼卻仍然可以執行。


由於只有兩個程式可以執行,他們都想殺掉對方。與此同時,由於沒有中斷服務,硬體的監視時鐘別喚醒,它插入了一個NMI(不可遮蔽的中斷),這樣就又喚醒了監控系統。這就使得系統處於臨界狀態並開始殺掉所有的程式,然後重啟被殺掉的程式來使系統再次啟動。


結束!

 


關於《黑客帝國》的講解視角多種多樣,你還有更多的視角與我們分享嗎?


 

參考來源:

  • Arrow of Time
  • 第10放映室


更多閱讀:

相關文章