歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux教程

Linux 2.6如何使用時間中斷來完成進程調度

進程調度:

Linux裡的進程管理調度,如何調度使用不同的進程占用不同的時間片段,主要在核心函數 scheduler_tick (kernel/sched.c)

硬中斷觸發:

對操作系統來說,中斷是一種電信號,由硬件設備產生,並直接送入中斷控制器(如8259A)的輸入引腳上,然後再由中斷控制器向處理器發送相應的信號。處理器一經檢測到

該信號,便中斷自己當前正在處理的工作,轉而去處理中斷。此後,處理器會通知 OS 已經產生中斷。這樣,OS 就可以對這個中斷進行適當的處理了。不同的設備對應的中斷不同,而每個中斷都通過一個唯一的數字標識。這些中斷值通常被稱為中斷請求線,這裡所說的中斷就是硬中斷,也是我們常說的中斷的上半部分。

硬中斷的執行:

不同的架構在linux上是不同的執行,在x86架構中,源碼程序在/arch/x86_64/kernel/irq.c 

  1. asmlinkage unsigned int do_IRQ(struct pt_regs *regs)  
  2. {     
  3.     /* high bit used in ret_from_ code  */  
  4.     unsigned irq = ~regs->orig_rax;  
  5.   
  6.     if (unlikely(irq >= NR_IRQS)) {  
  7.         printk(KERN_EMERG "%s: cannot handle IRQ %d\n",  
  8.                     __FUNCTION__, irq);  
  9.         BUG();  
  10.     }  
  11.   
  12.     exit_idle();  
  13.     irq_enter();  
  14. #ifdef CONFIG_DEBUG_STACKOVERFLOW   
  15.     stack_overflow_check(regs);  
  16. #endif   
  17.     __do_IRQ(irq, regs);  
  18.     irq_exit();  
  19.   
  20.     return 1;  
  21. }  
其中  __do_IRQ() 是處理不同的中斷信號的函數, 而在irq_exit()裡所處理的是中斷的下半部分,也就是我們常說的軟中斷。
Copyright © Linux教程網 All Rights Reserved