2017/6/21
時間這一概念在生活中至關重要,而在作業系統中也同樣重要,其在系統中的功能絕不僅僅是給使用者提供時間這麼簡單,核心的許多機制都依賴於時間子系統。但凡是要在某個精確的時間執行某個事件,必然會用到時間子系統。而核心中定時器的發展可以以2.6版本的核心作為乙個分界點。之前主要是低解析度定時器,2.6開發期間便引入了高解析度定時器。解析度的高低意味著時間粒度的大小。
本節重點介紹下涉及到的幾個重點概念
時鐘裝置
週期時鐘/動態時鐘
高解析度/低解析度
定時器
時鐘裝置時鐘裝置算是最低層的硬體裝置,具體的訊號由時鐘裝置觸發,其最主要的功能就是提供週期時鐘。傳統定時器就是基於這種週期時鐘的。週期時鐘的乙個特性就是按照固定的時間間隔觸發事件,這裡就是引起中斷。回想早起的基於時間片的程序排程演算法可知週期時鐘在其中扮演著不可或缺的作用。時鐘裝置有兩個關鍵特性:1、支援週期性事件。2、支援單點觸發事件。前者是實現週期時鐘的基礎。單點觸發模式下,事件只能執行一次,下次的執行需要重新程式設計,顯示設定執行的時間。所以後者是動態時鐘的基礎。 當時鐘裝置初始化時,預設是採用週期模式工作的。 且在初始化時,如果還沒有明確的全域性時鐘裝置,則採用該裝置擔當此職責。
週期時鐘/動態時鐘週期時鐘和動態時鐘僅僅是上述時鐘裝置工作的兩種不同的模式。週期時鐘負責週期性的觸發事件;而動態時鐘狀態下,可以根據實際需要啟用/禁止週期時鐘。例如在電腦無事可做時,就不需要週期性的觸發事件,這種情況下可以禁止週期時鐘達到省電的效果。使用動態時鐘的前提條件是時鐘裝置支援單點觸發模式,否則無法啟用動態時鐘。在支援單點觸發模式的時鐘裝置支援下,可以由週期時鐘切換到動態時鐘。
高解析度/低解析度解析度的高低即需要硬體的支撐也需要軟體的實現。二者和週期時鐘以及動態時鐘的關係是正交的,即低解析度下可以實現週期時鐘和動態時鐘;高解析度下也可以實現週期時鐘和動態時鐘。需要注意的是低解析度下的動態時鐘需要單點觸發裝置的支援,並且編譯核心時需要選擇固定的項。而在高解析度下的週期時鐘是通過模擬實現的,由於高解析度下裝置總是單點觸發模式,所以其通過乙個高解析度定時器顯示的設定週期性事件。
定時器定時器是在上述機制的基礎上實現的延遲機制。分為低解析度定時器和高解析度定時器。低解析度定時器在低解析度系統上實現;而高解析度定時器在二者均可實現,但是礙於低解析度裝置的限制,不能提供高解析度訊號,感覺僅僅是在高解析度框架下實現的低解析度定時器
時間子系統最主要的功能還是維護系統時間的有序性,以及基於時間所需要的一系列工作。而現在硬體架構多為多處理器架構,單個時鐘裝置下雖然也可以達到目的,但是會額外增加許多處理器間的通訊開銷,因此,現代處理器多為每個cpu都分配乙個時鐘裝置。由其中乙個負責全域性的時間管理,如jiffies的更新,牆上時間的更新,以及計算全域性負載。而區域性的cpu上的裝置一般負責程序統計、效能剖析和實現高解析度定時器。高解析度定時器只能工作在提供區域性時鐘裝置的系統上,否則由於解析度的增加,引起的時鐘中斷數量會急促增長造成cpu間的大量通訊,從而降低系統效能。
Linux 系統時間管理
時間伺服器ntp 計畫任務 週期性計畫任務 date 顯示系統時間 date mmddhhmm 以特定格式顯示時間timedatectl list timezone 檢視時區列表 timedatectl set timezone 設定時區 timedatectl set time yyyy mm d...
Linux 系統時間管理
時間伺服器ntp 計畫任務 週期性計畫任務 date 顯示系統時間 date mmddhhmm 以特定格式顯示時間timedatectl list timezone 檢視時區列表 timedatectl set timezone 設定時區 timedatectl set time yyyy mm d...
Linux中的時間管理
timedatectl 管理系統時間 timedatectl 檢視當前時間 timedatectl status 顯示當前時間資訊 timedatectl set time 設定當前時間 timedatectl set timezone 設定當前時區 timedatectl set local rt...