浙江福彩3d走势图
我們來自五湖四海,不為別的,只因有共同的愛好,為中國互聯網發展出一分力!

Scheduling (調度)相關

2013年04月28日03:40 閱讀: 1744 次

      所有的進程部分運行與用戶態,部分運行于系統態。底層的硬件如何支持這些狀態各不相同但是通常有一個安全機制從用戶態轉入系統態并轉回來。用戶態比系統態的權限低了很多。每一次進程執行一個系統調用,它都從用戶態切換到系統態并繼續執行。這時讓核心執行這個進程。 Linux 中,進程不是互相爭奪成為當前運行的進程,它們無法停止正在運行的其它進程然后執行自身。每一個進程在它必須等待一些系統事件的時候會放棄 CPU 。例如,一個進程可能不得不等待從一個文件中讀取一個字符。這個等待發生在系統態的系統調用中。進程使用了庫函數打開并讀文件,庫函數又執行系統調用從打開的文件中讀入字節。這時,等候的進程會被掛起,另一個更加值得的進程將會被選擇執行。進程經常調用系統調用,所以經常需要等待。即使進程執行到需要等待也有可能會用去不均衡的 CPU 事件,所以 Linux 使用搶先式的調度。用這種方案,每一個進程允許運行少量一段時間, 200 毫秒,當這個時間過去,選擇另一個進程運行,原來的進程等待一段時間直到它又重新運行。這個時間段叫做時間片。

    需要調度程序選擇系統中所有可以運行的進程中最值得的進程。一個可以運行的進程是一個只等待 CPU 的進程。 Linux 使用合理而簡單的基于優先級的調度算法在系統當前的進程中進行選擇。當它選擇了準備運行的新進程,它就保存當前進程的狀態、和處理器相關的寄存器和其他需要保存的上下文信息到進程的 task_strUCt 數據結構中。然后恢復要運行的新的進程的狀態(又和處理器相關),把系統的控制交給這個進程。為了公平地在系統中所有可以運行( runnable )的進程之間分配 CPU 時間,調度程序在每一個進程的 task_struct 結構中保存了信息:

    參見 kernel/sched.c schedule()

    policy 進程的調度策略。 Linux 有兩種類型的進程:普通和實時。實時進程比所有其它進程的優先級高。如果有一個實時的進程準備運行,那么它總是先被運行。實時進程有兩種策略:環或先進先出( round robin and first in first out )。在環的調度策略下,每一個實時進程依次運行,而在先進先出的策略下,每一個可以運行的進程按照它在調度隊列中的順序運行,這個順序不會改變。

    Priority 進程的調度優先級。也是它允許運行的時候可以使用的時間量( jiffies )。你可以通過系統調用或者 renice 命令來改變一個進程的優先級。

    Rt_priority Linux 支持實時進程。這些進程比系統中其他非實時的進程擁有更高的優先級。這個域允許調度程序賦予每一個實時進程一個相對的優先級。實時進程的優先級可以用系統調用來修改

    Coutner 這時進程可以運行的時間量( jiffies )。進程啟動的時候等于優先級( priority ),每一次時鐘周期遞減。

    調度程序從核心的多個地方運行。它可以在把當前進程放到等待隊列之后運行,也可以在系統調用之后進程從系統態返回進程態之前運行。需要運行調度程序的另一個原因是系統時鐘剛好把當前進程的計數器 (counter) 置成了 0 。每一次調度程序運行它做以下工作:


    參見 kernel/sched.c schedule()

    kernel work 調度程序運行 bottom half handler 并處理系統的調度任務隊列。這些輕量級的核心線程在第 11 章詳細描述

    Current pocess 在選擇另一個進程之前必須處理當前進程。

    如果當前進程的調度策略是環則它放到運行隊列的最后。

 

[1] [2] 下一頁

分享到: 更多
藍客門戶
©2001-2019 中國藍客聯盟 版權所有.
關于藍客聯盟歷史宗旨章程技術服務聯系我們藍客社區

浙江福彩3d走势图 腾讯棋牌游戏大厅 北京赛车pk10缩水工具 伦敦二分彩走势图 今天吉林十一选五直选 双色球蓝球走势图浙江风采 排列五走势图预测 玩pk10有多少人破产 股票涨跌怎么算的 今天福建11选5走势图 复式注数计算器