Linux內核學習總結

 Linux內核是一個提供硬件抽象層、文件系統管理、多任務管理等功能的系統軟件,主要模塊包括:CPU和進程管理、存儲管理、文件系統、設備管理和驅動、網絡通信、系統調用等。而本課程主要聚焦在CPU和進程管理模塊,幫助我們理解程序在Linux系統中是如何運行、切換和調度的,以及進程調度與系統調用的關係。

 

一、課程內容總覽

    計算機程序的執行中,一個非常重要的概念就是函數調用堆棧,博文通過彙編代碼,理解程序在計算機中是如何運行的通過一段彙編程序,分析了函數調用過程中,函數調用堆棧的變化過程,以此來理解一段單獨的計算機程序是如何實現在馮-諾依曼體系的計算機上運行的。

    說到底,程序的執行過程就是CPU中的寄存器和內存中的數據變化的過程,而程序的切換,最關鍵的工作就是實現程序執行現場的保存和恢復,而所謂的現場,說的更具體一點就是CPU中的各個寄存器的值。寄存器值的保存和恢復,依然離不開棧這種數據結構的支持。博文時間片輪轉多道程序系統內核的簡單實現和代碼分析 實現了一個非常簡單的時間片輪轉的小內核,在這個例子中,我們只對CPU的EIP和ESP寄存器的值做了保存和恢復,但是確實可以實現對幾個簡單的可以抽象成進程的函數的輪轉調入,也以此來演示一個最簡單的進程調度內核的實現方法。

    有了前兩個的基礎,我們就可以對計算機程序和操作系統內核的工作原理有一個比較具體的理解了,只是Linux內核做的更加精細,更加複雜,提供的功能也更加強大而已。博文Linux內核啓動過程分析就詳細列出了一個成熟的Linux內核在啓動時做的各種工作。同時也交代了進一步調試和學習Linux內核的基本技能。

    我們的計算機軟件可以分成兩個層次,一個是面向用戶的應用軟件,另一個就是叫做操作系統的系統軟件。應用軟件需要系統軟件提供的功能來完成指定的功能。也可以這麼理解:系統軟件是對硬件設備的抽象,把計算機硬件提供的計算能力抽象成了一個標準化的抽象的計算機,這個抽象的計算機能提供一些標準的計算功能;而應用軟件是把這些標準計算功能進一步抽象和組織,翻譯成人類更容易理解的輸入和輸出。而應用軟件請求系統軟件計算能力的途徑就是通過系統調用。兩篇博文Linux系統調用初探Linux系統調用中斷處理過程可以幫助我們理解操作系統是如何通過系統調用爲應用層軟件服務的。同時系統調用也是重要的系統進行進程切換的時機,上面博文中也有介紹和解釋。

    Linux操作系統是一個多任務操作系統,也就是說多個不同的程序可以同時在一個操作系統上運行,在只有一個CPU的計算機上,宏觀上的同時執行的多個程序,在微觀上其實是輪換的在CPU上執行的。那麼多個程序是如何被啓動的,又是如何互相切換的,這就請參考下面三篇博文 Linux新進程創建處理過程execve系統調用處理過程,以及 Linux中的進程調度與進程切換

 

二、總結

    Linux內核是一個非常複雜和精巧的系統軟件,短短8周的課程只能涵蓋他非常小的一小部分,而總結起來,就是CPU和進程管理的部分,而這也是和最終用戶接觸最多的部分,因爲直觀上,我們使用計算機,就是使用的在計算機中運行的各種軟件,也就是操作系統看到的多個進程。這個課程使我對新進程的創建、進程的切換過程有個更加具體的理解,對底層的運行過程更加清晰了。

    如果說有什麼遺憾,就是有點可惜,可惜我上學的時候還沒出現MOOC這麼個東西,現在工作了,時間非常不好控制,對課程的學習不夠深入,實驗做的不夠多,對系統執行過程追蹤的不夠細。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章