2009-10-25 106 views
10

在x86上的實模式下,需要使用哪些指令來在多處理器系統中的不同處理器上運行代碼?在不同的處理器上運行代碼(x86彙編)

(我正在寫彙編一些預引導代碼,需要設置一定的CPU寄存器,併爲此在系統中每個CPU上,實際的操作系統啓動前)。

+1

你甚至可以在實模式下進行MP嗎? – Draemon 2009-10-26 12:07:49

+0

無理由不。 MP沒有任何特定模式。 – 2009-10-26 19:20:29

+1

看起來像一個愚蠢的http://stackoverflow.com/questions/980999/what-does-multicore-assembly-language-look-like – 2009-10-26 19:59:29

回答

9

所以,你有一個獨立(你說的「預啓動」)程序,像一個啓動加載程序,在真實模式下運行?這是PeeCee與平常的BIOS?

在這種情況下,你只有一個CPU在運行。爲了加速旋轉的其他CPU單元,操作系統通常將執行所謂通用啓動算法這是這樣的:

BSP sends AP an INIT IPI 
BSP DELAYs (10mSec) 
If (APIC_VERSION is not an 82489DX) { 
    BSP sends AP a STARTUP IPI 
    BSP DELAYs (200μSEC) 
    BSP sends AP a STARTUP IPI 
    BSP DELAYs (200μSEC) 
} 
BSP verifies synchronization with executing AP 

的BSP是啓動處理器。 AP是應用程序處理器。 IPI是一個處理器間中斷。爲了執行IPI,您需要啓用APIC,這是PC體系結構的中斷控制器擴展,它在啓動時未啓用。這就是爲什麼代碼擔心它正在運行什麼樣的ICU版本。所有這些都是相當深的魔法。例如,您可以嘗試查看Linux,NetBSD或其他* BSD源代碼,但不易讀。如果你真的贏了,你可能會在某處找到一個小內核或獨立的SMP測試程序。請參閱Intel Multiprocessor Specification

+0

謝謝,那只是我需要的信息!這應該是一個挑戰... – 2009-10-26 00:43:29