1.時鐘中斷的產生
時鐘中斷是特別重要的乙個中斷,因為整個作業系統的活動都受到他的鼓勵。系統利用時鐘中斷維持系統時間,促使環境的切換,以保證所有程序共享cpu;利用時鐘中斷並進行記賬,監督系統工作以及確定未來的排程優先順序等工作。可以說「時鐘中斷」是整個作業系統的脈搏。
從本質上說,時鐘中斷只是乙個週期性的訊號,完全是硬體行為,該訊號觸發cpu去執行乙個中斷服務程式。
2.時鐘中斷處理程式
每一次時鐘中斷的產生都會進行一系列的操作,其中呼叫的主要函式為do_timer(),操作過程如下:
(1)給jiffies變數增加1.
(2)更新資源消耗系統值,比如當前程序所消耗的系統時間和使用者時間。
(3)執行已經到期的定時期。
(4)執行scheduler_tick()函式。
(5)更新牆上時間,該事件存放在xtime變數中。
(6)計算平均負載值。
因為上述工作分別由單獨的函式負責完成,所以實際do_timer()執行的**看起來非常簡單:
void do_timer(struct pt_regs *regs)
jiffies ++;
update_process_times(user_mode(regs));
update_times();
update_process_times()函式根據時鐘中斷產生的位置,對相關時間進行了更新。
void update_process_times(int user_tick)
struct task_struct *p=current;
int cpu = smp_processor_id();
int system = user_tick ^ 1;
update_one_process(p, user_tick, system, cpu);
p->utime += user; //程序執行使用者**的時間
p->stime += system; //程序執行核心**的時間
run_local_timers(); //處理到期的定時期(軟中斷)
schedluer_tick(user_tick, system); //負責減少當前執行程序的時間片計數值並且在需要的時候設定need_resched標誌。(need_resched表示cpu以系統空間返回到使用者空間前要進行一次排程)
update_times()函式更新牆上時鐘。
void update_times(void)
unsigned long ticks;
ticks = jiffies - wall_jiffies;
if(ticks)
時鐘中斷技術
時鐘中斷技術 1系統中斷與時鐘節拍 1.1 系統中斷 中斷是一種硬體機制,用於通知cpu有個非同步事件發生了。中斷一旦被系統識別,cpu則儲存部分 或全部 現場 context 即部分 或全部 暫存器的值,跳轉到專門的子程式,稱為中斷服務子程式 isr 中斷服務子程式做事件處理,處理完成後執行任務排...
中斷與時鐘
0 序言 中斷服務程式的執行並不存在於程序上下問中,要求中斷服務程式的時間要盡量短。因此,linux中斷處理中引入上半部和下半部分離的機制。另外,核心對時鐘的處理也是採用中斷方式,而核心軟體定時器最終依賴於時鐘中斷。1 中斷與定時器 基本概念 2 linux中斷處理程式架構 中斷會打斷核心程序的正常...
中斷與時鐘
0 序言 中斷服務程式的執行並不存在於程序上下問中,要求中斷服務程式的時間要盡量短。因此,linux中斷處理中引入上半部和下半部分離的機制。另外,核心對時鐘的處理也是採用中斷方式,而核心軟體定時器最終依賴於時鐘中斷。1 中斷與定時器 基本概念 2 linux中斷處理程式架構 中斷會打斷核心程序的正常...