新四季網

用戶態程序與內核交互報文的方法及系統的製作方法

2023-06-04 19:39:26

用戶態程序與內核交互報文的方法及系統的製作方法
【專利摘要】本發明公開了一種用戶態程序與內核交互報文的方法及系統,涉及作業系統【技術領域】,本發明通過設置內核和用戶態程序共享的內存,當內核有報文發送給用戶態程序時,僅需改變內存的數值,用戶態程序在初始化過程中映射了該內存,因此可以讀到該數值,用戶態程序通過簡單的讀取該數值來判斷是否有報文,如果有報文再去收取報文,避免了不停的系統調用,同時避免了大量的無效操作,提高了整個系統的性能。
【專利說明】用戶態程序與內核交互報文的方法及系統
【技術領域】
[0001]本發明涉及作業系統【技術領域】,特別涉及一種用戶態程序與內核交互報文的方法及系統。
【背景技術】
[0002]各種基於作業系統(例如:linux)開發的用戶態程序,都不可避免的會和內核有報文交互,用戶態程序可能是要內核將網絡報文發送出去,也可能是要把報文交給內核進入協議棧。
[0003]現有技術方法中的用戶態程序和內核之間的交互方法為:通過在用戶態創建一個線程,該線程不停的通過系統調用來獲取內核發送過來的數據,當內核有數據發給用戶態程序時,該系統調用執行成功,當沒有數據發給用戶態程序時,該系統調用執行失敗,但由於是通過線程不停的系統調用來獲取內核發送過來的數據,在作業系統正常的運行狀態下,大部分時間內核不會給用戶態程序發送報文,而大量系統調用使整個系統的性能大幅下降。

【發明內容】

[0004](一)要解決的技術問題
[0005]本發明要解決的技術問題是:如何提高系統的性能。
[0006](二)技術方案
[0007]為解決上述技術問題,本發明提供了一種用戶態程序與內核交互報文的方法,所述方法包括以下步驟:
[0008]S1:內核申請一塊物理地址連續的內存,並將所述內存設置為與用戶態程序共
[0009]S2:當所述內核向所述用戶態程序發送報文時,則改變所述內存中所存儲的數值;
[0010]S3:所述用戶態程序讀取所述內存中所存儲的數值,並判斷所述內存中所存儲的數值是否被改變,若所述數值被改變,則認定為所述內核向所述用戶態程序發送了報文,並進行報文接收。
[0011]其中,步驟SI包括:
[0012]SlO1:內核申請一塊物理地址連續的內存,並將申請到內存的虛擬地址轉換成物理地址;
[0013]S102:用戶態程序獲取所述內存的物理地址和大小,並將所述內存的物理地址通過mmap接口及所述內存大小轉換為用戶態程序能訪問的虛擬地址;
[0014]S103:內核通過全局指針g_pkernel來指向所述內存,用戶態程序通過全局指針g_pusr來指向所述內存,以實現內核與用戶態程序共享所述內存。
[0015]其中,步驟S2中,所述內核通過下式改變所述內存中所存儲的數值,[0016](* (size_t*)g_pkernel)+=1,
[0017]其中,*(size_t*) g_pkernel為size_t*類型的全局指針g_pkernel所指向的內存中的數值,+=I為自加I運算。
[0018]其中,步驟S3中,所述用戶態程序通過比較var和*(size_t*)g_pusr來判斷所述內存中所存儲的數值是否被改變,當var和*(size_t*)g_pusr不相等時,貝U認定為所述內核向所述用戶態程序發送了報文,var+=l,並進行報文接收;
[0019]其中,var為初值為O的變量,* (size_t*) g_pusr為size_t*類型的全局指針g_pusr所指向的內存中的數值。
[0020]其中,所述內核為Iinux作業系統的內核。
[0021]本發明還公開了一種用戶態程序與內核交互報文的系統,所述系統包括:內核和用戶態程序,
[0022]所述內核,用於申請一塊物理地址連續的內存,並將所述內存設置為與用戶態程序共孚;
[0023]所述內核,進一步用於向所述用戶態程序發送報文時,改變所述內存中所存儲的數值;
[0024]所述用戶態程序,用於讀取所述內存中所存儲的數值,並判斷所述內存中所存儲的數值是否被改變,若所述數值被改變,則認定為所述內核向所述用戶態程序發送了報文,並進行報文接收。
[0025]其中,所述內核,進一步用於申請一塊物理地址連續的內存,並將申請到內存的虛擬地址轉換成物理地址;
[0026]所述用戶態程序,進一步用於獲取所述內存的物理地址和大小,並將所述內存的物理地址通過_ap接口及所述內存大小轉換為用戶態程序能訪問的虛擬地址;
[0027]所述內核,進一步用於通過全局指針g_pkernel來指向所述內存,用戶態程序通過全局指針g_pusr來指向所述內存,以實現內核與用戶態程序共享所述內存。
[0028]其中,所述內核通過下式改變所述內存中所存儲的數值,
[0029](* (size_t*)g_pkernel)+=1,
[0030]其中,*(size_t*) g_pkernel為size_t*類型的全局指針g_pkernel所指向的內存中的數值,+=1為自加I運算。
[0031 ] 其中,所述用戶態程序通過比較var和* (size_t*) g_pusr來判斷所述內存中所存儲的數值是否被改變,當var和*(size_t*)g_pusr不相等時,貝U認定為所述內核向所述用戶態程序發送了報文,var+=l,並進行報文接收;
[0032]其中,var為初值為O的變量,* (size_t*) g_pusr為size_t*類型的全局指針g_pusr所指向的內存中的數值。
[0033]其中,所述內核為Iinux作業系統的內核。
[0034](三)有益效果
[0035]本發明通過設置內核和用戶態程序共享的內存,當內核有報文發送給用戶態程序時,僅需改變內存的數值,用戶態程序在初始化過程中映射了該內存,因此可以讀到該數值,用戶態程序通過簡單的讀取該數值來判斷是否有報文,如果有報文再去收取報文,避免了不停的系統調用,同時避免了大量的無效操作,提高了整個系統的性能。【專利附圖】

【附圖說明】
[0036]圖1是本發明一種實施方式的用戶態程序與內核交互報文的方法流程圖。
【具體實施方式】
[0037]下面結合附圖和實施例,對本發明的【具體實施方式】作進一步詳細描述。以下實施例用於說明本發明,但不用來限制本發明的範圍。
[0038]圖1是本發明一種實施方式的用戶態程序與內核交互報文的方法流程圖;參照圖1,所述方法包括以下步驟:
[0039]S1:內核申請一塊物理地址連續的內存,並將所述內存設置為與用戶態程序共
[0040]S2:當所述內核向所述用戶態程序發送報文時,則改變所述內存中所存儲的數值;
[0041]S3:所述用戶態程序讀取所述內存中所存儲的數值,並判斷所述內存中所存儲的數值是否被改變,若所述數值被改變,則認定為所述內核向所述用戶態程序發送了報文,並進行報文接收。
[0042]為了方便訪問內存,優選地,步驟SI包括:
[0043]SlOl:內核申請一塊物理地址連續的內存,並將申請到內存的虛擬地址轉換成物理地址;
[0044]S102:用戶態程序獲取(可在用戶態程序初始化時,通過系統調用等方法來獲取)所述內存的物理地址kernel_vir和大小,並將所述內存的物理地址通過mmap接口及所述內存大小轉換為用戶態程序能訪問的虛擬地址phyaddr ;
[0045]S103:內核通過全局指針g_pkernel來指向所述內存,用戶態程序通過全局指針g_pusr來指向所述內存,以實現內核與用戶態程序共享所述內存。
[0046]為便於改變內存中存儲的數值,優選地,步驟S2中,所述內核通過下式改變所述內存中所存儲的數值,
[0047](* (size_t*)g_pkernel)+=1,
[0048]其中,*(size_t*) g_pkernel為size_t*類型的全局指針g_pkernel所指向的內存中的數值,+=1為自加I運算。
[0049]為便於確認內核是否向用戶態程序發送了報文,優選地,步驟S3中,所述用戶態程序通過比較var和*(size_t*)g_pusr來判斷所述內存中所存儲的數值是否被改變,當var和*(size_t*)g_pusr不相等時,則認定為所述內核向所述用戶態程序發送了報文,var+=l,並進行報文接收;
[0050]其中,var為初值為O的變量,* (size_t*) g_pusr為size_t*類型的全局指針g_pusr所指向的內存中的數值(由於內核和用戶態程序共享所述內存,故而當內核對內存中存儲的數值進行改變後,則用戶態程序讀取到的所述內存中所存儲的數值也發生了相應改變);size_t是在標準C庫中定義的,在32位系統中時,其為unsigned int,是4位元組的(即32位);在64位系統中時,其為long unsigned int,是8位元組的(即64位),利用該類型可以增強程序的可移植性。[0051]在具體判斷所述內存中所存儲的數值是否被改變時,可由用戶態程序在初始化時,創建一個線程,該線程裡面有如下指令:
[0052]static size_t var=0 ;聲明一個靜態變量 var
[0053]if (var==*(size_t*)g_pusr)說明內核沒有向用戶態程序發送報文
[0054]else說明var和* (size_t*) g_pusr不相等了,表明內核向用戶態程序發送了報文,此時用戶態程序可以通過系統調用等方法去收取報文,然後設置var+=l,說明用戶態程序已經收到了一個報文,下次線程輪訓時,如果var和* (size_t*) g_pusr相等,說明已經沒有報文了,如果不相等說明還有報文。
[0055]上述指令,當內核有報文發送給用戶態程序時,將內存數值僅需做加I的改寫,用戶態程序在初始化過程中映射了該內存,因此可以讀到該數值,線程每次輪訓時通過簡單的讀取該數值來判斷是否有報文,如果有報文再通過系統調用去收取報文,避免了不停的系統調用,避免了大量的無效操作,提高了整個系統的性能。
[0056]優選地,所述內核為Iinux作業系統的內核。
[0057]本發明還公開了一種用戶態程序與內核交互報文的系統,所述系統包括:內核和用戶態程序,
[0058]所述內核,用於申請一塊物理地址連續的內存,並將所述內存設置為與用戶態程序共孚;
[0059]所述內核,進一步用於向所述用戶態程序發送報文時,改變所述內存中所存儲的數值;
[0060]所述用戶態程序,用於讀取所述內存中所存儲的數值,並判斷所述內存中所存儲的數值是否被改變,若所述數值被改變,則認定為所述內核向所述用戶態程序發送了報文,並進行報文接收。
[0061 ] 優選地,所述內核,進一步用於申請一塊物理地址連續的內存,並將申請到內存的虛擬地址轉換成物理地址;
[0062]所述用戶態程序,進一步用於獲取所述內存的物理地址和大小,並將所述內存的物理地址通過_ap接口及所述內存大小轉換為用戶態程序能訪問的虛擬地址;
[0063]所述內核,進一步用於通過全局指針g_pkernel來指向所述內存,用戶態程序通過全局指針g_pusr來指向所述內存,以實現內核與用戶態程序共享所述內存。
[0064]優選地,所述內核通過下式改變所述內存中所存儲的數值,
[0065](* (size_t*)g_pkernel)+=1,
[0066]其中,*(size_t*) g_pkernel為size_t*類型的全局指針g_pkernel所指向的內存中的數值,+=1為自加I運算。
[0067]優選地,所述用戶態程序通過比較var和* (size_t*) g_pusr來判斷所述內存中所存儲的數值是否被改變,當var和*(size_t*)g_pusr不相等時,貝U認定為所述內核向所述用戶態程序發送了報文,var+=l,並進行報文接收;
[0068]其中,var為初值為O的變量,* (size_t*) g_pusr為size_t*類型的全局指針g_pusr所指向的內存中的數值。
[0069]優選地,所述內核為Iinux作業系統的內核。
[0070]以上實施方式僅用於說明本發明,而並非對本發明的限制,有關【技術領域】的普通技術人員,在不脫離本發明的精神和範圍的情況下,還可以做出各種變化和變型,因此所有等同的技術方案也屬於本發明的範疇,本發明的專利保護範圍應由權利要求限定。
【權利要求】
1.一種用戶態程序與內核交互報文的方法,其特徵在於,所述方法包括以下步驟: S1:內核申請一塊物理地址連續的內存,並將所述內存設置為與用戶態程序共享; S2:當所述內核向所述用戶態程序發送報文時,則改變所述內存中所存儲的數值; S3:所述用戶態程序讀取所述內存中所存儲的數值,並判斷所述內存中所存儲的數值是否被改變,若所述數值被改變,則認定為所述內核向所述用戶態程序發送了報文,並進行報文接收。
2.如權利要求1所述的方法,其特徵在於,步驟SI包括: S101:內核申請一塊物理地址連續的內存,並將申請到內存的虛擬地址轉換成物理地址; S102:用戶態程序獲取所述內存的物理地址和大小,並將所述內存的物理地址通過mmap接口及所述內存大小轉換為用戶態程序能訪問的虛擬地址; S103:內核通過全局指針g_pkernel來指向所述內存,用戶態程序通過全局指針g_pusr來指向所述內存,以實現內核與用戶態程序共享所述內存。
3.如權利要求2所述的方法,其特徵在於,步驟S2中,所述內核通過下式改變所述內存中所存儲的數值,
(氺(size_t氺)g_pkernel)+=1, 其中,*(size_t*)g_pkernel為size_t*類型的全局指針g_pkernel所指向的內存中的數值,+=1為自加I運算。
4.如權利要求3所述的方法,其特徵在於,步驟S3中,所述用戶態程序通過比較var和*(size_t*)g_pusr來判斷所述內存中所存儲的數值是否被改變,當var和*(size_t*)g_pusr不相等時,則認定為所述內核向所述用戶態程序發送了報文,var+=l,並進行報文接收; 其中,var為初值為O的變量,*(size_t*)g_pusr為size_t*類型的全局指針g_pusr所指向的內存中的數值。
5.如權利要求1~4中任一項所述的方法,其特徵在於,所述內核為Iinux作業系統的內核。
6.一種用戶態程序與內核交互報文的系統,其特徵在於,所述系統包括:內核和用戶態程序, 所述內核,用於申請一塊物理地址連續的內存,並將所述內存設置為與用戶態程序共 所述內核,進一步用於向所述用戶態程序發送報文時,改變所述內存中所存儲的數值; 所述用戶態程序,用於讀取所述內存中所存儲的數值,並判斷所述內存中所存儲的數值是否被改變,若所述數值被改變,則認定為所述內核向所述用戶態程序發送了報文,並進行報文接收。
7.如權利要求6所述的系統,其特徵在於,所述內核,進一步用於申請一塊物理地址連續的內存,並將申請到內存的虛擬地址轉換成物理地址; 所述用戶態程序,進一步用於獲取所述內存的物理地址和大小,並將所述內存的物理地址通過-ap接口及所述內存大小轉換為用戶態程序能訪問的虛擬地址;所述內核,進一步用於通過全局指針g_pkernel來指向所述內存,用戶態程序通過全局指針g_pusr來指向所述內存,以實現內核與用戶態程序共享所述內存。
8.如權利要求7所述的系統,其特徵在於,所述內核通過下式改變所述內存中所存儲的數值,
(氺(size_t氺)g_pkernel)+=1, 其中,*(size_t*)g_pkernel為size_t*類型的全局指針g_pkernel所指向的內存中的數值,+=1為自加I運算。
9.如權利要求8所述的系統,其特徵在於,所述用戶態程序通過比較var和*(size_t*)g_pusr來判斷所述內存中所存儲的數值是否被改變,當var和* (size_t*) g_pusr不相等時,則認定為所述內核向所述用戶態程序發送了報文,var+=l,並進行報文接收; 其中,var為初值為O的變量,*(size_t*)g_pusr為size_t*類型的全局指針g_pusr所指向的內存中的數值。
10.如權利要求6~9中任一項所述的系統,其特徵在於,所述內核為Iinux作業系統 的內核。
【文檔編號】G06F12/02GK103942149SQ201410118936
【公開日】2014年7月23日 申請日期:2014年3月27日 優先權日:2014年3月27日
【發明者】李鵬 申請人:漢柏科技有限公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀