2015-05-02 26 views
3

雖然通過__scheduler()函數內部的Linux內核代碼,我看到hrtick_clear(rq)。 任何人都可以解釋這是什麼,爲什麼它被使用? 它似乎與計時器有關,但無法進一步處理。什麼是hrtick_clear(rq);在Linux調度?

+0

你看過這個函數的代碼('hrtick_clear')嗎?因爲上面的評論對我來說很清楚。你用什麼來讀取內核代碼? – myaut

回答

4

經典操作系統設計涉及系統計時器 - 一個以固定間隔滴答的實體。在每次打勾期間,都會調用調度程序,並且應該切換進程/線程。但系統定時器頻率很低(即1000HZ,這意味着在1ms內一次),並且如果進程只剩下100us的時間片,它將獲得額外的時間(在某些情況下),而其他進程則處於飢餓狀態。

但是,現代CPU提供更精確的硬件計時器,如HPET在Intel上,這是由hrtimers子系統提供的。可以通過CONFIG_SCHED_HRTICK選項啓用它們以供調度程序使用。

但如果你已經叫__schedule()(即在系統調用的路徑),你不需要調用它第二次從hrtimer,因爲你已經排定的,所以在這樣做之前,hrtick_clear禁用hrtimer