2013-07-31 43 views
2

我讀ULK3,並得到了下面的語句I/O APIC的外部中斷靜態分配

「的中斷請求外部硬件設備來可以 兩種方式可用的CPU分配的:

靜態分配IRQ信號被傳送到列在相應重定向表條目中的本地APIC 。該中斷 交付給一個特定的CPU,與CPU的一個子集,或者所有CPU atonce(廣播模式)「

我知道linux下不使用靜態分佈,但 我的問題是:

如果操作系統使用靜態分配啓動中斷重定向表中的一項,並且引發IRQ,然後多APIC系統選擇其中兩個CPU(這裏只是兩個cpus在條目中列出的示例)並且將信號傳遞給相應的本地APIC,並且兩個本地APIC都接受該中斷。

  1. 只有一個CPU會處理中斷?或兩者?如果一個,如何選擇?
  2. 是否有操作系統使用靜態分配?

如果有,請告訴我的例子

如果沒有,它爲什麼存在?是因爲一些歷史問題嗎?這種設計的原始原因是什麼?

回答

0

這裏是本地APIC,IO APIC和ICC總線的鏈接描述機制。

http://syszux.com/book/kernel/Understanding.the.Linux.Kernel(3rd%20Edition)/understandlk-CHP-4-SECT-2.html

下面的段落是從網頁中提取可能是你的問題的答案:

動態分配

的IRQ信號傳送到正在執行過程中的處理器的本地APIC優先級最低。

每個本地APIC都有一個可編程的任務優先級寄存器(TPR),用於計算當前正在運行的進程的優先級。英特爾希望每個進程切換器都可以在操作系統內核中修改該寄存器。

如果兩個或多個CPU共享最低優先級,則使用稱爲仲裁的技術在它們之間分配負載。在本地APIC的仲裁優先級寄存器中,每個CPU分配一個不同的仲裁優先級,範圍從0(最低)到15(最高)。

每次中斷傳送給CPU時,相應的仲裁優先級自動設置爲0,而其他CPU的仲裁優先級增加。當仲裁優先級寄存器大於15時,它被設置爲中獎CPU的先前仲裁優先級增加1.因此,中斷以循環方式在具有相同任務優先級的CPU之間分配。[*]