2012-11-02 26 views
1

關於這個問題,我無法真正發現任何有趣的事情,但是我現在一直想知道相當一段時間,任何編程語言中的定時器和延遲如何在低級別上工作。定時器和延遲如何在低級別上工作

據我所知,CPU在所有內核中的執行速度儘可能快(取決於它的時鐘速度),並且只要存在要執行的指令(存在一個正在運行的活動線程)。

我不覺得有一個簡單的方法來操縱這個流量的實時關注。那麼我想知道的東西如動畫的工作,在很多,很多情況下會遇到,

  • 在Windows 7操作系統中,開始菜單按鈕,當您在它移動鼠標逐漸亮起亮;
  • 在閃存中,有一個時間軸,Flash文檔中的所有對象都根據FPS設置和時間軸進行動畫;
  • jQuery支持各種動畫;
  • 延遲代碼執行...

不要電腦(主板)有身體計時器?就像CPU有註冊來執行操作並在計算之間保存數據一樣?我在互聯網上沒有發現任何有關這方面的信息。操作系統是否有一些非常複雜的編程,爲與時間相關的所有事情提供最低級別的API?

我真的很好奇答案。

回答

0

操作系統支持「睡眠」調用的一些變體,它將執行放置到系統上運行的其他進程。如果所有進程都處於睡眠狀態,那麼內核會通知處理器休眠一段時間 - 現代處理器有明確目的的指令。

+1

我明白,但這並不能解釋操作系統如何確定線程睡眠的持續時間? I.E.它如何使線程睡5秒鐘? – MarioDS

+1

通過指示調度程序在特定時間將其喚醒。屆時,其他線程將照常運行。 – user4815162342

+1

然後,調度程序對時間參考使用什麼?我想它會檢查主板時鐘。但是,多久才能在合理的時間內進行真正的檢查,並且不會對系統造成太大的干擾? – MarioDS

2

大多數(也許是全部)CPU都是由主板上的一個時鐘驅動的,每隔一段時間「滴答」(產生一個信號)。這就是處理器上的兆赫(MHZ)或千兆赫(GHz)額定值告訴你,這個時鐘運行的速度是多少。這是什麼「超頻」指的是,當你讀到一個處理器可以安全地超頻到一些更高的GHz設置。上面描述的大部分內容都是由該時鐘生成的「滴答」觸發的。這決定了CPU嘗試執行下一條指令的頻率,它實際上多久執行一次......

請勿將此時鐘與Real-Time Clock混淆,該時鐘會記錄時間。所有對「系統時間」或「服務器時間」的引用都使用實時時鐘,即使在計算機關閉的情況下,它也是您的主板上的一塊獨立硬件,用於記錄時間。

這兩個「時鐘」是相互獨立的,用於兩個完全不同的目的。一個驅動所有的CPU處理。如果一個特定的進程(比如說將兩個整數相乘)需要127個cpu週期,那麼實時需要多少時間才能完全依賴cpu時鐘設置的千兆赫如果其集合表示爲3.0 Ghz,那麼這意味着CPU每秒可以執行30億個處理器週期,因此需要127個週期的時間將需要127/30億秒。如果你把一個不同的時鐘CPU放在主板上,那麼相同的乘法將花費更多(或更少)的時間。這些與實時時鐘沒有任何關係,只是跟蹤時間。

+0

我知道CPU時鐘是什麼,它與實時不同。但是,操作系統如何使用主板上的這些刻度和硬件時鐘來確定一定的時間?它是否每隔幾個(真實)毫秒比較每隔幾個CPU tick和實際觸發的實時值?對於任何系統來說都不是很重嗎? – MarioDS

+1

我很確定「實時時鐘」(在主板上)跟蹤當前時間本身。當您重置機器服務器時間時,該OS進程正在更新存儲在該時鐘芯片或時鐘電路中的值。是的,操作系統中的代碼會將實時時鐘報告的指定時間與當前時間進行比較。同樣,這隻適用於需要實時或當前時間或經過時間的過程。 CPU處理由另一個獨立運行的時鐘驅動,該時鐘基於其製造的任何速度而獨立運行。它不知道(或關心)當前時間。 –