Unix內(nèi)核與開源講解
在Unix內(nèi)核中使用浮點(diǎn)數(shù)非常困難,如果你想給自己找麻煩的話,可以試試。用戶空間代碼要使用浮點(diǎn)數(shù)指令時(shí),一般來說會(huì)產(chǎn)生一個(gè)中斷,內(nèi)核捕獲該中斷并作相應(yīng)的處理。
然而,Unix內(nèi)核沒法捕獲自己。而且,要使用浮點(diǎn)指令,不但要保存浮點(diǎn)寄存器,還要做很多繁瑣的事情——光看看Unix內(nèi)核如何為用戶空間代碼使用浮點(diǎn)數(shù)就知道了,可以參考進(jìn)程調(diào)度里的上下文切換。
用戶空間的程序可以在棧上申請(qǐng)大量的空間——定義足夠多的局部變量,因?yàn)橛脩艨臻g的棧非常大,而且可以動(dòng)態(tài)增長。不過有些不夠智能的系統(tǒng)做不到動(dòng)態(tài)增長。然而,Unix內(nèi)核的棧非常小,而且無法動(dòng)態(tài)增長。
作為一個(gè)搶占式多任務(wù)、支持對(duì)稱多處理(SMP)的系統(tǒng),同步和并發(fā)是任何一個(gè)Unix內(nèi)核hacker都需要時(shí)時(shí)刻刻小心的問題。調(diào)度器“興之所至”,調(diào)度進(jìn)程,這就需要同步;加上來自CPU外的各種中斷導(dǎo)致Unix內(nèi)核需要對(duì)某些代碼或數(shù)據(jù)加以保護(hù)。
而搶占的意思就是,無論誰占用了CPU,都有可能被其他進(jìn)程搶掉,內(nèi)核也不例外。Linux對(duì)于競(jìng)態(tài)條件提供了spinlock(自旋鎖)和semaphore(信號(hào)量)。
最后就是移植性問題。這個(gè)問題從來都不見簡(jiǎn)單,而且linux的目標(biāo)是多種平臺(tái)都能運(yùn)行,因此移植性顯得更為重要。字節(jié)序問題就是一個(gè)典型的移植性問題。然而,應(yīng)用程序可能僅僅為一個(gè)平臺(tái)開發(fā)。
看了這些,是不是覺得,其實(shí)Unix內(nèi)核開發(fā)也不難呢?
有雄心的hacker們,不要被OS kernel這個(gè)名詞嚇倒??纯碙inux Kernel Development,準(zhǔn)備好Linux內(nèi)核源碼,沏上一杯茶,然后你就可以開發(fā)內(nèi)核了!
參考:
Linux Kernel Development, 2nd edition, by Robert Love
Copyleft (C) 2007 raof01. 本文可以用于除商業(yè)用途外的所有用途。若要用于商業(yè)用途,請(qǐng)與作者聯(lián)系。
【編輯推薦】