理解進程調度時機跟蹤分析進程調度與進程切換的過程

網(wǎng)易云課堂《Linux內核分析》作業(yè)

實驗目的:

使用gdb跟蹤分析一個schedule()函數(shù)荒叼,理解Linux系統(tǒng)中進程調度的時機踪古。

實驗過程:

登陸實驗樓虛擬機http://www.shiyanlou.com/courses/195

打開shell終端菱蔬,執(zhí)行以下命令:

cd LinuxKernel

rm -rf menu

git clone https://github.com/mengning/menu.git

cd menu

mv test_exec.c test.c

make rootfs

可以看到編譯出來的系統(tǒng)已經(jīng)有了exec命令

1

可以通過增加-s -S啟動參數(shù)打開調試模式

qemu -kernel ../linux-3.18.6/arch/x86/boot/bzImage -initrd ../rootfs.img -s -S

打開gdb進行遠程調試

gdb

file ../linux-3.18.6/vmlinux

target remote:1234

設置斷點

b schedule

b context_switch

b switch_to

b pick_next_task

實驗分析:

通過實驗可知schedule()函數(shù)用來選擇一個新的進程來運行凶硅,并調用context_switch()進行上下文的切換唱星,這個宏調用switch_to()來進行關鍵上下文切換铛只,其中pick_next_task()函數(shù)封裝了進程調度算法。

實驗總結:

進程調度時機有三:

1定罢、中斷處理過程(包括時鐘中斷笤虫、I/O中斷、系統(tǒng)調用和異常)中祖凫,直接調用schedule()琼蚯,或者返回用戶態(tài)時根據(jù)need_resched標記調用schedule();

2惠况、內核線程可以直接調用schedule()進行進程切換遭庶,也可以在中斷處理過程中進行調度,也就是說內核線程作為一類的特殊的進程可以主動調度稠屠,也可以被動調度罚拟;

3、用戶態(tài)進程無法實現(xiàn)主動調度完箩,僅能通過陷入內核態(tài)后的某個時機點進行調度赐俗,即在中斷處理過程中進行調度。

進程切換:為了控制進程的執(zhí)行弊知,內核必須有能力掛起正在CPU上運行的進程阻逮,并恢復以前掛起的某個進程的執(zhí)行。這種行為被稱為進程切換(process switch)秩彤、任務切換(task switch)或上下文切換(context switch)叔扼。

掛起正在CPU上執(zhí)行的進程,與中斷時保存現(xiàn)場是不同的漫雷,中斷前后是在同一個進程上下文中瓜富,只是由用戶態(tài)轉向內核態(tài)執(zhí)行。

進程上下文包含了進程執(zhí)行需要的所有信息降盹,包括:

1与柑、用戶地址空間:?包括程序代碼,數(shù)據(jù),用戶堆棧等

2价捧、控制信息?:進程描述符丑念,內核堆棧等

3、硬件上下文(與中斷保存硬件上下文的方法不同)

Linux系統(tǒng)的一般執(zhí)行過程

最一般的情況:

正在運行的用戶態(tài)進程X切換到運行用戶態(tài)進程Y的過程

1结蟋、正在運行的用戶態(tài)進程X

2脯倚、發(fā)生中斷——save cs:eip/esp/eflags(current) to kernel stack,then load cs:eip(entry of a specific ISR) and ss:esp(point to kernel stack).

3、SAVE_ALL //保存現(xiàn)場

4嵌屎、中斷處理過程中或中斷返回前調用了schedule()推正,其中的switch_to做了關鍵的進程上下文切換

5、標號1之后開始運行用戶態(tài)進程Y(這里Y曾經(jīng)通過以上步驟被切換出去過因此可以從標號1繼續(xù)執(zhí)行)

6宝惰、restore_all //恢復現(xiàn)場

7植榕、iret - pop cs:eip/ss:esp/eflags from kernel stack

8、繼續(xù)運行用戶態(tài)進程Y

幾種特殊情況:

1掌测、通過中斷處理過程中的調度時機内贮,用戶態(tài)進程與內核線程之間互相切換和內核線程之間互相切換产园,與最一般的情況非常類似汞斧,只是內核線程運行過程中發(fā)生中斷沒有進程用戶態(tài)和內核態(tài)的轉換;

2什燕、內核線程主動調用schedule()粘勒,只有進程上下文的切換,沒有發(fā)生中斷上下文的切換屎即,與最一般的情況略簡略庙睡;

3、創(chuàng)建子進程的系統(tǒng)調用在子進程中的執(zhí)行起點及返回用戶態(tài)技俐,如fork乘陪;

4、加載一個新的可執(zhí)行程序后返回到用戶態(tài)的情況雕擂,如execve啡邑;

aapu原創(chuàng)作品轉載請注明出處《Linux內核分析》MOOC課

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市井赌,隨后出現(xiàn)的幾起案子谤逼,更是在濱河造成了極大的恐慌,老刑警劉巖仇穗,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件流部,死亡現(xiàn)場離奇詭異,居然都是意外死亡纹坐,警方通過查閱死者的電腦和手機枝冀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人宾茂,你說我怎么就攤上這事瓷马。” “怎么了跨晴?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵欧聘,是天一觀的道長。 經(jīng)常有香客問我端盆,道長怀骤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任焕妙,我火速辦了婚禮蒋伦,結果婚禮上,老公的妹妹穿的比我還像新娘焚鹊。我一直安慰自己痕届,他們只是感情好,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布末患。 她就那樣靜靜地躺著研叫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪璧针。 梳的紋絲不亂的頭發(fā)上嚷炉,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機與錄音探橱,去河邊找鬼申屹。 笑死,一個胖子當著我的面吹牛隧膏,可吹牛的內容都是我干的哗讥。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼胞枕,長吁一口氣:“原來是場噩夢啊……” “哼杆煞!你這毒婦竟也來了?” 一聲冷哼從身側響起曲稼,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤索绪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后贫悄,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瑞驱,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年窄坦,在試婚紗的時候發(fā)現(xiàn)自己被綠了唤反。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凳寺。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖彤侍,靈堂內的尸體忽然破棺而出肠缨,到底是詐尸還是另有隱情,我是刑警寧澤盏阶,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布晒奕,位于F島的核電站,受9級特大地震影響名斟,放射性物質發(fā)生泄漏脑慧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一砰盐、第九天 我趴在偏房一處隱蔽的房頂上張望闷袒。 院中可真熱鬧,春花似錦岩梳、人聲如沸囊骤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽也物。三九已至,卻和暖如春池摧,著一層夾襖步出監(jiān)牢的瞬間焦除,已是汗流浹背激况。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工作彤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人乌逐。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓竭讳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親浙踢。 傳聞我的和親對象是個殘疾皇子绢慢,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內容