做業八:進程調度時機跟蹤分析進程調度與進程切換的過程

做業八:進程的調度時機與進程的切換


1、進程調度的時機

  

      

1.分類一:shell

I/O bound 頻繁i/o,等待i/o的時候須要耗費時間;
CPU bound 計算密集型 ,不適用於交互式進程。

  

分類二:函數

批處理
實時
交互式 ——shell

  

2、使用gdb跟蹤分析schedule()函數

     

   

    

    

 

 

3、switch_to中的彙編代碼

 

 

中斷和中斷返回:有一個CPU上下文的切換
進程調度過程當中:有一個進程上下文的切換,從一個進程的內核態堆棧切換到另外一個進程的內核態堆棧。

  

movel %[next_sp],%%esp 即爲修改堆棧指針,指向next進程的堆棧。
在內核態中,棧頂指針減去8K偏移(兩頁)即可獲得thread_info位置,從而,在切換後current_thread_info內容爲切換後的新進程的thread_info內容。

4、總結部分:Linux系統通常執行過程

內核是各類中斷處理過程和內核線程的集合

(1)中斷處理過程(包括時鐘中斷、I/O中斷、系統調用和異常)中,直接調用schedule(),或者返回用戶態時根據need_resched標記調用schedule();

(2)內核線程能夠直接調用schedule()進行進程切換,也能夠在中斷處理過程當中進行調度,也就是說內核線程做爲一類的特殊的進程能夠主動調度,也能夠被動調度;

(3)用戶態進程沒法實現主動調度,僅能經過陷入內核態後的某個時機點進行調度,即在中斷處理過程當中進行調度。
中斷和中斷返回:有一個CPU上下文的切換
進程調度過程當中:有一個進程上下文的切換,從一個進程的內核態堆棧切換到另外一個進程的內核態堆棧。

  

  

註明「鄭偉 + 原創做品轉載請註明出處 + 《Linux內核分析》MOOC課程http://mooc.study.163.com/course/USTC-1000029000 」,博客內容的具體要求以下:

相關文章
相關標籤/搜索