時鐘中斷(2)

2021-07-09 12:11:34 字數 1331 閱讀 2333

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中斷處理程式架構 中斷會打斷核心程序的正常...