標籤:

內存戰爭

TK教主是一個自學能力非常強的人,其不僅在信息安全領域有很深的造詣,同時還是一名優秀的段子手,在微博、知乎等平台有眾多粉絲。TK 教主曾經做過一個分享叫做「內存戰爭20年」,在我沒有學習操作系統和彙編時,對於內存的認識並不深刻,還有一個原因是平時寫的C 語言程序太少。而這一周又重新讀了「Linux 內核設計的藝術」這一本書,對於內存的理解又加深。Linux 操作系統的內核在開機啟動階段就載入到內存中,在載入過程中,做了很多初始化工作,設備初始化,中斷表初始化等。同時以分頁的方式對內存進行管理,通過緩衝區與外設進行交互。內核佔用的內存空間與用戶進程佔有的內存空間是隔離的,用戶進程需要通過系統調用的方式與內核進行交互,而系統調用實際上是一種軟中斷,對應的還有硬中斷,即硬體中斷,比如鍵盤、滑鼠事件等。CPU 通過CS:IP 的方式確定下一條指令的位置,即指令在內存中的位置。內核裡面的許多函數,有文件操作函數,硬體管理函數,網路系統函數,內存管理函數,進程調度函數,中斷處理函數等,這些函數在操作系統啟動的初始階段即已經載入到內存中,且長駐內存,等待用戶程序通過系統調用的方式調用它。可以說,他們是大部分是比較被動的。

CPU 的運行級別有四個,分別為Ring0-Ring3, 其中Ring0為特權級,而Ring0為用戶級。內核程序,由於其需要直接與網路設備、硬碟等硬體直接打交道,所以運行於是Ring0級。 級別越低,意味著許可權越大,但是許可權越大,危險也就越大,一個不小心的操作就有可能導致系統死機。現代CPU是基於時間片來操作,本質上,同一時間裡,只有一個程序在執行。當用戶程序通過系統調用的方式進行內核時,此時CS:IP指向內核程序對應的彙編指令,同時,將eFlag寄存器的一個標誌位進行設置,意味著CPU 進入了Ring0級別。但實際情況我們的操作系統上似乎有多個程序在同時執行,比如一邊寫作一邊播放音樂。這種情況應該如何解釋呢?

學習計算機需要分層次考慮問題。比如,學習彙編語言時,就要從CPU 的角度去考慮問題,各種寄存器分別有什麼作用,存儲的都是哪一些數據。學習操作系統時,就像一個大家庭的家長一樣考慮問題,操作系統的功能應該有文件管理、進程管理、內存管理、設備管理等。操作系統的內核包含的哪一些全局變數,這些全局變數是什麼,在哪一些時間變初始化的,系統在運行時,哪一些函數會改變這些全局變數的值等。關鍵的數據結構有哪一些,這些數據結構是如何被始終化的。

我從2015年開始打羽毛球,在不斷地與朋友的交流中,我覺得基礎是非常關鍵的。在業餘愛好者當中,羽毛球打得好的人,並不是他的運動天賦有多超群,而是他們的基礎非常紮實。我想這個道理也同樣適用於計算機行業,要想在計算機這一條路上有所成就,我想我應該好好打打基礎。
推薦閱讀:

80286 任務狀態段與任務切換
為什麼說阿里巴巴和Google終有一戰?
網路安全法執行在即 國產操作系統引業界關注
你為什麼不買正版操作系統和軟體?
YunOS 2016年要實現1億目標,是在做夢嗎?

TAG:操作系统 |