本發(fā)明涉及計(jì)算機(jī)應(yīng)用技術(shù)領(lǐng)域,尤其涉及一種預(yù)取文件處理方法及裝置。
背景技術(shù):
啟動(dòng)預(yù)取是一種加快應(yīng)用程序啟動(dòng)速度的技術(shù),主要原理是在應(yīng)用程序加載的時(shí)候通過(guò)讀取預(yù)取文件,將應(yīng)用程序的應(yīng)用文件由磁盤(pán)加載至用戶設(shè)備的物理內(nèi)存,以避免應(yīng)用程序在啟動(dòng)的時(shí)候耗費(fèi)大量的時(shí)間從磁盤(pán)中讀取這些應(yīng)用文件。
然而,由于用戶設(shè)備上磁盤(pán)環(huán)境的不一致,容易產(chǎn)生磁盤(pán)碎片,使得應(yīng)用程序的應(yīng)用文件被離散的存儲(chǔ)在磁盤(pán)中,進(jìn)而使得通過(guò)預(yù)取文件所進(jìn)行的應(yīng)用文件的讀取在物理上并不連續(xù),不可避免地需要進(jìn)行大距離磁盤(pán)尋道,導(dǎo)致磁盤(pán)讀取時(shí)間的增加,不利于提高應(yīng)用程序的啟動(dòng)速度。
技術(shù)實(shí)現(xiàn)要素:
基于此,有必要提供一種能夠降低磁盤(pán)讀取時(shí)間的預(yù)取文件處理方法。
此外,還有必要提供一種能夠降低磁盤(pán)讀取時(shí)間的預(yù)取文件處理裝置。
為了解決上述技術(shù)問(wèn)題,本發(fā)明所采用的技術(shù)方案為:
一種預(yù)取文件處理方法,包括:應(yīng)用程序安裝包解壓后,從所述應(yīng)用程序安裝包獲取第一預(yù)取文件,由所述第一預(yù)取文件中得到多個(gè)文件邏輯偏移塊;對(duì)所述多個(gè)文件邏輯偏移塊進(jìn)行排序處理,形成磁盤(pán)物理位置連續(xù)的第二預(yù)取文件;及保存所述第二預(yù)取文件,供完成安裝的應(yīng)用程序加載時(shí)讀取。
一種預(yù)取文件處理裝置,包括:文件塊獲取模塊,用于應(yīng)用程序安裝包解壓后,從所述應(yīng)用程序安裝包獲取第一預(yù)取文件,由所述第一預(yù)取文件中得到多個(gè)文件邏輯偏移塊;文件塊排序模塊,用于對(duì)所述多個(gè)文件邏輯偏移塊進(jìn)行排序處理,形成磁盤(pán)物理位置連續(xù)的第二預(yù)取文件;及文件保存模塊,用于保存所述第二預(yù)取文件,供完成安裝的應(yīng)用程序加載時(shí)讀取。
與現(xiàn)有技術(shù)相比,本發(fā)明具有以下有益效果:
在應(yīng)用程序安裝包解壓后,獲取應(yīng)用程序?qū)?yīng)的第一預(yù)取文件,并由第一預(yù)取文件中得到多個(gè)文件邏輯偏移塊,通過(guò)對(duì)多個(gè)文件邏輯偏移塊進(jìn)行排序處理,形成磁盤(pán)物理位置連續(xù)的第二預(yù)取文件,并保存。也就是說(shuō),應(yīng)用程序加載的時(shí)候通過(guò)讀取第二預(yù)取文件,將能夠物理上連續(xù)地讀取離散存儲(chǔ)于磁盤(pán)中的應(yīng)用程序的應(yīng)用文件,避免了大距離磁盤(pán)尋道,有效地降低了磁盤(pán)讀取的時(shí)間,從而有利于應(yīng)用程序的快速啟動(dòng)。
附圖說(shuō)明
圖1為本發(fā)明各實(shí)施例所提供的一種用戶設(shè)備的結(jié)構(gòu)示意圖;
圖2為一實(shí)施例的預(yù)取文件處理方法的流程圖;
圖3為另一實(shí)施例的預(yù)取文件處理方法的流程圖;
圖4為圖2中對(duì)所述多個(gè)文件邏輯偏移塊進(jìn)行排序處理,以形成磁盤(pán)物理位置連續(xù)的第二預(yù)取文件的方法流程圖;
圖4a為文件邏輯偏移塊與磁盤(pán)物理塊建立了對(duì)應(yīng)關(guān)系的示意圖;
圖4b為文件邏輯偏移塊進(jìn)行拆分的示意圖;
圖5為圖4中通過(guò)所述文件邏輯偏移塊在磁盤(pán)中定位磁盤(pán)物理塊,并建立所述文件邏輯偏移塊與磁盤(pán)物理塊之間的對(duì)應(yīng)關(guān)系的方法流程圖;
圖5a為根據(jù)簇信息將物理存儲(chǔ)位置信息轉(zhuǎn)換為對(duì)應(yīng)的邏輯偏移位置和物理偏移位置的示意圖;
圖6為現(xiàn)有技術(shù)中利用第一預(yù)取文件實(shí)現(xiàn)應(yīng)用啟動(dòng)預(yù)取過(guò)程中磁盤(pán)尋道的示意圖;
圖7為本發(fā)明中利用第二預(yù)取文件實(shí)現(xiàn)應(yīng)用啟動(dòng)預(yù)取過(guò)程中磁盤(pán)尋道的示意圖;
圖8為一實(shí)施例的預(yù)取文件處理裝置的結(jié)構(gòu)框圖;
圖9為另一實(shí)施例的預(yù)取文件處理裝置的結(jié)構(gòu)框圖;
圖10為圖8中文件塊排序模塊的結(jié)構(gòu)框圖;
圖11為圖10中文件塊對(duì)應(yīng)單元的結(jié)構(gòu)框圖。
具體實(shí)施方式
體現(xiàn)本發(fā)明特征與優(yōu)點(diǎn)的典型實(shí)施方式將在以下的說(shuō)明中詳細(xì)敘述。應(yīng)理解的是本發(fā)明能夠在不同的實(shí)施方式上具有各種的變化,其皆不脫離本發(fā)明的范圍,且其中的說(shuō)明及圖示在本質(zhì)上是當(dāng)作說(shuō)明之用,而非用以限制本發(fā)明。
請(qǐng)參閱圖1,圖1是本發(fā)明各實(shí)施例提供的一種用戶設(shè)備100的結(jié)構(gòu)示意圖。本發(fā)明各實(shí)施例中的由用戶設(shè)備所執(zhí)行的步驟均可以基于該圖中所示的用戶設(shè)備的結(jié)構(gòu),但不能認(rèn)為是提供了對(duì)本發(fā)明各實(shí)施例的使用范圍的任何限制,且也不能解釋為需要依賴(lài)于或具有圖示的示例性的用戶設(shè)備100中的一個(gè)或者多個(gè)部件的組合。
該用戶設(shè)備可以是個(gè)人計(jì)算機(jī)、智能手機(jī)、平板電腦、服務(wù)器等,該用戶設(shè)備100可因配置或者性能的不同而產(chǎn)生較大的差異,其至少包括:電源110、接口130、至少一存儲(chǔ)介質(zhì)150、以及至少一中央處理器(cpu,centralprocessingunits)170。
具體地,電源110用于為用戶設(shè)備100上的各硬件設(shè)備提供工作電壓。
接口130包括至少一有線或無(wú)線網(wǎng)絡(luò)接口131、至少一串并轉(zhuǎn)換接口133、至少一輸入輸出接口135以及至少一usb接口137等,用于與外部設(shè)備通信。
存儲(chǔ)介質(zhì)150作為資源存儲(chǔ)的載體,可以是隨機(jī)存儲(chǔ)器(物理內(nèi)存)、磁盤(pán)、光盤(pán)或者可用于存儲(chǔ)所需信息并可訪問(wèn)的任何其他介質(zhì),其上所存儲(chǔ)的資源包括操作系統(tǒng)151、應(yīng)用程序153及數(shù)據(jù)155等,存儲(chǔ)方式可以是短暫存儲(chǔ)或者永久存儲(chǔ)。其中,操作系統(tǒng)151用于管理與控制用戶設(shè)備100上的各硬件設(shè)備以及應(yīng)用程序153,以實(shí)現(xiàn)中央處理器170對(duì)數(shù)據(jù)155的計(jì)算與處理,其可以是windowsservertm、macosxtm、unixtm、linuxtm、freebsdtm等。應(yīng)用程序153是基于操作系統(tǒng)151之上完成至少一項(xiàng)特定工作的計(jì)算機(jī)程序,其可以包括至少一模塊(圖示未示出),每個(gè)模塊都可以分別包含有對(duì)用戶設(shè)備100的一系列操作指令。數(shù)據(jù)155可以是存儲(chǔ)于存儲(chǔ)介質(zhì)150中的預(yù)取文件、應(yīng)用文件、應(yīng)用程序安裝包等等。
中央處理器170可以包括一個(gè)或多個(gè)以上的處理器,并設(shè)置為通過(guò)總線與存儲(chǔ)介質(zhì)150通信,用于計(jì)算與處理存儲(chǔ)介質(zhì)150中的數(shù)據(jù)155。
通過(guò)中央處理器170讀取存儲(chǔ)介質(zhì)150中存儲(chǔ)的一系列操作指令,并基于存儲(chǔ)介質(zhì)150上的操作系統(tǒng)151在用戶設(shè)備100上執(zhí)行,進(jìn)而使得本發(fā)明中各實(shí)施例的全部或者部分步驟可以通過(guò)在用戶設(shè)備100上運(yùn)行相關(guān)的計(jì)算機(jī)程序來(lái)完成。
此外,通過(guò)硬件電路或者硬件電路結(jié)合軟件指令也能同樣實(shí)現(xiàn)本發(fā)明,因此,實(shí)現(xiàn)本發(fā)明并不局限于任何特定硬件電路、軟件以及兩者的組合。
請(qǐng)參閱圖2,在一實(shí)施例中,一種預(yù)取文件處理方法,包括以下步驟:
步驟210,應(yīng)用程序安裝包解壓后,從應(yīng)用程序安裝包獲取第一預(yù)取文件,由第一預(yù)取文件中得到多個(gè)文件邏輯偏移塊。
第一預(yù)取文件中存儲(chǔ)了多個(gè)文件邏輯偏移塊,使得應(yīng)用程序在加載過(guò)程中,能夠通過(guò)順序批量讀取文件邏輯偏移塊將應(yīng)用程序位于磁盤(pán)中的應(yīng)用文件加載至用戶設(shè)備的物理內(nèi)存,以便于后續(xù)啟動(dòng)時(shí)直接由物理內(nèi)存中讀取應(yīng)用文件,以加快應(yīng)用程序的啟動(dòng)。
應(yīng)用程序安裝包中包含有應(yīng)用程序運(yùn)行時(shí)所需的應(yīng)用文件,例如,應(yīng)用文件可以是可執(zhí)行文件、動(dòng)態(tài)鏈接庫(kù)、加密組件、兼容組件等等,為了應(yīng)用程序安裝完畢首次啟動(dòng)時(shí)可以直接進(jìn)行應(yīng)用文件的讀取,應(yīng)用程序安裝包中還包含有第一預(yù)取文件。
應(yīng)用程序安裝包的執(zhí)行過(guò)程包括解壓和安裝,解壓過(guò)程是將應(yīng)用程序安裝包中所有文件提取出來(lái)并存放至用戶設(shè)備。
因此,應(yīng)用程序安裝包解壓后,將能夠從應(yīng)用程序安裝包中獲取到第一預(yù)取文件,進(jìn)而得到第一預(yù)取文件中的多個(gè)文件邏輯偏移塊。
步驟230,對(duì)多個(gè)文件邏輯偏移塊進(jìn)行排序處理,形成磁盤(pán)物理位置連續(xù)的第二預(yù)取文件。
應(yīng)用程序的加載過(guò)程是按照預(yù)取文件中文件邏輯偏移塊的存儲(chǔ)順序進(jìn)行的。由于應(yīng)用程序的應(yīng)用文件通常是離散的存儲(chǔ)于磁盤(pán)的不同磁盤(pán)物理位置,進(jìn)而使得順序讀取文件邏輯偏移塊所進(jìn)行的應(yīng)用文件加載在物理上是不連續(xù)的。
因此,需要對(duì)第一預(yù)取文件中的多個(gè)文件邏輯偏移塊進(jìn)行排序處理,以形成磁盤(pán)物理位置連續(xù)的第二預(yù)取文件,即第二預(yù)取文件中多個(gè)文件邏輯偏移塊所對(duì)應(yīng)的應(yīng)用文件在磁盤(pán)中的磁盤(pán)物理位置是連續(xù)的,從而有利于降低磁盤(pán)讀取的時(shí)間。
需要說(shuō)明的是,此處的磁盤(pán)物理位置連續(xù)并非完全連續(xù),是相對(duì)于第二預(yù)取文件中的多個(gè)文件邏輯偏移塊而言。例如,第一預(yù)取文件中依次存儲(chǔ)有a、b、c三個(gè)文件邏輯偏移塊,a文件邏輯偏移塊對(duì)應(yīng)的應(yīng)用文件在磁盤(pán)中的磁盤(pán)物理位置是100字節(jié),b文件邏輯偏移塊對(duì)應(yīng)的是50字節(jié),c文件邏輯偏移塊對(duì)應(yīng)的200字節(jié),則磁盤(pán)物理位置連續(xù)的第二預(yù)取文件中三個(gè)文件邏輯偏移塊的存儲(chǔ)順序是bac或者cab。
步驟250,保存第二預(yù)取文件,供完成安裝的應(yīng)用程序加載時(shí)讀取。
第二預(yù)取文件生成之后,將被保存于所在用戶設(shè)備的存儲(chǔ)介質(zhì)中,以方便應(yīng)用程序在今后的每次啟動(dòng)加載過(guò)程時(shí)讀取,從而提高應(yīng)用程序的啟動(dòng)速度。
通過(guò)如上所述的方法,第一預(yù)取文件被優(yōu)化形成磁盤(pán)物理位置連續(xù)的第二預(yù)取文件,使得應(yīng)用程序的加載過(guò)程將按照連續(xù)的磁盤(pán)物理位置讀取應(yīng)用文件,有效地避免了大距離磁盤(pán)尋道,降低了磁盤(pán)讀取的時(shí)間,從而有利于應(yīng)用程序的快速啟動(dòng)。
此外,雖然不同的用戶設(shè)備的磁盤(pán)環(huán)境各不相同,但是通過(guò)應(yīng)用程序安裝包將應(yīng)用程序安裝于指定用戶設(shè)備時(shí),第二預(yù)取文件是根據(jù)應(yīng)用程序安裝包所在的該指定用戶設(shè)備的磁盤(pán)環(huán)境形成的,因此第二預(yù)取文件的磁盤(pán)物理位置能夠跟隨不同的用戶設(shè)備的磁盤(pán)環(huán)境動(dòng)態(tài)變化,具備自適應(yīng)性。
在一實(shí)施例中,步驟210之前,如上所述的方法還包括以下步驟:
打包第一預(yù)取文件和應(yīng)用程序的其他應(yīng)用文件,生成應(yīng)用程序安裝包。
為了使得應(yīng)用程序完成安裝之后的首次啟動(dòng)過(guò)程中,就可以直接從用戶設(shè)備的物理內(nèi)存中進(jìn)行應(yīng)用文件的讀取,將在應(yīng)用程序安裝包中進(jìn)行第一預(yù)取文件的添加。
具體地,在第一預(yù)取文件和應(yīng)用程序的其他應(yīng)用文件完成編譯之后,對(duì)第一預(yù)取文件和應(yīng)用程序的其他應(yīng)用文件進(jìn)行打包,則生成了包含有第一預(yù)取文件的應(yīng)用程序安裝包。
通過(guò)如上所述的方法,使得對(duì)第一預(yù)取文件的優(yōu)化操作可以在應(yīng)用程序安裝包的執(zhí)行過(guò)程中實(shí)現(xiàn),而不會(huì)對(duì)應(yīng)用程序的首次啟動(dòng)造成任何影響,從而有利于提升用戶體驗(yàn)。
請(qǐng)參閱圖3,在一實(shí)施例中,打包第一預(yù)取文件和應(yīng)用程序的其他應(yīng)用文件,生成應(yīng)用程序安裝包的步驟之前,如上所述的方法還包括以下步驟:
步驟310,獲取應(yīng)用程序的歷史啟動(dòng)過(guò)程中發(fā)生的磁盤(pán)硬錯(cuò)誤的虛擬地址信息。
所謂的磁盤(pán)硬錯(cuò)誤是由于應(yīng)用程序讀取的應(yīng)用文件不存在用戶設(shè)備的物理內(nèi)存中,而位于磁盤(pán)上,使得應(yīng)用程序需要到磁盤(pán)上加載應(yīng)用文件,從而產(chǎn)生應(yīng)用程序運(yùn)行異常。
虛擬地址是應(yīng)用程序啟動(dòng)過(guò)程中讀取的應(yīng)用文件的邏輯偏移位置,邏輯偏移位置相對(duì)于磁盤(pán)中的磁盤(pán)物理位置。則通過(guò)獲取應(yīng)用程序的啟動(dòng)過(guò)程中發(fā)生的磁盤(pán)硬錯(cuò)誤的虛擬地址,即可以獲知在應(yīng)用程序的啟動(dòng)過(guò)程中哪些虛擬地址未被映射到磁盤(pán)中有效的磁盤(pán)物理位置上,換句話說(shuō),就是哪些應(yīng)用文件未被存放在用戶設(shè)備的物理內(nèi)存上。
由于每次應(yīng)用程序啟動(dòng)過(guò)程中發(fā)生的磁盤(pán)硬錯(cuò)誤并不完全相同,因此,對(duì)應(yīng)用程序的歷史啟動(dòng)過(guò)程中發(fā)生的磁盤(pán)硬錯(cuò)誤進(jìn)行收集和統(tǒng)計(jì),所獲取到的虛擬地址信息包含有多個(gè)虛擬地址,該多個(gè)虛擬地址分別對(duì)應(yīng)于多個(gè)未被存放在用戶設(shè)備的物理內(nèi)存上的應(yīng)用文件。
步驟330,根據(jù)虛擬地址信息計(jì)算得到多個(gè)文件邏輯偏移塊,合并多個(gè)文件邏輯偏移塊得到第一預(yù)取文件。
本實(shí)施例中,根據(jù)虛擬地址信息中的多個(gè)虛擬地址,將首先計(jì)算得到應(yīng)用程序啟動(dòng)過(guò)程中發(fā)生的磁盤(pán)讀取所對(duì)應(yīng)的多個(gè)文件偏移量和文件大小,進(jìn)而再通過(guò)該多個(gè)文件偏移量和文件大小計(jì)算得到多個(gè)文件邏輯偏移塊。
多個(gè)文件邏輯偏移塊之間的物理距離各不相同,還將根據(jù)預(yù)設(shè)的物理距離對(duì)該多個(gè)文件邏輯偏移塊進(jìn)行合并,從而生成應(yīng)用程序?qū)?yīng)的第一預(yù)取文件。通過(guò)包含有多個(gè)文件邏輯塊的第一預(yù)取文件,將使得應(yīng)用程序能夠在啟動(dòng)前將磁盤(pán)中的多個(gè)應(yīng)用文件加載至用戶設(shè)備的物理內(nèi)存中。
請(qǐng)參閱圖4,在一實(shí)施例中,步驟230包括以下步驟:
步驟231,通過(guò)文件邏輯偏移塊在磁盤(pán)中定位磁盤(pán)物理塊,并建立文件邏輯偏移塊與磁盤(pán)物理塊之間的對(duì)應(yīng)關(guān)系。
如前所述,應(yīng)用程序的應(yīng)用文件是被離散的存儲(chǔ)于磁盤(pán)的不同磁盤(pán)物理位置的,換句話說(shuō),應(yīng)用文件在磁盤(pán)中實(shí)際是以多個(gè)磁盤(pán)物理塊的形式進(jìn)行存儲(chǔ)的。若要在應(yīng)用程序的加載過(guò)程中通過(guò)第二預(yù)取文件連續(xù)地將應(yīng)用文件從磁盤(pán)中讀取出來(lái),則首先需要通過(guò)第一預(yù)取文件中的文件邏輯偏移塊在磁盤(pán)中進(jìn)行磁盤(pán)物理塊的定位,得到對(duì)應(yīng)的磁盤(pán)物理塊,并建立二者之間的對(duì)應(yīng)關(guān)系。
通過(guò)二者之間所建立的對(duì)應(yīng)關(guān)系,即能夠獲知通過(guò)文件邏輯偏移塊所讀取到的磁盤(pán)物理塊究竟位于磁盤(pán)的哪個(gè)磁盤(pán)物理位置,以利于后續(xù)根據(jù)磁盤(pán)物理塊所在位置對(duì)文件邏輯偏移塊進(jìn)行排序處理,進(jìn)而存儲(chǔ)形成磁盤(pán)物理位置連續(xù)的第二預(yù)取文件。
步驟233,按照磁盤(pán)物理塊之間的物理距離對(duì)文件邏輯偏移塊進(jìn)行拆分歸并。
在文件邏輯偏移塊與磁盤(pán)物理塊之間建立對(duì)應(yīng)關(guān)系后,文件邏輯偏移塊所對(duì)應(yīng)的磁盤(pán)物理塊所在位置可能并不連續(xù),并且在磁盤(pán)上的物理距離相差很大。
例如,如圖4a所示,在ntfs磁盤(pán)文件系統(tǒng)中,文件邏輯偏移塊401的邏輯偏移位置為8000字節(jié)到20000字節(jié),其所對(duì)應(yīng)的磁盤(pán)物理塊404—407---的磁盤(pán)物理位置分別為1280簇、1281簇、400簇、401簇。那么,1280簇和400簇之間的物理距離多達(dá)880簇,按照每簇大小為4kb計(jì)算,二者之間的物理距離實(shí)際相差了880×4×1024=3604480字節(jié)。
因此,將按照磁盤(pán)物理塊之間的物理距離對(duì)磁盤(pán)物理塊所對(duì)應(yīng)的文件邏輯偏移塊進(jìn)行拆分,以縮小文件邏輯偏移塊所對(duì)應(yīng)的磁盤(pán)物理塊之間的物理距離。例如,如圖4b所示,文件邏輯偏移塊401可以被拆分為兩個(gè),其中一個(gè)文件邏輯偏移塊402對(duì)應(yīng)的磁盤(pán)物理塊404、405的磁盤(pán)物理位置分別為1280簇、1281簇,另一個(gè)文件邏輯偏移塊403對(duì)應(yīng)的磁盤(pán)物理塊406、407的磁盤(pán)物理位置則分別為400簇、401簇。
需要說(shuō)明的是,第一預(yù)取文件中的每個(gè)文件邏輯偏移塊都會(huì)按照上述方法進(jìn)行拆分,基于此,在對(duì)能夠進(jìn)行拆分的文件邏輯偏移塊進(jìn)行拆分之后,可能會(huì)存在文件邏輯偏移塊所對(duì)應(yīng)的磁盤(pán)物理塊之間的物理距離較小的情況,因此,本實(shí)施例中,還將對(duì)拆分所得到的文件邏輯偏移塊進(jìn)行歸并,以避免產(chǎn)生過(guò)多的文件邏輯偏移塊,不利于提升磁盤(pán)利用率,同時(shí)還浪費(fèi)用戶設(shè)備的存儲(chǔ)資源。
較優(yōu)地,拆分所得到的文件邏輯偏移塊按照預(yù)設(shè)物理距離進(jìn)行歸并,例如,預(yù)設(shè)物理距離為512m,若某兩個(gè)拆分所得到的文件邏輯偏移塊所對(duì)應(yīng)的磁盤(pán)物理塊之間的物理距離小于512m,則將該兩個(gè)文件邏輯偏移塊歸并為一個(gè)文件邏輯偏移塊。
步驟235,預(yù)判第二預(yù)取文件的磁盤(pán)物理位置的大小,根據(jù)預(yù)判結(jié)果將多個(gè)文件邏輯偏移塊排序存儲(chǔ)為第二預(yù)取文件。
用戶設(shè)備的操作系統(tǒng)中預(yù)置有不同的預(yù)置接口函數(shù),各預(yù)置接口函數(shù)的功能各不相同。例如,deviceiocontrol函數(shù)能夠根據(jù)文件偏移量和文件大小獲取該文件在磁盤(pán)上的物理存儲(chǔ)位置信息,還能夠?qū)ξ募鎯?chǔ)的磁盤(pán)物理位置的大小進(jìn)行預(yù)判。
由此,通過(guò)調(diào)用deviceiocontrol函數(shù)對(duì)第二預(yù)取文件的磁盤(pán)物理位置進(jìn)行預(yù)判,即可初步得到第二預(yù)取文件保存在用戶設(shè)備中的磁盤(pán)物理位置的大小,即預(yù)判結(jié)果是該磁盤(pán)物理位置大或者該磁盤(pán)物理位置小。
若該磁盤(pán)物理位置大,則判定多個(gè)文件邏輯偏移塊的存儲(chǔ)順序是按照其所對(duì)應(yīng)的磁盤(pán)物理塊的磁盤(pán)物理位置從高到低進(jìn)行。
若該磁盤(pán)物理位置小,則判定多個(gè)文件邏輯偏移塊的存儲(chǔ)順序是按照其所對(duì)應(yīng)的磁盤(pán)物理塊的磁盤(pán)物理位置從低到高進(jìn)行。
請(qǐng)參閱圖5,在一實(shí)施例中,步驟231包括以下步驟:
步驟2311,通過(guò)文件邏輯偏移塊調(diào)用預(yù)置接口函數(shù),得到文件邏輯偏移塊在磁盤(pán)上的物理存儲(chǔ)位置信息和簇信息。
如前所述,各預(yù)置接口函數(shù)的功能各不相同。例如,deviceiocontrol函數(shù)能夠根據(jù)文件偏移量和文件大小獲取該文件在磁盤(pán)上的物理存儲(chǔ)位置信息,而getdriverfreespace函數(shù)則可以根據(jù)文件偏移量和文件大小獲取該文件在磁盤(pán)上的簇信息,本實(shí)施例并不以此為限。
具體地,文件邏輯偏移塊是由文件偏移量和文件大小計(jì)算得到的,因此,通過(guò)文件邏輯偏移塊即相應(yīng)地得到文件偏移量和文件大小,進(jìn)而通過(guò)輸入前述信息以調(diào)用預(yù)置接口函數(shù),得到文件邏輯偏移塊在磁盤(pán)上的物理存儲(chǔ)位置信息和簇信息。
其中,在ntfs磁盤(pán)文件系統(tǒng),簇信息即為簇,簇的大小在格式化磁盤(pán)分區(qū)時(shí)可以手動(dòng)設(shè)置。一般默認(rèn)為8個(gè)扇區(qū)為1簇,由于每個(gè)扇區(qū)的容量為512字節(jié),則每簇的實(shí)際大小為4kb。
物理存儲(chǔ)位置信息包括vcn(虛擬簇號(hào))和lcn(邏輯簇號(hào)),vcn是對(duì)某個(gè)文件中包含的所有簇進(jìn)行順序編號(hào),lcn則是對(duì)整個(gè)磁盤(pán)分區(qū)中包含的所有簇進(jìn)行順序編號(hào)。簡(jiǎn)單地說(shuō),vcn用于表示某個(gè)文件的邏輯偏移位置,lcn則可以反映出某個(gè)文件的磁盤(pán)物理位置,vcn和lcn互為映射。
步驟2313,根據(jù)簇信息將物理存儲(chǔ)位置信息轉(zhuǎn)換為對(duì)應(yīng)的邏輯偏移位置和物理偏移位置,按照邏輯偏移位置和物理偏移位置定位磁盤(pán)物理塊。
在獲取簇信息和物理存儲(chǔ)位置信息之后,如圖5a所示,物理存儲(chǔ)位置信息將根據(jù)簇信息轉(zhuǎn)換為對(duì)應(yīng)的邏輯偏移位置和物理偏移位置。
步驟2315,將定位得到的磁盤(pán)物理塊與文件邏輯偏移塊建立對(duì)應(yīng)關(guān)系。
通過(guò)邏輯偏移位置和物理偏移位置將能夠定位得到磁盤(pán)中對(duì)應(yīng)的磁盤(pán)物理塊,又因?yàn)檫壿嬈莆恢煤臀锢砥莆恢檬峭ㄟ^(guò)文件邏輯偏移塊得到的,因此,基于邏輯偏移位置和物理偏移位置,文件邏輯偏移塊和磁盤(pán)物理塊之間建立起對(duì)應(yīng)關(guān)系。
圖6為現(xiàn)有技術(shù)中利用第一預(yù)取文件實(shí)現(xiàn)應(yīng)用啟動(dòng)預(yù)取過(guò)程中磁盤(pán)尋道的示意圖,圖7為本發(fā)明中應(yīng)用利用第二預(yù)取文件實(shí)現(xiàn)應(yīng)用啟動(dòng)預(yù)取過(guò)程中磁盤(pán)尋道的示意圖。通過(guò)對(duì)比可以清楚地得到,現(xiàn)有技術(shù)中的磁盤(pán)利用率為36.62%,磁盤(pán)讀取時(shí)間為0.62s;本發(fā)明中的磁盤(pán)利用率為92.3%,磁盤(pán)讀取時(shí)間為0.525s。也就是說(shuō),通過(guò)如上所述的各實(shí)施例中的方法,大距離磁盤(pán)尋道的次數(shù)大大減少了,磁盤(pán)利用率可以提升252%,磁盤(pán)讀取時(shí)間可以提升15%。
請(qǐng)參閱圖8,在一實(shí)施例中,一種預(yù)取文件處理裝置,包括:文件塊獲取模塊610、文件塊排序模塊630及文件保存模塊650。
其中,文件塊獲取模塊610用于應(yīng)用程序安裝包解壓后,從應(yīng)用程序安裝包獲取第一預(yù)取文件,由第一預(yù)取文件中得到多個(gè)文件邏輯偏移塊。
文件塊排序模塊630用于對(duì)多個(gè)文件邏輯偏移塊進(jìn)行排序處理,形成磁盤(pán)物理位置連續(xù)的第二預(yù)取文件。
文件保存模塊650用于保存第二預(yù)取文件,供完成安裝的應(yīng)用程序加載時(shí)讀取。
在一實(shí)施例中,如上所述的裝置還包括:安裝包生成模塊,用于打包第一預(yù)取文件和應(yīng)用程序的其他應(yīng)用文件,生成應(yīng)用程序安裝包。
請(qǐng)參閱圖9,在一實(shí)施例中,如上所述的裝置還包括:虛擬地址獲取模塊710及文件生成模塊730。
其中,虛擬地址獲取模塊710用于獲取應(yīng)用程序的歷史啟動(dòng)過(guò)程中發(fā)生的磁盤(pán)硬錯(cuò)誤的虛擬地址信息。
文件生成模塊730用于根據(jù)虛擬地址信息計(jì)算得到多個(gè)文件邏輯偏移塊,合并多個(gè)文件邏輯偏移塊得到第一預(yù)取文件。
請(qǐng)參閱圖10,在一實(shí)施例中,文件塊排序模塊630包括:文件塊對(duì)應(yīng)單元631、文件塊處理單元633及文件塊排序單元635。
其中,文件塊對(duì)應(yīng)單元631用于通過(guò)文件邏輯偏移塊在磁盤(pán)中定位磁盤(pán)物理塊,并建立文件邏輯偏移塊與磁盤(pán)物理塊之間的對(duì)應(yīng)關(guān)系。
文件塊處理單元633用于按照磁盤(pán)物理塊之間的物理距離對(duì)文件邏輯偏移塊進(jìn)行拆分歸并。
文件塊排序單元635用于預(yù)判第二預(yù)取文件的磁盤(pán)物理位置的大小,根據(jù)預(yù)判結(jié)果將多個(gè)文件邏輯偏移塊排序存儲(chǔ)為第二預(yù)取文件。
請(qǐng)參閱圖11,在一實(shí)施例中,文件塊對(duì)應(yīng)單元631包括:信息獲取單元6311、信息轉(zhuǎn)換單元6313及對(duì)應(yīng)單元6315。
其中,信息獲取單元6311用于通過(guò)文件邏輯偏移塊調(diào)用預(yù)置接口函數(shù),得到文件邏輯偏移塊在磁盤(pán)上的物理存儲(chǔ)位置信息和簇信息。
信息轉(zhuǎn)換單元6313用于根據(jù)簇信息將物理存儲(chǔ)位置信息轉(zhuǎn)換為對(duì)應(yīng)的邏輯偏移位置和物理偏移位置,按照邏輯偏移位置和物理偏移位置定位磁盤(pán)物理塊。
關(guān)系建立單元6315用于將定位得到的磁盤(pán)物理塊與文件邏輯偏移塊建立對(duì)應(yīng)關(guān)系。
上述內(nèi)容,僅為本發(fā)明的較佳實(shí)施例,并非用于限制本發(fā)明的實(shí)施方案,本領(lǐng)域普通技術(shù)人員根據(jù)本發(fā)明的主要構(gòu)思和精神,可以十分方便地進(jìn)行相應(yīng)的變通或修改,故本發(fā)明的保護(hù)范圍應(yīng)以權(quán)利要求書(shū)所要求的保護(hù)范圍為準(zhǔn)。