之前八次課的學習,于我而言算是Linux內(nèi)核學習之路的開始吧赏寇,感覺現(xiàn)在的水平還欠火候吉嫩,對于Linux這座冰山,還只能勉強看到一個角嗅定。趁著課程基礎部分結(jié)束自娩,做一個小結(jié),既是對之前知識的復習渠退,亦是鼓勵自己在探索Linux內(nèi)核的路上繼續(xù)向前忙迁。
由于之前信息安全課上對匯編語言的使用已經(jīng)得心應手了脐彩,這節(jié)課學習起來便很是輕松。算是對匯編語言及一些基礎知識做了一次復習姊扔。
這次課算是對C語言中的嵌入式匯編基本了解了惠奸,Mykernel實驗的代碼倒是挺簡單的,雖然按照說明實驗指導體驗了一下恰梢,這個最精簡版的內(nèi)核佛南。但是對于如何在Linux源碼里打補丁,就能讓這個小小的模擬內(nèi)核跑起來的原理還是沒有思路嵌言,希望以后可以通過自己的學習嗅回,解決這個疑惑。
這節(jié)課中第一次開始用真實的Linux源代碼進行學習摧茴,對于源代碼的大致組成結(jié)構有了一定的了解妈拌,也對Linux中的“main函數(shù)”(start_kernel)進行了學習。
使用庫函數(shù)API和C代碼中嵌入?yún)R編代碼兩種方式使用同一個系統(tǒng)調(diào)用
這次實驗中選擇了mkdir的系統(tǒng)調(diào)用蓬蝶,但是實現(xiàn)完之后發(fā)現(xiàn)一個問題尘分,menuos 中沒有實現(xiàn)ls命令,即使mkdir成功了丸氛,也只能通過程序的返回值觀察到培愁。剛想到這個問題時還傻傻的去查了下有沒有l(wèi)s對應的系統(tǒng)調(diào)用,后來覺得按照unix一切皆文件的設計哲學缓窜,應該要打開當前目錄對應的文件從中讀取定续,等以后文件系統(tǒng)學的差不多了再回來看看當時的想法。
使用gdb跟蹤分析系統(tǒng)調(diào)用mkdir
gdb這個以前真的用的不多禾锤,那次老師檢查讓print 一個變量私股,然后問那個值為什么和之前設想的不一樣,當時還真懵了恩掷,答不上來倡鲸。原來就是gdb中顯示的是下一個將要執(zhí)行的語句,而不是剛剛執(zhí)行過的語句』颇铮現(xiàn)在終于可以用gdb熟悉的調(diào)試程序了峭状。
分析Linux內(nèi)核創(chuàng)建一個新進程的過程
這次課開始就進入了困難模式了,最近事情又有點多逼争,覺得有點跟不上這個節(jié)奏了优床,對于代碼的閱讀,看完之后沒能在腦海里留下完整的印象誓焦。對于fork函數(shù)在底層是如何執(zhí)行的有了更深刻的理解胆敞。
之前對于執(zhí)行一個程序的理解,也只是執(zhí)行了一個程序,現(xiàn)在心里會不自覺的想到 exec如何調(diào)用sys_execve移层,然后調(diào)用do_execve,再調(diào)用do_execve_common把函數(shù)參數(shù)和系統(tǒng)環(huán)境傳進來進行相應的處理启摄。
作為壓軸的一課,老師竟然放大招了幽钢,請來了舞女來助興,哈哈傅是。最后那個ls的例子匪燕,對于理解Linux的一般執(zhí)行過程還是還有幫助的
總結(jié):
不得不承認,雖然很早就決定選這門課了喧笔,但是后來因為種種原因帽驯,還是沒有完全掌握老師所講的知識。但相信對于操作系統(tǒng)與Linux的系統(tǒng)的興趣书闸,會促使自己不斷向一個又一個的高峰攀爬尼变。