![]() |
(2)如何設(shè)計構(gòu)件接口。要實現(xiàn)(1)所提到的構(gòu)件的自由替換,必須設(shè)計良好的構(gòu)件接口。所有的構(gòu)件實現(xiàn)應(yīng)該繼承該接口。設(shè)計接口的原則是盡量保持接口的通用性和簡潔性。當(dāng)有新的功能添加時,可以通過繼承實現(xiàn)新的接口方便地加入原有的框架,從而實現(xiàn)軟件的無縫升級。
(3)提高網(wǎng)絡(luò)通信的效率。一個高效的通信協(xié)議需要滿足:1)上下文切換和定時器的輕型完成;2)多個協(xié)議具有統(tǒng)一的使用界面;3)在網(wǎng)絡(luò)設(shè)備,核心層和用戶層之間有高效的緩沖機(jī)制,避免不必要的拷貝。
如果操作系統(tǒng)提供了快捷的上下文切換及高效的進(jìn)程間的通信,則整個網(wǎng)絡(luò)協(xié)議棧便可以作為一個用戶態(tài)進(jìn)程對用戶進(jìn)程提供服務(wù),如果進(jìn)程上下文切換比較復(fù)雜,則整個網(wǎng)絡(luò)協(xié)議?梢宰鳛閯討B(tài)鏈接庫鏈入用戶進(jìn)程地址空間,但需要對多進(jìn)程共享的數(shù)據(jù)加鎖,進(jìn)行同步訪問控制。另外一種選擇是將網(wǎng)絡(luò)協(xié)議棧裝入內(nèi)核空間,也可以避免頻繁的進(jìn)程上下文切換帶來的系統(tǒng)開銷。
因為采用了通用的SOCKET編程接口作為最終提供給用戶使用的接口,從而使多個協(xié)議具有統(tǒng)一的使用界面。同時,在采用細(xì)粒度構(gòu)件的網(wǎng)絡(luò)協(xié)議棧中,各層協(xié)議之間的接口也是精細(xì)構(gòu)造的統(tǒng)一接口,為了避免大量數(shù)據(jù)的拷貝,需要設(shè)計良好的數(shù)據(jù)結(jié)構(gòu),同時采取"共享內(nèi)存"的方法。網(wǎng)絡(luò)協(xié)議各層次間盡量以指針方式傳遞數(shù)據(jù)。
構(gòu)件化的網(wǎng)絡(luò)協(xié)議棧具有以下優(yōu)點:
(1)針對不同網(wǎng)絡(luò)應(yīng)用的需求,能最大限度地利用領(lǐng)域相關(guān)知識進(jìn)行調(diào)整,提高了性能。
(2)底層構(gòu)件可以在不影響頂層使用的情況下進(jìn)行修改。
(3)方便用戶添加及開發(fā)調(diào)試新的協(xié)議。
該文采用上?铺┕镜腃AR構(gòu)件技術(shù)在和欣操作系統(tǒng)上實現(xiàn)了一個構(gòu)件化的網(wǎng)絡(luò)協(xié)議棧,該網(wǎng)絡(luò)協(xié)議構(gòu)件既可以加載在內(nèi)核態(tài),也可以加載到用戶態(tài),方便開發(fā)調(diào)試,有利于開發(fā)新網(wǎng)絡(luò)協(xié)議棧,其他開發(fā)者采用構(gòu)件的方法開發(fā)出了高效或者針對某特定領(lǐng)域的網(wǎng)絡(luò)協(xié)議棧,可以方便地替換和欣操作系統(tǒng)上原有的網(wǎng)絡(luò)協(xié)議棧。使用構(gòu)件化的方法開發(fā)網(wǎng)絡(luò)協(xié)議棧也可以推廣到其他支持構(gòu)件的操作系統(tǒng)上。






