2012-01-12 28 views
0

我有一個程序打印出'A'3次,每次打印之間延遲1秒。調用此程序一次需要2.00秒。進程調度數學

想象我創建了一個執行的過程0.5秒然後切換到下一個工序(臨時暫停前一個,直到它再次達到它)作業調度程序。如果我開始上面提到的兩個程序,並在這兩個過程中運行這個作業調度程序,總共需要4秒嗎?

我測試過這一點,但在目前,它正在以2.5秒計時。任何人都可以解釋嗎?

+0

你能告訴我們的調度代碼? – bacchus 2012-01-12 11:09:01

+0

程序中可能存在執行問題。例如,如果您通過測試'(timeNow> timeOriginal + 1)'是否獲得了1秒的延遲,那麼只要您切換回原始程序,此條件就會測試爲真,因爲已經有幾秒鐘的時間了。 – Oliver 2012-01-12 11:10:05

回答

0

這完全取決於用於實現一第二延遲的機制。

如果它使用的作業暫停時繼續滴答作響,即使實際的時鐘,那麼就沒有理由認爲時間分片兩個這樣的工作應該採取只要運行一個兩次。事實上,像你所描述的那樣執行兩項工作應該只需兩秒鐘。您看到2.5s的原因可能是由於您的調度程序的粒度爲0.5s。

在另一方面,如果延遲是由紡絲CPU週期的預先確定的數目進行,那麼執行時間將確實加起來。然而,以這種方式將不實現爲通用CPU設計的例程。

+0

程序中的延遲使用wait(1)在打印前等待1秒鐘。如果進程發送SIGSTOP,會暫停嗎? – Lucas 2012-01-12 11:16:19

3

這兩個工作可能並行運行。這裏是一個分手的發生的事情:

  1. 時間0 - 任務1開始
  2. 時間0.5 - 任務2開始[都運行]
  3. 時間2.0 - 任務1完成的[任務1跑出1.5秒已經]
  4. 時間2.5 - 任務2跑完0.5秒以上。