亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種在Linux系統(tǒng)下共享熱插拔設(shè)備的方法與裝置制造方法

文檔序號(hào):6515905閱讀:275來源:國(guó)知局
一種在Linux系統(tǒng)下共享熱插拔設(shè)備的方法與裝置制造方法
【專利摘要】本發(fā)明公開了一種在Linux系統(tǒng)下共享熱插拔設(shè)備的方法和裝置,該方法包括:系統(tǒng)啟動(dòng)時(shí)初始化共享設(shè)備,并將熱插拔設(shè)備檢測(cè)模塊注冊(cè)為L(zhǎng)inux熱插拔系統(tǒng)的用戶空間處理模塊;檢測(cè)到熱插拔事件后,內(nèi)核將熱插拔信息設(shè)置為系統(tǒng)環(huán)境變量,并通過調(diào)用用戶空間處理模塊來調(diào)用熱插拔設(shè)備檢測(cè)模塊;熱插拔設(shè)備檢測(cè)模塊從系統(tǒng)環(huán)境變量中獲取熱插拔信息;根據(jù)熱插拔信息獲取熱插拔的設(shè)備信息和動(dòng)作信息;根據(jù)熱插拔的動(dòng)作信息和設(shè)備信息調(diào)用共享設(shè)備維護(hù)接口對(duì)共享設(shè)備進(jìn)行相應(yīng)地處理。采用本發(fā)明的方法和裝置,能降低系統(tǒng)負(fù)載,增強(qiáng)系統(tǒng)穩(wěn)定性,并節(jié)約內(nèi)存空間。
【專利說明】一種在Linux系統(tǒng)下共享熱插拔設(shè)備的方法與裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及設(shè)備共享領(lǐng)域,尤其涉及一種在Linux系統(tǒng)下共享熱插拔設(shè)備的方法
與裝置。
【背景技術(shù)】
[0002]為了對(duì)系統(tǒng)功能進(jìn)行實(shí)時(shí)擴(kuò)展,當(dāng)前的計(jì)算機(jī)系統(tǒng)都支持設(shè)備熱插拔操作。熱插拔即“帶電插拔”,是指可以在計(jì)算機(jī)系統(tǒng)運(yùn)行期間,不切斷系統(tǒng)電源的情況下安裝或者移除外部設(shè)備。熱插拔設(shè)備這個(gè)過程可以是插入U(xiǎn)SB無線網(wǎng)卡、添加新的SATA硬盤或者移除已損壞的SATA硬盤、添加或移除板卡等等,從而達(dá)到對(duì)系統(tǒng)功能進(jìn)行實(shí)時(shí)擴(kuò)展的目的。
[0003]當(dāng)前Linux操作系統(tǒng)對(duì)熱插拔操作提供了完善的支持。如圖1所示,Linux操作系統(tǒng)下的熱插拔系統(tǒng)包括內(nèi)核空間驅(qū)動(dòng)模塊和用戶空間處理模塊。當(dāng)發(fā)生熱插拔設(shè)備事件時(shí),內(nèi)核空間驅(qū)動(dòng)模塊會(huì)產(chǎn)生熱插拔信息用于指不當(dāng)前熱插拔操作,熱插拔信息主要包括:動(dòng)作信息(即ACTION),用于指示當(dāng)前是插入動(dòng)作還是拔出動(dòng)作;設(shè)備所屬子系統(tǒng)信息(即SUBSYSTEM),用于指示設(shè)備分類;設(shè)備路徑(即DEVPATH),用于指示具體設(shè)備位置。Linux內(nèi)核通過兩種方法通知設(shè)備熱插拔事件,第一種:內(nèi)核將熱插拔信息設(shè)置為系統(tǒng)環(huán)境變量,并運(yùn)行
[0004]“ /proc/sys/kerne 1/hotpIug”文件所指定的用戶空間處理模塊,用戶空間處理模塊被調(diào)用而獲取熱插拔信息;第二種:內(nèi)核通過名為NETLINK的套接字將熱插拔信息廣播出去,用戶空間處理模塊通過監(jiān)聽NETLINK套接字來獲取熱插拔信息,即用戶空間處理模塊主動(dòng)獲取熱插拔信息?,F(xiàn)有技術(shù)在管理熱插拔設(shè)備時(shí)存在以下3個(gè)問題:
[0005]1.周期性執(zhí)行檢測(cè)熱插拔設(shè)備造成系統(tǒng)負(fù)載增大。
[0006]如中國(guó)專利CN1877550A提出的電視機(jī)嵌入式Linux系統(tǒng)下USB存儲(chǔ)設(shè)備實(shí)現(xiàn)實(shí)時(shí)熱插拔的方法中,守護(hù)進(jìn)程周期性地執(zhí)行檢測(cè)任務(wù),為了達(dá)到實(shí)時(shí)檢測(cè)熱插拔事件的目的,勢(shì)必會(huì)縮短檢測(cè)周期從而使處理器大部分時(shí)間被守護(hù)進(jìn)程占用,造成系統(tǒng)負(fù)載增大。因?yàn)槭刈o(hù)進(jìn)程采取主動(dòng)周期性地檢測(cè)來識(shí)別設(shè)備熱插拔,在沒有真正發(fā)生設(shè)備熱插拔事件時(shí),該守護(hù)進(jìn)程同樣會(huì)周期性地執(zhí)行檢測(cè)任務(wù)從而占用處理器,所以即使縮短檢測(cè)周期該方法依然會(huì)占用額外的處理器資源。
[0007]2.熱插拔檢測(cè)模塊常駐內(nèi)存,浪費(fèi)內(nèi)存空間。
[0008]如中國(guó)專利CN1757021A提出的設(shè)備管理方法及設(shè)備管理系統(tǒng)中,熱插拔端口監(jiān)督模塊常駐內(nèi)存運(yùn)行,它依據(jù)來自掛鉤模塊的信息來收集并保存熱插拔設(shè)備信息,同時(shí)用戶應(yīng)用模塊通過熱插拔類庫(kù)與端口監(jiān)督模塊進(jìn)行進(jìn)程間通信獲取熱插拔設(shè)備信息。熱插拔端口監(jiān)督模塊以常駐內(nèi)存的方式運(yùn)行,意味著在沒有設(shè)備熱插拔事件發(fā)生時(shí)該模塊依然會(huì)在后臺(tái)運(yùn)行并駐留在內(nèi)存中,這種方式顯然會(huì)浪費(fèi)內(nèi)存空間。
[0009]3.存儲(chǔ)熱插拔設(shè)備信息的內(nèi)存在進(jìn)程地址空間內(nèi),容易造成系統(tǒng)不穩(wěn)定。
[0010]如中國(guó)專利CN1757021A提出的《設(shè)備管理方法及設(shè)備管理系統(tǒng)》中,用于存儲(chǔ)熱插拔設(shè)備信息的內(nèi)存在熱插拔驅(qū)動(dòng)模塊的進(jìn)程地址空間內(nèi),用戶應(yīng)用模塊通過熱插拔類庫(kù)與熱插拔驅(qū)動(dòng)模塊進(jìn)行進(jìn)程間通信獲取熱插拔設(shè)備信息。該方法的問題在于熱插拔驅(qū)動(dòng)模塊異常崩潰,因?yàn)闊岵灏卧O(shè)備信息存儲(chǔ)在熱插拔驅(qū)動(dòng)模塊的進(jìn)程地址空間內(nèi),所以熱插拔設(shè)備信息將會(huì)全部丟失,因此當(dāng)用戶空間應(yīng)用模塊無法獲取有效的熱插拔設(shè)備信息時(shí),可能會(huì)出現(xiàn)以下的異常情況:用戶空間應(yīng)用模塊操作一個(gè)已經(jīng)被卸載的熱插拔設(shè)備時(shí)系統(tǒng)將崩潰;用戶空間應(yīng)用模塊無法獲取已經(jīng)安裝的熱插拔設(shè)備信息時(shí)將無法使用該熱插拔設(shè)備。

【發(fā)明內(nèi)容】

[0011]有鑒于此,本發(fā)明要解決的技術(shù)問題是提供Linux系統(tǒng)下共享熱插拔設(shè)備的方法與裝置,以解決熱插拔檢測(cè)模塊常駐內(nèi)存造成內(nèi)存空間浪費(fèi),執(zhí)行周期性地檢測(cè)造成系統(tǒng)負(fù)載增大,以及熱插拔設(shè)備信息保存在進(jìn)程地址空間內(nèi)造成系統(tǒng)不穩(wěn)定的問題。
[0012]本發(fā)明解決上述技術(shù)問題所采用的技術(shù)方案如下:
[0013]根據(jù)本發(fā)明的一個(gè)方面,提供了一種在Linux系統(tǒng)下共享熱插拔設(shè)備的方法,該方法包括以下步驟:
[0014]系統(tǒng)啟動(dòng)時(shí)初始化共享設(shè)備,并將熱插拔設(shè)備檢測(cè)模塊注冊(cè)為L(zhǎng)inux熱插拔系統(tǒng)的用戶空間處理模塊;
[0015]檢測(cè)到熱插拔事件后,內(nèi)核將熱插拔信息設(shè)置為系統(tǒng)環(huán)境變量,并通過調(diào)用用戶空間處理模塊來調(diào)用熱插拔設(shè)備檢測(cè)模塊;
[0016]熱插拔設(shè)備檢測(cè)模塊從系統(tǒng)環(huán)境變量中獲取熱插拔信息;
[0017]根據(jù)熱插拔信息獲取熱插拔的設(shè)備信息和動(dòng)作信息;
[0018]根據(jù)熱插拔的動(dòng)作信息和設(shè)備信息調(diào)用共享設(shè)備維護(hù)接口對(duì)共享設(shè)備進(jìn)行相應(yīng)地處理。
[0019]優(yōu)選地,初始化共享設(shè)備包括:創(chuàng)建共享內(nèi)存和信號(hào)量,其中,共享內(nèi)存用于存儲(chǔ)設(shè)備列表和進(jìn)程列表;信號(hào)量用于在多個(gè)進(jìn)程同時(shí)訪問共享內(nèi)存時(shí)進(jìn)行同步。
[0020]進(jìn)一步地,初始化共享設(shè)備具體包括以下步驟:
[0021]根據(jù)公共路徑名和公共項(xiàng)目標(biāo)識(shí)符獲取鍵;
[0022]使用鍵創(chuàng)建信號(hào)量,并獲取信號(hào)量標(biāo)識(shí)符;
[0023]設(shè)置信號(hào)量數(shù)量為I ;
[0024]使用鍵和指定長(zhǎng)度創(chuàng)建共享內(nèi)存,并獲取共享內(nèi)存標(biāo)識(shí)符;
[0025]連接共享內(nèi)存并獲取共享內(nèi)存地址,并將共享內(nèi)存清零。
[0026]優(yōu)選地,根據(jù)熱插拔信息獲取熱插拔的設(shè)備信息包括:根據(jù)熱插拔信息中的設(shè)備所屬子系統(tǒng)和設(shè)備路徑來獲取設(shè)備信息。
[0027]優(yōu)選地,根據(jù)熱插拔的動(dòng)作信息和設(shè)備信息調(diào)用共享設(shè)備維護(hù)接口對(duì)共享設(shè)備進(jìn)行相應(yīng)地處理進(jìn)一步包括:
[0028]如果動(dòng)作信息是插入動(dòng)作,則將設(shè)備信息作為一個(gè)新元素添加到共享設(shè)備的設(shè)備列表中,并向共享設(shè)備的進(jìn)程列表中的每一個(gè)進(jìn)程發(fā)送設(shè)備添加信號(hào);如果動(dòng)作信息是拔出動(dòng)作,則從共享設(shè)備的設(shè)備列表中刪除該設(shè)備,并向共享設(shè)備的進(jìn)程列表中的每一個(gè)進(jìn)程發(fā)送設(shè)備刪除信號(hào)。
[0029]根據(jù)本發(fā)明的另一個(gè)方面,提供了一種在Linux系統(tǒng)下共享熱插拔設(shè)備的裝置,該裝置包括用于檢測(cè)到熱插拔事件后,將熱插拔信息設(shè)置為系統(tǒng)環(huán)境變量,并調(diào)用用戶空間處理模塊的內(nèi)核;該裝置還包括:熱插拔設(shè)備共享模塊、熱插拔設(shè)備檢測(cè)模塊和熱插拔設(shè)備處理模塊,其中:
[0030]熱插拔設(shè)備共享模塊,用于系統(tǒng)啟動(dòng)時(shí)初始化共享設(shè)備,并將熱插拔設(shè)備檢測(cè)模塊注冊(cè)為L(zhǎng)inux熱插拔系統(tǒng)的用戶空間處理模塊;還用于提供維護(hù)共享設(shè)備的接口 ;
[0031]熱插拔設(shè)備檢測(cè)模塊,用于從系統(tǒng)環(huán)境變量中獲取熱插拔信息,并根據(jù)熱插拔信息獲取熱插拔的設(shè)備信息和動(dòng)作信息;
[0032]熱插拔設(shè)備處理模塊,根據(jù)熱插拔的動(dòng)作信息和設(shè)備信息調(diào)用共享設(shè)備維護(hù)接口對(duì)共享設(shè)備進(jìn)行相應(yīng)地處理。
[0033]優(yōu)選地,熱插拔設(shè)備共享模塊包括:
[0034]初始化單元,用于系統(tǒng)啟動(dòng)時(shí)創(chuàng)建共享內(nèi)存和信號(hào)量,其中,共享內(nèi)存用于存儲(chǔ)設(shè)備列表和進(jìn)程列表,信號(hào)量用于在多個(gè)進(jìn)程同時(shí)訪問共享內(nèi)存時(shí)進(jìn)行同步;還用于將熱插拔設(shè)備檢測(cè)模塊注冊(cè)為L(zhǎng)inux熱插拔系統(tǒng)的用戶空間處理模塊;
[0035]設(shè)備管理單元,用于添加或刪除共享設(shè)備的設(shè)備列表中的元素;
[0036]進(jìn)程管理單元,用于增加或刪除共享設(shè)備的進(jìn)程列表中的元素。
[0037]優(yōu)選地,初始化單元具體用于:根據(jù)公共路徑名和公共項(xiàng)目標(biāo)識(shí)符獲取鍵;使用鍵創(chuàng)建信號(hào)量,并獲取信號(hào)量標(biāo)識(shí)符;設(shè)置信號(hào)量數(shù)量為I ;使用鍵和指定長(zhǎng)度創(chuàng)建共享內(nèi)存,并獲取共享內(nèi)存標(biāo)識(shí)符;連接共享內(nèi)存并獲取共享內(nèi)存地址,并將共享內(nèi)存清零。
[0038]優(yōu)選地,熱插拔設(shè)備檢測(cè)模塊包括:
[0039]熱插拔信息獲取單元,用于從系統(tǒng)環(huán)境變量中獲取內(nèi)核設(shè)置的熱插拔信息;
[0040]設(shè)備信息獲取單元,用于根據(jù)熱插拔信息中設(shè)備所屬子系統(tǒng)和設(shè)備路徑來獲取設(shè)備信息。
[0041]優(yōu)選地,熱插拔設(shè)備處理模塊包括:
[0042]設(shè)備處理單元,用于當(dāng)前熱插拔的動(dòng)作信息是插入動(dòng)作時(shí),將設(shè)備信息作為一個(gè)新元素添加到共享設(shè)備的設(shè)備列表中;當(dāng)前熱插拔動(dòng)作是拔出動(dòng)作時(shí),從共享設(shè)備的設(shè)備列表中刪除該設(shè)備;
[0043]信號(hào)發(fā)送單元,用于當(dāng)前熱插拔的動(dòng)作信息是插入動(dòng)作時(shí),向共享設(shè)備的進(jìn)程列表中的每一個(gè)進(jìn)程發(fā)送設(shè)備添加信號(hào);當(dāng)前熱插拔動(dòng)作是拔出動(dòng)作時(shí),向共享設(shè)備的進(jìn)程列表中的每一個(gè)進(jìn)程發(fā)送設(shè)備刪除信號(hào)。
[0044]本發(fā)明實(shí)施例的一種共享熱插拔設(shè)備的方法與裝置,熱插拔檢測(cè)模塊在熱插拔設(shè)備事件發(fā)生時(shí)由內(nèi)核調(diào)用一次,不進(jìn)行周期性地檢測(cè),從而降低系統(tǒng)負(fù)載;利用共享存儲(chǔ)的方法使存儲(chǔ)熱插拔設(shè)備信息的內(nèi)存空間獨(dú)立于任何進(jìn)程地址空間從而增強(qiáng)系統(tǒng)穩(wěn)定性;同時(shí)熱插拔檢測(cè)模塊在執(zhí)行完檢測(cè)熱插拔設(shè)備以及相關(guān)處理后立即退出運(yùn)行從而節(jié)約內(nèi)存空間。
【專利附圖】

【附圖說明】
[0045]圖1為現(xiàn)有技術(shù)中Linux操作系統(tǒng)的熱插拔系統(tǒng)示意圖。
[0046]圖2為本發(fā)明實(shí)施例提供的一種Linux系統(tǒng)下共享熱插拔設(shè)備的方法流程圖。
[0047]圖3為本發(fā)明優(yōu)選實(shí)施例提供的一種Linux系統(tǒng)下共享熱插拔設(shè)備的方法流程圖。
[0048]圖4為本發(fā)明優(yōu)選實(shí)施例提供的一種初始化共享設(shè)備的方法流程圖。
[0049]圖5為本發(fā)明實(shí)施例提供的一種Linux系統(tǒng)下共享熱插拔設(shè)備裝置的結(jié)構(gòu)示意圖。
[0050]圖6為本發(fā)明優(yōu)選實(shí)施例提供的一種熱插拔設(shè)備共享模塊的結(jié)構(gòu)示意圖。
[0051]圖7為本發(fā)明優(yōu)選實(shí)施例提供的一種熱插拔設(shè)備檢測(cè)模塊的結(jié)構(gòu)示意圖。
[0052]圖8為本發(fā)明優(yōu)選實(shí)施例提供的一種熱插拔設(shè)備處理模塊的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0053]為了使本發(fā)明所要解決的技術(shù)問題、技術(shù)方案及有益效果更加清楚、明白,以下結(jié)合附圖和實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0054]實(shí)施例一
[0055]如圖2所示為本發(fā)明實(shí)施例提供的一種Linux系統(tǒng)下共享熱插拔設(shè)備的方法流程圖,該方法包括:
[0056]S202、系統(tǒng)啟動(dòng)時(shí)初始化共享設(shè)備,并將熱插拔設(shè)備檢測(cè)模塊注冊(cè)為L(zhǎng)inux熱插拔系統(tǒng)的用戶空間處理模塊;
[0057]具體來說,初始化共享設(shè)備包括創(chuàng)建共享內(nèi)存和信號(hào)量,共享內(nèi)存用于存儲(chǔ)設(shè)備列表和進(jìn)程列表;信號(hào)量用于在多個(gè)進(jìn)程同時(shí)訪問共享內(nèi)存時(shí)進(jìn)行同步。將熱插拔設(shè)備檢測(cè)模塊注冊(cè)為L(zhǎng)inux熱插拔系統(tǒng)的用戶空間處理模塊,具體為將熱插拔檢測(cè)模塊的名稱寫入到“/proc/sys/kernel/hotplug”文件中,從而實(shí)現(xiàn)對(duì)熱插拔設(shè)備的處理。
[0058]S204、檢測(cè)到熱插拔事件后,將熱插拔信息設(shè)置為系統(tǒng)環(huán)境變量,并通過調(diào)用用戶空間處理模塊來調(diào)用插拔設(shè)備檢測(cè)模塊;
[0059]具體來說,內(nèi)核空間驅(qū)動(dòng)模塊檢測(cè)到熱插拔事件后首先將熱插拔信息設(shè)置為系統(tǒng)環(huán)境變量,熱插拔信息包括動(dòng)作信息、設(shè)備所屬子系統(tǒng)信息和設(shè)備路徑,比如,在設(shè)置系統(tǒng)環(huán)境變量時(shí),可以將動(dòng)作信息設(shè)置為ACTION,用于指示當(dāng)前是插入動(dòng)作還是拔出動(dòng)作;將設(shè)備所屬子系統(tǒng)信息設(shè)置為SUBSYSTEM,用于指示設(shè)備分類;將設(shè)備路徑設(shè)置為DEVPATH,用于指示具體設(shè)備位置。然后內(nèi)核將調(diào)用“/proc/sys/kernel/hotplug”文件所制定的用戶空間處理模塊,即調(diào)用熱插拔設(shè)備檢測(cè)模塊。
[0060]S206、插拔設(shè)備檢測(cè)模塊從環(huán)境變量中獲取熱插拔信息;
[0061 ] 舉例來說,熱插拔信息可以通過獲取環(huán)境變量ACTION、SUBSYSTEM和DEVPATH的值來分別獲得動(dòng)作信息、設(shè)備所屬子系統(tǒng)信息和設(shè)備路徑。
[0062]S208、根據(jù)熱插拔信息獲取熱插拔的設(shè)備信息和動(dòng)作信息;
[0063]具體來說,根據(jù)熱插拔信息中設(shè)備所屬子系統(tǒng)和設(shè)備路徑來獲取設(shè)備信息,設(shè)備信息包括設(shè)備節(jié)點(diǎn)、設(shè)備名稱和設(shè)備型號(hào)等。
[0064]S210、根據(jù)熱插拔的動(dòng)作信息和設(shè)備信息調(diào)用共享設(shè)備維護(hù)接口對(duì)共享設(shè)備進(jìn)行相應(yīng)地處理。
[0065]具體來說,根據(jù)熱插拔信息中的動(dòng)作信息判斷熱插拔動(dòng)作是插入還是拔出,如果是插入動(dòng)作,則將設(shè)備信息作為一個(gè)新元素添加到共享設(shè)備的設(shè)備列表中,并向共享設(shè)備的進(jìn)程列表中的每一個(gè)進(jìn)程發(fā)送設(shè)備添加信號(hào);如果所是拔出動(dòng)作,則從設(shè)備列表中刪除該設(shè)備,并向共享設(shè)備的進(jìn)程列表中的每一個(gè)進(jìn)程發(fā)送設(shè)備刪除信號(hào)。
[0066]本發(fā)明實(shí)施例的提供的共享熱插拔設(shè)備的方法,熱插拔檢測(cè)模塊在熱插拔設(shè)備事件發(fā)生時(shí)由內(nèi)核調(diào)用一次,不進(jìn)行周期性地檢測(cè),從而降低系統(tǒng)負(fù)載;利用共享存儲(chǔ)的方法使存儲(chǔ)熱插拔設(shè)備信息的內(nèi)存空間獨(dú)立于任何進(jìn)程地址空間從而增強(qiáng)系統(tǒng)穩(wěn)定性;同時(shí)熱插拔檢測(cè)模塊在執(zhí)行完檢測(cè)熱插拔設(shè)備以及相關(guān)處理后立即退出運(yùn)行從而節(jié)約內(nèi)存空間。
[0067]實(shí)施例二
[0068]如圖3所示為本發(fā)明優(yōu)選實(shí)施例提供的一種Linux系統(tǒng)下共享熱插拔設(shè)備的方法流程圖,該方法包括:
[0069]S301、從系統(tǒng)環(huán)境變量中獲取內(nèi)核設(shè)置的熱插拔信息。
[0070]具體的,熱插拔信息包括:動(dòng)作信息,即ACTION,用于指示當(dāng)前是插入動(dòng)作還是拔出動(dòng)作;設(shè)備所屬子系統(tǒng)信息,即SUBSYSTEM,用于指示設(shè)備分類;設(shè)備路徑,即DEVPATH,用于指示具體設(shè)備位置。
[0071]S302、根據(jù)熱插拔信息中設(shè)備所屬子系統(tǒng)信和設(shè)備路徑來獲取設(shè)備信息和動(dòng)作信息;
[0072]其中,設(shè)備信息包括設(shè)備節(jié)點(diǎn)、設(shè)備名稱和設(shè)備型號(hào)等。
[0073]S303、根據(jù)動(dòng)作信息判斷當(dāng)前熱插拔動(dòng)作,如果是插入設(shè)備則跳轉(zhuǎn)到S304,如果是拔出設(shè)備則跳轉(zhuǎn)到S306。
[0074]S304、將設(shè)備信息作為一個(gè)新元素添加到共享設(shè)備的設(shè)備列表中;
[0075]本步驟S304進(jìn)一步包括:
[0076]在共享設(shè)備信號(hào)量上執(zhí)行P操作;
[0077]將設(shè)備信息作為一個(gè)新元素添加到共享內(nèi)存的設(shè)備列表中;
[0078]在共享設(shè)備信號(hào)量上執(zhí)行V操作。
[0079]S305、依次向共享設(shè)備的進(jìn)程列表中每一個(gè)進(jìn)程發(fā)送設(shè)備添加信號(hào)。
[0080]S306、以設(shè)備節(jié)點(diǎn)為關(guān)鍵字在共享設(shè)備的設(shè)備列表中查找設(shè)備。
[0081]S307、如果在共享設(shè)備的設(shè)備列表中找到節(jié)點(diǎn)相同的元素則跳轉(zhuǎn)到S308,否則直接退出。
[0082]S308、刪除共享設(shè)備的設(shè)備列表中與該設(shè)備節(jié)點(diǎn)相同的元素;
[0083]本步驟S308進(jìn)一步包括:
[0084]在共享設(shè)備信號(hào)量上執(zhí)行P操作;
[0085]從共享設(shè)備的設(shè)備列表中刪除與該設(shè)備節(jié)點(diǎn)相同的元素;
[0086]在共享設(shè)備信號(hào)量上執(zhí)行V操作。
[0087]S309、依次向共享設(shè)備的進(jìn)程列表中每一個(gè)進(jìn)程發(fā)送設(shè)備刪除信號(hào)。
[0088]需要補(bǔ)充說明的是,上述P、V操作是典型的同步機(jī)制之一。用一個(gè)信號(hào)量與一個(gè)消息聯(lián)系起來,當(dāng)信號(hào)量的值為O時(shí),表示期望的消息尚未產(chǎn)生;當(dāng)信號(hào)量的值非O時(shí),表示期望的消息已經(jīng)存在。用p、v操作實(shí)現(xiàn)進(jìn)程同步時(shí),調(diào)用P操作測(cè)試消息是否到達(dá),調(diào)用V操作發(fā)送消息。
[0089]本發(fā)明實(shí)施例著眼于在系統(tǒng)啟動(dòng)時(shí)將熱插拔設(shè)備檢測(cè)模塊已注冊(cè)為L(zhǎng)inux熱插拔系統(tǒng)的用戶空間處理模塊,通過調(diào)用用戶空間處理模塊來調(diào)用插拔設(shè)備檢測(cè)模塊,從而實(shí)現(xiàn)對(duì)熱插拔設(shè)備的處理。
[0090]實(shí)施例三
[0091]如圖4所示為本發(fā)明優(yōu)選實(shí)施例提供的一種初始化共享設(shè)備的方法流程圖,該方法包括以下步驟:
[0092]S402、根據(jù)公共路徑名和公共項(xiàng)目標(biāo)識(shí)符獲取鍵。
[0093]具體來說,共享設(shè)備是基于Linux操作系統(tǒng)下的XSI (System Interface andHeaders,代表一種Unix和Linux系統(tǒng)的標(biāo)準(zhǔn),為Unix和Linux系統(tǒng)定義一致的接口)IPC(Inter-Process Communication,進(jìn)程間通信)建立的。共享設(shè)備由鍵、共享內(nèi)存標(biāo)識(shí)符、信號(hào)量標(biāo)識(shí)符和共享內(nèi)存地址組成。鍵是Linux內(nèi)核IPC結(jié)構(gòu)的外部標(biāo)識(shí)符,鍵是由公共路徑名和項(xiàng)目標(biāo)識(shí)符組成的,任何進(jìn)程只要使用相同的公共路徑名和項(xiàng)目標(biāo)識(shí)符即可獲取相同的鍵。
[0094]S404、使用鍵創(chuàng)建信號(hào)量,并獲取信號(hào)量標(biāo)識(shí)符。
[0095]具體來說,通過鍵可以創(chuàng)建信號(hào)量并獲取信號(hào)量標(biāo)識(shí)符。信號(hào)量標(biāo)識(shí)符用于訪問已經(jīng)存在的信號(hào)量。
[0096]S406、設(shè)置信號(hào)量數(shù)量為I。
[0097]具體來說,將信號(hào)量數(shù)量設(shè)置為I的作用是,當(dāng)多個(gè)進(jìn)程同時(shí)在信號(hào)量上執(zhí)行P操作時(shí),同一時(shí)刻只有I個(gè)進(jìn)程能夠通過,從而使多個(gè)進(jìn)程并發(fā)操作共享內(nèi)存時(shí)保持同步。
[0098]S408、使用鍵和指定長(zhǎng)度創(chuàng)建共享內(nèi)存,并獲取共享內(nèi)存標(biāo)識(shí)符。
[0099]具體來說,通過鍵可以獲取共享內(nèi)存標(biāo)識(shí)符,共享內(nèi)存標(biāo)識(shí)符用于訪問已經(jīng)存在的共享內(nèi)存。共享內(nèi)存用于存儲(chǔ)設(shè)備列表和進(jìn)程列表,共享內(nèi)存中指定長(zhǎng)度是共享設(shè)備列表長(zhǎng)度加上進(jìn)程列表長(zhǎng)度。設(shè)備列表中的每一個(gè)元素由設(shè)備信息組成,設(shè)備信息包括設(shè)備節(jié)點(diǎn)、設(shè)備名稱和設(shè)備型號(hào)等。進(jìn)程列表中的每一個(gè)元素都是一個(gè)進(jìn)程ID,當(dāng)設(shè)備列表中的元素被添加或刪除時(shí),可以向進(jìn)程列表中的每一個(gè)進(jìn)程發(fā)送設(shè)備添加信號(hào)或者設(shè)備刪除信號(hào)。
[0100]S410、連接共享內(nèi)存并獲取共享內(nèi)存地址。
[0101]具體來說,通過共享內(nèi)存標(biāo)識(shí)符可以連接到指定的共享內(nèi)存并獲取共享內(nèi)存地址,共享內(nèi)存地址可以用于對(duì)共享內(nèi)存進(jìn)行尋址從而訪問共享內(nèi)存中的設(shè)備列表和進(jìn)程列表,因此可以直接說共享設(shè)備包含設(shè)備列表和進(jìn)程列表。
[0102]S412、將共享內(nèi)存清零。
[0103]具體來說,第一次連接共享內(nèi)存時(shí)將導(dǎo)致系統(tǒng)分配實(shí)際內(nèi)存并返回共享內(nèi)存地址,但是此時(shí)共享內(nèi)存還不能直接使用,需要清零后再使用。因?yàn)樵搲K內(nèi)存可能被系統(tǒng)或其他進(jìn)程使用后殘留未清理的臟數(shù)據(jù),使用臟數(shù)據(jù)將導(dǎo)致未定義的異常行為。
[0104]本發(fā)明實(shí)施例提供的初始化共享設(shè)備方法,通過在系統(tǒng)啟動(dòng)時(shí)創(chuàng)建獨(dú)立于任何進(jìn)程地址空間的共享內(nèi)存并完成清零工作,使得熱插拔設(shè)備處理模塊和其他進(jìn)程可以通過共享設(shè)備維護(hù)接口來完成對(duì)共享設(shè)備的操作。
[0105]實(shí)施例四
[0106]如圖5所示為本發(fā)明實(shí)施例提供的一種Linux系統(tǒng)下共享熱插拔設(shè)備裝置的結(jié)構(gòu)示意圖,該裝置包括用于檢測(cè)到熱插拔事件后,將熱插拔信息設(shè)置為系統(tǒng)環(huán)境變量,并調(diào)用用戶空間處理模塊的內(nèi)核;該裝置還包括熱插拔設(shè)備共享模塊10、熱插拔設(shè)備檢測(cè)模塊20和熱插拔設(shè)備處理模塊30,其中:
[0107]熱插拔設(shè)備共享模塊10,用于系統(tǒng)啟動(dòng)時(shí)初始化共享設(shè)備,并將熱插拔設(shè)備檢測(cè)程模塊注冊(cè)為L(zhǎng)inux熱插拔系統(tǒng)的用戶空間處理模塊;還用于提供維護(hù)共享設(shè)備的接口 ;
[0108]具體來說,熱插拔設(shè)備共享模塊10用于初始化共享設(shè)備、提供添加或刪除共享設(shè)備的設(shè)備列表中元素的接口供熱插拔設(shè)備處理模塊30調(diào)用,以及提供添加或刪除共享設(shè)備的進(jìn)程列表中元素的接口供各個(gè)應(yīng)用模塊調(diào)用。
[0109]進(jìn)一步地,請(qǐng)參閱圖6,熱插拔設(shè)備共享模塊10進(jìn)一步包括初始化單元101、設(shè)備管理單元102和進(jìn)程管理單元103,其中:
[0110]初始化單元101,用于系統(tǒng)啟動(dòng)時(shí)初始化共享設(shè)備,包括創(chuàng)建共享內(nèi)存和信號(hào)量;并將熱插拔設(shè)備檢測(cè)程模塊注冊(cè)為L(zhǎng)inux熱插拔系統(tǒng)的用戶空間處理模塊。其中,初始化共享設(shè)備包括創(chuàng)建共享內(nèi)存和信號(hào)量;共享內(nèi)存用于存儲(chǔ)設(shè)備列表和進(jìn)程列表,信號(hào)量用于在多個(gè)進(jìn)程同時(shí)訪問共享內(nèi)存時(shí)進(jìn)行同步;
[0111]具體來說,初始化單元101用于:根據(jù)公共路徑名和公共項(xiàng)目標(biāo)識(shí)符獲取鍵;使用鍵創(chuàng)建信號(hào)量,并獲取信號(hào)量標(biāo)識(shí)符;設(shè)置信號(hào)量數(shù)量為I ;使用鍵和指定長(zhǎng)度創(chuàng)建共享內(nèi)存,并獲取共享內(nèi)存標(biāo)識(shí)符;連接共享內(nèi)存并獲取共享內(nèi)存地址,并將共享內(nèi)存清零。
[0112]設(shè)備管理單元102,用于添加或刪除共享設(shè)備的設(shè)備列表中的元素。
[0113]具體來說,設(shè)備管理單元102添加熱插拔設(shè)備到共享設(shè)備的設(shè)備列表中或者從共享設(shè)備的設(shè)備列表中刪除熱插拔設(shè)備。
[0114]進(jìn)程管理單元103,用于增加或刪除共享設(shè)備的進(jìn)程列表中的元素。
[0115]具體來說,進(jìn)程管理單元103將指定應(yīng)用模塊的進(jìn)程ID添加到共享設(shè)備的進(jìn)程列表中或者從共享設(shè)備的進(jìn)程列表中刪除指定應(yīng)用模塊的進(jìn)程ID。
[0116]熱插拔設(shè)備檢測(cè)模塊20,用于從系統(tǒng)環(huán)境變量中獲取熱插拔信息,并根據(jù)熱插拔信息獲取設(shè)備信息和動(dòng)作信息;
[0117]具體來說,熱插拔設(shè)備檢測(cè)模塊20的例程被注冊(cè)為L(zhǎng)inux熱插拔系統(tǒng)的用戶空間處理模塊,在發(fā)生設(shè)備熱插拔事件時(shí)由內(nèi)核調(diào)用,熱插拔設(shè)備檢測(cè)模塊20從系統(tǒng)環(huán)境變量中獲取熱插拔信息,并根據(jù)熱插拔信息獲取設(shè)備信息。
[0118]進(jìn)一步地,請(qǐng)參閱圖7,熱插拔設(shè)備檢測(cè)模塊20包括:
[0119]熱插拔信息獲取單元201,用于從系統(tǒng)環(huán)境變量中獲取內(nèi)核設(shè)置的熱插拔信息。具體來說,熱插拔信息獲取單元201獲取當(dāng)前熱插拔設(shè)備事件發(fā)生時(shí)內(nèi)核設(shè)置的用于指示當(dāng)前熱插拔信息的環(huán)境變量。熱插拔信息包括:動(dòng)作信息(如ACTION),用于指示當(dāng)前是插入動(dòng)作還是拔出動(dòng)作;設(shè)備所屬子系統(tǒng)信息(如SUBSYSTEM),用于指示設(shè)備分類;設(shè)備路徑(如DEVPATH),用于指示具體設(shè)備位置。
[0120]設(shè)備信息獲取單元202,用于根據(jù)熱插拔信息中設(shè)備所屬子系統(tǒng)和設(shè)備路徑來獲取設(shè)備信息。具體來說,設(shè)備信息獲取單元202根據(jù)熱插拔信息中設(shè)備所屬子系統(tǒng)信和設(shè)備路徑來獲取設(shè)備信息,設(shè)備信息包括設(shè)備節(jié)點(diǎn)、設(shè)備名稱和設(shè)備型號(hào)等。
[0121]熱插拔設(shè)備處理模塊30,根據(jù)熱插拔的動(dòng)作信息和設(shè)備信息調(diào)用共享設(shè)備維護(hù)接口對(duì)共享設(shè)備進(jìn)行相應(yīng)地處理。
[0122]進(jìn)一步地,請(qǐng)參閱圖8,熱插拔設(shè)備處理模塊30包括設(shè)備處理單元301和信號(hào)發(fā)送單元302,其中:[0123]設(shè)備處理單元301,用于當(dāng)前熱插拔動(dòng)作是插入動(dòng)作時(shí),將設(shè)備信息作為一個(gè)新元素添加到共享設(shè)備的設(shè)備列表中;當(dāng)前熱插拔動(dòng)作是拔出動(dòng)作時(shí),從共享設(shè)備的設(shè)備列表中刪除該設(shè)備;
[0124]具體來說,設(shè)備處理單元301根據(jù)當(dāng)前熱插拔動(dòng)作來調(diào)用熱插拔設(shè)備共享模塊10中的設(shè)備管理單元102,從而向共享設(shè)備的設(shè)備列表中添加或刪除元素。
[0125]信號(hào)發(fā)送單元302,用于當(dāng)前熱插拔動(dòng)作是插入動(dòng)作時(shí),向共享設(shè)備的進(jìn)程列表中的每一個(gè)進(jìn)程發(fā)送設(shè)備添加信號(hào);當(dāng)前熱插拔動(dòng)作是拔出動(dòng)作時(shí),向共享設(shè)備的進(jìn)程列表中的每一個(gè)進(jìn)程發(fā)送設(shè)備刪除信號(hào)。
[0126]具體來說,用于根據(jù)當(dāng)前熱插拔動(dòng)作來調(diào)用熱插拔設(shè)備共享模塊10中的進(jìn)程管理單元103,將指定應(yīng)用程序的進(jìn)程ID添加到共享設(shè)備的進(jìn)程列表中或者從共享設(shè)備的進(jìn)程列表中刪除指定應(yīng)用程序的進(jìn)程ID。從而向共享設(shè)備的進(jìn)程列表中的每一個(gè)進(jìn)程發(fā)送設(shè)備添加信號(hào)或者設(shè)備刪除信號(hào)以通知應(yīng)用模塊當(dāng)前有新設(shè)備加入或者已知設(shè)備被刪除。
[0127]本發(fā)明實(shí)施例提供的共享熱插拔設(shè)備的裝置,熱插拔設(shè)備檢測(cè)模塊20在熱插拔設(shè)備事件發(fā)生時(shí)由內(nèi)核調(diào)用一次,不進(jìn)行周期性地檢測(cè),從而降低系統(tǒng)負(fù)載;利用共享存儲(chǔ)的方法使存儲(chǔ)熱插拔設(shè)備信息的內(nèi)存空間獨(dú)立于任何進(jìn)程地址空間從而增強(qiáng)系統(tǒng)穩(wěn)定性;同時(shí)熱插拔設(shè)備檢測(cè)模塊20在執(zhí)行完檢測(cè)熱插拔設(shè)備以及相關(guān)處理后立即退出運(yùn)行從而節(jié)約內(nèi)存空間。
[0128]以上參照【專利附圖】

【附圖說明】了本發(fā)明的優(yōu)選實(shí)施例,并非因此局限本發(fā)明的權(quán)利范圍。本領(lǐng)域技術(shù)人員不脫離本發(fā)明的范圍和實(shí)質(zhì)內(nèi)所作的任何修改、等同替換和改進(jìn),均應(yīng)在本發(fā)明的權(quán)利范圍之內(nèi)。
【權(quán)利要求】
1. 一種在Linux系統(tǒng)下共享熱插拔設(shè)備的方法,其特征在于,該方法包括以下步驟: 系統(tǒng)啟動(dòng)時(shí)初始化共享設(shè)備,并將熱插拔設(shè)備檢測(cè)模塊注冊(cè)為L(zhǎng)inux熱插拔系統(tǒng)的用戶空間處理模塊; 檢測(cè)到熱插拔事件后,內(nèi)核將熱插拔信息設(shè)置為系統(tǒng)環(huán)境變量,并通過調(diào)用所述用戶空間處理模塊來調(diào)用所述熱插拔設(shè)備檢測(cè)模塊; 所述熱插拔設(shè)備檢測(cè)模塊從所述系統(tǒng)環(huán)境變量中獲取熱插拔信息; 根據(jù)所述熱插拔信息獲取熱插拔的設(shè)備信息和動(dòng)作信息; 根據(jù)所述熱插拔的動(dòng)作信息和設(shè)備信息調(diào)用共享設(shè)備維護(hù)接口對(duì)共享設(shè)備進(jìn)行相應(yīng)地處理。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述初始化共享設(shè)備包括:創(chuàng)建共享內(nèi)存和信號(hào)量,其中,所述共享內(nèi)存用于存儲(chǔ)設(shè)備列表和進(jìn)程列表;所述信號(hào)量用于在多個(gè)進(jìn)程同時(shí)訪問共享內(nèi)存時(shí)進(jìn)行同步。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述初始化共享設(shè)備具體包括以下步驟: 根據(jù)公共路徑名和公共項(xiàng)目標(biāo)識(shí)符獲取鍵; 使用鍵創(chuàng)建信號(hào)量,并獲取信號(hào)量標(biāo)識(shí)符; 設(shè)置信號(hào)量數(shù)量為I ; 使用鍵和指定長(zhǎng)度創(chuàng)建共享內(nèi)存,并獲取共享內(nèi)存標(biāo)識(shí)符; 連接共享內(nèi)存并獲取共享內(nèi)存地址,并將共享內(nèi)存清零。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,根據(jù)所述熱插拔信息獲取熱插拔的設(shè)備信息包括:根據(jù)熱插拔信息中的設(shè)備所屬子系統(tǒng)和設(shè)備路徑來獲取設(shè)備信息。
5.根據(jù)權(quán)利要求1-4任意一項(xiàng)權(quán)利要求的所述的方法,其特征在于,根據(jù)所述熱插拔的動(dòng)作信息和設(shè)備信息調(diào)用共享設(shè)備維護(hù)接口對(duì)共享設(shè)備進(jìn)行相應(yīng)地處理進(jìn)一步包括: 如果所述動(dòng)作信息是插入動(dòng)作,則將設(shè)備信息作為一個(gè)新元素添加到共享設(shè)備的設(shè)備列表中,并向共享設(shè)備的進(jìn)程列表中的每一個(gè)進(jìn)程發(fā)送設(shè)備添加信號(hào);如果所述動(dòng)作信息是拔出動(dòng)作,則從共享設(shè)備的設(shè)備列表中刪除該設(shè)備,并向共享設(shè)備的進(jìn)程列表中的每一個(gè)進(jìn)程發(fā)送設(shè)備刪除信號(hào)。
6.一種在Linux系統(tǒng)下共享熱插拔設(shè)備的裝置,包括用于檢測(cè)到熱插拔事件后,將熱插拔信息設(shè)置為系統(tǒng)環(huán)境變量,并調(diào)用所述用戶空間處理模塊的內(nèi)核;其特征在于,該裝置還包括熱插拔設(shè)備共享模塊、熱插拔設(shè)備檢測(cè)模塊和熱插拔設(shè)備處理模塊,其中: 所述熱插拔設(shè)備共享模塊,用于系統(tǒng)啟動(dòng)時(shí)初始化共享設(shè)備,并將熱插拔設(shè)備檢測(cè)模塊注冊(cè)為L(zhǎng)inux熱插拔系統(tǒng)的用戶空間處理模塊;還用于提供維護(hù)共享設(shè)備的接口 ; 所述熱插拔設(shè)備檢測(cè)模塊,用于從所述系統(tǒng)環(huán)境變量中獲取熱插拔信息,并根據(jù)所述熱插拔信息獲取熱插拔的設(shè)備信息和動(dòng)作信息; 所述熱插拔設(shè)備處理模塊,根據(jù)所述熱插拔的動(dòng)作信息和設(shè)備信息調(diào)用共享設(shè)備維護(hù)接口對(duì)共享設(shè)備進(jìn)行相應(yīng)地處理。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述熱插拔設(shè)備共享模塊包括: 初始化單元,用于系統(tǒng)啟動(dòng)時(shí)創(chuàng)建共享內(nèi)存和信號(hào)量,其中,共享內(nèi)存用于存儲(chǔ)設(shè)備列表和進(jìn)程列表,信號(hào)量用于在多個(gè)進(jìn)程同時(shí)訪問共享內(nèi)存時(shí)進(jìn)行同步;還用于將熱插拔設(shè)備檢測(cè)模塊注冊(cè)為L(zhǎng)inux熱插拔系統(tǒng)的用戶空間處理模塊;設(shè)備管理單元,用于添加或刪除共享設(shè)備的設(shè)備列表中的元素; 進(jìn)程管理單元,用于增加或刪除共享設(shè)備的進(jìn)程列表中的元素。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述初始化單元具體用于:根據(jù)公共路徑名和公共項(xiàng)目標(biāo)識(shí)符獲取鍵;使用鍵創(chuàng)建信號(hào)量,并獲取信號(hào)量標(biāo)識(shí)符;設(shè)置信號(hào)量數(shù)量為I ;使用鍵和指定長(zhǎng)度創(chuàng)建共享內(nèi)存,并獲取共享內(nèi)存標(biāo)識(shí)符;連接共享內(nèi)存并獲取共享內(nèi)存地址,并將共享內(nèi)存清零。
9.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述熱插拔設(shè)備檢測(cè)模塊包括: 熱插拔信息獲取單元,用于從系統(tǒng)環(huán)境變量中獲取內(nèi)核設(shè)置的熱插拔信息; 設(shè)備信息獲取單元,用于根據(jù)熱插拔信息中設(shè)備所屬子系統(tǒng)和設(shè)備路徑來獲取設(shè)備信肩、O
10.根據(jù)權(quán)利要求6-9任意一項(xiàng)權(quán)利要求所述的裝置,其特征在于,所述熱插拔設(shè)備處理模塊包括: 設(shè)備處理單元,用于當(dāng)前熱插拔的動(dòng)作信息是插入動(dòng)作時(shí),將設(shè)備信息作為一個(gè)新元素添加到共享設(shè)備的設(shè)備列表中;當(dāng)前熱插拔動(dòng)作是拔出動(dòng)作時(shí),從共享設(shè)備的設(shè)備列表中刪除該設(shè)備; 信號(hào)發(fā)送單元,用于當(dāng)前熱插拔的動(dòng)作信息是插入動(dòng)作時(shí),向共享設(shè)備的進(jìn)程列表中的每一個(gè)進(jìn)程發(fā)送設(shè)備添加信號(hào);當(dāng)前熱插拔動(dòng)作是拔出動(dòng)作時(shí),向共享設(shè)備的進(jìn)程列表中的每一個(gè)進(jìn)程發(fā)送設(shè)備刪除信號(hào)。
【文檔編號(hào)】G06F13/40GK103530124SQ201310492970
【公開日】2014年1月22日 申請(qǐng)日期:2013年10月18日 優(yōu)先權(quán)日:2013年10月18日
【發(fā)明者】楊將來 申請(qǐng)人:中安消技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1