筆者做爲通訊工程的學生,在學習這門課以前雖然會用Linux完成一些簡單的任務,但卻從沒有接觸過這個操做系統的內在之美。以前學完C語言的時候,就想認識這個神祕的Linux內核了,但是一直在數學建模和各類活動中抽不開身,學習的過程也是不得其法。直到我看到孟寧老師的《Linux內核分析》這門課時,我想我大概能夠在二十年後吹牛了:「當年我大二,讀Linux內核源碼的時候.....」linux
只是在學習的過程當中,沒有找到合適的參考書,致使複習有些困難。到了第6、七週早早的把視頻看完,週末想寫博客的時候卻記不起來了。與其參考別人的博文拼湊出一片,我以爲倒不如不寫吧。git
下面是學習這門MOOC的過程當中寫的6篇博文:github
說到計算機,你們都知道現代計算機都是由馮諾依曼體系結構組成的,也就是儲存程序計算機。讓我先從它的工做模型提及。函數
經過一個簡單的時間片輪轉多道程序內核代碼,分析linux操做系統學習
mykernel是一個基於Linux 3.9.4的內核模擬程序,經過觀察軟件模擬的操做系統運行過程能夠幫助咱們理解操做系統的進程工做、調度機制。
spa
跟蹤分析Linux系統的啓動過程操作系統
MenuOS是一個基於Linux 3.18.6內核的微型操做系統,本文使用gdb來觀察系統的啓動過程,至init進程被啓動爲止。.net
在Linux系統下,咱們不只能夠經過API,還能夠直接使用系統調用號來進行系統調用。本文簡要介紹了fork函數,進而使用C代碼內嵌彙編代碼的形式直接進行系統調用,並與直接使用API進行調用的C代碼進行對比。
本文在原有MenuOS的基礎上添加了fork和fork-asm命令,再使用gdb跟蹤調試,最後分析了Linux系統調用從system_call開始到iret結束之間的整個過程。
在操做系統運行過程當中,因爲CPU bound和I/O bound,進行進程的調度天然是常事。進行進程調度時,操做系統使用某些特定算法(如FIFO、SCBF、輪轉法等)在進程隊列中選出一個進程做爲下一個運行的進程,調用schedule。
----------------------------------------------------------------------------------------------------------
歷來沒以爲內核距離本身這麼近。老師還曾批評過我說學Linux內核有些「遊手好閒」,但我以爲在這門MOOC中學習到的是系統底層的「內功心法」,學會了這些,再去學各類上層的知識也更加駕輕就熟了。
陳政/arc001 原創做品轉載請註明出處 《Linux內核分析》MOOC課程