本發(fā)明涉及內(nèi)存資源,特別涉及一種內(nèi)存的動(dòng)態(tài)分配方法、設(shè)備、存儲(chǔ)介質(zhì)及產(chǎn)品。
背景技術(shù):
1、pxe(preboot?execution?environment,預(yù)啟動(dòng)執(zhí)行環(huán)境)是一種網(wǎng)絡(luò)啟動(dòng)技術(shù),允許計(jì)算機(jī)通過(guò)網(wǎng)絡(luò)從服務(wù)器啟動(dòng)操作系統(tǒng)。ipxe(intelligent?platform?managementinterface?extensions,智能平臺(tái)管理接口擴(kuò)展)是pxe的增強(qiáng)版本,支持更高效的網(wǎng)絡(luò)啟動(dòng),通過(guò)dhcp請(qǐng)求獲取啟動(dòng)文件地址,然后下載并執(zhí)行啟動(dòng)文件,最終安裝操作系統(tǒng)。
2、ipxe是一個(gè)開(kāi)放源代碼的pxe引導(dǎo)加載程序,廣泛應(yīng)用于無(wú)盤工作站、遠(yuǎn)程安裝或操作系統(tǒng)自動(dòng)部署等場(chǎng)景。目前主要依賴pxe和ipxe進(jìn)行網(wǎng)絡(luò)啟動(dòng)和操作系統(tǒng)安裝,然而,在通過(guò)ipxe進(jìn)行操作系統(tǒng)安裝的過(guò)程中,可能會(huì)遇到因多種因素導(dǎo)致的安裝失敗問(wèn)題,這種報(bào)錯(cuò)可能源于多種因素,包括但不限于網(wǎng)絡(luò)問(wèn)題、硬盤讀寫錯(cuò)誤、引導(dǎo)文件損壞、操作系統(tǒng)鏡像不完整或兼容性問(wèn)題等。其中,在特定條件下(如使用特定版本的rhel和特定硬件配置),ipxe在引導(dǎo)階段可能會(huì)出現(xiàn)內(nèi)存分配失敗的問(wèn)題,從而導(dǎo)致操作系統(tǒng)安裝失敗。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明實(shí)施例的目的在于提供一種內(nèi)存的動(dòng)態(tài)分配方法、設(shè)備、存儲(chǔ)介質(zhì)及產(chǎn)品,解決特定條件下,ipxe在引導(dǎo)階段會(huì)出現(xiàn)內(nèi)存分配失敗導(dǎo)致系統(tǒng)安裝失敗的問(wèn)題?,具體技術(shù)方案如下:
2、在本發(fā)明實(shí)施例的第一方面,首先提供了一種內(nèi)存的動(dòng)態(tài)分配方法,應(yīng)用于系統(tǒng)固件,所述方法包括:
3、響應(yīng)于針對(duì)第一網(wǎng)卡設(shè)備的資源分配指令,通過(guò)所述系統(tǒng)固件獲取所述第一網(wǎng)卡設(shè)備對(duì)應(yīng)的目標(biāo)數(shù)據(jù)結(jié)構(gòu)體,從所述目標(biāo)數(shù)據(jù)結(jié)構(gòu)體中提取資源分配指針;
4、若所述資源分配指針為空指針,則通過(guò)所述系統(tǒng)固件按照所述資源分配指令為所述第一網(wǎng)卡設(shè)備申請(qǐng)第一內(nèi)存,獲取所述第一內(nèi)存的第一內(nèi)存信息,并將所述第一內(nèi)存信息寫入所述資源分配指針;
5、若所述資源分配指針不為空指針,則通過(guò)所述系統(tǒng)固件讀取所述資源分配指針中的第二內(nèi)存信息,并獲取所述第二內(nèi)存信息對(duì)應(yīng)的第二內(nèi)存;
6、若所述第二內(nèi)存為無(wú)效內(nèi)存,則通過(guò)所述系統(tǒng)固件清除所述第二內(nèi)存信息,按照所述資源分配指令為所述網(wǎng)卡設(shè)備申請(qǐng)所述第一內(nèi)存,并將所述第一內(nèi)存信息寫入所述資源分配指針。
7、可選的,所述系統(tǒng)固件中包括初始化驅(qū)動(dòng),在所述響應(yīng)于針對(duì)第一網(wǎng)卡設(shè)備的資源分配指令,獲取與所述第一網(wǎng)卡設(shè)備的目標(biāo)數(shù)據(jù)結(jié)構(gòu)體,從所述目標(biāo)數(shù)據(jù)結(jié)構(gòu)體中提取資源分配指針之前,所述方法還包括:
8、通過(guò)所述系統(tǒng)固件從所述初始化驅(qū)動(dòng)的驅(qū)動(dòng)代碼中,查找與第一網(wǎng)卡設(shè)備對(duì)應(yīng)的目標(biāo)數(shù)據(jù)結(jié)構(gòu)體,所述目標(biāo)數(shù)據(jù)結(jié)構(gòu)體用于對(duì)擴(kuò)展橋進(jìn)行初始化;
9、在所述目標(biāo)數(shù)據(jù)結(jié)構(gòu)體中設(shè)置資源分配指針,所述資源分配指針包括所述第一網(wǎng)卡設(shè)備的內(nèi)存信息;
10、通過(guò)所述初始化驅(qū)動(dòng)將所述資源分配指針初始化為空指針。
11、可選的,所述通過(guò)所述初始化驅(qū)動(dòng)將所述資源分配指針初始化為空指針,包括:
12、通過(guò)所述初始化驅(qū)動(dòng)獲取所述擴(kuò)展橋的初始化函數(shù);
13、在所述初始化函數(shù)的起始位置,設(shè)置用于初始化所述資源分配指針的指針初始化指令;
14、響應(yīng)于所述擴(kuò)展橋的初始化,通過(guò)所述初始化驅(qū)動(dòng)執(zhí)行所述指針初始化指令,使所述資源分配指針被初始化為空指針。
15、可選的,在所述通過(guò)所述系統(tǒng)固件從所述初始化驅(qū)動(dòng)的驅(qū)動(dòng)代碼中,查找與第一網(wǎng)卡設(shè)備對(duì)應(yīng)的目標(biāo)數(shù)據(jù)結(jié)構(gòu)體之前,所述方法還包括:
16、通過(guò)所述系統(tǒng)固件獲取總線連接的所有連接設(shè)備;
17、將所述連接設(shè)備中的任一臺(tái)設(shè)備作為目標(biāo)連接設(shè)備,識(shí)別所述目標(biāo)連接設(shè)備的設(shè)備類代碼;
18、若所述設(shè)備類代碼與預(yù)設(shè)的網(wǎng)卡設(shè)備代碼匹配,則確認(rèn)所述目標(biāo)連接設(shè)備為第二網(wǎng)卡設(shè)備;
19、通過(guò)所述系統(tǒng)固件獲取所述第二網(wǎng)卡設(shè)備所在的目標(biāo)設(shè)備鏈路,為所述目標(biāo)設(shè)備鏈路中的每臺(tái)網(wǎng)卡設(shè)備設(shè)置對(duì)應(yīng)的資源分配指針。
20、可選的,所述通過(guò)所述系統(tǒng)固件獲取所述第二網(wǎng)卡設(shè)備所在的目標(biāo)設(shè)備鏈路,為所述目標(biāo)設(shè)備鏈路中的每臺(tái)網(wǎng)卡設(shè)備設(shè)置對(duì)應(yīng)的資源分配指針,包括:
21、通過(guò)所述系統(tǒng)固件獲取所述第二網(wǎng)卡設(shè)備的配置信息;
22、生成所述第二網(wǎng)卡設(shè)備及所述配置信息的設(shè)備記錄,從所述配置信息中提取所述第二網(wǎng)卡設(shè)備的父設(shè)備的設(shè)備地址;
23、將所述第二網(wǎng)卡設(shè)備更新為所述父設(shè)備,并返回所述獲取所述第二網(wǎng)卡設(shè)備的配置信息的步驟,直至從所述配置信息中提取根端口的地址信息;
24、基于所述設(shè)備記錄中的若干第二網(wǎng)卡設(shè)備與所述根端口生成所述第二網(wǎng)卡設(shè)備所在的目標(biāo)設(shè)備鏈路。
25、可選的,所述生成所述第二網(wǎng)卡設(shè)備及所述配置信息的設(shè)備記錄,從所述配置信息中提取所述第二網(wǎng)卡設(shè)備的父設(shè)備的設(shè)備地址,包括:
26、生成所述設(shè)備記錄,所述設(shè)備記錄用于記錄第二網(wǎng)卡設(shè)備與配置信息;
27、若所述配置信息中包含所述根端口的標(biāo)識(shí),則通過(guò)所述系統(tǒng)固件從所述配置信息中提取所述根端口的地址信息;
28、若所述配置信息中未包含所述根端口的標(biāo)識(shí),則通過(guò)所述系統(tǒng)固件基于所述配置信息與橋接關(guān)系,從所述配置信息中提取所述父設(shè)備的設(shè)備地址。
29、可選的,在所述若所述第二內(nèi)存為無(wú)效內(nèi)存,則通過(guò)所述系統(tǒng)固件清除所述第二內(nèi)存信息,按照所述資源分配指令為所述網(wǎng)卡設(shè)備申請(qǐng)所述第一內(nèi)存,并將所述第一內(nèi)存信息寫入所述資源分配指針之后,所述方法還包括:
30、通過(guò)所述系統(tǒng)固件獲取所述第一網(wǎng)卡設(shè)備的第一網(wǎng)絡(luò)狀態(tài);
31、若所述第一網(wǎng)絡(luò)狀態(tài)表征所述第一網(wǎng)卡設(shè)備未連接,則獲取第三網(wǎng)卡設(shè)備,并對(duì)所述第三網(wǎng)卡設(shè)備進(jìn)行資源分配,所述第三網(wǎng)卡設(shè)備為所述第一網(wǎng)卡設(shè)備的下一臺(tái)網(wǎng)卡設(shè)備。
32、可選的,所述通過(guò)所述系統(tǒng)固件獲取所述第一網(wǎng)卡設(shè)備的第一網(wǎng)絡(luò)狀態(tài),包括:
33、檢測(cè)所述第一網(wǎng)卡設(shè)備的網(wǎng)線連接狀態(tài),或,網(wǎng)路通信狀態(tài);
34、若所述第一網(wǎng)卡設(shè)備的網(wǎng)線未連接,或,網(wǎng)路不通,則所述第一網(wǎng)絡(luò)狀態(tài)表征為所述第一網(wǎng)卡設(shè)備未連接;
35、若所述第一網(wǎng)卡設(shè)備的網(wǎng)線已連接且網(wǎng)路暢通,則所述第一網(wǎng)絡(luò)狀態(tài)表征為所述第一網(wǎng)卡設(shè)備已連接。
36、可選的,在所述若所述第一網(wǎng)絡(luò)狀態(tài)表征所述第一網(wǎng)卡設(shè)備未連接,則獲取所述第三網(wǎng)卡設(shè)備,并對(duì)所述第三網(wǎng)卡設(shè)備進(jìn)行資源分配,所述第三網(wǎng)卡設(shè)備為所述第一網(wǎng)卡設(shè)備的下一臺(tái)網(wǎng)卡設(shè)備之后,所述方法還包括:
37、通過(guò)所述系統(tǒng)固件釋放所述第一網(wǎng)卡設(shè)備的第一內(nèi)存,并清除第一網(wǎng)卡設(shè)備對(duì)應(yīng)的資源分配指針中的第一內(nèi)存信息。
38、可選的,所述若所述資源分配指針為空指針,則通過(guò)所述系統(tǒng)固件按照所述資源分配指令為所述第一網(wǎng)卡設(shè)備申請(qǐng)第一內(nèi)存,獲取所述第一內(nèi)存的第一內(nèi)存信息,并將所述第一內(nèi)存信息寫入所述資源分配指針,包括:
39、若所述資源分配指針的值為空,則確認(rèn)所述資源分配指針為空指針;
40、通過(guò)所述系統(tǒng)固件從所述資源分配指令中提取所述第一內(nèi)存的第一內(nèi)存信息,所述第一內(nèi)存信息包括內(nèi)存種類、內(nèi)存大小、內(nèi)存地址;
41、通過(guò)所述系統(tǒng)固件按照所述第一內(nèi)存信息為所述第一網(wǎng)卡設(shè)備申請(qǐng)所述第一內(nèi)存,并將所述第一內(nèi)存信息寫入所述資源分配指針。
42、可選的,所述若所述資源分配指針不為空指針,則通過(guò)所述系統(tǒng)固件讀取所述資源分配指針中的第二內(nèi)存信息,并獲取所述第二內(nèi)存信息對(duì)應(yīng)的第二內(nèi)存,包括:
43、若所述資源分配指針不為空指針,則通過(guò)所述系統(tǒng)固件讀取所述資源分配指針中的第二內(nèi)存信息;
44、獲取所述第二內(nèi)存信息對(duì)應(yīng)的第二內(nèi)存,采用內(nèi)存檢測(cè)工具確認(rèn)所述第二內(nèi)存是否失效;
45、若所述第二內(nèi)存為已失效,則確認(rèn)所述第二內(nèi)存為無(wú)效內(nèi)存;
46、若所述第二內(nèi)存為未失效,則確認(rèn)所述第二內(nèi)存為有效內(nèi)存。
47、可選的,在所述若所述資源分配指針不為空指針,則通過(guò)所述系統(tǒng)固件讀取所述資源分配指針中的第二內(nèi)存信息,并獲取所述第二內(nèi)存信息對(duì)應(yīng)的第二內(nèi)存之后,所述方法還包括:
48、若所述第二內(nèi)存為有效內(nèi)存,則將所述第一網(wǎng)卡設(shè)備作為目標(biāo)網(wǎng)卡設(shè)備,所述目標(biāo)網(wǎng)卡設(shè)備用于引導(dǎo)安裝操作系統(tǒng)。
49、在本發(fā)明實(shí)施例的第二方面,提供了一種內(nèi)存的動(dòng)態(tài)分配裝置,應(yīng)用于系統(tǒng)固件,所述裝置包括:
50、分配指針提取模塊,用于響應(yīng)于針對(duì)第一網(wǎng)卡設(shè)備的資源分配指令,通過(guò)所述系統(tǒng)固件獲取所述第一網(wǎng)卡設(shè)備對(duì)應(yīng)的目標(biāo)數(shù)據(jù)結(jié)構(gòu)體,從所述目標(biāo)數(shù)據(jù)結(jié)構(gòu)體中提取資源分配指針;
51、內(nèi)存信息分配模塊,用于若所述資源分配指針為空指針,則通過(guò)所述系統(tǒng)固件按照所述資源分配指令為所述第一網(wǎng)卡設(shè)備申請(qǐng)第一內(nèi)存,獲取所述第一內(nèi)存的第一內(nèi)存信息,并將所述第一內(nèi)存信息寫入所述資源分配指針;
52、內(nèi)存信息讀取模塊,若所述資源分配指針不為空指針,則通過(guò)所述系統(tǒng)固件讀取所述資源分配指針中的第二內(nèi)存信息,并獲取所述第二內(nèi)存信息對(duì)應(yīng)的第二內(nèi)存;
53、內(nèi)存信息再分配模塊,用于若所述第二內(nèi)存為無(wú)效內(nèi)存,則通過(guò)所述系統(tǒng)固件清除所述第二內(nèi)存信息,按照所述資源分配指令為所述網(wǎng)卡設(shè)備申請(qǐng)所述第一內(nèi)存,并將所述第一內(nèi)存信息寫入所述資源分配指針。
54、在本發(fā)明實(shí)施例的第三方面,還提供了一種電子設(shè)備,包括:一個(gè)或多個(gè)處理器;存儲(chǔ)器;一個(gè)或多個(gè)程序,其中所述一個(gè)或多個(gè)程序被存儲(chǔ)在所述存儲(chǔ)器中并被配置為由所述一個(gè)或多個(gè)處理器執(zhí)行,所述一個(gè)或多個(gè)程序配置用于執(zhí)行上述任一所述的內(nèi)存的動(dòng)態(tài)分配方法。
55、在本發(fā)明實(shí)施例的第四方面,還提供了一種非易失性可讀存儲(chǔ)介質(zhì),當(dāng)所述非易失性可讀存儲(chǔ)介質(zhì)中的指令由電子設(shè)備的處理器執(zhí)行時(shí),使得所述電子設(shè)備能夠執(zhí)行上述任一所述的內(nèi)存的動(dòng)態(tài)分配方法。
56、在本發(fā)明實(shí)施例的第五方面,還提供了計(jì)算機(jī)程序產(chǎn)品,包括計(jì)算機(jī)程序/指令,所述計(jì)算機(jī)程序/指令被處理器執(zhí)行時(shí)實(shí)現(xiàn)上述任一所述的內(nèi)存的動(dòng)態(tài)分配方法。
57、本發(fā)明實(shí)施例提供的內(nèi)存的動(dòng)態(tài)分配方法,通過(guò)響應(yīng)于針對(duì)第一網(wǎng)卡設(shè)備的資源分配指令,通過(guò)系統(tǒng)固件獲取第一網(wǎng)卡設(shè)備對(duì)應(yīng)的目標(biāo)數(shù)據(jù)結(jié)構(gòu)體,從目標(biāo)數(shù)據(jù)結(jié)構(gòu)體中提取資源分配指針;若資源分配指針為空指針,則通過(guò)系統(tǒng)固件按照資源分配指令為第一網(wǎng)卡設(shè)備申請(qǐng)第一內(nèi)存,獲取第一內(nèi)存的第一內(nèi)存信息,并將第一內(nèi)存信息寫入資源分配指針;若資源分配指針不為空指針,則通過(guò)系統(tǒng)固件讀取資源分配指針中的第二內(nèi)存信息,并獲取第二內(nèi)存信息對(duì)應(yīng)的第二內(nèi)存;若第二內(nèi)存為無(wú)效內(nèi)存,則通過(guò)系統(tǒng)固件清除第二內(nèi)存信息,按照資源分配指令為網(wǎng)卡設(shè)備申請(qǐng)第一內(nèi)存,并將第一內(nèi)存信息寫入資源分配指針。本發(fā)明通過(guò)系統(tǒng)固件獲取與網(wǎng)卡設(shè)備對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)體,根據(jù)數(shù)據(jù)結(jié)構(gòu)體中預(yù)先設(shè)置的資源分配指針,確認(rèn)網(wǎng)卡設(shè)備的內(nèi)存分配狀態(tài),并進(jìn)一步讀取網(wǎng)卡設(shè)備中的內(nèi)存信息對(duì)網(wǎng)卡設(shè)備的已有內(nèi)存進(jìn)行判斷,從而基于網(wǎng)卡設(shè)備的內(nèi)存分配狀態(tài),決定當(dāng)前輪詢過(guò)程中,為網(wǎng)卡設(shè)備申請(qǐng)內(nèi)存或清空內(nèi)存再申請(qǐng),確保網(wǎng)卡設(shè)備的內(nèi)存資源保持更新,通過(guò)改進(jìn)系統(tǒng)固件,優(yōu)化polling機(jī)制,確認(rèn)網(wǎng)卡設(shè)備的內(nèi)存分配狀態(tài),對(duì)每臺(tái)網(wǎng)卡設(shè)備占用的內(nèi)存進(jìn)行檢查,可以有效避免無(wú)法連接的網(wǎng)卡設(shè)備持續(xù)占用內(nèi)存導(dǎo)致的內(nèi)存泄漏問(wèn)題。
58、應(yīng)當(dāng)理解的是,以上的一般描述和后文的細(xì)節(jié)描述僅是示例性和解釋性的,并不能限制本發(fā)明。