Linux核心分析 Linux核心學習總結

2021-07-11 08:49:11 字數 2172 閱讀 8208

這學期選了孟老師的《linux核心分析》這門課,在學習之前聽說這門課很難,通過也不是很容易,但我還是選了這門課。課程不容易學,含金量才會大,才會有收穫。現在,學習這門課已經兩個月了,我的收穫很大,特別是以前接觸《計算機組成原理》,《作業系統》這兩門課時遇到的很難理解的地方,通過孟老師的linux核心講解,使我對以前的盲點有了豁然開朗的感覺。我感覺孟老師開始的網上課堂很不錯,有種另闢蹊徑的感覺,課程內容上傳到雲課堂上,一方面可以節約課堂上講授時間,將更多的時間放在答疑方面,另一方面通過新型的授課方式,方便學生課後溫習、回顧、吸收、理解。

通過這兩個多月的學習,我掌握了linux核心在計算機底層工作過程中的具體作用,掌握了程序排程,程序切換的原理,特別是程序在切換過程中需要從使用者態切換到核心態,通過呼叫核心函式來完成程序切換的過程。對於多工的情況,linux核心會通過do_fork()來完成子程序的建立,如下:

這部分主要是通過理解反彙編c**,生成匯程式設計序,深入**底層了解程式的在計算機中的執行過程。掌握計算機的基本體系結構。了解計算機的基本原理是儲存程式和程式控制。當計算機在執行時,先從記憶體中取出第一條指令,通過控制器的解碼,按指令的要求,從儲存器中取出資料進行指定的運算和邏輯操作等加工,然後再按位址把結果送到記憶體中去。接下來,再取出第二條指令,在控制器的指揮下完成規定操作。依此進行下去。直至遇到停止指令。

彙編**的執行,都是每次一條指令一條指令的執行。暫存器eip中儲存下一條將要執行指令的起始位址,ebp指向棧開始位址,esp執行棧頂位址。累加暫存器用來儲存運算過程中產生的臨時變數。整個**執行過程,就是取一條指令,執行完這條指令再取下一條指令。

這部分主要是熟練程序排程的原理過程,掌握linux核心的工作原理。決定程序是否要進行排程是由my_time_handler決定的,這個函式是設定時間片大小的函式,當時間片用完之後,程序便開始排程;而且這個函式還決定著程序上下文切換的的設定:

這部分主要是熟練start_kernel的原理過程,掌握linux核心的工作原理。掌握核心程序的init()過程中是怎麼呼叫的。通過對start_kernel的源**分析,體會程序在切換過程中作業系統對程序執行環境的管理。事實上有時候我們可以把它叫做執行框架,也可以說是上下文,現場環境等等。

實際上這些東西指的都是程式執行時候的堆疊,執行記憶體空間的位址,暫存器值的集合。中斷上下文和程序上下文的切換是作業系統的「兩把劍」,熟練掌握和理解中斷上下文和程序上下文,我們才能充分理解linux核心原始碼中程序排程的原理,才能為後續學習linux作業系統做好基礎準備。

中斷處理過程:

這部分內容主要是掌握系統呼叫具體步驟:

程式呼叫庫的封裝函式;

呼叫軟中斷int $0x80進入核心;

在核心中首先執行system_call()函式,接著根據系統呼叫號在系統呼叫表中查詢到對應的系統呼叫服務例程;執行該服務例程;執行完畢後,轉入ret_from_sys_call例程,從系統呼叫返回。

這部分內容主要是理解fork()函式建立乙個子程序的過程:

首先是fork()函式執行系統呼叫,呼叫system_call();

system_call進而根據程序呼叫號找到sys_fork()函式所在的位置;

進而執行sys_fork()函式;

之後,sys_fork()函式開始呼叫do_fork()函式,do_frok()函式位於fork.c檔案中,它完成了子程序建立的大部分工作;

最後do_fork()函式呼叫copy_process()函式,copy_process()函式完成了很多任務作,比如,為新程序分配核心堆疊,檢查程序數目是否超限,區分父、子程序,獲取子程序pid等操作。

這部分內容主要是理解linux核心裝載乙個可執行程式的過程:

首先建立新程序;

該程序通過execve()系統呼叫執行指定的elf檔案;

再呼叫execve()系統呼叫對應的核心的入口函式sys_execve();

sys_execve()服務例程修改當前程序的執行上下文。

這部分內容是linux內核心分析階段的重中之重,主要內容有程序切換、任務切換、上下文切換;上面的程序排程時機的分析,可見,在程序完成排程過程中,有三個部分是很重要的:schedule(),context_switch(),switch_to()。其中:

學習《linux核心分析》這門課,使得今後在學習或工作中,可以更好地幫助我們理解程式語言底層的實現細節,特別是對以後想從事c/c++開發工作的我來說,學習深入學習linux核心就顯得尤為重要。

學習了孟老師的這門課,真心感覺選這門課很值得。加油!

Linux核心分析

從根本上看,核心是為了管理好程序來設計的,需要建立各種結構體來描述程序管理過程中需要用到的一切。首先,為什麼要劃分核心空間與使用者空間,出於安全的考慮,需要把使用者程式與核心隔離,這就帶來各種複雜性的東西,當然這是值得的。對於模組與模組的互動,使用者通過系統呼叫進入核心,這裡又包含中斷管理,異常管理...

讀核日記 《Linux核心完全注釋》

linux核心完全注釋 v1.9.5版說明 linux 核心 6.程序間通訊機制 linux 核心 4.記憶體管理 linux 核心 5.linux程序 linux 核心 3.軟體基礎 linux 核心 2.硬體基礎 linux 核心 1.前言 讀核日記 八 linux的記憶體管理機制 2 讀核日記...

linux核心分析四

使用庫函式api和c 中嵌入彙編 兩種方式使用同乙個系統呼叫,理解系統呼叫的工作機制。api 第一層是指libc中定義的api,這些api封裝了系統呼叫,使用int 0x80觸發乙個系統呼叫中斷 當然,並非所有的api都使用了系統呼叫,如完成數學加減運算的api就沒有使用系統呼叫 也有可能某個api...