之前在談 function library 與 system call 的時候就有提到,位甚麼在寫 kernel module 時,不像寫一般程式一樣,需要對引用的函數坐 include 的宣告動作,哪是因為 kernel module 會去 link 整個 kernel 的 symbol 檔。也就是說,不管你寫的 kernel module 是大或小,都會 link 整個 kernel,而這對於程式中變數的使用是有風險的。
在程式語言中,變數存在的程式範圍稱為 "命名空間 (name space)",意思就是限定變數在程式中使用的範圍。如果是全域變數,則從程式的一開始到結束,都可以被參考到,其優點就是免除函數傳地參數,確點如果有同名的變數則會造成誤用。而如果是區域變數,則僅限在宣告他的函數中使用。
為了降低 kernel module 變數命名空間的問題,就是在 kernel 中定義自己程式的 symbol table,之後會講到做法。