linux 内核 面试 机制,请你来说一下linux内核中的Timer 定时器机制
參考回答:
1)低精度時鐘
Linux 2.6.16之前,內核只支持低精度時鐘,內核定時器的工作方式:
1、系統啟動后,會讀取時鐘源設備(RTC, HPET,PIT…),初始化當前系統時間。
2、內核會根據HZ(系統定時器頻率,節拍率)參數值,設置時鐘事件設備,啟動tick(節拍)中斷。HZ表示1秒種產生多少個時鐘硬件中斷,tick就表示連續兩個中斷的間隔時間。
3、設置時鐘事件設備后,時鐘事件設備會定時產生一個tick中斷,觸發時鐘中斷處理函數,更新系統時鐘,并檢測timer wheel,進行超時事件的處理。
在上面工作方式下,Linux 2.6.16 之前,內核軟件定時器采用timer wheel多級時間輪的實現機制,維護操作系統的所有定時事件。timer wheel的觸發是基于系統tick周期性中斷。
所以說這之前,linux只能支持ms級別的時鐘,隨著時鐘源硬件設備的精度提高和軟件高精度計時的需求,有了高精度時鐘的內核設計。
2)高精度時鐘
Linux 2.6.16 ,內核支持了高精度的時鐘,內核采用新的定時器hrtimer,其實現邏輯和Linux 2.6.16 之前定時器邏輯區別:
hrtimer采用紅黑樹進行高精度定時器的管理,而不是時間輪;
高精度時鐘定時器不在依賴系統的tick中斷,而是基于事件觸發。
舊內核的定時器實現依賴于系統定時器硬件定期的tick,基于該tick,內核會掃描timer wheel處理超時事件,會更新jiffies,wall time(墻上時間,現實時間),process的使用時間等等工作。
新的內核不再會直接支持周期性的tick,新內核定時器框架采用了基于事件觸發,而不是以前的周期性觸發。新內核實現了hrtimer(high resolution timer):于事件觸發。
hrtimer的工作原理:
通過將高精度時鐘硬件的下次中斷觸發時間設置為紅黑樹中最早到期的Timer 的時間,時鐘到期后從紅黑樹中得到下一個 Timer 的到期時間,并設置硬件,如此循環反復。
在高精度時鐘模式下,操作系統內核仍然需要周期性的tick中斷,以便刷新內核的一些任務。hrtimer是基于事件的,不會周期性出發tick中斷,所以為了實現周期性的tick中斷(dynamic tick):系統創建了一個模擬 tick 時鐘的特殊 hrtimer,將其超時時間設置為一個tick時長,在超時回來后,完成對應的工作,然后再次設置下一個tick的超時時間,以此達到周期性tick中斷的需求。
引入了dynamic tick,是為了能夠在使用高精度時鐘的同時節約能源,這樣會產生tickless 情況下,會跳過一些 tick。
新內核對相關的時間硬件設備進行了統一的封裝,定義了主要有下面兩個結構:
時鐘源設備(closk source device):抽象那些能夠提供計時功能的系統硬件,比如 RTC(Real Time Clock)、TSC(Time Stamp Counter),HPET,ACPI PM-Timer,PIT等。不同時鐘源提供的精度不一樣,現在pc大都是支持高精度模式(high-resolution mode)也支持低精度模式(low-resolution mode)。
時鐘事件設備(clock event device):系統中可以觸發 one-shot(單次)或者周期性中斷的設備都可以作為時鐘事件設備。
當前內核同時存在新舊timer wheel 和 hrtimer兩套timer的實現,內核啟動后會進行從低精度模式到高精度時鐘模式的切換,hrtimer模擬的tick中斷將驅動傳統的低精度定時器系統(基于時間輪)和內核進程調度。
總結
以上是生活随笔為你收集整理的linux 内核 面试 机制,请你来说一下linux内核中的Timer 定时器机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 异地公积金缴存证明和明细怎么开 怎么开异
- 下一篇: 怎么取出住房公积金里边的钱 公积金的钱如