本發(fā)明涉及計算機(jī)技術(shù)領(lǐng)域,尤其涉及一種利用bmc禁用壞損內(nèi)存的方法和裝置。
背景技術(shù):
在現(xiàn)實生活中,多年使用的計算機(jī)很容易出現(xiàn)這樣或者那樣的問題,而計算機(jī)的周邊設(shè)備繁多,問題的根源往往難以定位。在眾多周邊設(shè)備中,內(nèi)存是計算機(jī)數(shù)據(jù)交換的核心部件,內(nèi)存的良好與否,直接關(guān)系到計算機(jī)能否正常使用。
內(nèi)存問題在服務(wù)器運(yùn)行中尤為突出,當(dāng)服務(wù)器在進(jìn)行海量數(shù)據(jù)計算時,如若未能及時發(fā)現(xiàn)問題內(nèi)存而繼續(xù)使用問題內(nèi)存,一般會引發(fā)服務(wù)器運(yùn)行崩潰,致使關(guān)鍵數(shù)據(jù)丟失,從而造成難以估量的虧損。
在計算機(jī)專業(yè)領(lǐng)域,眾所周知,計算機(jī)的正常使用離不開基本輸入輸出系統(tǒng)(bios)的引導(dǎo)。在bios運(yùn)行階段,設(shè)計一種發(fā)現(xiàn)問題內(nèi)存、規(guī)避問題內(nèi)存的使用、提示用戶更換問題內(nèi)存的方法對計算機(jī)來說是一種規(guī)避內(nèi)存問題引發(fā)系統(tǒng)崩潰的最佳途徑和必然趨勢。
技術(shù)實現(xiàn)要素:
發(fā)明目的:本發(fā)明針對現(xiàn)有技術(shù)存在的問題,提供一種利用bmc(基板管理控制器)禁用壞損內(nèi)存的方法和裝置。
技術(shù)方案:本發(fā)明所述的利用bmc禁用壞損內(nèi)存的方法包括:
(1)當(dāng)計算機(jī)啟動后,bios運(yùn)行至要準(zhǔn)備內(nèi)存初始化時,獲取對每個內(nèi)存槽位i上的內(nèi)存進(jìn)行預(yù)設(shè)的初始化旗標(biāo)值pi;其中,當(dāng)內(nèi)存槽位i上的內(nèi)存壞損時,設(shè)置的初始化旗標(biāo)值pi=1,當(dāng)內(nèi)存槽位i上的內(nèi)存完好時,設(shè)置的初始化旗標(biāo)值pi=0;
(2)當(dāng)內(nèi)存槽位i上的內(nèi)存對應(yīng)的初始化旗標(biāo)值pi為0時,判斷bmc的系統(tǒng)事件日志中是否存在內(nèi)存錯誤信息;若是,執(zhí)行(3),否則執(zhí)行(6);
(3)以內(nèi)存的序列號是否變更為依據(jù)判斷損壞內(nèi)存是否被用戶更換;若否,執(zhí)行(4),否則執(zhí)行(6);
(4)將損壞內(nèi)存對應(yīng)的初始化旗標(biāo)值與該內(nèi)存槽位的編號i進(jìn)行或運(yùn)算,結(jié)果作為更新后的初始化旗標(biāo)值;執(zhí)行(5)
(5)創(chuàng)建uefi事件,以使bios運(yùn)行到bios啟動界面后,提示用戶內(nèi)存損壞信息;執(zhí)行(6)
(6)初始化內(nèi)存。
進(jìn)一步的,步驟(6)之后還包括:
(7)當(dāng)bios運(yùn)行至將要引導(dǎo)操作系統(tǒng)啟動時,讀取內(nèi)存配置寄存器中的值;
(8)根據(jù)內(nèi)存配置寄存器中的值判斷在內(nèi)存初始化時認(rèn)定為完好的內(nèi)存中,是否還有內(nèi)存錯誤產(chǎn)生;若是,執(zhí)行(9,若否執(zhí)行(10);
(9)將內(nèi)存錯誤信息以系統(tǒng)事件日志的形式記錄到bmc中,重啟計算機(jī),返回至(1);
(10)加載引導(dǎo)程序啟動操作系統(tǒng)。
本發(fā)明所述的利用bmc禁用壞損內(nèi)存的裝置包括:
初始化旗標(biāo)獲取模塊,用于當(dāng)計算機(jī)啟動后,bios運(yùn)行至要準(zhǔn)備內(nèi)存初始化時,獲取對每個內(nèi)存槽位i上的內(nèi)存進(jìn)行預(yù)設(shè)的初始化旗標(biāo)值pi;其中,當(dāng)內(nèi)存槽位i上的內(nèi)存壞損時,設(shè)置的初始化旗標(biāo)值pi=1,當(dāng)內(nèi)存槽位i上的內(nèi)存完好時,設(shè)置的初始化旗標(biāo)值pi=0;
系統(tǒng)事件日志獲取模塊,用于當(dāng)內(nèi)存槽位i上的內(nèi)存對應(yīng)的初始化旗標(biāo)值pi為0時,判斷bmc的系統(tǒng)事件日志中是否存在內(nèi)存錯誤信息;
損壞內(nèi)存更換判斷模塊,用于在系統(tǒng)事件日志獲取模塊獲取的系統(tǒng)事件日志中存在內(nèi)存錯誤信息時,以內(nèi)存的序列號是否變更為依據(jù)判斷損壞內(nèi)存是否被用戶更換;
初始化旗標(biāo)更新模塊,用于在損壞內(nèi)存更換判斷模塊判定損壞內(nèi)存未被被用戶更換時,將損壞內(nèi)存對應(yīng)的初始化旗標(biāo)值與該內(nèi)存槽位的編號i進(jìn)行或運(yùn)算,結(jié)果作為更新后的初始化旗標(biāo)值;
uefi事件創(chuàng)建模塊,用于在初始化旗標(biāo)更新模塊更新初始化旗標(biāo)值后,創(chuàng)建uefi事件,以使bios運(yùn)行到bios啟動界面后,提示用戶內(nèi)存損壞信息;
內(nèi)存初始化執(zhí)行模塊,用于用于在系統(tǒng)事件日志獲取模塊獲取的系統(tǒng)事件日志中不存在內(nèi)存錯誤信息時,或在損壞內(nèi)存更換判斷模塊判定損壞內(nèi)存已被被用戶更換時,跳轉(zhuǎn)執(zhí)行內(nèi)存初始化。
進(jìn)一步的,該裝置還可以包括:
內(nèi)存配置寄存器讀取模塊,用于當(dāng)bios運(yùn)行至將要引導(dǎo)操作系統(tǒng)啟動時,讀取內(nèi)存配置寄存器中的值;
內(nèi)存錯誤判斷模塊,用于根據(jù)內(nèi)存配置寄存器中的值判斷在內(nèi)存初始化時認(rèn)定為完好的內(nèi)存中,是否還有內(nèi)存錯誤產(chǎn)生;
內(nèi)存錯誤執(zhí)行模塊,用于在內(nèi)存錯誤判斷模塊中判定有內(nèi)存錯誤產(chǎn)生時,將內(nèi)存錯誤信息以系統(tǒng)事件日志的形式記錄到bmc中,重啟計算機(jī);
操作系統(tǒng)啟動執(zhí)行模塊,用于在內(nèi)存錯誤判斷模塊中判定沒有內(nèi)存錯誤產(chǎn)生時,執(zhí)行加載引導(dǎo)程序,從而啟動操作系統(tǒng)。
有益效果:本發(fā)明與現(xiàn)有技術(shù)相比,其顯著優(yōu)點是:本發(fā)明可以友好地提示用戶已有的內(nèi)存問題,幫助用戶更換內(nèi)存。同時問題內(nèi)存條會被禁用掉,即使它未被及時更換仍不會致使系統(tǒng)崩潰。
附圖說明
圖1是發(fā)明所適用的硬件結(jié)構(gòu)示意圖;
圖2是本發(fā)明提供的利用bmc禁用壞損內(nèi)存的方法的流程示意圖;
圖3是圖2中禁用壞損內(nèi)存的方法1的流程示意圖;
圖4是圖2中禁用壞損內(nèi)存的方法2的流程示意圖。
具體實施方式
在計算機(jī)專業(yè)領(lǐng)域,眾所周知,計算機(jī)的正常使用離不開bios引導(dǎo)。本發(fā)明以bios為方法的載體,以內(nèi)存作為研究對象,來闡述本發(fā)明的實現(xiàn)過程。
圖1是本發(fā)明所適用的硬件結(jié)構(gòu)示意圖,1表示計算機(jī)主板。2表示bios固件,是本發(fā)明中方法實現(xiàn)的地方。3表示內(nèi)存模組,示例中提供了兩個槽位,每個槽位上可以安裝一塊內(nèi)存條,是本發(fā)明主要研究對象。4表示基板管理控制器(bmc),它內(nèi)置非易失性傳感器,可以將內(nèi)存錯誤以系統(tǒng)事件日志(sel)的形式持久保證,計算機(jī)掉電也不會丟失。5是外接在主板上的顯示器,當(dāng)內(nèi)存錯誤出現(xiàn)時,用以提示用戶內(nèi)存錯誤信息。
實施例1
計算機(jī)在上電后,最開始執(zhí)行的程序bios。以內(nèi)存為研究對象,bios首先會對內(nèi)存進(jìn)行初始化,然后才是內(nèi)存的自檢與使用,最后是通過加載引導(dǎo)程序(bootloader)啟動操作系統(tǒng)。如圖2所示,本實施例提供了一種利用bmc禁用壞損內(nèi)存的方法,在bios準(zhǔn)備對內(nèi)存進(jìn)行初始化之前,創(chuàng)建了“禁用壞損內(nèi)存的方法1”來分析是否有壞損內(nèi)存,有則禁用。本發(fā)明在引導(dǎo)操作系統(tǒng)啟動之前,創(chuàng)建了“禁用壞損內(nèi)存的方法2”來搜集bios對內(nèi)存的自檢結(jié)果,分析內(nèi)存錯誤使用。
其中,如圖3所示,禁用壞損內(nèi)存的方法1包括:
(1)當(dāng)計算機(jī)啟動后,bios運(yùn)行至要準(zhǔn)備內(nèi)存初始化時,獲取對每個內(nèi)存槽位i上的內(nèi)存進(jìn)行預(yù)設(shè)的初始化旗標(biāo)值pi;其中,當(dāng)內(nèi)存槽位i上的內(nèi)存壞損時,設(shè)置的初始化旗標(biāo)值pi=1,當(dāng)內(nèi)存槽位i上的內(nèi)存完好時,設(shè)置的初始化旗標(biāo)值pi=0;
(2)當(dāng)內(nèi)存槽位i上的內(nèi)存對應(yīng)的初始化旗標(biāo)值pi為0時,判斷bmc的系統(tǒng)事件日志中是否存在內(nèi)存錯誤信息;若是,執(zhí)行(3),否則執(zhí)行(6);
(3)以內(nèi)存的序列號是否變更為依據(jù)判斷損壞內(nèi)存是否被用戶更換;若否,執(zhí)行(4),否則執(zhí)行(6);
(4)將損壞內(nèi)存對應(yīng)的初始化旗標(biāo)值與該內(nèi)存槽位的編號i進(jìn)行或運(yùn)算,結(jié)果作為更新后的初始化旗標(biāo)值;執(zhí)行(5)
(5)創(chuàng)建uefi事件,以使bios運(yùn)行到bios啟動界面后,提示用戶內(nèi)存損壞信息,提示信息中含有出錯內(nèi)存槽位與錯誤類型,如“內(nèi)存0:內(nèi)存擦除失敗”;執(zhí)行(6)
(6)初始化內(nèi)存。
如圖4所示,禁用壞損內(nèi)存的方法2包括:
(7)當(dāng)bios運(yùn)行至將要引導(dǎo)操作系統(tǒng)啟動時,讀取內(nèi)存配置寄存器中的值;
(8)根據(jù)內(nèi)存配置寄存器中的值判斷在內(nèi)存初始化時認(rèn)定為完好的內(nèi)存中,是否還有內(nèi)存錯誤產(chǎn)生;若是,執(zhí)行(9,若否執(zhí)行(10);
(9)將內(nèi)存錯誤信息以系統(tǒng)事件日志的形式記錄到bmc中,重啟計算機(jī),返回至(1);
(10)加載引導(dǎo)程序啟動操作系統(tǒng)。
實施例2
本實施例提供了一種利用bmc禁用壞損內(nèi)存的裝置,包括:
初始化旗標(biāo)獲取模塊,用于當(dāng)計算機(jī)啟動后,bios運(yùn)行至要準(zhǔn)備內(nèi)存初始化時,獲取對每個內(nèi)存槽位i上的內(nèi)存進(jìn)行預(yù)設(shè)的初始化旗標(biāo)值pi;其中,當(dāng)內(nèi)存槽位i上的內(nèi)存壞損時,設(shè)置的初始化旗標(biāo)值pi=1,當(dāng)內(nèi)存槽位i上的內(nèi)存完好時,設(shè)置的初始化旗標(biāo)值pi=0;
系統(tǒng)事件日志獲取模塊,用于當(dāng)內(nèi)存槽位i上的內(nèi)存對應(yīng)的初始化旗標(biāo)值pi為0時,判斷bmc的系統(tǒng)事件日志中是否存在內(nèi)存錯誤信息;
損壞內(nèi)存更換判斷模塊,用于在系統(tǒng)事件日志獲取模塊獲取的系統(tǒng)事件日志中存在內(nèi)存錯誤信息時,以內(nèi)存的序列號是否變更為依據(jù)判斷損壞內(nèi)存是否被用戶更換;
初始化旗標(biāo)更新模塊,用于在損壞內(nèi)存更換判斷模塊判定損壞內(nèi)存未被被用戶更換時,將損壞內(nèi)存對應(yīng)的初始化旗標(biāo)值與該內(nèi)存槽位的編號i進(jìn)行或運(yùn)算,結(jié)果作為更新后的初始化旗標(biāo)值;
uefi事件創(chuàng)建模塊,用于在初始化旗標(biāo)更新模塊更新初始化旗標(biāo)值后,創(chuàng)建uefi事件,以使bios運(yùn)行到bios啟動界面后,提示用戶內(nèi)存損壞信息;
內(nèi)存初始化執(zhí)行模塊,用于用于在系統(tǒng)事件日志獲取模塊獲取的系統(tǒng)事件日志中不存在內(nèi)存錯誤信息時,或在損壞內(nèi)存更換判斷模塊判定損壞內(nèi)存已被被用戶更換時,跳轉(zhuǎn)執(zhí)行內(nèi)存初始化;
內(nèi)存配置寄存器讀取模塊,用于當(dāng)bios運(yùn)行至將要引導(dǎo)操作系統(tǒng)啟動時,讀取內(nèi)存配置寄存器中的值;
內(nèi)存錯誤判斷模塊,用于根據(jù)內(nèi)存配置寄存器中的值判斷在內(nèi)存初始化時認(rèn)定為完好的內(nèi)存中,是否還有內(nèi)存錯誤產(chǎn)生;若是,執(zhí)行(8),若否執(zhí)行(9);
內(nèi)存錯誤執(zhí)行模塊,用于在內(nèi)存錯誤判斷模塊中判定有內(nèi)存錯誤產(chǎn)生時,將內(nèi)存錯誤信息以系統(tǒng)事件日志的形式記錄到bmc中,重啟計算機(jī);
操作系統(tǒng)啟動執(zhí)行模塊,用于在內(nèi)存錯誤判斷模塊中判定沒有內(nèi)存錯誤產(chǎn)生時,執(zhí)行加載引導(dǎo)程序,從而啟動操作系統(tǒng)。
以上所揭露的僅為本發(fā)明一種較佳實施例而已,不能以此來限定本發(fā)明之權(quán)利范圍,因此依本發(fā)明權(quán)利要求所作的等同變化,仍屬本發(fā)明所涵蓋的范圍。