一種用于軟件加速的方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機軟件領(lǐng)域,更為具體而言,涉及一種用于軟件加速的方法和裝置。
【背景技術(shù)】
[0002]目前個人計算機(Personal Computer, PC)上運行的操作系統(tǒng)與大部分軟件的性能瓶頸已經(jīng)不再是CPU (Central Processing Unit,中央處理器)與內(nèi)存,而是作為主要數(shù)據(jù)存儲介質(zhì)的硬盤,而近年來磁質(zhì)硬盤的數(shù)據(jù)存取速率并未有明顯的提升,硬盤廠商主要關(guān)注提升單位體積內(nèi)存儲密度用于生產(chǎn)出更大容量的硬盤。由于硬盤的數(shù)據(jù)存儲性能未有明顯的提升,而現(xiàn)有軟件的體積卻越來越大,因此造成了軟件啟動、運行時讀取數(shù)據(jù)時間的增長,形成了用戶直觀上所感受到的軟件“卡頓”現(xiàn)象,且這種“卡頓”現(xiàn)象在大型軟件上表現(xiàn)的更加明顯,例如Matlab、Photoshop、Visual Stud1等大型軟件。
[0003]現(xiàn)有的軟件啟動加速方案主要是針對某一款軟件,通過禁用其啟動時不需要加載的插件或文件來達到軟件啟動加速的目的。這樣的軟件加速方案需要對軟件進行大量的分析與測試,才能獲知哪些插件或文件可以被禁用,且該方案對于某些軟件來說可能根本無法使用。因此,亟需對多種軟件可通用的軟件加速方案。
【發(fā)明內(nèi)容】
[0004]為解決上述技術(shù)問題,本發(fā)明提供了一種用于軟件加速的方法和裝置,通過學(xué)習(xí)結(jié)果獲取軟件啟動所需讀取的文件名稱、每次文件讀取的偏移和每次文件讀取的長度,從而較為精確地將待加速軟件需要讀取的文件預(yù)存入內(nèi)存緩沖區(qū),顯著改善了文件數(shù)據(jù)的讀取速度,縮短了該軟件啟動所需的時間。
[0005]根據(jù)本發(fā)明實施方式的第一方面,提供了一種用于軟件加速的方法,所述方法可包括:
[0006]當(dāng)啟動待加速軟件時,判斷所述待加速軟件是否已經(jīng)包含學(xué)習(xí)結(jié)果中,所述學(xué)習(xí)結(jié)果包括軟件啟動所需讀取的文件名稱、每次文件讀取的偏移、每次文件讀取的長度,
[0007]若已經(jīng)包含所述學(xué)習(xí)結(jié)果中,則根據(jù)所述學(xué)習(xí)結(jié)果中的文件名稱判斷當(dāng)前打開的文件是否為所述待加速軟件啟動所需的文件,
[0008]若是所述待加速軟件啟動所需的文件,則根據(jù)所述學(xué)習(xí)結(jié)果中的文件名稱、每次文件讀取的偏移和每次文件讀取的長度預(yù)取所打開的文件存入內(nèi)存的文件預(yù)取緩沖區(qū),并建立文件預(yù)取記錄表,所述文件預(yù)取記錄表包括文件名稱、讀取偏移、讀取長度和內(nèi)存地址,
[0009]在對所述打開的文件進行讀取時根據(jù)所述文件預(yù)取記錄表判斷需要讀取的文件數(shù)據(jù)是否位于文件預(yù)取緩沖區(qū)中,
[0010]若需要讀取的文件數(shù)據(jù)位于文件預(yù)取緩沖區(qū)中,則從文件預(yù)取緩沖區(qū)復(fù)制出所需讀取的文件數(shù)據(jù),以完成所述待加速軟件啟動所需的讀取操作。
[0011]在本發(fā)明的一些實施方式中,所述方法可進一步包括:若所述待加速軟件未包含所述學(xué)習(xí)結(jié)果中,則獲取所述待加速軟件啟動過程中的文件操作行為,所述文件操作行為包括所需讀取的文件名稱、文件的讀取順序、每次文件讀取的偏移和每次文件讀取的長度。
[0012]在本發(fā)明的一些實施方式中,所述方法可進一步包括:在開始獲取所述待加速軟件啟動過程中的文件操作行為之后,對所述待加速軟件啟動過程中所需讀取的數(shù)據(jù)進行磁盤預(yù)取,并建立磁盤預(yù)取記錄表,所述磁盤預(yù)取包括通過磁盤過濾驅(qū)動截獲系統(tǒng)輸入/輸出管理器發(fā)給磁盤的第一輸入/輸出請求包IRP讀請求,并根據(jù)所述第一 IRP讀請求中的讀取偏移和讀取長度查詢磁盤過濾驅(qū)動的磁盤預(yù)取緩沖區(qū)維護的所述磁盤預(yù)取記錄表以判斷所述第一 IRP讀請求所需讀取的數(shù)據(jù)是否位于磁盤過濾驅(qū)動的磁盤預(yù)取緩沖區(qū)中,若是,則從所述磁盤預(yù)取緩沖區(qū)復(fù)制出所述第一 IRP讀請求所需讀取的磁盤數(shù)據(jù)以完成本次讀取操作,若否,則將所述第一 IRP讀請求進行阻塞,構(gòu)造比所述第一 IRP讀請求的讀取長度長的第二 IRP讀請求,將根據(jù)所述第二 IRP讀請求的讀取長度讀取的磁盤數(shù)據(jù)插入所述磁盤預(yù)取緩沖區(qū),并將所述第二 IRP讀請求的讀取偏移和緩存大小插入所述磁盤預(yù)取記錄表,然后根據(jù)所述第一 IRP讀請求從所述磁盤預(yù)取緩沖區(qū)復(fù)制出所需讀取的磁盤數(shù)據(jù)以完成本次讀取操作。
[0013]在本發(fā)明的一些實施方式中,所述方法可進一步包括:在所述待加速軟件啟動完畢之后,將獲取的啟動過程中的文件操作行為輸出作為學(xué)習(xí)結(jié)果,并根據(jù)所述學(xué)習(xí)結(jié)果進行磁盤整理。
[0014]在本發(fā)明的一些實施方式中,所述根據(jù)所述學(xué)習(xí)結(jié)果進行磁盤整理可進一步包括:根據(jù)所述學(xué)習(xí)結(jié)果中的所需讀取的文件名稱和文件的讀取順序?qū)Υ疟P進行整理以便所需讀取的文件在磁盤上按照文件的讀取順序存放。
[0015]在本發(fā)明的一些實施方式中,所述根據(jù)所述學(xué)習(xí)結(jié)果進行磁盤整理可進一步包括:根據(jù)所述學(xué)習(xí)結(jié)果中的所需讀取的文件名稱進行磁盤整理以便所需讀取的文件數(shù)據(jù)在連續(xù)的磁盤扇區(qū)存儲。
[0016]在本發(fā)明的一些實施方式中,所述根據(jù)所述學(xué)習(xí)結(jié)果中的文件名稱、每次文件讀取的偏移和每次文件讀取的長度預(yù)取所打開的文件存入內(nèi)存的文件預(yù)取緩沖區(qū)可進一步包括:根據(jù)所述學(xué)習(xí)結(jié)果中的文件名稱、每次文件讀取的偏移和每次文件讀取的長度確定出需要讀取的一個或一個以上文件上相應(yīng)的一個或一個以上片段,將所述一個或一個以上文件上的所述相應(yīng)的一個或一個以上片段合并為一個組合文件,并為所述組合文件建立片段索引,對所述組合文件進行磁盤整理以便所述組合文件在磁盤上連續(xù)存放,然后將經(jīng)磁盤整理的組合文件存入內(nèi)存的文件預(yù)取緩沖區(qū)。
[0017]在本發(fā)明的一些實施方式中,所述方法可進一步包括:在啟動待加速軟件之前,判斷所述待加速軟件是否已經(jīng)包含在學(xué)習(xí)結(jié)果中,若是,則根據(jù)所述學(xué)習(xí)結(jié)果中軟件啟動所需讀取的文件名稱對各個所需讀取的文件發(fā)起打開操作,并根據(jù)所述學(xué)習(xí)結(jié)果中的文件名稱、每次文件讀取的偏移和每次文件讀取的長度預(yù)取所打開的文件存入內(nèi)存的文件預(yù)取緩沖區(qū),并建立文件預(yù)取記錄表。
[0018]根據(jù)本發(fā)明實施方式的第二方面,提供了一種用于軟件加速的裝置,所述裝置可包括:
[0019]第一判斷模塊,用于當(dāng)啟動待加速軟件時,判斷所述待加速軟件是否已經(jīng)包含在學(xué)習(xí)結(jié)果中,所述學(xué)習(xí)結(jié)果包括軟件啟動所需讀取的文件名稱、每次文件讀取的偏移、每次文件讀取的長度,
[0020]第二判斷模塊,用于當(dāng)所述待加速軟件已經(jīng)包含在所述學(xué)習(xí)結(jié)果中時根據(jù)所述學(xué)習(xí)結(jié)果中的文件名稱判斷當(dāng)前打開的文件是否為所述待加速軟件啟動所需的文件,
[0021]文件預(yù)取模塊,用于在當(dāng)前打開的文件是所述待加速軟件啟動所需的文件時根據(jù)所述學(xué)習(xí)結(jié)果中的文件名稱、每次文件讀取的偏移和每次文件讀取的長度預(yù)取所打開的文件存入內(nèi)存的文件預(yù)取緩沖區(qū),并建立文件預(yù)取記錄表,所述文件預(yù)取記錄表包括文件名稱、讀取偏移、讀取長度和內(nèi)存地址,
[0022]第三判斷模塊,用于在對所述打開的文件進行讀取時根據(jù)所述文件預(yù)取記錄表判斷需要讀取的文件數(shù)據(jù)是否位于文件預(yù)取緩沖區(qū)中,
[0023]處理模塊,用于當(dāng)需要讀取的文件數(shù)據(jù)位于文件預(yù)取緩沖區(qū)中時,從所述文件預(yù)取緩沖區(qū)復(fù)制出所需讀取的文件數(shù)據(jù),以完成所述待加速軟件啟動所需的讀取操作。
[0024]在本發(fā)明的一些實施方式中,所述裝置可進一步包括學(xué)習(xí)模塊,用于當(dāng)所述待加速軟件未包含在所述學(xué)習(xí)結(jié)果中時獲取所述待加速軟件啟動過程中的文件操作行為,所述文件操作行為包括所需讀取的文件名稱、文件的讀取順序、每次文件讀取的偏移和每次文件讀取的長度。
[0025]在本發(fā)明的一些實施方式中,所述裝置可進一步包括磁盤預(yù)取模塊,用于:在開始獲取所述待加速軟件啟動過程中的文件操作行為之后,對所述待加速軟件啟動過程中所需讀取的數(shù)據(jù)進行磁盤預(yù)取,并建立磁盤預(yù)取記錄表,所述磁盤預(yù)取包括通過磁盤過濾驅(qū)動截獲系統(tǒng)輸入/輸出管理器發(fā)給磁盤的第一輸入/輸出請求包IRP讀請求,并根據(jù)所述第一 IRP讀請求中的讀取偏移和讀取長度查詢磁盤過濾驅(qū)動維護的所述磁盤預(yù)取記錄表以判斷所述第一 IRP讀請求所需讀取的數(shù)據(jù)是否位于磁盤過濾驅(qū)動的磁盤預(yù)取緩沖區(qū)中,若是,則從所述磁盤預(yù)取緩沖區(qū)復(fù)制出所述第一 IRP讀請求所需讀取的磁盤數(shù)據(jù)以完成本次讀取操作,若否,則將所述第一 IRP讀請求進行阻塞,構(gòu)造比所述第一 IRP讀請求的讀取長度長的第二 IRP讀請求,將根據(jù)所述第二 IRP讀請求的讀取長度讀取的磁盤數(shù)據(jù)插入所述磁盤預(yù)取緩沖區(qū),并將所述第二 IRP讀請求的讀取偏移和緩存大小插入所述磁盤預(yù)取記錄表,然后根據(jù)所述第一 IRP讀請求從所述磁盤預(yù)取緩沖區(qū)復(fù)制出所需讀取的磁盤數(shù)據(jù)以完成本次讀取操作。
[0026]在本發(fā)明的一些實施方式,所述學(xué)習(xí)模塊還可用于在所述待加速軟件啟動完畢之后,將獲取的所述待加速軟件啟動過程中的文件操作行為輸出作為學(xué)習(xí)結(jié)果,所述裝置還可包括磁盤整理模塊,用于根據(jù)所述學(xué)習(xí)結(jié)果進行磁盤整理。
[0027]在本發(fā)明的一些實施方式中,所述磁盤整理模塊根據(jù)所述學(xué)習(xí)結(jié)果進行磁盤整理可進一步包括:根據(jù)所述學(xué)習(xí)結(jié)果中的所需讀取的文件名稱和文件的讀取順序?qū)Υ疟P進行整理以便所需讀取的文件在磁盤上按照文件的讀取順序存放。
[0028]在本發(fā)明的一些實施方式中,所述磁盤整理模塊根據(jù)所述學(xué)習(xí)結(jié)果進行磁盤整理進一步包括:根據(jù)所述學(xué)習(xí)結(jié)果中的所需讀取的文件名稱進行磁盤整理以便所需讀取的文件數(shù)據(jù)在連續(xù)的磁盤扇區(qū)存儲。
[0029]在本發(fā)明的一些實施方式中,所述文件預(yù)取模塊根據(jù)所述學(xué)習(xí)結(jié)果中的文件名稱、每次文件讀取的偏移和每次文件讀取的長度預(yù)取所打開的文件存入內(nèi)存的文件預(yù)取緩沖區(qū)可進一步包括:根據(jù)所述學(xué)習(xí)結(jié)果中的文件名稱、每次文件讀取的偏移和每次文件讀取的長度確定出需要讀取的一個或一個以上文件上相應(yīng)的一個或一個以上片段,將所述一個或一個以上文件上的所述相應(yīng)的一個或一個以上片段合并為一個組合文件,并為所述組合文件建立片段索引