《Linux内核分析》课程总结
| 朱宇軻 + 原創作品轉載請注明出處 + 《Linux內核分析》MOOC課程http://mooc.study.163.com/course/USTC-1000029000 不知不覺,在網易云課堂上追了兩個多月的課程《Linux內核分析》就要告一段落了。在課程即將結束的時刻,我想將這八周的課程串起來,進行一個簡單的總結,同時講一講自己上這門課的感悟和體會,以期再接再厲,繼往開來。 每一周的視頻,我都認真看過,并完成了測驗,撰寫了相關的博客,下面首先進行簡單的回顧和總結: 第一周:從一段代碼的匯編看計算機的工作原理 第二周:一個簡單的時間片輪轉多通道程序內核 第三周:從Linux內核代碼分析操作系統啟動過程 第四周:由一段代碼解析系統調用原理 第五周:分析system_call中斷處理過程 第六周:Linux進程啟動過程簡析 第七周:linux裝載可執行程序簡析 第八周:Linux進程切換代碼分析 第一周老師介紹了計算機的基礎架構:馮諾依曼架構,CPU將內存中的代碼和數據讀取到自己的寄存器中,再根據一條條命令調用寄存器進行進一步的操作;同時,老師對基礎的匯編語言語法進行了講解。第二周則是第一周的延伸,在課上老師講解了一個基于C和匯編語言的程序,實現了時間片輪轉多通道程序的功能,我也親自體驗了一遍上下文保存、切換、代碼跳轉的具體實現。 第三周,老師帶我們分析了linux啟動的過程,我們親眼目睹了第一個進程的創建和idle進程的循環,對操作系統的啟動過程有了更深入的了解。 第四和第五周,深入到了系統調用這個linux內核中一個重要的模塊里,我們了解了系統調用的“三層皮”(API、中斷向量、中斷服務程序);通過匯編實現一個系統調用,認識了int 0x80的作用(這應該是我印象最深刻的一句匯編代碼,O(∩_∩)O哈哈~);通過深入追蹤sys_call系統調用的內核代碼,我們對系統調用的具體實現有了更為深入的理解。(感謝老師提供的簡化匯編代碼,大大方便了我分析的工作ORz) 第六、七、八周則是分別分析了Linux內核的三個具體功能模塊:進程創建、可執行程序裝載、進程上下文切換,尤其注意fork這個比較特殊的系統調用,它具有“一次調用,兩次返回”的特點,這是和linux中一般的進程不一樣的地方。 在第八周的最后,老師對linux系統的架構和執行過程進行了總結,簡單來說,用戶態進程位于內存的0~3G空間中, 內核代碼則位于內存3G以上的部分,如同大(cang)舞(lao)女(shi)一樣任由用戶態進程公共地使用。在進程由用戶態陷入內核態或者進程間切換之前,都要進行上下文的保存,以便返回時回復之前的環境。 linux系統架構鎮樓 /*---------------------------------------------我是萌萌的分割線,咿呀咿呀呦-----------------------------------------*/ 我是一名西電大四的學生,如今已經保送浙江大學CAD實驗室,即將開始自己的研究生生涯。本科期間,我們也上過操作系統之類的課程,但課上老師對操作系統的講解偏于理論,很少涉及操作系統具體的實現,以至于我一直對操作系統的實現細節一頭霧水。而通過學習這門課,我一方面復習了本科時所學習的操作系統概念,更重要的是,通過分析linux系統的內核代碼,我初窺操作系統內核編程的門徑,對操作系統各種功能的具體實現,如進程創建、切換、操作系統啟動都有了更為深入的認識和理解,這就是我上這門課最大的收獲。 上完這門課之后,我想重新捧起本科時操作系統課程的教科書《現代操作系統》,認真地再看一遍書中后面探討各種操作系統實現細節的章節(我們本科時只講了理論部分,后面沒講);有機會的話,希望深入鉆研操作系統架構,參考《三十天自制操作系統》、《Orange S:一個操作系統的實現》等書自己實現一個小型的操作系統,畢竟操作系統的知識對于以后的上研、工作還是很有幫助的。 說起遺憾,主要是這門課開設期間正好也是我本科畢業設計時間,我每天忙于畢業設計,晚上10點多從實驗室回到宿舍后才能開始課程的學習,很多時候包括做作業都搞得比較倉促,有一次甚至忘了提交作業(TAT),感覺自己對課上老師講解的知識點還是有待進一步消化。課程已經結束,自己研究生階段會繼續關注這一領域,不斷提升自己在這一方面的專業技能。 另外,我覺得老師這門課沒有講文件系統這個linux內核的大頭實在是有點遺憾,如果以后開課的話,希望能將這個模塊納入課程的講解中。 這就是我在這門課期間的總結,感謝網易云課堂和孟寧老師提供了這個學習的機會,也祝云課堂平臺越辦越好,孟老師家庭生活幸福美滿,事業步步高升! 路漫漫其修遠兮,吾將上下而求索! |
總結
以上是生活随笔為你收集整理的《Linux内核分析》课程总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 和菜鸟一起学linux内核源码之基础准备
- 下一篇: Linux多线程编程(一)---多线程基