這門課的精髓在于,不僅教會(huì)你如何分析Linux內(nèi)核,更教你做事的方法論:“天下難事必做于易,天下大事必做于細(xì)”,對(duì)于代碼量龐大無從下手的內(nèi)核,我們從小處入手,步步為營,最終掌握全局。
Linux內(nèi)核分析的過程,是對(duì)自己肯定,否定,再肯定并不斷重復(fù)這個(gè)循環(huán)的過程。作為coder,唯一的快感就是有一種自我肯定的得意。然而這個(gè)過程很快會(huì)被無情的打破,因?yàn)檫@么龐大的內(nèi)核,我們始終有一種盲人摸象的茫然。
進(jìn)程調(diào)度算法從實(shí)現(xiàn)的角度看僅僅是從運(yùn)行隊(duì)列中選擇一個(gè)新進(jìn)程,選擇的過程中運(yùn)用了不同的策略而已。對(duì)于理解操作系統(tǒng)的工作機(jī)制,反而是進(jìn)程的調(diào)度時(shí)機(jī)與進(jìn)程的切換機(jī)制更為關(guān)鍵。schedule()函數(shù)用來選擇一個(gè)新的進(jìn)程來運(yùn)行,并調(diào)用context_switch()進(jìn)行上下文的切換,這個(gè)宏調(diào)用switch_to()來進(jìn)行關(guān)鍵上下文切換,其中pick_next_task()函數(shù)封裝了進(jìn)程調(diào)度算法。