當一個進程設置爲以10的初始時間片運行時,例如,硬件中的某個人應該知道這個初始時間片並將其遞減,當時間片變爲0時,應該觸發中斷!遞增時鐘
在freeBSD內核中,我明白hardclock和softclock是做這個會計任務的。但是我的問題是,這個時鐘的減量與進程的執行是否平行?
當一個進程設置爲以10的初始時間片運行時,例如,硬件中的某個人應該知道這個初始時間片並將其遞減,當時間片變爲0時,應該觸發中斷!遞增時鐘
在freeBSD內核中,我明白hardclock和softclock是做這個會計任務的。但是我的問題是,這個時鐘的減量與進程的執行是否平行?
這裏我將使用PIT作爲示例,因爲它是最簡單的計時機制(並且已經存在了很長一段時間)。
此外,這個答案是相當x86特定的;也是操作系統不可知論者。我對FreeBSD和Linux的內部知識不夠詳細。其他人可能會更有能力。
從本質上講,時間片與執行過程並行「遞減」,因爲定時器爲每個「滴答」創建一個IRQ(注意,諸如HPET之類的定時器可以執行「一次性」模式, IRQ經過特定的延遲後,也可用於調度)。一旦時間片減少到零,調度程序將被通知併發生任務切換。所有這些與您的進程「同時」發生:IRQ跳轉,運行一些代碼,然後讓您的進程繼續進行,直到時間片耗盡。
需要注意的是,一般來說,由於系統調用的直接結果可能會發生任務切換,因此您不會看到進程運行到其時間片的末尾(例如,從磁盤讀取塊,甚至寫入終端)。
非常棒......這是我尋找的答案! – 2011-02-05 01:29:00
在迷濛的過去,這更簡單:時鐘芯片 - 主板上的分立器件 - 將被配置爲以XHz的頻率週期性觸發中斷。每當這個「定時器中斷」關閉時,當前程序的執行將被掛起(就像任何其他中斷一樣),內核的調度程序代碼會減少它的時間片。當時間片一直歸零時,內核會將CPU從程序中移出並將其交給另一個程序。時鐘芯片與CPU分離,顯然與程序的執行並行運行,但內核的簿記工作必須中斷程序(這是我們所談論的模糊的過去,所以只有一個CPU,所以內核代碼和用戶代碼不能同時運行)。現在,時鐘不是一個分立器件,它是CPU的一部分,它可以被編程來做各種聰明的事情。最重要的是,它可以編程爲在N微秒後觸發一個一個中斷,其中N可能非常大;這允許內核在很長時間內使CPU閒置(計算機方面,也許就像一整秒),如果沒有什麼建設性的,可以節省電力。與此同時,很難再找到單核CPU,內核會做各種巧妙的把戲,把他們的簿記工作推給沒有更好的事情處理的CPU,時間片記賬會變得更加複雜。 Linux目前使用「Completely Fair Scheduler」,它甚至沒有真正的「時間片」概念。我不知道FreeBSD是什麼,但如果它很簡單,我會感到驚訝。
因此,對於您的問題的簡短回答是「大部分是並行的,現在比過去更多,但它不像遙控倒計時器那麼簡單」。
請閱讀有關[搶先調度](http://en.wikipedia.org/wiki/Scheduling_(計算))和相關主題的一些資源。 – ulidtko 2011-02-05 01:03:42
我的確讀過這些......但是後來我無法獲得清晰的照片.. – 2011-02-05 01:08:28