回答
簡單的回答是硬件時鐘中斷服務程序既沒有執行,也不是動態計時器處理程序的調度是由模式中,系統是在硬件時鐘中斷前的影響。原因是時鐘定時器中斷是立即服務的硬件中斷,無論執行是在內核還是在用戶上下文中(假設定時器中斷被啓用),以及時鐘定時器的中斷服務程序中斷本身會引發運行動態定時器處理程序的軟件中斷。
注意事項:1)實際上我沒有證實這一點。 2)這不適用於無滴內核或高分辨率定時器。
Linux內核代碼使用單詞「定時」是指幾個不同的事情:
- 硬件定時器或時鐘中斷,讓內核中的「滴答」
- 動態定時器 - 通過使用軟件定時器內核和驅動程序
- 間隔計時器 - (setitimer和報警系統調用)軟件定時器用於用戶模式進程
的hardwa再時鐘或計時器滴答
在在使用硬件時鐘來提供「嘀」的系統中,時鐘計時器中斷是一個體繫結構相關硬件中斷。例如,查找arch/powerpc/kernel/head_booke.h中的「timer_interrupt」,然後查看arch/powerpc/kernel/time.c中的中斷服務例程(ISR)timer_interrupt
實現。無論當前的執行上下文如何,當發生定時器中斷時,此ISR立即執行。這個硬件中斷不同於其他硬件中斷,因爲當它返回時,處理不會返回到前一個上下文。相反,調度程序被輸入。
對於被設定爲每秒產生1000個時鐘中斷的系統中,有一個機會,當正被服務的其它中斷時鐘中斷有時會被屏蔽。這通常被稱爲「丟失滴答」問題。如果不補償丟失的蜱蟲,負載系統的時間感會減慢。在一些體系結構中,內核通過使用更細粒度的硬件增量計數器來補償丟失的計時器,其計數值在每個時鐘計時器中斷中被讀取和記錄。通過比較當前時間點的增量計數器值與前一個時間點的增量計數器值,內核可以確定是否丟失了時間點。
軟件定時器
動態定時器處理程序被設置在時鐘定時器中斷結束,在返回之前已經過期的動態定時器(你與linux/timer.h
設置類型)的列表。序列是(大約):
[arch dependent]:timer_interrupt()
kernel/time/tick-common.c:tick_handle_periodic()
kernel/time/tick-common.c:tick_periodic()
kernel/timer.c:update_process_times()
kernel/timer.c:run_local_timers()
kernel/softirq.c:raise_softirq(TIMER_SOFTIRQ)
我已經省略了設置爲timer_interrupt
tick_handle_periodic
到該處理程序,以及用於TIMER_SOFTIRQ
處理程序的initialilzations。
對raise_softirq(TIMER_SOFTIRQ)
的調用會生成立即提供服務的軟件中斷。中斷的ISR運行動態定時器隊列。定時器處理程序在softirq上下文中運行,並啓用硬件中斷。當ISR返回時,調度程序被調用。這意味着如果設置了很多定時器,那麼運行隊列中接下來發生的任何進程都將被延遲。
如果丟失了滴答聲,那麼定時器處理程序的執行可能會延遲,但是,延遲並不取決於運行時鐘定時器中斷之前的執行競爭。
注意有關動態定時器精度
」 ...內核不能保證定時器功能將在其到期時間正確的開始。它只能確保他們無論是在適當的時間或之後執行延遲了幾百毫秒。「 瞭解Linux內核,Bovet和Cesati,第3版,O'reilly。
所以,如果你需要更好的定時器精度,你需要使用高分辨率定時器。
- 1. 內核如何知道CPU是處於用戶模式還是kenel模式?
- 2. 操作系統中的用戶模式和內核模式有什麼區別?
- 3. 如何判斷我是處於ARM模式還是gdb中的Thumb模式?
- 4. MySQL進程在用戶模式還是內核模式下運行?
- 5. 檢查系統處於節電模式
- 6. 用戶模式與內核模式的回調函數
- 7. 內核模式 - 是否可以訪問用戶模式?
- 8. printf是否以內核模式或用戶模式運行?
- 9. 用戶模式和內核模式爲用戶提供保護?
- 10. 應用程序處於中斷模式
- 11. 定時器處於向上模式
- 12. srv.sys如何根據底層文件系統決定原始模式還是核心模式?
- 13. 用戶模式和內核模式之間的共享內存
- 14. 如何在PowerShell中獲取內核模式時間和用戶模式時間?
- 15. 內核模塊定時器殺死系統
- 16. 用戶模式同步與內核模式同步(在Linux和Windows中)
- 17. 如何從用戶模式調用/掛鉤內核模式API?
- 18. 爲什麼系統調用需要切換到內核模式?
- 19. 從用戶模式進入內核模式的不同方式是NETLINK Socket嗎?
- 20. 內核/用戶模式下的CPU
- 21. 用戶到內核模式的大圖?
- 22. 如何檢查系統是否處於待機模式?
- 23. 內核模式和用戶模式驅動程序
- 24. 如何做混合用戶模式/內核模式調試?
- 25. 從內核模式執行用戶模式可執行文件
- 26. 發送從內核模式價值到用戶模式
- 27. Windows過濾平臺用戶模式或內核模式?
- 28. 從用戶模式切換到內核模式
- 29. 內核模式到用戶模式通信
- 30. 如何從Windows內核模式啓動用戶模式程序
非常感謝Jonathan Ben-Avraham先生的回覆。現在我有另一個疑問。讓我們說在一個單處理器的linux系統中,系統正在服務一個內核中斷我的意思是系統處於中斷環境中,並且意味着計時器得到了驗證,並且那時定時器中斷了系統如何表現? – user2282621
只要IRQ禁用,它就會一直等到中斷處理程序結束。 – tangrs
@ user2282621:嗨,我添加了更多的細節,希望有所幫助。 –