欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種硬盤讀取方法及裝置的制造方法

文檔序號:8258203閱讀:492來源:國知局
一種硬盤讀取方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及電子信息技術(shù)領(lǐng)域,特別涉及一種硬盤讀取方法及裝置。
【背景技術(shù)】
[0002]應(yīng)用程序通過操作系統(tǒng)(如Linux和Windows等)提供的通用讀操作系統(tǒng)調(diào)用,讀取硬盤數(shù)據(jù)。
[0003]通用SCSI (Small Computer System Interface,小型計算機系統(tǒng)接口)驅(qū)動層經(jīng)由更底層的設(shè)備驅(qū)動和硬盤打交道,從硬盤獲取數(shù)據(jù)。
[0004]在系統(tǒng)調(diào)用層和通用SCSI驅(qū)動層之間以及通用SCSI驅(qū)動層和硬盤之間還有其他操作系統(tǒng)中間層,與系統(tǒng)調(diào)用層和通用SCSI驅(qū)動層一起構(gòu)成操作系統(tǒng)完整的硬盤1(Input/Output,輸入/輸出)處理邏輯。這些中間層與本發(fā)明專利無關(guān),可簡單視為在系統(tǒng)調(diào)用層和通用SCSI驅(qū)動層之間傳遞1請求和數(shù)據(jù),在此不作累述。
[0005]當(dāng)讀操作遇到硬盤壞塊,通用SCSI驅(qū)動層得到讀操作失敗的結(jié)果后,會對硬盤執(zhí)行重置操作,然后再重新執(zhí)行讀操作。在Linux操作系統(tǒng)中,對硬盤的重置操作重復(fù)嘗試次數(shù)由內(nèi)核常量SD_MAX_RETRIES定義,缺省值為5。
[0006]通用SCSI驅(qū)動層反復(fù)重試SD_MAX_RETRIES次后,失敗的結(jié)果最終傳遞到系統(tǒng)調(diào)用層。系統(tǒng)調(diào)用層得到失敗的結(jié)果后,會認(rèn)為“可能是暫時的故障”,并重新嘗試再執(zhí)行一次讀操作。
[0007]通用SCSI驅(qū)動層收到重試的第二次讀操作命令后,再次讀硬盤,得到失敗的結(jié)果后,又重復(fù)嘗試SD_MAX_RETRIES次。
[0008]這樣“讀”系統(tǒng)調(diào)用執(zhí)行過程,遇到硬盤壞塊,總共會導(dǎo)致12次的SCSI驅(qū)動讀硬盤操作失敗,以及12次的重置硬盤操作。硬盤壞塊讀操作需耗時I秒多才返回失敗結(jié)果,重置硬盤耗時不少于1.5秒。12次的重試操作總共耗時超過40秒。
[0009]在視頻監(jiān)控領(lǐng)域,應(yīng)用程序需要及時把每時每刻都在不斷產(chǎn)生的監(jiān)控視頻數(shù)據(jù)保存到存儲設(shè)備(如硬盤)。讀操作阻塞40多秒,會導(dǎo)致在這段時間內(nèi)產(chǎn)生的監(jiān)控視頻數(shù)據(jù)無法及時寫入硬盤,積壓在用戶空間的緩存中,并最終被更新的監(jiān)控視頻數(shù)據(jù)覆蓋,造成嚴(yán)重的監(jiān)控錄像丟失事故。

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

[0010]本發(fā)明提供了一種硬盤讀取方法及裝置,旨在解決讀硬盤操作遇到硬盤壞塊時硬盤長時間不可訪問的問題。
[0011]一方面,本發(fā)明提供了一種硬盤讀取方法,所述方法包括:
[0012]判斷硬盤中的待讀取內(nèi)容是否讀取至操作系統(tǒng)緩沖區(qū)中的目標(biāo)緩存頁;
[0013]若所述硬盤中的待讀取內(nèi)容讀取至所述操作系統(tǒng)緩沖區(qū)中的目標(biāo)緩存頁,則設(shè)置頁狀態(tài)參數(shù)為第一布爾值;
[0014]判斷所述目標(biāo)緩存頁的內(nèi)容是否與所述硬盤中待讀取內(nèi)容一致;
[0015]若所述目標(biāo)緩存頁的內(nèi)容與所述硬盤中待讀取內(nèi)容不一致,則將所述目標(biāo)緩存頁的最新標(biāo)示位設(shè)置為第二布爾值;
[0016]當(dāng)頁狀態(tài)參數(shù)為第一布爾值且所述最新標(biāo)示位設(shè)置為第二布爾值時,返回讀取硬盤失敗?目息。
[0017]第二方面,本發(fā)明提供了一種硬盤讀取裝置,所述裝置包括:
[0018]第一判斷模塊,用于判斷硬盤中的待讀取內(nèi)容是否讀取至操作系統(tǒng)緩沖區(qū)中的目標(biāo)緩存頁;
[0019]第一設(shè)置模塊,用于若所述硬盤中的待讀取內(nèi)容讀取至所述操作系統(tǒng)緩沖區(qū)中的目標(biāo)緩存頁,則設(shè)置頁狀態(tài)參數(shù)為第一布爾值;
[0020]第二判斷模塊,用于判斷所述目標(biāo)緩存頁的內(nèi)容是否與所述硬盤中待讀取內(nèi)容一致;
[0021]第二設(shè)置模塊,用于若所述目標(biāo)緩存頁的內(nèi)容與所述硬盤中待讀取內(nèi)容不一致,則將所述目標(biāo)緩存頁的最新標(biāo)示位設(shè)置為第二布爾值;
[0022]返回模塊,用于當(dāng)頁狀態(tài)參數(shù)為第一布爾值且所述最新標(biāo)示位設(shè)置為第二布爾值時,返回讀取硬盤失敗信息。
[0023]在本發(fā)明中,由于首先判斷硬盤中的待讀取內(nèi)容是否讀取至操作系統(tǒng)緩沖區(qū)中的目標(biāo)緩存頁,若是,則設(shè)置頁狀態(tài)參數(shù)為第一布爾值,再判斷目標(biāo)緩存頁的內(nèi)容是否與硬盤中待讀取內(nèi)容一致,若目標(biāo)緩存頁的內(nèi)容與硬盤中待讀取內(nèi)容不一致,則將目標(biāo)緩存頁的最新標(biāo)示位設(shè)置為第二布爾值,最后當(dāng)頁狀態(tài)參數(shù)為第一布爾值且最新標(biāo)示位設(shè)置為第二布爾值時,返回讀取硬盤失敗信息,因此,縮短了硬盤壞塊故障處理流程,提高了存在壞塊的硬盤的可用性。
【附圖說明】
[0024]為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0025]圖1為本發(fā)明實施例一提供的硬盤讀取方法一種流程圖;
[0026]圖2為本發(fā)明實施例一提供的硬盤讀取方法另一種流程圖;
[0027]圖3為本發(fā)明實施例二提供的硬盤讀取裝置一種結(jié)構(gòu)示意圖;
[0028]圖4為本發(fā)明實施例二提供的硬盤讀取裝置另一種結(jié)構(gòu)示意圖。
【具體實施方式】
[0029]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明實施方式作進一步地詳細(xì)描述。
[0030]實施例一:
[0031]本發(fā)明實施例一提供了一種硬盤讀取方法,參見圖1,硬盤讀取方法包括以下步驟:
[0032]101.判斷硬盤中的待讀取內(nèi)容是否讀取至操作系統(tǒng)緩沖區(qū)中的目標(biāo)緩存頁。判斷硬盤中的待讀取內(nèi)容是否讀取至操作系統(tǒng)緩沖區(qū)中的目標(biāo)緩存頁具體為:判斷目標(biāo)緩存頁的預(yù)讀標(biāo)識位是否被置位。
[0033]102.若硬盤中的待讀取內(nèi)容讀取至操作系統(tǒng)緩沖區(qū)中的目標(biāo)緩存頁,則設(shè)置頁狀態(tài)參數(shù)為第一布爾值。
[0034]103.判斷目標(biāo)緩存頁的內(nèi)容是否與硬盤中待讀取內(nèi)容一致。判斷目標(biāo)緩存頁的內(nèi)容是否與硬盤中待讀取內(nèi)容一致具體為:判斷目標(biāo)緩存頁的最新標(biāo)示位是否被置位。
[0035]104.若目標(biāo)緩存頁的內(nèi)容與硬盤中待讀取內(nèi)容不一致,則將目標(biāo)緩存頁的最新標(biāo)示位設(shè)置為第二布爾值。
[0036]105.當(dāng)頁狀態(tài)參數(shù)為第一布爾值且最新標(biāo)示位設(shè)置為第二布爾值時,返回讀取硬盤失敗?目息。
[0037]可選的,如圖2所示,在步驟105之前還包括步驟104-2和步驟104_3。
[0038]104-2.對目標(biāo)緩存頁進行加鎖。
[0039]104-3.判斷目標(biāo)緩存頁的地址與硬盤中的待讀取內(nèi)容的地址是否存在映射關(guān)系。
[0040]步驟104-2和步驟104-3用于防止和確認(rèn)該目標(biāo)緩存頁是否被其它視頻監(jiān)控線程更新,如沒有被其他視頻監(jiān)控線程更新,則返回讀取硬盤失敗信息。
[0041]可選的,如圖2所示,在步驟105之后還包括步驟105-2。
[0042]105-2.對目標(biāo)緩存頁進行解鎖。
[0043]可選的,如圖2所示,在步驟101之前還包括步驟100-1和步驟100_2。
[0044]100-1.將通用SCSI驅(qū)動層的重讀硬盤參數(shù)設(shè)置為O。本步驟用于設(shè)置通用SCSI驅(qū)動層讀取硬盤失敗時不再重讀硬盤。
[0045]100-2.設(shè)置頁狀態(tài)參數(shù)為第三布爾值,第三布爾值與第一布爾值不相同。本步驟用于初始化頁狀態(tài)參數(shù)。
[0046]例如,當(dāng)系統(tǒng)為Linux操作系統(tǒng)時,修改內(nèi)核常量SD_MAX_RETRIES值為O,添加設(shè)置頁狀態(tài)參數(shù)PAGE_CACHED,初始化為FALSE,判斷硬盤中的待讀取內(nèi)容是否讀取至操作系統(tǒng)緩沖區(qū)中的目標(biāo)緩存頁,即判斷目標(biāo)緩存頁的預(yù)讀標(biāo)識位(PageReadahead)是否被置位,若被置位,則
當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
湖州市| 张掖市| 海门市| 墨脱县| 华容县| 昌黎县| 辰溪县| 游戏| 义马市| 彭山县| 马鞍山市| 乳源| 克东县| 杭州市| 陆良县| 定日县| 渭南市| 玛纳斯县| 榆中县| 恩施市| 桃园县| 赤壁市| 甘谷县| 崇信县| 益阳市| 镇平县| 信阳市| 河池市| 泾源县| 镇坪县| 沐川县| 邹城市| 中江县| 济宁市| 浑源县| 星子县| 岳池县| 湘乡市| 藁城市| 肃北| 城口县|