国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      對(duì)盤(pán)驅(qū)動(dòng)事務(wù)處理采用存取日志的制作方法

      文檔序號(hào):6467176閱讀:151來(lái)源:國(guó)知局
      專利名稱:對(duì)盤(pán)驅(qū)動(dòng)事務(wù)處理采用存取日志的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及盤(pán)驅(qū)動(dòng)程序,更具體來(lái)說(shuō),涉及在盤(pán)驅(qū)動(dòng)器操作期間存儲(chǔ)緩沖器的使用。
      背景技術(shù)
      在計(jì)算機(jī)系統(tǒng)中,設(shè)備驅(qū)動(dòng)程序是控制硬件設(shè)備的軟件程序。例如,帶有鍵盤(pán)、鼠標(biāo)和硬盤(pán)驅(qū)動(dòng)器的計(jì)算機(jī)系統(tǒng)可包括有鍵盤(pán)驅(qū)動(dòng)程序、鼠標(biāo)驅(qū)動(dòng)程序和硬盤(pán)驅(qū)動(dòng)程序。
      在基于個(gè)人電腦的系統(tǒng)中,設(shè)備驅(qū)動(dòng)程序通常接合在其它軟件程序與由設(shè)備驅(qū)動(dòng)程序控制的設(shè)備之間。操作系統(tǒng)中通常包括各種設(shè)備驅(qū)動(dòng)程序,盡管新的設(shè)備驅(qū)動(dòng)程序例如可以在加載新硬件設(shè)備時(shí)被裝入計(jì)算機(jī)系統(tǒng)。
      操作系統(tǒng)與設(shè)備驅(qū)動(dòng)程序協(xié)作,讓特定設(shè)備服務(wù)請(qǐng)求。例如,當(dāng)用戶指示操作系統(tǒng)“加載”或“執(zhí)行”應(yīng)用程序時(shí),該應(yīng)用程序通常被存儲(chǔ)在硬盤(pán)驅(qū)動(dòng)器上。應(yīng)用程序的“加載”實(shí)質(zhì)上是一個(gè)請(qǐng)求,要求從硬盤(pán)驅(qū)動(dòng)器讀取該應(yīng)用程序并將該程序?qū)懭雰?nèi)存。應(yīng)用程序然后可以從內(nèi)存運(yùn)行。
      操作系統(tǒng)于是將該讀請(qǐng)求發(fā)送到服務(wù)硬盤(pán)驅(qū)動(dòng)器的盤(pán)驅(qū)動(dòng)程序。盤(pán)驅(qū)動(dòng)程序?qū)ⅰ凹虞d應(yīng)用程序”的命令翻譯成硬盤(pán)驅(qū)動(dòng)程序命令,以從應(yīng)用程序的存儲(chǔ)位置提取數(shù)據(jù)。例如,盤(pán)驅(qū)動(dòng)程序可以發(fā)出“讀扇區(qū)”命令,標(biāo)識(shí)應(yīng)用程序被存儲(chǔ)在硬盤(pán)驅(qū)動(dòng)器上什么地方以及應(yīng)用程序要被傳送到內(nèi)存中的什么地方。盤(pán)驅(qū)動(dòng)程序因此起著請(qǐng)求程序與硬盤(pán)驅(qū)動(dòng)器之間的翻譯器的作用。從內(nèi)存向硬盤(pán)驅(qū)動(dòng)器傳送的寫(xiě)操作的操作也類(lèi)似。
      無(wú)論是讀操作還是寫(xiě)操作,盤(pán)驅(qū)動(dòng)器存取通常比內(nèi)存存取慢得多。因此,除了翻譯特定的軟件請(qǐng)求,盤(pán)驅(qū)動(dòng)程序還分配一部分內(nèi)存-有時(shí)稱作高速緩存或緩沖器,以減少硬盤(pán)驅(qū)動(dòng)器存取次數(shù),由此改善系統(tǒng)性能。
      例如,當(dāng)作出對(duì)特定扇區(qū)或扇區(qū)組的讀請(qǐng)求時(shí),盤(pán)驅(qū)動(dòng)程序可以將另外的未被請(qǐng)求的扇區(qū)“預(yù)取”到內(nèi)存的緩沖器部分中。預(yù)取預(yù)期隨后將有對(duì)這些尚未被請(qǐng)求的扇區(qū)的請(qǐng)求。
      對(duì)于寫(xiě)操作來(lái)說(shuō),緩沖器可以被用來(lái)存儲(chǔ)寫(xiě)數(shù)據(jù)。為了使硬盤(pán)驅(qū)動(dòng)器存取次數(shù)最小化,盤(pán)驅(qū)動(dòng)程序還可以在內(nèi)存緩沖器中為一些寫(xiě)操作存儲(chǔ)數(shù)據(jù)。然后,在晚些時(shí)候,盤(pán)驅(qū)動(dòng)程序可以對(duì)硬盤(pán)驅(qū)動(dòng)器執(zhí)行一次寫(xiě)操作,以一次性完成所有的寫(xiě)操作。
      然而,盤(pán)驅(qū)動(dòng)程序不可能總是將來(lái)會(huì)從出現(xiàn)那些硬盤(pán)驅(qū)動(dòng)器請(qǐng)求。在有些情況中,最優(yōu)化性能的試圖的結(jié)果會(huì)適得其反。如果一批被預(yù)取的扇區(qū)實(shí)際上總是不被從內(nèi)存中檢索,則會(huì)降低性能。只是因?yàn)?,檢索另外的未被使用的扇區(qū)是需要時(shí)間的。同樣,一個(gè)被緩存的寫(xiě),如果不馬上與另一個(gè)寫(xiě)組合,則只會(huì)延遲希望對(duì)硬盤(pán)驅(qū)動(dòng)器的寫(xiě),由此產(chǎn)生的風(fēng)險(xiǎn)例如是,如果計(jì)算機(jī)系統(tǒng)被無(wú)意地?cái)嚯姡瑒t數(shù)據(jù)可能丟失。
      所以,繼續(xù)需要一種改善讀預(yù)取或?qū)懢彌_器操作或二者的性能的盤(pán)驅(qū)動(dòng)程序。


      圖1是按照一個(gè)實(shí)施例的系統(tǒng)的框圖;圖2A和2B是表示按照一個(gè)實(shí)施例的寫(xiě)緩存的示意圖;圖3A和3B是表示按照一個(gè)實(shí)施例的讀預(yù)取的示意圖;圖4是表示按照一個(gè)實(shí)施例的存取日志(log)的示意圖;圖5是按照一個(gè)實(shí)施例的運(yùn)行中的系統(tǒng)的流程圖;圖6是按照一個(gè)實(shí)施例的系統(tǒng)的框圖。
      具體實(shí)施例方式
      按照若干實(shí)施例,存取日志可以在可能的情況下輔助盤(pán)驅(qū)動(dòng)程序減少硬盤(pán)驅(qū)動(dòng)器存取,以改善驅(qū)動(dòng)器性能。存取日志存儲(chǔ)關(guān)于對(duì)硬盤(pán)驅(qū)動(dòng)器的最近存取的信息。驅(qū)動(dòng)程序可以在參考存取日志后智能地執(zhí)行讀預(yù)取和/或?qū)懢彌_器操作,這樣可以避免對(duì)硬盤(pán)驅(qū)動(dòng)器的不必要的存取,還讓硬盤(pán)驅(qū)動(dòng)程序得到所請(qǐng)求的服務(wù)。
      在圖1中,按照一個(gè)實(shí)施例,系統(tǒng)100包括盤(pán)驅(qū)動(dòng)程序10,它包含存取日志20。盤(pán)驅(qū)動(dòng)程序10是操作系統(tǒng)60的一部分。如在背景技術(shù)部分所解釋的那樣,盤(pán)驅(qū)動(dòng)程序10包括用于與硬盤(pán)驅(qū)動(dòng)器30通信的命令。
      在一個(gè)實(shí)施例中,系統(tǒng)100是基于處理器的系統(tǒng)100,諸如個(gè)人計(jì)算機(jī)系統(tǒng)。相應(yīng)地,盤(pán)驅(qū)動(dòng)程序10、操作系統(tǒng)60以及其它軟件是由處理器(未予示出)執(zhí)行的,這種處理器例如是基于X86的微處理器、微控制器、奔騰微處理器,等等。
      系統(tǒng)100還包括內(nèi)存40和硬盤(pán)驅(qū)動(dòng)器30。在計(jì)算機(jī)系統(tǒng)100通電期間,內(nèi)存40可以存儲(chǔ)包含存取日志20的盤(pán)驅(qū)動(dòng)程序10、操作系統(tǒng)軟件60以及應(yīng)用程序。內(nèi)存可以是多種隨機(jī)存取存儲(chǔ)器中的一種,例如動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、閃存、同步DRAM(SDRAM)、以及靜態(tài)RAM(SRAM)、單直插式內(nèi)存模塊(SIMM)、或雙直插式內(nèi)存模塊(DIMM)。
      硬盤(pán)驅(qū)動(dòng)器30可以是集成驅(qū)動(dòng)電子(IDE)驅(qū)動(dòng)器、增強(qiáng)型IDE(EIDE)、小型計(jì)算機(jī)系統(tǒng)接口(SCSI)驅(qū)動(dòng)器、增強(qiáng)型小型器件接口(ESDI)驅(qū)動(dòng)器、冗余獨(dú)立盤(pán)陣列(RAID)驅(qū)動(dòng)器等等。硬盤(pán)驅(qū)動(dòng)器30通過(guò)總線26與內(nèi)存40相連。
      操作系統(tǒng)60和盤(pán)驅(qū)動(dòng)程序協(xié)作,服務(wù)存取硬盤(pán)驅(qū)動(dòng)器30的請(qǐng)求。對(duì)于讀盤(pán)操作來(lái)說(shuō),所請(qǐng)求的數(shù)據(jù)從硬盤(pán)驅(qū)動(dòng)器30經(jīng)總線26被傳送到內(nèi)存40。對(duì)于寫(xiě)盤(pán)操作來(lái)說(shuō),所請(qǐng)求的數(shù)據(jù)從內(nèi)存40經(jīng)總線26被傳送到硬盤(pán)驅(qū)動(dòng)器30。所以,操作系統(tǒng)60和盤(pán)驅(qū)動(dòng)程序10可以控制硬盤(pán)驅(qū)動(dòng)器30與內(nèi)存40之間的傳送。
      在有些實(shí)施例中,存取日志20可以被盤(pán)驅(qū)動(dòng)程序10用于讀盤(pán)和寫(xiě)盤(pán)這兩種操作。在一個(gè)實(shí)施例中,存取日志20含有關(guān)于對(duì)硬盤(pán)驅(qū)動(dòng)器30的最近存取的信息。盤(pán)驅(qū)動(dòng)程序10可以用存取日志20的“驅(qū)動(dòng)器存取歷史”來(lái)評(píng)估某操作是不是寫(xiě)緩存或讀預(yù)取操作的較好的候選對(duì)象。
      例如,存取日志20可以含有對(duì)事務(wù)處理的類(lèi)型的指示,即對(duì)硬盤(pán)驅(qū)動(dòng)器30執(zhí)行的是讀操作還是寫(xiě)操作。另外,存取日志20還可以指示硬盤(pán)驅(qū)動(dòng)器30的哪個(gè)區(qū)或哪些區(qū)被存取過(guò)。存取日志20也可以含有對(duì)存取時(shí)間的指示。
      在有些實(shí)施例中,存取日志20是有時(shí)間限制的,可用的是預(yù)定時(shí)間期間的驅(qū)動(dòng)器活動(dòng)歷史。在其它實(shí)施例中,存取日志20是有大小限制的,只保持預(yù)定數(shù)量的事務(wù)處理。這樣一種存取日志20可以像先進(jìn)先出(FIFO)存儲(chǔ)器那樣工作,以最新的數(shù)據(jù)替換最老的數(shù)據(jù)。
      在圖2A中,內(nèi)存40可以包括一個(gè)名為寫(xiě)數(shù)據(jù)42的區(qū),該區(qū)例如用于執(zhí)行寫(xiě)盤(pán)操作。寫(xiě)數(shù)據(jù)42包括數(shù)據(jù)塊44、46和48。數(shù)據(jù)塊44、46和48可以代表扇區(qū),其中一個(gè)扇區(qū)一般有512個(gè)字節(jié);也可以代表扇區(qū)分組,或者代表其它原子數(shù)據(jù)單元。
      在圖2A中,為了傳送寫(xiě)數(shù)據(jù)42,可以進(jìn)行對(duì)硬盤(pán)驅(qū)動(dòng)器30的三次獨(dú)立的存取。在一個(gè)寫(xiě)操作中,可以將塊44從內(nèi)存40傳送到硬盤(pán)驅(qū)動(dòng)器30。在第二個(gè)寫(xiě)操作中,可以將塊46從內(nèi)存40傳送到硬盤(pán)驅(qū)動(dòng)器30。在第三個(gè)寫(xiě)操作中,可以將塊48從內(nèi)存40傳送到硬盤(pán)驅(qū)動(dòng)器30。
      在圖2B中,內(nèi)存40包括寫(xiě)緩沖器50。在有些實(shí)施例中,寫(xiě)緩沖器50可以起著臨時(shí)存儲(chǔ)位置的作用,用于存儲(chǔ)要送往硬盤(pán)驅(qū)動(dòng)器30的數(shù)據(jù)。通過(guò)使用寫(xiě)緩沖器50,盤(pán)驅(qū)動(dòng)程序10可以將對(duì)硬盤(pán)驅(qū)動(dòng)器30的三次存取轉(zhuǎn)換成一次存取。
      在第一個(gè)寫(xiě)操作中,將塊44從內(nèi)存40傳送到寫(xiě)緩沖器50。作為內(nèi)存至內(nèi)存的傳送,這個(gè)操作一般比內(nèi)存至盤(pán)的操作快得多。在第二個(gè)寫(xiě)操作中,將塊46從內(nèi)存40傳送到寫(xiě)緩沖器50,作為第二個(gè)內(nèi)存至內(nèi)存的傳送。在第三個(gè)寫(xiě)操作中,將塊48從內(nèi)存40的寫(xiě)數(shù)據(jù)42部分傳送到寫(xiě)緩沖器50。
      在后來(lái)的某個(gè)時(shí)間,盤(pán)驅(qū)動(dòng)程序10可以指令進(jìn)行第四個(gè)寫(xiě)操作,這時(shí)要在寫(xiě)緩沖器50與硬盤(pán)驅(qū)動(dòng)器30之間執(zhí)行。由于在先的三次內(nèi)存至內(nèi)存?zhèn)魉?,該在?nèi)存40與硬盤(pán)驅(qū)動(dòng)器之間的傳送可以包括被存儲(chǔ)在寫(xiě)緩沖器50中的全部三個(gè)塊。盤(pán)驅(qū)動(dòng)程序10可以因?yàn)閷?xiě)緩沖器50滿、有“保存”(save)操作被啟動(dòng)、或者根據(jù)其它條件而執(zhí)行該第四個(gè)寫(xiě)操作。
      當(dāng)然,圖2B中所示的傳送對(duì)一定的塊44、46和48來(lái)說(shuō)是效率更高的。例如,如果塊44、46、48是在硬盤(pán)驅(qū)動(dòng)器30上的相鄰位置存儲(chǔ)的,則用對(duì)硬盤(pán)驅(qū)動(dòng)器30的一次存取就可以有效地完成上述的三個(gè)獨(dú)立寫(xiě)操作。
      按照一個(gè)實(shí)施例,存取日志20輔助盤(pán)驅(qū)動(dòng)程序10預(yù)測(cè)寫(xiě)緩存的最佳候選對(duì)象。通過(guò)檢查存取日志20的最近寫(xiě)操作,盤(pán)驅(qū)動(dòng)程序10可以確定是否硬盤(pán)驅(qū)動(dòng)器30中的一個(gè)塊在被重復(fù)地寫(xiě)數(shù)據(jù)。如果找到,在一個(gè)實(shí)施例中,盤(pán)驅(qū)動(dòng)程序10就臨時(shí)地將該塊存儲(chǔ)在寫(xiě)緩沖器50中,而不是立即將該塊存儲(chǔ)在硬盤(pán)驅(qū)動(dòng)器30上。
      在第二個(gè)實(shí)施例中,可以尋找存取日志20中與正在被寫(xiě)的塊相鄰的最近已經(jīng)被寫(xiě)的塊。下面結(jié)合對(duì)圖5的描述進(jìn)一步說(shuō)明按照這些盤(pán)驅(qū)動(dòng)程序10在讀操作期間也可以使用內(nèi)存40。與寫(xiě)操作一樣,讀操作涉及在內(nèi)存40與硬盤(pán)驅(qū)動(dòng)器30之間的傳送。不過(guò),這時(shí)內(nèi)存40中沒(méi)有數(shù)據(jù)在等待被寫(xiě)到硬盤(pán)驅(qū)動(dòng)器30。相反,如圖3A所示,內(nèi)存40的讀緩沖器70可能是寫(xiě)操作從硬盤(pán)驅(qū)動(dòng)器30出發(fā)的目的地。
      另外,讀緩沖器70還可以被用來(lái)從硬盤(pán)驅(qū)動(dòng)器30預(yù)取另外的未被請(qǐng)求的數(shù)據(jù)塊。盤(pán)驅(qū)動(dòng)程序10可以響應(yīng)對(duì)硬盤(pán)驅(qū)動(dòng)器30中的塊32的一個(gè)讀請(qǐng)求,將塊32傳送到讀緩沖器70中。假設(shè)塊32是與塊34相鄰的,塊34也與硬盤(pán)驅(qū)動(dòng)器30上的塊36相鄰。盤(pán)驅(qū)動(dòng)程序10可以在將塊32傳送到讀緩沖器70的相同讀操作期間,將塊34和36從硬盤(pán)驅(qū)動(dòng)器30傳送到讀緩沖器70。
      因此,盤(pán)驅(qū)動(dòng)程序10除了檢索硬盤(pán)驅(qū)動(dòng)器30的被請(qǐng)求塊32,還額外地將其它塊預(yù)取到讀緩沖器70。額外的被預(yù)取的塊例如可以是與硬盤(pán)驅(qū)動(dòng)器30上的被請(qǐng)求塊相鄰的。
      然而,在圖3B中,操作系統(tǒng)可以包括其自己的高速緩存90。一旦數(shù)據(jù)被從硬盤(pán)驅(qū)動(dòng)器30中檢索出來(lái)并傳送到內(nèi)存40,操作系統(tǒng)就可以將被檢索的數(shù)據(jù)存儲(chǔ)在操作系統(tǒng)高速緩存90中。在一個(gè)實(shí)施例中,這個(gè)額外的盤(pán)驅(qū)動(dòng)器信息的“虛擬”存儲(chǔ)影響到盤(pán)驅(qū)動(dòng)程序10何時(shí)結(jié)合讀盤(pán)操作執(zhí)行預(yù)取操作。
      例如,假設(shè)一個(gè)在先的讀操作將圖3B中帶交叉陰影的塊36從硬盤(pán)驅(qū)動(dòng)器30傳送到內(nèi)存40。顯然,為了提高隨后的涉及塊36的操作的速度,操作系統(tǒng)60將塊36存儲(chǔ)在內(nèi)存40的操作系統(tǒng)高速緩存90部分。
      如圖3A中一樣,假設(shè)塊32、34、36在硬盤(pán)驅(qū)動(dòng)器30上處于相鄰的位置。如果讀操作請(qǐng)求塊32,文件系統(tǒng)驅(qū)動(dòng)程序10就可以在從硬盤(pán)驅(qū)動(dòng)器30向讀緩沖器70傳送塊32的期間預(yù)取相鄰的塊,如塊34和36。然而,塊36已經(jīng)經(jīng)該在先操作而被存儲(chǔ)在操作系統(tǒng)高速緩存90中。因此,如果塊36被存儲(chǔ)在讀緩沖器70中,則塊36就不可能被存取,因?yàn)椴僮飨到y(tǒng)高速緩存90已經(jīng)有了塊36。
      所以,在一個(gè)實(shí)施例中,盤(pán)驅(qū)動(dòng)程序10參考存取日志20來(lái)確定所請(qǐng)求的讀是不是從硬盤(pán)驅(qū)動(dòng)器30預(yù)取額外數(shù)據(jù)的較佳候選。例如,如果某塊要被讀,盤(pán)驅(qū)動(dòng)程序10可能想預(yù)取緊接所請(qǐng)求塊后的三個(gè)相鄰的塊。對(duì)于這三個(gè)塊的每一個(gè),都要參考存取日志20,看看它是否最近被存取。
      在圖3B中,按照一個(gè)實(shí)施例,盤(pán)驅(qū)動(dòng)程序10查閱存取日志20中關(guān)于對(duì)塊34以及塊36的存取的信息。因?yàn)閴K36最近已經(jīng)被存取,盤(pán)驅(qū)動(dòng)程序10除了檢索所請(qǐng)求的塊32,就只預(yù)取塊34。這里,盤(pán)驅(qū)動(dòng)程序10假設(shè)塊36已經(jīng)是操作系統(tǒng)60可用的,例如已經(jīng)在操作系統(tǒng)高速緩存90中。這就保證了被預(yù)取到盤(pán)緩沖器70中的塊是更可能要被使用的。另外,盤(pán)緩沖器70和操作系統(tǒng)高速緩存90沒(méi)有重復(fù)的信息。
      預(yù)取操作的大小,例如響應(yīng)一個(gè)讀請(qǐng)求而傳送的塊的數(shù)量,可以按照盤(pán)緩沖器70的大小、所請(qǐng)求的傳送的大小而調(diào)整,或者按照其它因素來(lái)調(diào)整。同樣,存取日志20的大小可以按盤(pán)驅(qū)動(dòng)器操作的特性、系統(tǒng)的能力以及其它因素而不同。
      在圖4中,按照一個(gè)實(shí)施例,每一次存取硬盤(pán)驅(qū)動(dòng)器30,存取日志20就被更新。硬盤(pán)驅(qū)動(dòng)器30中的一個(gè)區(qū)包括多個(gè)扇區(qū)38。所以在圖4中,用硬盤(pán)驅(qū)動(dòng)器30的32個(gè)相鄰扇區(qū)來(lái)表示存取日志20是如何跟蹤操作的。
      盤(pán)驅(qū)動(dòng)程序10可以在硬盤(pán)驅(qū)動(dòng)器30上執(zhí)行一系列的讀和/或?qū)懖僮?。在圖4中所示的按照一個(gè)實(shí)施例的一個(gè)假想的例子中,盤(pán)驅(qū)動(dòng)程序10首先接收一個(gè)“為8個(gè)扇區(qū)寫(xiě)地址10h”的操作。結(jié)果,對(duì)應(yīng)于該地址的8個(gè)扇區(qū)38被加上“寫(xiě)”條紋(write striped)。另外,存取日志20被更新,以反映地址位移量10h至18h最近被寫(xiě)。
      下一步,盤(pán)驅(qū)動(dòng)程序10接收“為4個(gè)扇區(qū)寫(xiě)地址”的操作。在該操作之后,地址10h的前4個(gè)扇區(qū)38被加上“讀”條紋(readstriped),以標(biāo)識(shí)對(duì)扇區(qū)38進(jìn)行過(guò)寫(xiě)操作。
      注意到存取日志20顯示這4個(gè)扇區(qū)38最近只被讀過(guò),盡管在先操作是對(duì)扇區(qū)38的寫(xiě)操作。存取日志20中依然顯示14h至18h這4個(gè)扇區(qū)最近被寫(xiě)過(guò)。
      在第二個(gè)實(shí)施例中,存取日志20以單獨(dú)的條目來(lái)顯示前述的兩種操作。這樣,對(duì)相同扇區(qū)執(zhí)行的寫(xiě)操作和隨后的讀操作都被存取日志20提供。用于建立對(duì)硬盤(pán)驅(qū)動(dòng)器30的存取歷史記錄的存取日志20的其它實(shí)現(xiàn)也是可能的。
      下一步,在硬盤(pán)驅(qū)動(dòng)器30上啟動(dòng)一個(gè)“為兩個(gè)扇區(qū)寫(xiě)地址00h”操作。相應(yīng)地,圖4中的頭兩個(gè)扇區(qū)被加上“寫(xiě)”條紋。用第三個(gè)條目更新存取日志20,以反映這個(gè)操作。
      第四個(gè)操作是對(duì)四個(gè)扇區(qū)執(zhí)行“為4個(gè)扇區(qū)讀地址0Ch”。硬盤(pán)驅(qū)動(dòng)器30的被請(qǐng)求的扇區(qū)38被加上“讀”條紋。同樣,更新存取日志20,以反映扇區(qū)0CH至0FH最近被讀。
      按照一個(gè)實(shí)施例,在圖5中,盤(pán)驅(qū)動(dòng)程序10可以通過(guò)接收一個(gè)存取硬盤(pán)驅(qū)動(dòng)器30的請(qǐng)求而執(zhí)行讀預(yù)取操作和寫(xiě)緩存操作這兩種操作(方框202)。盤(pán)驅(qū)動(dòng)程序10在繼續(xù)之前先確定操作是讀操作還是寫(xiě)操作(棱形框204)。如圖4中一樣,存取日志20跟蹤對(duì)硬盤(pán)驅(qū)動(dòng)器30的扇區(qū)38的存取。
      對(duì)于寫(xiě)操作(也參看圖2),盤(pán)驅(qū)動(dòng)程序10參考存取日志20(方框206)。存取日志20可能向盤(pán)驅(qū)動(dòng)程序10指出所請(qǐng)求扇區(qū)最近被寫(xiě)過(guò)(棱形框208)。如果是,所請(qǐng)求的存取就可能是寫(xiě)緩存的一個(gè)較佳候選。于是,盤(pán)驅(qū)動(dòng)程序10向?qū)懢彌_器50發(fā)送寫(xiě)數(shù)據(jù)42(方框222)。
      如果所請(qǐng)求扇區(qū)38最近沒(méi)有被寫(xiě)過(guò),可以進(jìn)一步參考存取日志20,以確定所請(qǐng)求扇區(qū)38是否與最近被寫(xiě)過(guò)的扇區(qū)相鄰(棱形框210)。如果是,盤(pán)驅(qū)動(dòng)程序10向?qū)懢彌_器50發(fā)送寫(xiě)數(shù)據(jù)42(方框222)。在以后的某個(gè)時(shí)間,可以將寫(xiě)緩沖器50中的數(shù)據(jù)42寫(xiě)到硬盤(pán)驅(qū)動(dòng)器30(方框224)。
      相反,如果所請(qǐng)求的扇區(qū)不是與存取日志20所記錄的最近被寫(xiě)的扇區(qū)38相鄰的,則在一個(gè)實(shí)施例中,所請(qǐng)求的寫(xiě)請(qǐng)求就不是寫(xiě)緩存的較佳候選。于是,盤(pán)驅(qū)動(dòng)程序10向硬盤(pán)驅(qū)動(dòng)器30發(fā)送寫(xiě)數(shù)據(jù)42(方框212)。寫(xiě)操作于是完成。
      如果所請(qǐng)求的是個(gè)讀操作(也參看圖3),盤(pán)驅(qū)動(dòng)程序10也參考存取日志20,這時(shí)是為了確定環(huán)境是否適合于預(yù)取額外的未被請(qǐng)求的扇區(qū)(方框214)。在一個(gè)實(shí)施例中,盤(pán)驅(qū)動(dòng)程序10可以預(yù)取與所請(qǐng)求扇區(qū)相鄰的扇區(qū)。所以,在參考存取日志20時(shí),對(duì)于每個(gè)預(yù)期要被預(yù)取的扇區(qū),盤(pán)驅(qū)動(dòng)程序10確定該預(yù)期的扇區(qū)是否最近被讀過(guò)(棱形框216)。如果是,該預(yù)期的扇區(qū)可能已經(jīng)被存儲(chǔ)在操作系統(tǒng)高速緩存90中。
      相應(yīng)地,在一個(gè)實(shí)施例中,預(yù)取操作沒(méi)有被指示。所以,盤(pán)驅(qū)動(dòng)程序10將所請(qǐng)求的扇區(qū)38讀入盤(pán)緩沖器70,在那里可以被例如操作系統(tǒng)60的請(qǐng)求程序檢索(方框218)。操作系統(tǒng)60例如可以將所請(qǐng)求的扇區(qū)38從讀緩沖器70傳送到操作系統(tǒng)高速緩存90中,讀緩沖器70和操作系統(tǒng)高速緩存90二者都位于內(nèi)存40中。
      然而,如果存取日志20指出要被預(yù)取的一個(gè)或多個(gè)扇區(qū)最近未被讀(棱形框216),盤(pán)驅(qū)動(dòng)程序10就讀取所請(qǐng)求扇區(qū)38,并將額外的扇區(qū)預(yù)取到讀緩沖器70中(方框220)。如同無(wú)預(yù)取發(fā)生時(shí)一樣,操作系統(tǒng)60可以從讀緩沖器70檢索該數(shù)據(jù)并將該數(shù)據(jù)傳送到操作系統(tǒng)高速緩存90。
      操作系統(tǒng)60隨后對(duì)讀緩沖器70中的預(yù)取數(shù)據(jù)的請(qǐng)求,可以由盤(pán)驅(qū)動(dòng)程序10服務(wù),而不必訪問(wèn)硬盤(pán)驅(qū)動(dòng)器30。在向讀緩沖器70寫(xiě)之后,無(wú)論是否有額外的扇區(qū)被預(yù)取,讀操作于是都完成。
      按照一個(gè)實(shí)施例,在圖6中,系統(tǒng)100包括在先26上的處理器12。操作系統(tǒng)60和盤(pán)驅(qū)動(dòng)程序10,包括圖5中的軟件200,被存儲(chǔ)在硬盤(pán)驅(qū)動(dòng)器30上,硬盤(pán)驅(qū)動(dòng)器是一種非易失性存儲(chǔ)介質(zhì)。在一個(gè)實(shí)施例中,操作系統(tǒng)和盤(pán)驅(qū)動(dòng)程序10在通電期間被裝入內(nèi)存40中,以加快實(shí)時(shí)執(zhí)行速度。
      在一個(gè)實(shí)施例中,存取日志20是由盤(pán)驅(qū)動(dòng)程序10通過(guò)分配一部分內(nèi)存40而建立的。一旦開(kāi)始訪問(wèn)硬盤(pán)驅(qū)動(dòng)器30,盤(pán)驅(qū)動(dòng)程序10就向存取日志20寫(xiě)入操作的類(lèi)型和硬盤(pán)驅(qū)動(dòng)器中被影響的區(qū)域。
      所以,在一個(gè)實(shí)施例中,盤(pán)驅(qū)動(dòng)程序利用存取日志,在讀操作期間預(yù)取額外的數(shù)據(jù),在寫(xiě)操作期間緩存數(shù)據(jù),使得對(duì)硬盤(pán)驅(qū)動(dòng)器的存取次數(shù)減少。存取日志向盤(pán)驅(qū)動(dòng)程序提供硬盤(pán)驅(qū)動(dòng)器的存取歷史。盤(pán)驅(qū)動(dòng)程序根據(jù)該歷史就可以預(yù)測(cè)將來(lái)對(duì)硬盤(pán)驅(qū)動(dòng)器的存取,然后根據(jù)該預(yù)測(cè),可以利用系統(tǒng)內(nèi)存來(lái)盡可能地減少對(duì)硬盤(pán)驅(qū)動(dòng)器的存取次數(shù)。
      盡管就有限數(shù)量的實(shí)施例描述了本發(fā)明,本領(lǐng)域的熟練人員明白,據(jù)此可以得出各種修改和變體。后附的權(quán)利要求書(shū)旨在包含所有這些屬于本發(fā)明的精神和范圍內(nèi)的修改和變體。
      權(quán)利要求
      1.一種方法,包含接收一個(gè)要向盤(pán)驅(qū)動(dòng)器的某區(qū)寫(xiě)數(shù)據(jù)的請(qǐng)求;檢索盤(pán)驅(qū)動(dòng)器的以前被寫(xiě)區(qū)的存取日志;和根據(jù)存取日志向內(nèi)存寫(xiě)數(shù)據(jù)。
      2.權(quán)利要求1的方法,檢索盤(pán)驅(qū)動(dòng)器的以前被寫(xiě)區(qū)的記錄進(jìn)一步包含搜索包含多個(gè)條目的存取日志中的一個(gè)條目;在存取日志中尋找一個(gè)以前被寫(xiě)區(qū)條目;和比較所請(qǐng)求區(qū)與該以前被寫(xiě)區(qū)條目。
      3.權(quán)利要求2的方法,比較所請(qǐng)求區(qū)與該以前被寫(xiě)區(qū)條目進(jìn)一步包含確定所請(qǐng)求區(qū)是否與盤(pán)驅(qū)動(dòng)器上該以前被寫(xiě)區(qū)是相鄰的。
      4.權(quán)利要求2的方法,比較所請(qǐng)求區(qū)與該以前被寫(xiě)區(qū)條目進(jìn)一步包含確定所請(qǐng)求區(qū)是否與該以前被寫(xiě)區(qū)是相同的。
      5.一種方法,包含接收一個(gè)要存取盤(pán)驅(qū)動(dòng)器的某區(qū)的第一請(qǐng)求;在內(nèi)存中存儲(chǔ)該第一請(qǐng)求的一個(gè)記錄;和服務(wù)該第一請(qǐng)求。
      6.權(quán)利要求5的方法,進(jìn)一包含接收一個(gè)要存取盤(pán)驅(qū)動(dòng)器的某區(qū)的第二請(qǐng)求;將第一請(qǐng)求的記錄替換為該第二請(qǐng)求的第二記錄;和服務(wù)該第二請(qǐng)求。
      7.權(quán)利要求5的方法,進(jìn)一包含接收一個(gè)要存取盤(pán)驅(qū)動(dòng)器的某區(qū)的第二請(qǐng)求;在第一請(qǐng)求的記錄后存儲(chǔ)該第二請(qǐng)求的第二記錄;和服務(wù)該第二請(qǐng)求。
      8.權(quán)利要求5的方法,在內(nèi)存中存儲(chǔ)該第一請(qǐng)求的一個(gè)記錄進(jìn)一步包含指示事務(wù)處理類(lèi)型。
      9.權(quán)利要求8的方法,指示事務(wù)處理類(lèi)型進(jìn)一步包含指示讀操作或?qū)懖僮鳌?br> 10.權(quán)利要求5的方法,在內(nèi)存中存儲(chǔ)該第一請(qǐng)求的一個(gè)記錄進(jìn)一步包含指示要被存取的區(qū)。
      11.權(quán)利要求5的方法,在內(nèi)存中存儲(chǔ)該第一請(qǐng)求的一個(gè)記錄進(jìn)一步包含指示請(qǐng)求的時(shí)間。
      12.一個(gè)系統(tǒng),包含處理器;與處理器相連的內(nèi)存;與處理器相連的硬盤(pán)驅(qū)動(dòng)器;和連接在硬盤(pán)驅(qū)動(dòng)器與內(nèi)存之間的包含存取日志的盤(pán)驅(qū)動(dòng)程序,其中,盤(pán)驅(qū)動(dòng)程序接收要讀硬盤(pán)驅(qū)動(dòng)器的第一區(qū)的請(qǐng)求;標(biāo)識(shí)硬盤(pán)驅(qū)動(dòng)器的第二區(qū);參考存取日志來(lái)確定第二區(qū)是否最近被讀過(guò);和如果第二區(qū)最近未被讀過(guò),則將硬盤(pán)驅(qū)動(dòng)器的第一區(qū)和第二區(qū)都提取到內(nèi)存。
      13.權(quán)利要求12的系統(tǒng),其中盤(pán)驅(qū)動(dòng)程序進(jìn)一步接收要寫(xiě)硬盤(pán)驅(qū)動(dòng)器的第三區(qū)的請(qǐng)求;參考存取日志來(lái)確定該區(qū)是否最近被寫(xiě)過(guò);和如果第三區(qū)最近未被寫(xiě)過(guò),則寫(xiě)第三區(qū)。
      14.權(quán)利要求13的系統(tǒng),其中,如果第三區(qū)最近被寫(xiě)過(guò),則盤(pán)驅(qū)動(dòng)程序?qū)憙?nèi)存。
      15.權(quán)利要求13的系統(tǒng),其中盤(pán)驅(qū)動(dòng)程序進(jìn)一步接收向硬盤(pán)驅(qū)動(dòng)程序的第四區(qū)寫(xiě)的請(qǐng)求;參考存取日志以確定最近已經(jīng)被寫(xiě)過(guò)的區(qū);和如果第四區(qū)與最近已經(jīng)被寫(xiě)過(guò)的區(qū)相鄰則寫(xiě)到內(nèi)存。
      16.權(quán)利要求12的系統(tǒng),其中盤(pán)驅(qū)動(dòng)程序進(jìn)一步硬盤(pán)驅(qū)動(dòng)器的某區(qū)每次被存取時(shí)向存取日志寫(xiě)。
      17.一種包含存儲(chǔ)指令的介質(zhì)的產(chǎn)品,指令使基于處理器的系統(tǒng)接收一個(gè)要向盤(pán)驅(qū)動(dòng)器的某區(qū)寫(xiě)數(shù)據(jù)的請(qǐng)求;檢索盤(pán)驅(qū)動(dòng)器的以前被寫(xiě)區(qū)的存取日志;和根據(jù)存取日志向內(nèi)存寫(xiě)數(shù)據(jù)。
      18.權(quán)利要求17的產(chǎn)品,進(jìn)一步存儲(chǔ)有使基于處理器的系統(tǒng)執(zhí)行下述步驟的指令搜索包含多個(gè)條目的存取日志中的一個(gè)條目;在存取日志中尋找一個(gè)以前被寫(xiě)區(qū)條目;和比較所請(qǐng)求區(qū)與該以前被寫(xiě)區(qū)條目。
      19.權(quán)利要求18的產(chǎn)品,進(jìn)一步存儲(chǔ)的指令使基于處理器的系統(tǒng)確定所請(qǐng)求區(qū)是否與盤(pán)驅(qū)動(dòng)器上該以前被寫(xiě)區(qū)是相鄰的。
      20.權(quán)利要求18的產(chǎn)品,進(jìn)一步存儲(chǔ)的指令使基于處理器的系統(tǒng)確定所請(qǐng)求區(qū)是否與該以前被寫(xiě)區(qū)是相同的。
      全文摘要
      盤(pán)驅(qū)動(dòng)程序(10)包括一個(gè)存取日志(20),用于記錄與硬盤(pán)驅(qū)動(dòng)器(30)的最近的交互。在向內(nèi)存(40)緩存寫(xiě)的寫(xiě)操作期間,在存取硬盤(pán)驅(qū)動(dòng)器(30)之前可以參考存取日志(20)。在存取硬盤(pán)驅(qū)動(dòng)器(30)期間的預(yù)取額外數(shù)據(jù)的讀操作期間也參考存取日志(20)。在確定是否要預(yù)取時(shí),考慮由操作系統(tǒng)(60)使用額外的高速緩存。
      文檔編號(hào)G06F3/06GK1421003SQ01807460
      公開(kāi)日2003年5月28日 申請(qǐng)日期2001年1月26日 優(yōu)先權(quán)日2000年3月31日
      發(fā)明者A·D·胡夫曼 申請(qǐng)人:英特爾公司
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1