對稱多處理
最簡單的提高硬件的性能的辦法是在主板上插上多個CPU(閱讀是最便宜的方法)。要麼讓不同的CPU做不同的工作(非對稱多處理),要麼讓它們並行運行同一工作(對稱多處理,縮寫為SMP)。有效的使用非對稱多處理需要專門研究計算機將要做的任務的知識,而這是在例如LINUX這樣的通用操作系統上不可能的。另一方面,對稱多處理實現起來相對簡單。 相對簡單,我的確切的意思是--不是真的簡單。在一個 對稱多處理的環境中,多個CPU分享同一內存,結果是運行於一個CPU上的代碼可以影響另一個使用的內存。你不再能保證你在前面幾行中設置的某個變量的值保持著相同的值--另一個CPU可能在你沒有看見時修改了它。明顯的,對程序的像這樣的問題是不能忍受的。
在進程編程中這通常不成為一個問題,因為一個進程通常在同一時間(例外是線程,它們可以同時運行於幾個CPU。)只運行於一個CPU上。另一方面,內核可能被運行於不同的CPU上的不同進程調用。SPIN
在 2.0.x版中,這不是問題,因為整個內核在一個大自旋鎖裡面。這意味著當一個CPU在內核裡,而另一個CPU例如因為系統調用而要進入內核,它不得不得到第一個CPU完成它的工作。這使LINUX的SMP安全(意思是和SMP使用它是安全的。 ),但嚴重的低效。
在 2.2.x 版中,幾個CPU同時在內核中。這是一些模塊編寫者應該注意的。我得到某人給我的使用一個SMP單元的權利,因此這本書的下一版有希望包含更多的信息。
常見的陷阱
在我把你送往這個世界和編寫內核模塊外之前,有一些事情我需要警告你。如果我沒能警告你而使某些壞的事情發生的話,請向我報告那個問題並向我索要你為此書而付給我的全額款項。
1. 使用標准庫文件 你不能那樣做。在內核模塊中你只能使用內核的函數,它們在 /proc/ksyms中可以看到。
2. 關閉中斷 你也許需要短暫的關閉中斷而那不會有什麼問題,但是如果你不能隨後打開它們,你的系統將被粘住而你不得不給它斷電。
3. 將頭粘在巨大的食肉動物裡 我或許還沒有警告你這個,但我無論如何會,只在萬一的情況下。