內(nèi)核態(tài)與用戶態(tài)的通信結(jié)構(gòu)及通信方法
【專利摘要】本發(fā)明公開一種內(nèi)核態(tài)與用戶態(tài)的通信結(jié)構(gòu),該結(jié)構(gòu)包含:通信連接的內(nèi)核態(tài)與用戶態(tài);內(nèi)核態(tài)包含:內(nèi)核對象驅(qū)動模塊,通信連接該內(nèi)核對象驅(qū)動模塊的內(nèi)核對象模塊;用戶態(tài)包含:與內(nèi)核對象驅(qū)動模塊通信連接的庫,通信連接該庫的應(yīng)用程序。本發(fā)明代理應(yīng)用中所有通信,提供統(tǒng)一的接口給應(yīng)用程序和內(nèi)核驅(qū)動使用,內(nèi)核態(tài)和用戶態(tài)模塊在相互通信時,不再調(diào)用原linux系統(tǒng)提供的通信接口,而采用本模塊提供的統(tǒng)一接口,完成模塊化設(shè)計,提供更好的底層支持,利于大規(guī)模管理和開發(fā)。
【專利說明】內(nèi)核態(tài)與用戶態(tài)的通信結(jié)構(gòu)及通信方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種操作系統(tǒng)內(nèi)的通信技術(shù),具體涉及一種內(nèi)核態(tài)與用戶態(tài)的通信結(jié) 構(gòu)及通信方法。
【背景技術(shù)】
[0002] Linux系統(tǒng)提供了一種比較高級的內(nèi)存空間管理機制,即每個進程擁有自己獨立 的4GB的虛擬內(nèi)存空間,其中0-3GB屬于用戶空間,而3-4GB屬于內(nèi)核空間。在這種機制 下,不同的用戶空間如果不進行進程間通信是無法進行內(nèi)存直接訪問的,同樣,內(nèi)核數(shù)據(jù)和 用戶的數(shù)據(jù)也無法進行直接訪問,而必須借助與其他手段。這種機制的優(yōu)點在于保持每個 進程的獨立性,即單個的進程崩潰或者內(nèi)存訪問錯誤不會影響到其他進程,更不會讓系統(tǒng) 內(nèi)核崩潰。
[0003] Linux操作系統(tǒng)提供了幾種基本的內(nèi)核態(tài)與用戶態(tài)的通信方式,如: 1、 基于 copy_from_user 和 copy_to_user 的內(nèi)存共享; 2、 netlink 套接字。
[0004] 但上述現(xiàn)有技術(shù)具有如下缺點: 1)層次太低,缺少封裝,不利于大規(guī)模層次化的軟件開發(fā)。直接利用linux系統(tǒng)提供 的共享內(nèi)存等方法,的確也可以實現(xiàn)內(nèi)核與用戶態(tài)的通信,但是由于層次太低,代碼難以維 護,尤其當(dāng)通信的內(nèi)容過多時,不利于大規(guī)模軟件開發(fā)。
[0005] 2)不利于統(tǒng)一的管理和維護。當(dāng)通信出現(xiàn)問題需要排查時,會很困難,需要檢查工 程中所有的通信點。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明提供一種內(nèi)核態(tài)與用戶態(tài)的通信結(jié)構(gòu)及通信方法,代理應(yīng)用中所有通信, 提供統(tǒng)一的接口給應(yīng)用程序和內(nèi)核驅(qū)動使用,完成模塊化設(shè)計,提供更好的底層支持,利于 大規(guī)模管理和開發(fā)。
[0007] 為實現(xiàn)上述目的,本發(fā)明提供一種內(nèi)核態(tài)與用戶態(tài)的通信結(jié)構(gòu),其特點是,該結(jié)構(gòu) 包含:通信連接的內(nèi)核態(tài)與用戶態(tài); 內(nèi)核態(tài)包含:內(nèi)核對象驅(qū)動模塊,通信連接該內(nèi)核對象驅(qū)動模塊的內(nèi)核對象模塊; 用戶態(tài)包含:與內(nèi)核對象驅(qū)動模塊通信連接的庫,通信連接該庫的應(yīng)用程序。
[0008] 上述內(nèi)核對象驅(qū)動模塊下通信連接有若干內(nèi)核對象模塊;該內(nèi)核對象驅(qū)動模塊為 其所連接的若干內(nèi)核對象模塊提供統(tǒng)一的與用戶態(tài)通信的接口。
[0009] 上述內(nèi)核對象驅(qū)動模塊包含有注冊的收方向數(shù)據(jù)處理接口和數(shù)據(jù)發(fā)送接口。
[0010] 上述庫下通信連接有若干應(yīng)用程序;該庫對其所連接的若干應(yīng)用程序提供統(tǒng)一的 與內(nèi)核態(tài)通信的接口。
[0011] 上述庫包含注冊的收方向數(shù)據(jù)處理接口和數(shù)據(jù)發(fā)送接口。
[0012] 一種上述內(nèi)核態(tài)與用戶態(tài)的通信結(jié)構(gòu)的通信方法,其特點是,該方法包含: 分別建立內(nèi)核對象驅(qū)動模塊和庫; 將內(nèi)核對象驅(qū)動模塊注冊到內(nèi)核態(tài),庫注冊到用戶態(tài);其中內(nèi)核對象驅(qū)動模塊與庫的 服務(wù)字符串一致; 內(nèi)核態(tài)與用戶態(tài)之間通過內(nèi)核對象驅(qū)動模塊和庫實現(xiàn)交互。
[0013] 上述內(nèi)核對象驅(qū)動模塊在內(nèi)核對象模塊前初始化;啟動一內(nèi)核進程,實時循環(huán)阻 止監(jiān)聽來自用戶態(tài)的信息,并將用戶態(tài)的信息分發(fā)給各個內(nèi)核對象模塊。
[0014] 上述通信方法還包含內(nèi)核對象驅(qū)動模塊的調(diào)試方法,若發(fā)生故障,即輸出有故障 的內(nèi)核態(tài)的信息。
[0015] 上述庫在應(yīng)用程序前進行初始化,啟動一線程,實時循環(huán)阻止監(jiān)聽來自內(nèi)核態(tài)的 信息,將來自內(nèi)核態(tài)的信息分發(fā)給各個應(yīng)用程序。
[0016] 上述通信方法還包含庫的調(diào)試方法,若發(fā)生故障,即輸出有故障的用戶態(tài)的信息。
[0017] 本發(fā)明內(nèi)核態(tài)與用戶態(tài)的通信結(jié)構(gòu)及通信方法和現(xiàn)有技術(shù)的通信技術(shù)相比,其優(yōu) 點在于,本發(fā)明代理應(yīng)用中所有通信,提供統(tǒng)一的接口給應(yīng)用程序和內(nèi)核驅(qū)動使用,內(nèi)核態(tài) 和用戶態(tài)模塊在相互通信時,不再調(diào)用原linux系統(tǒng)提供的通信接口,而采用本模塊提供 的統(tǒng)一接口,完成模塊化設(shè)計,提供更好的底層支持,利于大規(guī)模管理和開發(fā)。
【專利附圖】
【附圖說明】
[0018] 圖1為本發(fā)明內(nèi)核態(tài)與用戶態(tài)的通信結(jié)構(gòu)的結(jié)構(gòu)示意圖; 圖2為本發(fā)明內(nèi)核態(tài)與用戶態(tài)的通信方法的方法流程圖。
【具體實施方式】
[0019] 以下結(jié)合附圖,進一步說明本發(fā)明的具體實施例。
[0020] 如圖1所示,本發(fā)明公開一種linux系統(tǒng)中內(nèi)核態(tài)1 (kernel space)與用戶態(tài)2 (user space)的通信結(jié)構(gòu),該結(jié)構(gòu)包含:通信連接的內(nèi)核態(tài)1與用戶態(tài)2。
[0021] 其中,內(nèi)核態(tài)1包含:內(nèi)核對象(ko,kernel object)驅(qū)動模塊11和通信連接該內(nèi) 核對象驅(qū)動模塊11的若干內(nèi)核對象模塊12。內(nèi)核對象驅(qū)動模塊11用于向其他的內(nèi)核對象 模塊提供統(tǒng)一的與用戶態(tài)2通信的接口,并承擔(dān)內(nèi)核態(tài)1下的調(diào)試和維護。內(nèi)核對象驅(qū)動 模塊11必須在其他內(nèi)核對象模塊12之前進行初始化。
[0022] 內(nèi)核態(tài)1的實現(xiàn)主要包括以下幾個內(nèi)容: 1)基于效率的考慮,底層技術(shù)實現(xiàn)依賴于字符設(shè)備的設(shè)備驅(qū)動程序中對設(shè)備的I/O通 道進行管理的函數(shù)(ioctl)來實現(xiàn)字符通信。
[0023] 2)內(nèi)核對象驅(qū)動模塊11的初始化將啟動一個內(nèi)核進程,用于不斷阻止監(jiān)聽來自 用戶態(tài)2的信息,并負(fù)責(zé)將來自用戶態(tài)2的信息分發(fā)給內(nèi)核態(tài)其他的內(nèi)核對象模塊12。
[0024] 3)內(nèi)核對象驅(qū)動模塊11將提供一組回調(diào)接口(即注冊的收方向數(shù)據(jù)處理接口),用 于內(nèi)核對象模塊12注冊到內(nèi)核對象驅(qū)動模塊11,從而實現(xiàn)數(shù)據(jù)接收,不同的內(nèi)核對象模塊 12在注冊時用不同的字符串來區(qū)分。
[0025] 4)內(nèi)核對象驅(qū)動模塊11將提供一個數(shù)據(jù)發(fā)送接口,用于內(nèi)核對象模塊12往用戶 態(tài)發(fā)送數(shù)據(jù)。
[0026] 上述注冊的收方向數(shù)據(jù)處理接口和數(shù)據(jù)發(fā)送接口為內(nèi)核態(tài)下內(nèi)核對象驅(qū)動模塊 11提供給其他內(nèi)核對象模塊12調(diào)用,通過這兩個接口,其他內(nèi)核對象模塊12可以和用戶態(tài) 2下的進程通信。
[0027] 內(nèi)核對象驅(qū)動模塊11中的核心進程工作偽碼包含:循環(huán)阻塞收取來自用戶態(tài)2下 的數(shù)據(jù),根據(jù)收到數(shù)據(jù)的目的不同,分發(fā)到不同的內(nèi)核對象模塊12中去。內(nèi)核對象驅(qū)動模 塊11的實現(xiàn)還包括了調(diào)試手段,如果出現(xiàn)故障,可以打印出是哪個內(nèi)核對象模塊12出了問 題。
[0028] 用戶態(tài)2包含:與內(nèi)核對象驅(qū)動模塊11通信連接的一組已編譯的庫21 (. a或.〇 文件),以及通信連接該庫21的若干應(yīng)用程序22。該庫21向用戶態(tài)2下的應(yīng)用程序22提 供統(tǒng)一的接口,用于用戶應(yīng)用程序22與內(nèi)核態(tài)1的通信,并承擔(dān)用戶態(tài)2下的調(diào)試和維護。
[0029] 用戶態(tài)的實現(xiàn)主要包括以下幾個內(nèi)容: 1)底層技術(shù)實現(xiàn)依賴于字符設(shè)備的ioctl來實現(xiàn)字符通信。
[0030] 2)庫21的初始化將啟動一個線程,用于不斷阻止監(jiān)聽來自內(nèi)核態(tài)1的信息,并負(fù) 責(zé)將來自內(nèi)核態(tài)1的信息分發(fā)給其他應(yīng)用程序22。
[0031] 3)庫21將提供一組回調(diào)接口(即注冊的收方向數(shù)據(jù)處理接口),用于其他應(yīng)用程序 22注冊到庫21用于接收數(shù)據(jù),不同的應(yīng)用程序22在注冊時用不同的字符串來區(qū)分,該字符 必須與內(nèi)核態(tài)1下發(fā)送的字符一致。
[0032] 4)庫21將提供一個數(shù)據(jù)發(fā)送接口,用于其他應(yīng)用程序22往內(nèi)核態(tài)1發(fā)送數(shù)據(jù)。
[0033] 上述注冊的收方向數(shù)據(jù)處理接口和數(shù)據(jù)發(fā)送接口為用戶態(tài)2下庫21提供給其他 用戶態(tài)2應(yīng)用模塊22調(diào)用,通過這兩個接口,其他用戶態(tài)應(yīng)用模塊22可以和內(nèi)核態(tài)1下的 進程通信。
[0034] 用戶態(tài)2線程的運作流程與內(nèi)核態(tài)1大致一致。庫21的核心進程工作偽碼包含: 循環(huán)阻塞收取來自內(nèi)核態(tài)1下的數(shù)據(jù),根據(jù)收到數(shù)據(jù)的目的不同,分發(fā)到不同的應(yīng)用程序 22中去。庫21的實現(xiàn)還包括了調(diào)試手段,如果出現(xiàn)故障,可以打印出是哪個應(yīng)用程序22出 了問題。
[0035] 如圖2所示,本發(fā)明還公開一種內(nèi)核態(tài)與用戶態(tài)的通信結(jié)構(gòu)的通信方法,該方法 包含: 步驟1、分別建立內(nèi)核對象驅(qū)動模塊和庫。
[0036] 具體為分別實現(xiàn)本應(yīng)用在內(nèi)核態(tài)與用戶態(tài)的字符信息處理代碼: 內(nèi)核態(tài):Function_kernel (char* buffer, int length); 用戶態(tài):Function_user (char* buffer, int length) 〇
[0037] 步驟2、將內(nèi)核對象驅(qū)動模塊注冊到內(nèi)核態(tài),庫注冊到用戶態(tài);其中內(nèi)核對象驅(qū)動 模塊與庫的服務(wù)字符串一致。
[0038] 具體實現(xiàn)如下: 內(nèi)核態(tài):Proxy_ku_service_register ( "example_proxy",F(xiàn)unction_kernel ); 用戶態(tài):Proxy_uk_service_register( "example_proxy,',F(xiàn)unction_user) 〇
[0039] 步驟3、內(nèi)核態(tài)與用戶態(tài)之間通過內(nèi)核對象驅(qū)動模塊和庫實現(xiàn)交互。
[0040] 指令實現(xiàn)為: 內(nèi)核態(tài):Proxy_ku_send (''example_proxy,',char* buffer, int length); 用戶態(tài):Proxy_uk_send ( "example_proxy",char* buffer, int length) 〇
[0041] 在完成上述過程后,所有的內(nèi)核態(tài)和用戶態(tài)模塊在相互通信時,不再調(diào)用原linux 系統(tǒng)提供的通信接口,而采用本模塊提供的統(tǒng)一接口。
[0042] 其中Function_kernel、Function_user兩個數(shù)據(jù)處理函數(shù)負(fù)責(zé)處理接收到的數(shù) 據(jù),而Proxy_ku_send、Proxy_uk_send負(fù)責(zé)發(fā)送數(shù)據(jù),而底層的實現(xiàn)對用戶完全透明,被內(nèi) 核態(tài)與用戶態(tài)的通信結(jié)構(gòu)的內(nèi)核對象驅(qū)動模塊或庫接管,應(yīng)用程序不再關(guān)心實現(xiàn)和調(diào)試。
[0043] 盡管本發(fā)明的內(nèi)容已經(jīng)通過上述優(yōu)選實施例作了詳細(xì)介紹,但應(yīng)當(dāng)認(rèn)識到上述的 描述不應(yīng)被認(rèn)為是對本發(fā)明的限制。在本領(lǐng)域技術(shù)人員閱讀了上述內(nèi)容后,對于本發(fā)明的 多種修改和替代都將是顯而易見的。因此,本發(fā)明的保護范圍應(yīng)由所附的權(quán)利要求來限定。
【權(quán)利要求】
1. 一種內(nèi)核態(tài)與用戶態(tài)的通信結(jié)構(gòu),其特征在于,該結(jié)構(gòu)包含:通信連接的內(nèi)核態(tài)(1) 與用戶態(tài)(2); 內(nèi)核態(tài)(1)包含:內(nèi)核對象驅(qū)動模塊(11),通信連接該內(nèi)核對象驅(qū)動模塊(11)的內(nèi)核 對象模塊(12); 用戶態(tài)(2 )包含:與內(nèi)核對象驅(qū)動模塊(11)通信連接的庫(21 ),通信連接該庫(21)的 應(yīng)用程序(22)。
2. 如權(quán)利要求1所述的內(nèi)核態(tài)與用戶態(tài)的通信結(jié)構(gòu),其特征在于,所述內(nèi)核對象驅(qū)動 模塊(11)下通信連接有若干內(nèi)核對象模塊(12);該內(nèi)核對象驅(qū)動模塊(11)為其所連接的 若干內(nèi)核對象模塊(12 )提供統(tǒng)一的與用戶態(tài)(2 )通信的接口。
3. 如權(quán)利要求1或2所述的內(nèi)核態(tài)與用戶態(tài)的通信結(jié)構(gòu),其特征在于,所述內(nèi)核對象驅(qū) 動模塊(11)包含有注冊的收方向數(shù)據(jù)處理接口和數(shù)據(jù)發(fā)送接口。
4. 如權(quán)利要求1所述的內(nèi)核態(tài)與用戶態(tài)的通信結(jié)構(gòu),其特征在于,所述庫(21)下通信 連接有若干應(yīng)用程序(22);該庫(21)對其所連接的若干應(yīng)用程序(22)提供統(tǒng)一的與內(nèi)核 態(tài)(1)通信的接口。
5. 如權(quán)利要求1或4所述的內(nèi)核態(tài)與用戶態(tài)的通信結(jié)構(gòu),其特征在于,所述庫(21)包 含注冊的收方向數(shù)據(jù)處理接口和數(shù)據(jù)發(fā)送接口。
6. -種如權(quán)利要求1至5所述內(nèi)核態(tài)與用戶態(tài)的通信結(jié)構(gòu)的通信方法,其特征在于,該 方法包含: 分別建立內(nèi)核對象驅(qū)動模塊和庫; 將內(nèi)核對象驅(qū)動模塊注冊到內(nèi)核態(tài),庫注冊到用戶態(tài);其中內(nèi)核對象驅(qū)動模塊與庫的 服務(wù)字符串一致; 內(nèi)核態(tài)與用戶態(tài)之間通過內(nèi)核對象驅(qū)動模塊和庫實現(xiàn)交互。
7. 如權(quán)利要求6所述的內(nèi)核態(tài)與用戶態(tài)的通信結(jié)構(gòu)的通信方法,其特征在于,所述內(nèi) 核對象驅(qū)動模塊在內(nèi)核對象模塊前初始化;啟動一內(nèi)核進程,實時循環(huán)阻止監(jiān)聽來自用戶 態(tài)的信息,并將用戶態(tài)的信息分發(fā)給各個內(nèi)核對象模塊。
8. 如權(quán)利要求7所述的內(nèi)核態(tài)與用戶態(tài)的通信結(jié)構(gòu)的通信方法,其特征在于,所述通 信方法還包含內(nèi)核對象驅(qū)動模塊的調(diào)試方法,若發(fā)生故障,即輸出有故障的內(nèi)核態(tài)的信息。
9. 如權(quán)利要求6所述的內(nèi)核態(tài)與用戶態(tài)的通信結(jié)構(gòu)的通信方法,其特征在于,所述庫 在應(yīng)用程序前進行初始化,啟動一線程,實時循環(huán)阻止監(jiān)聽來自內(nèi)核態(tài)的信息,將來自內(nèi)核 態(tài)的信息分發(fā)給各個應(yīng)用程序。
10. 如權(quán)利要求9所述的內(nèi)核態(tài)與用戶態(tài)的通信結(jié)構(gòu)的通信方法,其特征在于,所述通 信方法還包含庫的調(diào)試方法,若發(fā)生故障,即輸出有故障的用戶態(tài)的信息。
【文檔編號】G06F9/54GK104123194SQ201410338030
【公開日】2014年10月29日 申請日期:2014年7月16日 優(yōu)先權(quán)日:2014年7月16日
【發(fā)明者】吳曉宇 申請人:上海斐訊數(shù)據(jù)通信技術(shù)有限公司