本發(fā)明涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,尤其涉及一種設(shè)備索引號(hào)分配方法、裝置及系統(tǒng)。
背景技術(shù):
設(shè)備熱插拔技術(shù)使計(jì)算機(jī)能夠在運(yùn)行時(shí)動(dòng)態(tài)改變其外圍設(shè)備與拓?fù)潢P(guān)系,是一種熱門的功能特性。目前許多設(shè)備和總線在硬件電路和驅(qū)動(dòng)程序的設(shè)計(jì)中都加入了對(duì)熱插拔技術(shù)的支持,如USB存儲(chǔ)設(shè)備、網(wǎng)絡(luò)適配器、顯示輸出設(shè)備等。支持熱插拔技術(shù)的設(shè)備在計(jì)算機(jī)系統(tǒng)開機(jī)狀態(tài)下插入或拔出系統(tǒng)時(shí),系統(tǒng)需將設(shè)備攜帶的硬件參數(shù)加載至內(nèi)存(易失性存儲(chǔ)設(shè)備)中相應(yīng)的存儲(chǔ)區(qū)域中,并根據(jù)熱插拔設(shè)備的硬件參數(shù),調(diào)用保存在非易失性存儲(chǔ)設(shè)備的對(duì)應(yīng)區(qū)域中的用戶預(yù)先對(duì)該設(shè)備設(shè)定的運(yùn)行參數(shù)。系統(tǒng)運(yùn)行時(shí),從非易失性存儲(chǔ)設(shè)備中加載該設(shè)備運(yùn)行參數(shù)可指導(dǎo)系統(tǒng)做出正確處理的。
雖然,目前多數(shù)設(shè)備都具有全球唯一且硬燒入硬件芯片的硬件地址編碼。但是,這些硬件地址對(duì)于單一計(jì)算機(jī)系統(tǒng)而言,編碼十分稀疏。這對(duì)于許多系統(tǒng),特別是嵌入式系統(tǒng)來(lái)說(shuō),由于計(jì)算機(jī)存儲(chǔ)資源和計(jì)算能力的限制,使用全球唯一的地址編碼對(duì)設(shè)備進(jìn)行配置,例如用戶使用網(wǎng)卡的全球唯一的地址對(duì)其IP地址設(shè)定時(shí),系統(tǒng)需遍歷內(nèi)存中保存的設(shè)備硬件參數(shù)來(lái)確定對(duì)哪個(gè)設(shè)備進(jìn)行參數(shù)配置,不僅處理過(guò)程復(fù)雜,還會(huì)造成計(jì)算時(shí)間過(guò)長(zhǎng)、計(jì)算資源浪費(fèi)等問(wèn)題。因此,在熱插拔設(shè)備插入系統(tǒng)時(shí),為該設(shè)備分配索引號(hào),并使用索引號(hào)替代設(shè)備的硬件地址編碼,作為設(shè)備在系統(tǒng)中的引用代號(hào),以便系統(tǒng)確認(rèn)用戶輸入的配置參數(shù)所針對(duì)的主體,是必要的節(jié)約計(jì)算資源的手段。
現(xiàn)有的設(shè)備索引號(hào)分配方法可在配置文件中記錄所有已知設(shè)備以及為其分配的索引號(hào)。每次遇到新的設(shè)備時(shí),均會(huì)依配置文件的記錄為已知設(shè)備分配配置文件中記錄的索引號(hào),并為未知設(shè)備分配未在配置文件中記錄的索引號(hào),并向配置文件添加相關(guān)記錄。這種方式雖然不會(huì)引起同一設(shè)備索引號(hào)的變化,但缺乏有效的索引號(hào)釋放機(jī)制,導(dǎo)致某些不再使用的設(shè)備引起索引號(hào)空置,造成資源浪費(fèi)。
因此,本領(lǐng)域技術(shù)人員需要提供一種設(shè)備索引號(hào)分配方法、裝置及系統(tǒng),能夠復(fù)用分配不再使用的設(shè)備的索引號(hào)。
技術(shù)實(shí)現(xiàn)要素:
為了解決現(xiàn)有技術(shù)問(wèn)題,本發(fā)明提供了一種設(shè)備索引號(hào)分配方法、裝置及系統(tǒng),能夠復(fù)用分配給不再使用的設(shè)備的索引號(hào)。
本發(fā)明實(shí)施例提供的一種設(shè)備索引號(hào)分配方法,包括:
在第一時(shí)間段內(nèi),接收第一設(shè)備插入通知,所述第一設(shè)備插入通知攜帶第一插入設(shè)備的第一身份標(biāo)識(shí)信息;
判斷所述第一身份標(biāo)識(shí)信息是否已保存在分配表中;所述分配表用于保存身份標(biāo)識(shí)信息與索引號(hào)的一一對(duì)應(yīng)關(guān)系;
如果是,則為所述第一插入設(shè)備分配所述分配表中與所述第一身份標(biāo)識(shí)信息對(duì)應(yīng)的索引號(hào);
如果否,則在第二時(shí)間段內(nèi),執(zhí)行后分配過(guò)程;所述后分配過(guò)程,包括:為所述第一插入設(shè)備分配第一索引號(hào),所述第一索引號(hào)為未在所述第一時(shí)間段內(nèi)被分配的索引號(hào);
所述第二時(shí)間段的起始時(shí)間不早于所述第一時(shí)間段的結(jié)束時(shí)間。
優(yōu)選地,還包括:
若在所述第二時(shí)間段內(nèi)接收到第二設(shè)備插入通知,則判斷第二身份標(biāo)識(shí)信息是否已保存在所述分配表中;所述第二設(shè)備插入通知攜帶第二插入設(shè)備的所述第二身份標(biāo)識(shí)信息;
如果所述第二身份標(biāo)識(shí)信息保存在所述分配表中,則為所述第二插入設(shè)備分配所述分配表中與所述第二插入設(shè)備的身份標(biāo)識(shí)信息對(duì)應(yīng)的索引號(hào);
如果所述第二身份標(biāo)識(shí)信息未保存在所述分配表中,則在所述第三時(shí)間段內(nèi),執(zhí)行所述后分配過(guò)程;所述后分配過(guò)程,還包括:為所述第二插入設(shè)備分配第二索引號(hào),所述第二索引號(hào)為未被分配給所述第一插入設(shè)備的索引號(hào);
所述第三時(shí)間段的起始時(shí)間不早于所述第二時(shí)間段的結(jié)束時(shí)間。
優(yōu)選地,所述若在所述第二時(shí)間段內(nèi)接收到第二設(shè)備插入通知,具體包括:
在為所述第一插入設(shè)備分配所述第一索引號(hào)后,檢查是否接收到所述第二設(shè)備插入通知。
優(yōu)選地,所述后分配過(guò)程,還包括:
將所述第一索引號(hào)與所述第一插入設(shè)備的身份標(biāo)識(shí)信息的一一對(duì)應(yīng)關(guān)系保存在所述分配表中;
將所述第二索引號(hào)與所述第二插入設(shè)備的身份標(biāo)識(shí)信息的一一對(duì)應(yīng)關(guān)系保存在所述分配表中。
優(yōu)選地,所述為所述第一插入設(shè)備分配第一索引號(hào),之前還包括:
從第一預(yù)設(shè)索引號(hào)開始逐一判斷每個(gè)索引號(hào)是否被分配,如果否,則將該索引號(hào)確定為所述第一索引號(hào);
或,
將空置時(shí)間最長(zhǎng)的索引號(hào)確定為所述第一索引號(hào),所述空置時(shí)間的起始時(shí)間為該索引號(hào)未被占用的起始時(shí)間。
優(yōu)選地,所述為所述第二插入設(shè)備分配第二索引號(hào),之前還包括:
從第二預(yù)設(shè)索引號(hào)開始逐一判斷每個(gè)索引號(hào)是否被分配,如果否,則將該索引號(hào)確定為所述第二索引號(hào);
或,
將空置時(shí)間最長(zhǎng)的索引號(hào)確定為所述第二索引號(hào),所述空置時(shí)間的起始時(shí)間為該索引號(hào)未被占用的起始時(shí)間。
本發(fā)明實(shí)施例還提供了一種設(shè)備索引號(hào)分配裝置,包括:通知接收模塊、第一判斷模塊、第一索引號(hào)分配模塊和第二索引號(hào)分配模塊;
所述通知接收模塊,用于在第一時(shí)間段內(nèi),接收第一設(shè)備插入通知,所述第一設(shè)備插入通知攜帶第一插入設(shè)備的第一身份標(biāo)識(shí)信息;
所述第一判斷模塊,用于判斷所述第一身份標(biāo)識(shí)信息是否已保存在分配表中;所述分配表用于保存身份標(biāo)識(shí)信息與索引號(hào)的一一對(duì)應(yīng)關(guān)系;
所述第一索引號(hào)分配模塊,用于當(dāng)所述第一判斷模塊判斷所述第一身份標(biāo)識(shí)信息保存在所述分配表中時(shí),為所述第一插入設(shè)備分配所述分配表中與所述第一身份標(biāo)識(shí)信息對(duì)應(yīng)的索引號(hào);
所述第二索引號(hào)分配模塊,用于當(dāng)所述第一判斷模塊判斷所述第一身份標(biāo)識(shí)信息沒(méi)有保存在所述分配表中時(shí),在第二時(shí)間段內(nèi),執(zhí)行后分配過(guò)程;所述后分配過(guò)程,包括:為所述第一插入設(shè)備分配第一索引號(hào),所述第一索引號(hào)為未在所述第一時(shí)間段內(nèi)被分配的索引號(hào);
所述第二時(shí)間段的開始時(shí)間不早于所述第一時(shí)間段的結(jié)束時(shí)間。
優(yōu)選地,還包括:第二判斷模塊;
所述通知接收模塊,還用于接收第二設(shè)備插入通知;所述第二設(shè)備插入通知攜帶第二插入設(shè)備的第二身份標(biāo)識(shí)信息;
所述第二判斷模塊,用于當(dāng)所述通知接收模塊在所述第二時(shí)間段內(nèi)接收到所述第二設(shè)備插入通知時(shí),判斷所述第二身份標(biāo)識(shí)信息是否已保存在所述分配表中;
所述第一索引號(hào)分配模塊,還用于當(dāng)所述第二判斷模塊判斷所述第二身份標(biāo)識(shí)信息保存在所述分配表中時(shí),為所述第二插入設(shè)備分配所述分配表中與所述第二插入設(shè)備的身份標(biāo)識(shí)信息對(duì)應(yīng)的索引號(hào);
所述第二索引號(hào)分配模塊,還用于當(dāng)所述第二判斷模塊判斷所述第二身份標(biāo)識(shí)信息未保存在所述分配表中時(shí),在所述第三時(shí)間內(nèi),執(zhí)行所述后分配過(guò)程;
所述后分配過(guò)程,還包括:為所述第二插入設(shè)備分配第二索引號(hào),所述第二索引號(hào)為未被分配給所述第一插入設(shè)備的索引號(hào);所述第三時(shí)間段的起始時(shí)間不早于所述第二時(shí)間段的結(jié)束時(shí)間。
優(yōu)選地,所述通接收模塊,包括:通知檢查子模塊;
所述通知檢查子模塊,用于在所述第二索引號(hào)分配模塊為所述第一插入設(shè)備分配所述第一索引號(hào)后,檢查是否接收到所述第二設(shè)備插入通知。
優(yōu)選地,還包括:分配表更新模塊;
所述分配表更新模塊,用于將所述第一索引號(hào)與所述第一插入設(shè)備的身份標(biāo)識(shí)信息的一一對(duì)應(yīng)關(guān)系保存在所述分配表中;
所述分配表更新模塊,還用于將所述第二索引號(hào)與所述第二插入設(shè)備的身份標(biāo)識(shí)信息的一一對(duì)應(yīng)關(guān)系保存在所述分配表中。
優(yōu)選地,所述第二索引號(hào)分配模塊,包括:第一確定子模塊或第二確定子模塊;
所述第一確定子模塊,包括:第一判斷子模塊和第一索引號(hào)確定子模塊;
所述第一判斷子模塊,用于從第一預(yù)設(shè)索引號(hào)開始逐一判斷每個(gè)索引號(hào)是否被分配;
所述第一索引號(hào)確定子模塊,用于當(dāng)所述第一判斷子模塊判斷索引號(hào)未被分配時(shí),將該索引號(hào)確定為所述第一索引號(hào);
所述第二確定子模塊,包括:第二索引號(hào)確定子模塊;
所述第二索引號(hào)確定子模塊,用于將空置時(shí)間最長(zhǎng)的索引號(hào)確定為所述第一索引號(hào),所述空置時(shí)間的起始時(shí)間為該索引號(hào)未被占用的起始時(shí)間。
優(yōu)選地,所述第二索引號(hào)分配模塊,還包括:第三確定子模塊或第四確定子模塊;
所述第三確定子模塊,包括:第二判斷子模塊和第三索引號(hào)確定子模塊;
所述第二判斷子模塊,用于從第二預(yù)設(shè)索引號(hào)開始逐一判斷每個(gè)索引號(hào)是否被分配;
所述第三索引號(hào)確定子模塊,用于當(dāng)所述第二判斷子模塊判斷索引號(hào)未被分配時(shí),將該索引號(hào)確定為所述第二索引號(hào);
所述第四確定子模塊,包括:第四索引號(hào)確定子模塊;
所述第四索引號(hào)確定子模塊,用于將空置時(shí)間最長(zhǎng)的索引號(hào)確定為所述第二索引號(hào),所述空置時(shí)間的起始時(shí)間為該索引號(hào)未被占用的起始時(shí)間。
本發(fā)明實(shí)施例還提供了一種設(shè)備索引號(hào)分配系統(tǒng),包括:身份標(biāo)識(shí)信息獲取單元和索引號(hào)分配單元;
所述身份標(biāo)識(shí)信息獲取單元,用于獲取第一插入設(shè)備的第一身份標(biāo)識(shí)信息,并將所述第一身份標(biāo)識(shí)信息發(fā)送至所述索引號(hào)分配單元;
所述索引號(hào)分配單元,用于在第一時(shí)間段內(nèi),判斷所述第一身份標(biāo)識(shí)信息是否保存在分配表中;如果是,為所述第一插入設(shè)備分配所述分配表中與所述第一身份標(biāo)識(shí)信息對(duì)應(yīng)的索引號(hào);如果否,則在第二時(shí)間段內(nèi),為所述第一插入設(shè)備分配未在所述第一時(shí)間段內(nèi)被分配的索引號(hào);
所述第二時(shí)間段的起始時(shí)間不早于所述第一時(shí)間段的結(jié)束時(shí)間;所述分配表用于保存身份標(biāo)識(shí)信息與索引號(hào)的一一對(duì)應(yīng)關(guān)系。
優(yōu)選地,
所述身份標(biāo)識(shí)信息獲取單元,用于獲取第二插入設(shè)備的第二身份標(biāo)識(shí)信息,并將所述第二身份標(biāo)識(shí)信息發(fā)送至所述索引號(hào)分配單元;
所述索引號(hào)分配單元,還用于在所述第二時(shí)間段內(nèi)檢查是否接收到所述第二身份標(biāo)識(shí)信息;如果是,則判斷第二身份標(biāo)識(shí)信息是否已保存在所述分配表中;
所述索引號(hào)分配單元,還用于當(dāng)所述第二身份標(biāo)識(shí)信息保存在所述分配表中時(shí),則為所述第二插入設(shè)備分配所述分配表中與所述第二插入設(shè)備的身份標(biāo)識(shí)信息對(duì)應(yīng)的索引號(hào);
所述索引號(hào)分配單元,還用于當(dāng)所述第二身份標(biāo)識(shí)信息未保存在所述分配表中時(shí),則在所述第三時(shí)間段內(nèi),為所述第二插入設(shè)備分配未被分配給所述第一插入設(shè)備的索引號(hào);
所述第三時(shí)間段的起始時(shí)間不早于所述第二時(shí)間段的結(jié)束時(shí)間。
優(yōu)選地,所述索引號(hào)分配單元,包括:存儲(chǔ)器、預(yù)分配器、后分配器和互斥鎖;
所述存儲(chǔ)器,用于保存所述分配表;
所述預(yù)分配器,用于在獲取所述互斥鎖后,為所述第一插入設(shè)備分配所述分配表中與所述第一身份標(biāo)識(shí)信息對(duì)應(yīng)的索引號(hào);
所述預(yù)分配器,還用于在獲取所述互斥鎖后,為所述第二插入設(shè)備分配所述分配表中與所述第二身份標(biāo)識(shí)信息對(duì)應(yīng)的索引號(hào);
所述后分配器,用于在獲取所述互斥鎖后,為所述第一插入設(shè)備分配未在所述第一時(shí)間段內(nèi)被分配的索引號(hào),并將所述第一身份標(biāo)識(shí)信息與該索引號(hào)的對(duì)應(yīng)關(guān)系保存在所述分配表中;
所述后分配器,還用于在獲取所述互斥鎖后,為所述第二插入設(shè)備分配未被分配給所述第一插入設(shè)備的索引號(hào),并將所述第二身份標(biāo)識(shí)信息與該索引號(hào)的對(duì)應(yīng)關(guān)系保存在所述分配表中。
與現(xiàn)有技術(shù)相比,本發(fā)明至少具有以下優(yōu)點(diǎn):
本發(fā)明實(shí)施例提供的設(shè)備索引號(hào)分配方法,通過(guò)查詢保存有已知插入設(shè)備的身份標(biāo)識(shí)信息和索引號(hào)的一一對(duì)應(yīng)關(guān)系的分配表,先為在第一時(shí)間段內(nèi)加入到系統(tǒng)中的已知插入設(shè)備分配分配表中與其身份標(biāo)識(shí)信息所對(duì)應(yīng)的索引號(hào)。這樣就能盡可能的保證同一插入設(shè)備在兩次插入時(shí)所分配的索引號(hào)不變。而后,在第二時(shí)間段內(nèi),處理在第一時(shí)間段內(nèi)加入到系統(tǒng)中的其余未知插入設(shè)備的索引號(hào)分配問(wèn)題,逐一為未知插入設(shè)備分配在第一時(shí)間段內(nèi)未被分配的索引號(hào)。此時(shí),在第一時(shí)間段內(nèi)未加入到系統(tǒng)的已知插入設(shè)備的索引號(hào)可被未知插入設(shè)備復(fù)用,避免了資源的浪費(fèi)。由上述可知,本發(fā)明實(shí)施例提供的設(shè)備索引號(hào)分配方法,能夠在盡可能保證同一插入設(shè)備在兩次插入時(shí)所分配的索引號(hào)不變的情況下,復(fù)用分配給不再使用的設(shè)備的索引號(hào)。
附圖說(shuō)明
為了更清楚地說(shuō)明本申請(qǐng)實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請(qǐng)中記載的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其它的附圖。
圖1為本發(fā)明提供的設(shè)備索引號(hào)分配方法實(shí)施例一的流程示意圖;
圖2為本發(fā)明提供的設(shè)備索引號(hào)分配方法實(shí)施例二的流程示意圖;
圖3為本發(fā)明提供的設(shè)備索引號(hào)分配裝置實(shí)施例一的結(jié)構(gòu)示意圖;
圖4為本發(fā)明提供的設(shè)備索引號(hào)分配裝置實(shí)施例二的結(jié)構(gòu)示意圖;
圖5為本發(fā)明提供的設(shè)備索引號(hào)分配系統(tǒng)實(shí)施例一的結(jié)構(gòu)示意圖;
圖6為本發(fā)明提供的設(shè)備索引號(hào)分配系統(tǒng)實(shí)施例二的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
方法實(shí)施例一:
參見圖1,該圖為本發(fā)明提供的設(shè)備索引號(hào)分配方法實(shí)施例一的流程圖。
本實(shí)施例提供的設(shè)備索引號(hào)分配方法,包括:
S101:在第一時(shí)間段內(nèi),接收第一設(shè)備插入通知,所述第一設(shè)備插入通知攜帶第一插入設(shè)備的第一身份標(biāo)識(shí)信息;
當(dāng)系統(tǒng)中加入了支持設(shè)備熱插拔技術(shù)的插入設(shè)備時(shí),生成設(shè)備插入通知。可以理解的是,在一段時(shí)間內(nèi),可能有多個(gè)設(shè)備加入該系統(tǒng)。例如,系統(tǒng)啟動(dòng)時(shí),系統(tǒng)中的所有(某一類型的)設(shè)備會(huì)一并進(jìn)入初始化程序。此時(shí),系統(tǒng)中會(huì)生成到多個(gè)設(shè)備插入通知。
可以理解的是,插入設(shè)備的身份標(biāo)識(shí)信息可以為其硬件地址、序列號(hào)等全球唯一的非易失性的硬件標(biāo)識(shí)碼。
當(dāng)接收到設(shè)備插入通知時(shí),則開始為插入設(shè)備分配索引號(hào)。本發(fā)明提供的設(shè)備索引號(hào)分配方法,可采用批量通知處理的方式,一方面避免了多個(gè)通知帶來(lái)的性能開銷問(wèn)題,另一方面也能提高分配的準(zhǔn)確性,降低已知設(shè)備的索引號(hào)被搶占等問(wèn)題。
S102:判斷所述第一身份標(biāo)識(shí)信息是否已保存在分配表中;
如果是,則執(zhí)行步驟S103;如果否,則執(zhí)行步驟S104;所述分配表用于保存身份標(biāo)識(shí)信息與索引號(hào)的一一對(duì)應(yīng)關(guān)系;
所述分配表用于保存每個(gè)已知插入設(shè)備(即在系統(tǒng)中插入過(guò)的設(shè)備)的索引號(hào)分配記錄。因此,需保存在非易失性存儲(chǔ)器中,以便在系統(tǒng)重啟后仍舊可以識(shí)別已知的插入設(shè)備,并根據(jù)之前分配的索引號(hào)為該設(shè)備分配索引號(hào)。對(duì)于服務(wù)器和工作站系統(tǒng)來(lái)說(shuō),可采用磁盤文件的形式來(lái)保存該分配表;對(duì)于嵌入式系統(tǒng)來(lái)說(shuō),可以使用可擦寫ROM芯片來(lái)保存該分配表。索引號(hào)可使用0、1、2、……、N,N為正整數(shù)。
這里需要說(shuō)明的是,索引號(hào)的編號(hào)方法不僅限于上述實(shí)例所述的方式,本領(lǐng)域技術(shù)人員可根據(jù)實(shí)際情況具體設(shè)定,實(shí)現(xiàn)方法與上述實(shí)例類似,在此不再一一列舉。
此外,考慮到非易失性存儲(chǔ)器的數(shù)據(jù)帶寬通常較低,讀寫操作的耗時(shí)較長(zhǎng)??深~外使用隨機(jī)存儲(chǔ)器(RAM)鏡像分配表,并通過(guò)直接內(nèi)存存取(DMA)等傳輸渠道實(shí)現(xiàn)與非易失性存儲(chǔ)器中的分配表同步。此時(shí),對(duì)索引號(hào)配置記錄的查詢與更新均針對(duì)RAM中的鏡像分配表進(jìn)行。
需要說(shuō)明的是,在第一時(shí)間段中,通過(guò)迭代查詢的機(jī)制保證為所有接收到的設(shè)備插入通知所代表的插入設(shè)備分配索引號(hào),而在第一時(shí)間段后接收到的設(shè)備插入通知所代表的插入設(shè)備將暫時(shí)不被處理。
S103:為所述第一插入設(shè)備分配所述分配表中與所述第一身份標(biāo)識(shí)信息對(duì)應(yīng)的索引號(hào);
當(dāng)分配表中保存有該插入設(shè)備的身份標(biāo)識(shí)信息和與其一一對(duì)應(yīng)的索引號(hào)時(shí),可直接為該插入設(shè)備分配記錄的索引號(hào),保證該插入設(shè)備的數(shù)據(jù)在兩次熱插拔后的分配的索引號(hào)一致,以保證每次插入該插入設(shè)備時(shí)用戶之前對(duì)其配置的一致性。
S104:在第二時(shí)間段內(nèi)執(zhí)行后分配過(guò)程;
所述后分配過(guò)程,包括為所述第一插入設(shè)備分配第一索引號(hào),所述第一索引號(hào)為未在所述第一時(shí)間段內(nèi)被分配的索引號(hào);
所述第二時(shí)間段的起始時(shí)間不早于所述第一時(shí)間段的結(jié)束時(shí)間。
可以理解的是,第一時(shí)間段可設(shè)定為執(zhí)行步驟S102-S103步驟所需的時(shí)間。即,當(dāng)一插入設(shè)備加入到系統(tǒng)中時(shí),在查詢分配表以及為已知插入設(shè)備分配索引號(hào)所用的時(shí)間。此時(shí),先處理第一時(shí)間段內(nèi)插入設(shè)備中已知插入設(shè)備的索引號(hào)分配,再為其中未知插入設(shè)備分配索引號(hào)。
當(dāng)分配表中沒(méi)有保存該插入設(shè)備的身份標(biāo)識(shí)信息與索引號(hào)的一一對(duì)應(yīng)關(guān)系(即該插入設(shè)備為未知插入設(shè)備)時(shí),可暫時(shí)將該插入設(shè)備的句柄暫時(shí)存放至待分配設(shè)備隊(duì)列中。在將已知插入設(shè)備(即分配表中保存有該插入設(shè)備的身份標(biāo)識(shí)信息和與其對(duì)應(yīng)的索引號(hào))的數(shù)據(jù)保存至相應(yīng)的存儲(chǔ)區(qū)域后,再根據(jù)先進(jìn)先出的處理規(guī)則逐一對(duì)未知插入設(shè)備進(jìn)行處理,為其分配第一時(shí)間段內(nèi)未被分配的索引號(hào),降低之前為已知插入設(shè)備分配的索引號(hào)被占用的可能性。
這里需要說(shuō)明的是,本領(lǐng)域技術(shù)人員還可根據(jù)實(shí)際情況使用其他技術(shù)方式實(shí)現(xiàn)先為已知插入設(shè)備分配索引號(hào)后,再處理剩余的未知插入設(shè)備的索引號(hào)分配的技術(shù)方案,上述將未知插入設(shè)備的句柄暫時(shí)存放在待分配設(shè)備隊(duì)列中僅是舉例說(shuō)明,本發(fā)明并不對(duì)此做任何限定,其他實(shí)現(xiàn)方式在此不在一一列舉。
另外,即使分配表中保存有未在第一時(shí)間段被占用的索引號(hào)以及與其對(duì)應(yīng)的插入設(shè)備的身份標(biāo)識(shí)信息,只要在第一時(shí)間段內(nèi)與其對(duì)應(yīng)的插入設(shè)備沒(méi)有觸發(fā)設(shè)備插入通知(未插入系統(tǒng)、未處理該設(shè)備的插入請(qǐng)求或該插入設(shè)備被拔出),則該索引號(hào)也可被本次設(shè)備插入通知中的未知設(shè)備占用。此時(shí),尚未被占用的索引號(hào)可被復(fù)用,避免了存儲(chǔ)資源的浪費(fèi)。因此,本領(lǐng)域技術(shù)人員可根據(jù)實(shí)際情況設(shè)定第一時(shí)間段的時(shí)長(zhǎng),以盡可能的保證已知插入設(shè)備其索引號(hào)在兩次熱插拔中保持不變。
下面將具體分析本實(shí)施例提供的設(shè)備索引號(hào)分配方法在系統(tǒng)啟動(dòng)和系統(tǒng)運(yùn)行時(shí)的工作過(guò)程,檢驗(yàn)其效果。
啟動(dòng)時(shí),系統(tǒng)中所有(某一類型的)設(shè)備會(huì)一并進(jìn)入初始化程序,觸發(fā)設(shè)備插入通知,并迭代處理全部設(shè)備。并按照分配表中的記錄為已知插入設(shè)備分配與其對(duì)應(yīng)的索引號(hào),其它未知插入設(shè)備則進(jìn)入待分配設(shè)備隊(duì)列。而后,一次性的為這些待分配設(shè)備隊(duì)列中的插入設(shè)備分配未被分配的索引號(hào),并將身份標(biāo)識(shí)信息與索引號(hào)的對(duì)應(yīng)關(guān)系保存在分配表中。這樣就會(huì)使得所有已知設(shè)備都能夠分配到原有索引號(hào),避免了某些在關(guān)機(jī)狀態(tài)下新加設(shè)備先于原有設(shè)備進(jìn)行初始化而導(dǎo)致的原有索引號(hào)被占用的風(fēng)險(xiǎn)。
運(yùn)行時(shí),新插入的設(shè)備會(huì)觸發(fā)設(shè)備插入通知。此時(shí),首先檢查該插入設(shè)備是否為已知插入設(shè)備。如果是,已知插入設(shè)備則將按照分配表中的記錄,為該插入設(shè)備分配與其對(duì)應(yīng)的索引號(hào)。如果否,則將其身份標(biāo)識(shí)信息保存至待分配設(shè)備隊(duì)列;再?gòu)拇峙湓O(shè)備隊(duì)列中獲取該插入設(shè)備的身份標(biāo)識(shí)信息后,為其分配未分配的索引號(hào),并將身份標(biāo)識(shí)信息與索引號(hào)的對(duì)應(yīng)關(guān)系保存在分配表中。
可見,無(wú)論是系統(tǒng)啟動(dòng)時(shí)還是系統(tǒng)運(yùn)行時(shí),本實(shí)施例提供的設(shè)備索引號(hào)分配方法都能正確進(jìn)行索引號(hào)的分配與設(shè)備索引號(hào)分配,無(wú)需區(qū)分系統(tǒng)狀態(tài)并進(jìn)行特殊處理。
本實(shí)施例提供的設(shè)備索引號(hào)分配方法,通過(guò)查詢保存有已知插入設(shè)備的身份標(biāo)識(shí)信息和索引號(hào)的一一對(duì)應(yīng)關(guān)系的分配表,先為在第一時(shí)間段內(nèi)加入到系統(tǒng)中的已知插入設(shè)備分配分配表中與其身份標(biāo)識(shí)信息所對(duì)應(yīng)的索引號(hào)。這樣就能盡可能的保證同一插入設(shè)備在兩次插入時(shí)所分配的索引號(hào)不變。而后,在第二時(shí)間段內(nèi),處理在第一時(shí)間段內(nèi)加入到系統(tǒng)中的其余未知插入設(shè)備的索引號(hào)分配問(wèn)題,逐一為未知插入設(shè)備分配在第一時(shí)間段內(nèi)未被分配的索引號(hào)。此時(shí),在第一時(shí)間段內(nèi)未加入到系統(tǒng)的已知插入設(shè)備的索引號(hào)可被未知插入設(shè)備復(fù)用,避免了資源的浪費(fèi)。由上述可知,本實(shí)施例提供的設(shè)備索引號(hào)分配方法,能夠在盡可能保證同一插入設(shè)備在兩次插入時(shí)所分配的索引號(hào)不變的情況下,復(fù)用分配給不再使用的設(shè)備的索引號(hào)。
方法實(shí)施例二:
參見圖2,該圖為本發(fā)明提供的設(shè)備索引號(hào)分配方法實(shí)施例二的流程示意圖。相較于圖1,本實(shí)施例提供了一種更加具體的設(shè)備索引號(hào)分配方法。
本實(shí)施例中的步驟S201-S204分別于方法實(shí)施例一中的S101-S104相同,在此不再贅述。
為了進(jìn)一步避免已知插入設(shè)備的索引號(hào)被占用,本實(shí)施例提供的設(shè)備索引號(hào)分配方法,還包括:
S205:若在所述第二時(shí)間段內(nèi)接收到第二設(shè)備插入通知,則判斷第二身份標(biāo)識(shí)信息是否已保存在所述分配表中;所述第二設(shè)備插入通知攜帶第二插入設(shè)備的所述第二身份標(biāo)識(shí)信息;如果所述第二身份標(biāo)識(shí)信息保存在所述分配表中,則執(zhí)行步驟S206;如果所述第二身份標(biāo)識(shí)信息未保存在所述分配表中,則執(zhí)行步驟S207;
S206:為所述第二插入設(shè)備分配所述分配表中與所述第二插入設(shè)備的身份標(biāo)識(shí)信息對(duì)應(yīng)的索引號(hào);
S207:在所述第三時(shí)間段內(nèi),執(zhí)行所述后分配過(guò)程。所述第三時(shí)間段的起始時(shí)間不早于所述第二時(shí)間段的結(jié)束時(shí)間。
所述后分配過(guò)程,還包括:為所述第二插入設(shè)備分配第二索引號(hào),所述第二索引號(hào)為未被分配給所述第一插入設(shè)備的索引號(hào);
本實(shí)施例提供的設(shè)備索引號(hào)分配方法,在處理多個(gè)插入設(shè)備的索引號(hào)分配問(wèn)題時(shí)的具體流程如下所述:首先,為第一時(shí)間段加入到系統(tǒng)的插入設(shè)備中的已知插入設(shè)備分配索引號(hào)。為已知插入設(shè)備分配索引號(hào)的規(guī)則為為已知插入設(shè)備分配分配表中記錄的與其身份標(biāo)識(shí)信息對(duì)應(yīng)的索引號(hào)。之后,在第二時(shí)間段內(nèi)未第一時(shí)間段內(nèi)加入到系統(tǒng)中的未知插入設(shè)備分配索引號(hào)。在為未知插入設(shè)備分配索引號(hào)的過(guò)程中,如果有新的插入設(shè)備加入到系統(tǒng)中,則查詢分配表,判斷該新插入設(shè)備是否為已知插入設(shè)備。如果是,則為新插入設(shè)備分配記錄在分配表中與其身份標(biāo)識(shí)信息對(duì)應(yīng)的索引號(hào);如果否,則將新插入設(shè)備的設(shè)備句柄添加至待分配設(shè)備隊(duì)列,再按照預(yù)設(shè)的先進(jìn)先出規(guī)則逐一為待分配設(shè)備隊(duì)列中的插入設(shè)備分配索引號(hào)。
需要說(shuō)明的是,可在為所述第一插入設(shè)備分配所述第一索引號(hào)后,檢查是否接收到所述第二設(shè)備插入通知。即每處理完一個(gè)未知插入設(shè)備的索引號(hào)分配問(wèn)題后,判斷是否有新插入的設(shè)備加入到系統(tǒng)。
綜上所述,為方便理解,將查詢分配表為已插入設(shè)備分配索引號(hào)并將未知插入設(shè)備的句柄保存在待處理設(shè)備隊(duì)列中的過(guò)程稱之為預(yù)分配過(guò)程,將為未知插入設(shè)備分配索引號(hào)的過(guò)程稱之為后分配過(guò)程。預(yù)分配過(guò)程的優(yōu)先級(jí)高于后分配過(guò)程的優(yōu)先級(jí)。即當(dāng)有多個(gè)設(shè)備在待分配池中時(shí),后分配過(guò)程中每處理完一個(gè)未知插入設(shè)備的索引號(hào)分配問(wèn)題后,需要檢查是否有新的設(shè)備插入通知,如果有新的通知,則先執(zhí)行預(yù)分配過(guò)程,在執(zhí)行完預(yù)分配過(guò)程后且沒(méi)有新加入系統(tǒng)的插入設(shè)備之后再重新執(zhí)行后分配過(guò)程,為剩余未知設(shè)備分配索引號(hào)。
顯而易見的是,上述后分配過(guò)程會(huì)改變插入設(shè)備的身份標(biāo)識(shí)信息與索引號(hào)的對(duì)應(yīng)關(guān)系。因此,需將新的索引號(hào)與插入設(shè)備的身份標(biāo)識(shí)信息的對(duì)應(yīng)關(guān)系保存在分配表中。可以理解的是,對(duì)索引號(hào)配置記錄的更是針對(duì)RAM中的鏡像分配表進(jìn)行。再通過(guò)DMA等傳輸渠道同步ROM中的分配表,保證系統(tǒng)重啟后,為已知插入設(shè)備分配的索引號(hào)不變。
因此,所述后分配過(guò)程,還包括:
將所述第一索引號(hào)與所述第一插入設(shè)備的身份標(biāo)識(shí)信息的一一對(duì)應(yīng)關(guān)系保存在所述分配表中;將所述第二索引號(hào)與所述第二插入設(shè)備的身份標(biāo)識(shí)信息的一一對(duì)應(yīng)關(guān)系保存在所述分配表中。
下面將對(duì)各時(shí)間段內(nèi)的后分配過(guò)程中所用索引號(hào)分配規(guī)則,即確定將哪個(gè)索引號(hào)分配給未知插入設(shè)備的方法進(jìn)行舉例說(shuō)明。需要說(shuō)明的是,以下實(shí)例僅是對(duì)為未知插入設(shè)備分配索引號(hào)的方法進(jìn)行舉例說(shuō)明,本發(fā)明并不對(duì)此進(jìn)行限定,本領(lǐng)域技術(shù)人員還可根據(jù)實(shí)際情況具體設(shè)定,在此不再一一列舉。
第一、在第一時(shí)間段內(nèi)時(shí),從第一預(yù)設(shè)索引號(hào)開始逐一判斷每個(gè)索引號(hào)是否被分配,如果否,則將該索引號(hào)確定為所述第一索引號(hào)。
可以理解的是,在第二時(shí)間段內(nèi)時(shí),從第二預(yù)設(shè)索引號(hào)開始逐一判斷每個(gè)索引號(hào)是否被分配,如果否,則將該索引號(hào)確定為所述第二索引號(hào)。
第一預(yù)設(shè)索引號(hào)和第二預(yù)設(shè)索引號(hào)可以為編號(hào)最小的索引號(hào),也可是編號(hào)在上次所分配的索引號(hào)的下一個(gè)的索引號(hào)。
這里需要說(shuō)明的是,對(duì)于使用訪問(wèn)速度不一致的存儲(chǔ)設(shè)備而言,需要選用從最小的索引號(hào)(例如0)開始逐一判斷每個(gè)索引號(hào)是否被分配這種策略來(lái)優(yōu)化插入設(shè)備數(shù)據(jù)的存取性能。由于某些系統(tǒng)需要優(yōu)化成本,可能需要采用存取速度不一致的不同類型的存取設(shè)備以降低成本。這就需要分配策略盡可能的選擇更高速的存儲(chǔ)區(qū)域(通常,可為索引號(hào)較小的設(shè)備配置速度較快的存儲(chǔ)區(qū)域),因此需要更加有限選擇這些索引號(hào)。
還需要說(shuō)明的是,對(duì)于使用壽命有限的存儲(chǔ)設(shè)備而言,需要選用這種策略來(lái)優(yōu)化設(shè)備可靠性和壽命。例如固態(tài)硬盤(SSD)等存儲(chǔ)設(shè)備,由于材料和技術(shù)等條件的限制,其壽命由讀寫次數(shù)所限制。因此需要盡量平衡各存儲(chǔ)區(qū)域的存取次數(shù),來(lái)避免由單一存儲(chǔ)區(qū)域的過(guò)度讀寫帶來(lái)的對(duì)存儲(chǔ)設(shè)備可靠性的損害。從最近一次被分配的索引號(hào)的下一個(gè)索引號(hào)開始,逐一判斷每個(gè)索引號(hào)是否被分配,可以使輸入設(shè)備數(shù)據(jù)的存取盡可能的分散到不同存儲(chǔ)區(qū)域,而優(yōu)化存儲(chǔ)設(shè)備可靠性和壽命。
可以理解的是,當(dāng)系統(tǒng)中所用的索引號(hào)為0-7時(shí),如上次分配的索引號(hào)為6,而索引號(hào)7已被分配。此時(shí),可從索引號(hào)0重新開始,逐一判斷每個(gè)索引號(hào)是否被分配。
第二,在第一時(shí)間段內(nèi)時(shí),將空置時(shí)間最長(zhǎng)的索引號(hào)確定為所述第一索引號(hào),所述空置時(shí)間的起始時(shí)間為該索引號(hào)未被占用的起始時(shí)間。
可以理解的是,在第二時(shí)間段內(nèi)時(shí),將空置時(shí)間最長(zhǎng)的索引號(hào)確定為所述第二索引號(hào)。
可以理解的是,從未被分配的索引號(hào),其空置時(shí)間的起始時(shí)間可設(shè)定為無(wú)窮小。
這里需要說(shuō)明的是,對(duì)于頻繁熱插拔的插入設(shè)備而言,需要最大化保持原有插入設(shè)備的索引號(hào)。因此使用最久未使用策略可以最大化避免已分配的索引號(hào)被新設(shè)備覆蓋。
另外,采用何種策略將為未知插入設(shè)備分配索引號(hào),可以根據(jù)系統(tǒng)計(jì)算能力和系統(tǒng)資源緊張程度等情況進(jìn)行靈活選擇。部分情況可能某一種策略的優(yōu)勢(shì)會(huì)比較突出,而某些情況下則可以存在多種策略均可達(dá)到較好效果的情況。同樣,某些情況下還可以組合不同的基本策略。例如,當(dāng)頻繁熱插拔設(shè)備使用了訪問(wèn)速度不一致的存儲(chǔ)設(shè)備時(shí),可以組合小號(hào)碼優(yōu)先分配策略和最久未使用者優(yōu)先分配策略,優(yōu)先選擇較高速的存儲(chǔ)區(qū)域,然后在較高速存儲(chǔ)區(qū)域部分對(duì)應(yīng)的若干索引號(hào)范圍內(nèi)選擇最久未使用者。
基于上述實(shí)施例提供的設(shè)備索引號(hào)分配方法,本發(fā)明還提供了一種設(shè)備索引號(hào)分配裝置。
裝置實(shí)施例一:
參見圖3,該圖為本發(fā)明提供的設(shè)備索引號(hào)分配裝置實(shí)施例一的示意圖。
本實(shí)施例提供的設(shè)備索引號(hào)分配裝置,包括:通知接收模塊100、第一判斷模塊201、第一索引號(hào)分配模塊301和第二索引號(hào)分配模塊302;
所述通知接收模塊100,用于在第一時(shí)間段內(nèi),接收第一設(shè)備插入通知,所述第一設(shè)備插入通知攜帶第一插入設(shè)備的第一身份標(biāo)識(shí)信息;
所述第一判斷模塊201,用于判斷所述第一身份標(biāo)識(shí)信息是否已保存在分配表中;所述分配表用于保存身份標(biāo)識(shí)信息與索引號(hào)的一一對(duì)應(yīng)關(guān)系;
所述第一索引號(hào)分配模塊301,用于當(dāng)所述第一判斷模塊201判斷所述第一身份標(biāo)識(shí)信息保存在所述分配表中時(shí),為所述第一插入設(shè)備分配所述分配表中與所述第一身份標(biāo)識(shí)信息對(duì)應(yīng)的索引號(hào);
所述第二索引號(hào)分配模塊302,用于當(dāng)所述第一判斷模塊201判斷所述第一身份標(biāo)識(shí)信息沒(méi)有保存在所述分配表中時(shí),在第二時(shí)間段內(nèi),執(zhí)行后分配過(guò)程;所述后分配過(guò)程,包括:為所述第一插入設(shè)備分配第一索引號(hào),所述第一索引號(hào)為未在所述第一時(shí)間段內(nèi)被分配的索引號(hào);
所述第二時(shí)間段的開始時(shí)間不早于所述第一時(shí)間段的結(jié)束時(shí)間。
本實(shí)施例提供的設(shè)備索引號(hào)分配裝置,通過(guò)第一判斷模塊判斷插入設(shè)備是否已知設(shè)備,如果是,則經(jīng)第一索引號(hào)分配模塊查詢保存有已知插入設(shè)備的身份標(biāo)識(shí)信息和索引號(hào)的一一對(duì)應(yīng)關(guān)系的分配表,先為在第一時(shí)間段內(nèi)加入到系統(tǒng)中的已知插入設(shè)備分配分配表中與其身份標(biāo)識(shí)信息所對(duì)應(yīng)的索引號(hào)。這樣就能盡可能的保證同一插入設(shè)備在兩次插入時(shí)所分配的索引號(hào)不變。而后,第二索引號(hào)分配模塊在第二時(shí)間段內(nèi),處理在第一時(shí)間段內(nèi)加入到系統(tǒng)中的其余未知插入設(shè)備的索引號(hào)分配問(wèn)題,逐一為未知插入設(shè)備分配在第一時(shí)間段內(nèi)未被分配的索引號(hào)。此時(shí),在第一時(shí)間段內(nèi)未加入到系統(tǒng)的已知插入設(shè)備的索引號(hào)可被未知插入設(shè)備復(fù)用,避免了資源的浪費(fèi)。由上述可知,本實(shí)施例提供的設(shè)備索引號(hào)分配裝置,能夠在盡可能保證同一插入設(shè)備在兩次插入時(shí)所分配的索引號(hào)不變的情況下,復(fù)用分配給不再使用的設(shè)備的索引號(hào)。
裝置實(shí)施例二:
參見圖4,該圖為本發(fā)明提供的設(shè)備索引號(hào)分配裝置實(shí)施例二的示意圖。相較于圖3,本實(shí)施例提供了一種更加具體的設(shè)備索引號(hào)分配裝置。
本實(shí)施例提供的的設(shè)備索引號(hào)分配裝置,還包括:第二判斷模塊202;
所述通知接收模塊100,還用于接收第二設(shè)備插入通知;所述第二設(shè)備插入通知攜帶第二插入設(shè)備的第二身份標(biāo)識(shí)信息;
所述第二判斷模塊202,用于當(dāng)所述通知接收模塊100在所述第二時(shí)間段內(nèi)接收到所述第二設(shè)備插入通知時(shí),判斷所述第二身份標(biāo)識(shí)信息是否已保存在所述分配表中;
所述第一索引號(hào)分配模塊301,還用于當(dāng)所述第二判斷模塊202判斷所述第二身份標(biāo)識(shí)信息保存在所述分配表中時(shí),為所述第二插入設(shè)備分配所述分配表中與所述第二插入設(shè)備的身份標(biāo)識(shí)信息對(duì)應(yīng)的索引號(hào);
所述第二索引號(hào)分配模塊302,還用于當(dāng)所述第二判斷模塊202判斷所述第二身份標(biāo)識(shí)信息未保存在所述分配表中時(shí),在所述第三時(shí)間內(nèi),執(zhí)行所述后分配過(guò)程;
所述后分配過(guò)程,還包括:為所述第二插入設(shè)備分配第二索引號(hào),所述第二索引號(hào)為未被分配給所述第一插入設(shè)備的索引號(hào);所述第三時(shí)間段的起始時(shí)間不早于所述第二時(shí)間段的結(jié)束時(shí)間。
本實(shí)施例提供的設(shè)備索引號(hào)分配裝置,所述通接收模塊100,包括:通知檢查子模塊100a;
所述通知檢查子模塊100a,用于在所述第二索引號(hào)分配模塊302為所述第一插入設(shè)備分配所述第一索引號(hào)后,檢查是否接收到所述第二設(shè)備插入通知。
本實(shí)施例提供的設(shè)備索引號(hào)分配裝置,還包括:分配表更新模塊400;
所述分配表更新模塊400,用于將所述第一索引號(hào)與所述第一插入設(shè)備的身份標(biāo)識(shí)信息的一一對(duì)應(yīng)關(guān)系保存在所述分配表中;
所述分配表更新模塊400,還用于將所述第二索引號(hào)與所述第二插入設(shè)備的身份標(biāo)識(shí)信息的一一對(duì)應(yīng)關(guān)系保存在所述分配表中。
所述第二索引號(hào)分配模塊302,包括:第一確定子模塊或第二確定子模塊(均未在圖中示出);
所述第一確定子模塊,包括:第一判斷子模塊和第一索引號(hào)確定子模塊;
所述第一判斷子模塊,用于從第一預(yù)設(shè)索引號(hào)開始逐一判斷每個(gè)索引號(hào)是否被分配;
所述第二確定子模塊,包括:第二索引號(hào)確定子模塊;
所述第二索引號(hào)確定子模塊,用于將空置時(shí)間最長(zhǎng)的索引號(hào)確定為所述第一索引號(hào),所述空置時(shí)間的起始時(shí)間為該索引號(hào)未被占用的起始時(shí)間。
所述第二索引號(hào)分配模塊302,還包括:第三確定子模塊或第四確定子模塊(均未在圖中示出);
所述第三確定子模塊,包括:第二判斷子模塊和第三索引號(hào)確定子模塊;
所述第二判斷子模塊,用于從第二預(yù)設(shè)索引號(hào)開始逐一判斷每個(gè)索引號(hào)是否被分配;
所述第三索引號(hào)確定子模塊,用于當(dāng)所述第二判斷子模塊判斷索引號(hào)未被分配時(shí),將該索引號(hào)確定為所述第二索引號(hào);
所述第四確定子模塊,包括:第四索引號(hào)確定子模塊;
所述第四索引號(hào)確定子模塊,用于將空置時(shí)間最長(zhǎng)的索引號(hào)確定為所述第二索引號(hào),所述空置時(shí)間的起始時(shí)間為該索引號(hào)未被占用的起始時(shí)間。
基于上述實(shí)施例提供的設(shè)備索引號(hào)分配方法和裝置,本發(fā)明還提供了一種設(shè)備索引號(hào)分配系統(tǒng)。
系統(tǒng)實(shí)施例一:
參見圖5,該圖為本發(fā)明提供的設(shè)備索引號(hào)分配系統(tǒng)實(shí)施例一的示意圖。
本實(shí)施例提供的設(shè)備索引號(hào)分配系統(tǒng),包括:身份標(biāo)識(shí)信息獲取單元10和索引號(hào)分配單元20;
所述身份標(biāo)識(shí)信息獲取單元10,用于獲取第一插入設(shè)備的第一身份標(biāo)識(shí)信息,并將所述第一身份標(biāo)識(shí)信息發(fā)送至所述索引號(hào)分配單元20;
所述索引號(hào)分配單元20,用于在第一時(shí)間段內(nèi),判斷所述第一身份標(biāo)識(shí)信息是否保存在分配表中;如果是,為所述第一插入設(shè)備分配所述分配表中與所述第一身份標(biāo)識(shí)信息對(duì)應(yīng)的索引號(hào);如果否,則在第二時(shí)間段內(nèi),為所述第一插入設(shè)備分配未在所述第一時(shí)間段內(nèi)被分配的索引號(hào);
所述第二時(shí)間段的起始時(shí)間不早于所述第一時(shí)間段的結(jié)束時(shí)間;所述分配表用于保存身份標(biāo)識(shí)信息與索引號(hào)的一一對(duì)應(yīng)關(guān)系。
本實(shí)施例提供的設(shè)備索引號(hào)分配系統(tǒng),通過(guò)查詢保存有已知插入設(shè)備的身份標(biāo)識(shí)信息和索引號(hào)的一一對(duì)應(yīng)關(guān)系的分配表,先為在第一時(shí)間段內(nèi)加入到系統(tǒng)中的已知插入設(shè)備分配分配表中與其身份標(biāo)識(shí)信息所對(duì)應(yīng)的索引號(hào)。這樣就能盡可能的保證同一插入設(shè)備在兩次插入時(shí)所分配的索引號(hào)不變。而后,在第二時(shí)間段內(nèi),處理在第一時(shí)間段內(nèi)加入到系統(tǒng)中的其余未知插入設(shè)備的索引號(hào)分配問(wèn)題,逐一為未知插入設(shè)備分配在第一時(shí)間段內(nèi)未被分配的索引號(hào)。此時(shí),在第一時(shí)間段內(nèi)未加入到系統(tǒng)的已知插入設(shè)備的索引號(hào)可被未知插入設(shè)備復(fù)用,避免了資源的浪費(fèi)。由上述可知,本實(shí)施例提供的設(shè)備索引號(hào)分配系統(tǒng),能夠在盡可能保證同一插入設(shè)備在兩次插入時(shí)所分配的索引號(hào)不變的情況下,復(fù)用分配給不再使用的設(shè)備的索引號(hào)。
系統(tǒng)實(shí)施例二:
參見圖6,該圖為本發(fā)明提供的設(shè)備索引號(hào)分配系統(tǒng)實(shí)施例二的示意圖。相較于圖5,本實(shí)施例提供了一種更加具體的設(shè)備索引號(hào)分配系統(tǒng)。
所述身份標(biāo)識(shí)信息獲取單元,用于獲取第二插入設(shè)備的第二身份標(biāo)識(shí)信息,并將所述第二身份標(biāo)識(shí)信息發(fā)送至所述索引號(hào)分配單元;
所述索引號(hào)分配單元20,還用于在所述第二時(shí)間段內(nèi)檢查是否接收到所述第二身份標(biāo)識(shí)信息;如果是,則判斷第二身份標(biāo)識(shí)信息是否已保存在所述分配表中;
所述索引號(hào)分配單元20,還用于當(dāng)所述第二身份標(biāo)識(shí)信息保存在所述分配表中時(shí),則為所述第二插入設(shè)備分配所述分配表中與所述第二插入設(shè)備的身份標(biāo)識(shí)信息對(duì)應(yīng)的索引號(hào);
所述索引號(hào)分配單元20,還用于當(dāng)所述第二身份標(biāo)識(shí)信息未保存在所述分配表中時(shí),則在所述第三時(shí)間段內(nèi),為所述第二插入設(shè)備分配未被分配給所述第一插入設(shè)備的索引號(hào);
所述第三時(shí)間段的起始時(shí)間不早于所述第二時(shí)間段的結(jié)束時(shí)間。
所述索引號(hào)分配單元20,包括:存儲(chǔ)器21、預(yù)分配器22、后分配器23和互斥鎖24;
所述存儲(chǔ)器21,用于保存所述分配表;
所述預(yù)分配器22,用于在獲取所述互斥鎖24后,為所述第一插入設(shè)備分配所述分配表中與所述第一身份標(biāo)識(shí)信息對(duì)應(yīng)的索引號(hào);
所述預(yù)分配器22,還用于在獲取所述互斥鎖24后,為所述第二插入設(shè)備分配所述分配表中與所述第二身份標(biāo)識(shí)信息對(duì)應(yīng)的索引號(hào);
需要說(shuō)明的是,預(yù)分配器22還可以用于判斷第一身份標(biāo)識(shí)信息和第一身份標(biāo)識(shí)信息是否保存在分配表中。
所述后分配器23,用于在獲取所述互斥鎖24后,為所述第一插入設(shè)備分配未在所述第一時(shí)間段內(nèi)被分配的索引號(hào),并將所述第一身份標(biāo)識(shí)信息與該索引號(hào)的對(duì)應(yīng)關(guān)系保存在所述分配表中;
所述后分配器23,還用于在獲取所述互斥鎖24后,為所述第二插入設(shè)備分配未被分配給所述第一插入設(shè)備的索引號(hào),并將所述第二身份標(biāo)識(shí)信息與該索引號(hào)的對(duì)應(yīng)關(guān)系保存在所述分配表中。
為方便理解,下面將結(jié)合方法實(shí)施例中所述的系統(tǒng)啟動(dòng)時(shí)為插入設(shè)備分配索引號(hào)的過(guò)程,說(shuō)明本實(shí)施例提供的設(shè)備索引號(hào)分配系統(tǒng)的具體過(guò)程。
啟動(dòng)時(shí),系統(tǒng)中所有(某一類型的)設(shè)備(設(shè)備A、設(shè)備B、設(shè)備C和設(shè)備D)會(huì)一并進(jìn)入初始化程序,觸發(fā)設(shè)備插入通知??梢岳斫獾氖?,由于不同設(shè)備的處理速度不同,設(shè)備觸發(fā)設(shè)備插入通知的速度也不同,如設(shè)備插入通知的順序設(shè)備A-設(shè)備B-設(shè)備C-設(shè)備D。此時(shí),預(yù)分配器22先獲取互斥鎖24,按照設(shè)備插入通知的順序?yàn)橐阎迦朐O(shè)備(設(shè)備A和設(shè)備C)分配索引號(hào)(設(shè)備A的索引號(hào)為0,設(shè)備C的索引號(hào)為2),其它未知插入設(shè)備(設(shè)備B和設(shè)備D)則進(jìn)入待分配設(shè)備隊(duì)列。預(yù)分配器22在處理完設(shè)備A-C后,釋放互斥鎖24。
而后,后分配器23獲取互斥鎖24,首先處理設(shè)備B的索引號(hào)分配問(wèn)題。根據(jù)預(yù)設(shè)規(guī)則為設(shè)備分配未被分配的索引號(hào)(索引號(hào)1和索引號(hào)3-7)B分配未被分配的索引號(hào)(索引號(hào)1和索引號(hào)3-7)。為盡可能的保證已知插入設(shè)備分配到原有的索引號(hào),后分配器23在為設(shè)備B分配完索引號(hào)后,檢測(cè)是否有新的設(shè)備插入;如果是,則暫停索引號(hào)分配工作;如果否,則繼續(xù)為設(shè)備C分配索引號(hào)。之后,在為設(shè)備C分配完索引號(hào)后,再次檢測(cè)是否有新的設(shè)備插入,其他過(guò)程類似,在此不再贅述。如在后分配器23的工作過(guò)程中設(shè)備E加入系統(tǒng),則后分配器23釋放互斥鎖24。預(yù)分配器22獲取互斥鎖24,判斷設(shè)備E是否為已知插入設(shè)備;如果是,則由預(yù)分配器22為設(shè)備E分配索引號(hào);如果否,則將設(shè)備E加入到待處理設(shè)備隊(duì)列,待后分配器23獲取到互斥鎖24后按照先進(jìn)先出的規(guī)則為待處理設(shè)備隊(duì)列中的插入設(shè)備分配索引號(hào)。
若在預(yù)分配器22的工作過(guò)程中由新插入設(shè)備加入,預(yù)分配器22再處理完所用插入設(shè)備后再釋放互斥鎖24,由后分配器24獲取互斥鎖24后為未插入設(shè)備分配索引號(hào)。
需要說(shuō)明的是,第一時(shí)間段可為預(yù)分配器22的處理時(shí)長(zhǎng)。即,在預(yù)分配器22的索引號(hào)分配過(guò)程中,如接收到新的設(shè)備插入通知,預(yù)分配器22會(huì)繼續(xù)處理新插入設(shè)備的索引號(hào)分配過(guò)程,不會(huì)釋放互斥鎖24。在預(yù)分配器22處理完處理階段接收的設(shè)備插入通知后,再釋放互斥鎖24,以使后分配器23獲取互斥鎖24來(lái)對(duì)待分配設(shè)備隊(duì)列中的插入設(shè)備進(jìn)行處理。
互斥鎖24用于防止預(yù)分配器22和后分配器23的決策沖突。具體實(shí)施時(shí),互斥鎖24可以為讀寫鎖中的“寫鎖”或高電平抑制信號(hào)等,技術(shù)人員可根據(jù)具體情況設(shè)定。
本實(shí)施例提供的設(shè)備索引號(hào)獲取系統(tǒng),能夠盡可能的保證已插入過(guò)的設(shè)備會(huì)得到原有的索引號(hào),未插入過(guò)的設(shè)備不會(huì)占有已插入過(guò)的但現(xiàn)在已拔出的設(shè)備的索引號(hào)。并且,采用兩個(gè)分離的分配器可簡(jiǎn)化設(shè)計(jì)實(shí)施,方便對(duì)未插入過(guò)的設(shè)備索引號(hào)分配策略的更換。
需要說(shuō)明的是,本說(shuō)明書中各個(gè)實(shí)施例采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說(shuō)明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似部分互相參見即可。對(duì)于實(shí)施例公開的系統(tǒng)或裝置而言,由于其與實(shí)施例公開的方法相對(duì)應(yīng),所以描述的比較簡(jiǎn)單,相關(guān)之處參見方法部分說(shuō)明即可。
還需要說(shuō)明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語(yǔ)僅僅用來(lái)將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來(lái),而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過(guò)程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒(méi)有明確列出的其他要素,或者是還包括為這種過(guò)程、方法、物品或者設(shè)備所固有的要素。在沒(méi)有更多限制的情況下,由語(yǔ)句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過(guò)程、方法、物品或者設(shè)備中還存在另外的相同要素。
以上所述,僅是本發(fā)明的較佳實(shí)施例而已,并非對(duì)本發(fā)明作任何形式上的限制。雖然本發(fā)明已以較佳實(shí)施例揭露如上,然而并非用以限定本發(fā)明。任何熟悉本領(lǐng)域的技術(shù)人員,在不脫離本發(fā)明技術(shù)方案范圍情況下,都可利用上述揭示的方法和技術(shù)內(nèi)容對(duì)本發(fā)明技術(shù)方案做出許多可能的變動(dòng)和修飾,或修改為等同變化的等效實(shí)施例。因此,凡是未脫離本發(fā)明技術(shù)方案的內(nèi)容,依據(jù)本發(fā)明的技術(shù)實(shí)質(zhì)對(duì)以上實(shí)施例所做的任何簡(jiǎn)單修改、等同變化及修飾,均仍屬于本發(fā)明技術(shù)方案保護(hù)的范圍內(nèi)。