可以很方便地知道需要獲取的文件的內(nèi)容在磁盤(pán)中的具體位置,因此可以獲取該文件訪(fǎng)問(wèn)請(qǐng)求所需要的文件的內(nèi)容。
[0037]其中,索引信息至少包括規(guī)則類(lèi)型和每個(gè)簇包含的范圍,規(guī)則類(lèi)型中規(guī)定了對(duì)文件進(jìn)行預(yù)處理的方式。規(guī)則類(lèi)型用于規(guī)定對(duì)文件進(jìn)行怎樣的預(yù)處理,例如:對(duì)文件進(jìn)行排序,或按照參數(shù)范圍進(jìn)行分類(lèi),或按照哈希值進(jìn)行處理等等。
[0038]文件系統(tǒng)是操作系統(tǒng)與驅(qū)動(dòng)器之間的接口,當(dāng)操作系統(tǒng)請(qǐng)求從硬盤(pán)里讀取一個(gè)文件時(shí),會(huì)請(qǐng)求相應(yīng)的文件系統(tǒng)打開(kāi)文件。扇區(qū)是磁盤(pán)最小的物理存儲(chǔ)單元,但由于操作系統(tǒng)無(wú)法對(duì)數(shù)目眾多的扇區(qū)進(jìn)行尋址,所以操作系統(tǒng)就將相鄰的扇區(qū)組合在一起,形成一個(gè)簇,然后再對(duì)簇進(jìn)行管理。每個(gè)簇可以包括2、4、8、16、32或64個(gè)扇區(qū)。顯然,簇是操作系統(tǒng)所使用的邏輯概念,而非磁盤(pán)的物理特性。為了更好地管理磁盤(pán)空間和更高效地從硬盤(pán)讀取數(shù)據(jù),操作系統(tǒng)規(guī)定一個(gè)簇中只能放置一個(gè)文件的內(nèi)容,因此文件所占用的空間,只能是簇的整數(shù)倍;而如果文件實(shí)際大小小于一簇,它也要占一簇的空間。
[0039]知道了每個(gè)簇包含的范圍,也即可獲知總簇的數(shù)目。當(dāng)然,索引信息還可以包含文件的數(shù)據(jù)類(lèi)型,例如:精確數(shù)字類(lèi)型、近似數(shù)字類(lèi)型、日期和時(shí)間類(lèi)型、字符數(shù)據(jù)類(lèi)型、Unicode字符數(shù)據(jù)類(lèi)型、二進(jìn)制字符數(shù)據(jù)類(lèi)型、其它數(shù)據(jù)類(lèi)型等等。索引信息還可以包含其它的信息,在此不再進(jìn)行贅敘。
[0040]步驟S103:根據(jù)文件的索引信息,確定符合查詢(xún)條件的文件的內(nèi)容。
[0041]查詢(xún)條件是針對(duì)文件的索引信息選擇文件的內(nèi)容的,那么根據(jù)該索引信息,可以很方便地知道需要獲取的文件的內(nèi)容在磁盤(pán)中的具體位置,因此可以確定符合查詢(xún)條件的文件的內(nèi)容。
[0042]步驟S104:通過(guò)磁盤(pán)1控制器獲取所有符合查詢(xún)條件的文件的內(nèi)容,以便于應(yīng)用層訪(fǎng)問(wèn)文件。
[0043]正如上面所述,由于事先對(duì)文件按照預(yù)設(shè)要求進(jìn)行預(yù)處理,預(yù)處理后獲得的索引信息保存在該文件的元數(shù)據(jù)中,查詢(xún)條件是針對(duì)文件的索引信息選擇文件的內(nèi)容的,通過(guò)該索引信息,可以很快獲知滿(mǎn)足查詢(xún)條件的文件的內(nèi)容的存儲(chǔ)位置,通過(guò)磁盤(pán)1控制器即可獲取所有符合查詢(xún)條件的文件的內(nèi)容,從而方便應(yīng)用層訪(fǎng)問(wèn)文件。
[0044]本發(fā)明實(shí)施方式由于文件的元數(shù)據(jù)中保存有已按照預(yù)設(shè)要求進(jìn)行預(yù)處理的文件的索引信息,在接收到來(lái)自應(yīng)用層的文件訪(fǎng)問(wèn)請(qǐng)求是根據(jù)查詢(xún)條件獲取所述文件的內(nèi)容時(shí),根據(jù)索引信息,即可通過(guò)磁盤(pán)1控制器獲取所有符合查詢(xún)條件的文件的內(nèi)容,因此,通過(guò)本發(fā)明實(shí)施方式,能夠避免一次查詢(xún)帶來(lái)的多次缺頁(yè)中斷以及多次磁盤(pán)10,并且通過(guò)過(guò)濾部分?jǐn)?shù)據(jù)減少內(nèi)存使用。
[0045]參閱圖2,圖2是本發(fā)明文件的訪(fǎng)問(wèn)方法另一實(shí)施方式的流程圖,本實(shí)施方式和圖1的實(shí)施方式基本相同,相同之處具體請(qǐng)參見(jiàn)圖1以及相應(yīng)的文字說(shuō)明,不同之處是本實(shí)施方式還包括步驟S201和步驟S202,即在文件系統(tǒng)接收來(lái)自應(yīng)用層的文件訪(fǎng)問(wèn)請(qǐng)求之前,先對(duì)文件進(jìn)行預(yù)處理,具體內(nèi)容如下所述:
[0046]步驟S201:文件系統(tǒng)對(duì)文件按照預(yù)設(shè)要求進(jìn)行預(yù)處理,獲得文件的索引信息。
[0047]文件系統(tǒng)是操作系統(tǒng)用于明確磁盤(pán)或分區(qū)上的文件的方法和數(shù)據(jù)結(jié)構(gòu),即在磁盤(pán)上數(shù)據(jù)的組織方法。在一般情況下,文件系統(tǒng)對(duì)文件是不做任何處理的,數(shù)據(jù)庫(kù)是按照數(shù)據(jù)結(jié)構(gòu)來(lái)組織、存儲(chǔ)和管理數(shù)據(jù)的倉(cāng)庫(kù),在本發(fā)明實(shí)施方式中,文件系統(tǒng)按照預(yù)設(shè)要求對(duì)文件進(jìn)行預(yù)處理,即將數(shù)據(jù)庫(kù)的部分功能加入文件系統(tǒng)中來(lái)。預(yù)設(shè)要求是預(yù)先設(shè)定的對(duì)文件進(jìn)行預(yù)處理(例如組織、排序、分類(lèi)、整理等等)的要求。
[0048]需要說(shuō)明的是,預(yù)設(shè)要求可以通過(guò)文件預(yù)處理指令的形式發(fā)送給文件系統(tǒng)。
[0049]步驟S202:將文件的索引信息保存在文件的元數(shù)據(jù)中。
[0050]在文件系統(tǒng)對(duì)文件按照預(yù)設(shè)要求進(jìn)行預(yù)處理后,獲得該文件的索引信息,將該文件的索引信息保存在該文件的元數(shù)據(jù)中。如果文件訪(fǎng)問(wèn)請(qǐng)求是根據(jù)查詢(xún)條件獲取文件的內(nèi)容,那么獲取該文件的元數(shù)據(jù)。因?yàn)樵獢?shù)據(jù)中保存有已預(yù)處理的文件的索引信息,而且查詢(xún)條件是針對(duì)文件的索引信息選擇文件的內(nèi)容的,那么根據(jù)該索引信息,可以很方便地知道需要獲取的文件的內(nèi)容在磁盤(pán)中的具體位置,因此可以獲取該文件訪(fǎng)問(wèn)請(qǐng)求所需要的文件的內(nèi)容。
[0051]其中,索引信息至少包括規(guī)則類(lèi)型和每個(gè)簇包含的范圍,規(guī)則類(lèi)型中規(guī)定了對(duì)文件進(jìn)行預(yù)處理的方式。規(guī)則類(lèi)型用于規(guī)定對(duì)文件進(jìn)行怎樣的預(yù)處理,例如:對(duì)文件進(jìn)行排序,或按照參數(shù)范圍進(jìn)行分類(lèi),或按照哈希值進(jìn)行處理等等。
[0052]文件系統(tǒng)是操作系統(tǒng)與驅(qū)動(dòng)器之間的接口,當(dāng)操作系統(tǒng)請(qǐng)求從硬盤(pán)里讀取一個(gè)文件時(shí),會(huì)請(qǐng)求相應(yīng)的文件系統(tǒng)打開(kāi)文件。扇區(qū)是磁盤(pán)最小的物理存儲(chǔ)單元,但由于操作系統(tǒng)無(wú)法對(duì)數(shù)目眾多的扇區(qū)進(jìn)行尋址,所以操作系統(tǒng)就將相鄰的扇區(qū)組合在一起,形成一個(gè)簇,然后再對(duì)簇進(jìn)行管理。
[0053]知道了每個(gè)簇包含的范圍,也即可獲知總簇的數(shù)目。當(dāng)然,索引信息還可以包含文件的數(shù)據(jù)類(lèi)型,例如:精確數(shù)字類(lèi)型、近似數(shù)字類(lèi)型、日期和時(shí)間類(lèi)型、字符數(shù)據(jù)類(lèi)型、Unicode字符數(shù)據(jù)類(lèi)型、二進(jìn)制字符數(shù)據(jù)類(lèi)型、其它數(shù)據(jù)類(lèi)型等等。索引信息還可以包含其它的信息,在此不再進(jìn)行贅敘。
[0054]下面以一個(gè)實(shí)際的例子說(shuō)明文件系統(tǒng)對(duì)文件的預(yù)處理過(guò)程。該預(yù)處理過(guò)程的執(zhí)行主體是文件系統(tǒng),該過(guò)程包括如下內(nèi)容:
[0055]1.文件系統(tǒng)接收包含預(yù)設(shè)要求的文件預(yù)處理指令;
[0056]2.文件系統(tǒng)根據(jù)文件描述符獲取需要預(yù)處理的文件內(nèi)容;
[0057]3.根據(jù)該文件大小,開(kāi)辟新文件空間;事先設(shè)定一個(gè)文件大小閾值為A,當(dāng)該文件大小小于A時(shí),則直接開(kāi)辟A和索引大小的空間;當(dāng)文件大小大于A時(shí),則根據(jù)需要開(kāi)辟N個(gè)A和索引大小的空間;
[0058]4.將文件內(nèi)容排序后放入新開(kāi)辟的文件空間中,例如,按照上面所描述的產(chǎn)生了N個(gè)A和索引大小的空間,那么需要將文件內(nèi)容放入這N個(gè)空間中,當(dāng)然這里需要設(shè)定一個(gè)占有率閾值B,避免一次性將該空間塞滿(mǎn);(假設(shè)閾值B為70%,A為100M,索引大小為5M,則將文件內(nèi)容排序后,最前面的70M放在第一個(gè)空間中,然后在100M的位置加上5M,然后再將接下來(lái)的70M放入第二個(gè)空間,……,以此類(lèi)推);
[0059]5.針對(duì)每個(gè)空間的數(shù)據(jù),建立索引,索引信息放入預(yù)先分配出的空間中。
[0060]說(shuō)明,4和5中提到的數(shù)據(jù)放置到新空間與新空間的索引建立,在實(shí)際應(yīng)用中可以一起完成。
[0061]需要注意的是,上述列舉的例子僅僅只是文件系統(tǒng)對(duì)文件進(jìn)行預(yù)處理的一種方式,在實(shí)際應(yīng)用中還可以采用其它的方式對(duì)文件進(jìn)行預(yù)處理,以獲得文件的索引信息,從而便于文件系統(tǒng)根據(jù)索引信息,可以獲得滿(mǎn)足預(yù)設(shè)要求的文件的內(nèi)容。
[0062]步驟S203:文件系統(tǒng)接收來(lái)自應(yīng)用層的文件訪(fǎng)問(wèn)請(qǐng)求。
[0063]步驟S204:若文件訪(fǎng)問(wèn)請(qǐng)求是根據(jù)查詢(xún)條件獲取文件的內(nèi)容,則獲取文件的元數(shù)據(jù),其中,文件的元數(shù)據(jù)中包含文件的索引信息,查詢(xún)條件是針對(duì)文件的索引信息選擇文件的內(nèi)容。
[0064]步驟S205:根據(jù)文件的索引信息,確定符合查詢(xún)條件的文件的內(nèi)容。
[0065]步驟S206:通過(guò)磁盤(pán)1控制器獲取所有符合查詢(xún)條件的文件的內(nèi)容,以便于應(yīng)用層訪(fǎng)問(wèn)文件。
[0066]本發(fā)明實(shí)施方式文件系統(tǒng)對(duì)文件按照預(yù)設(shè)要求進(jìn)行預(yù)處理,獲得的文件的索引信息保存在文件的元數(shù)據(jù)中,在接收到來(lái)自應(yīng)用層的文件訪(fǎng)問(wèn)請(qǐng)求是根據(jù)查詢(xún)條件獲取所述文件的內(nèi)容時(shí),查詢(xún)條件是針對(duì)文件的索引信息選擇文件的內(nèi)容,根據(jù)索引信息,即可通過(guò)磁盤(pán)1控制器獲取所有符合查詢(xún)條件的文件的內(nèi)容,因此,通過(guò)本發(fā)明實(shí)施方式,能夠避免一次查詢(xún)帶來(lái)的多次缺頁(yè)中斷以及多次磁盤(pán)10,并且通過(guò)過(guò)濾部分?jǐn)?shù)據(jù)減少內(nèi)存使用。
[0067]參閱圖3,圖3是本發(fā)明文件的訪(fǎng)問(wèn)方法又一實(shí)施方式的流程圖,本實(shí)施方式和圖2的實(shí)施方式基本相同,相同之處請(qǐng)參見(jiàn)圖2和相應(yīng)的文字描述,不同之處在于本實(shí)施方式還包括:步驟S304、步驟S305、步驟S309以及步驟S310,具體內(nèi)容詳細(xì)說(shuō)明如下:
[0068]步驟S301:文件系統(tǒng)對(duì)文件按照預(yù)設(shè)要求進(jìn)行預(yù)處理,獲得文件的索引信息。
[0069]步驟S302:將文件的索引信息保存在文件的元數(shù)據(jù)中。
[0070]其中,索引信息至少包括規(guī)則類(lèi)型和每個(gè)簇包含的范圍,規(guī)則類(lèi)型中規(guī)定了對(duì)文件進(jìn)行預(yù)處理的方式。
[0071]步驟S303:文件系統(tǒng)接收來(lái)自應(yīng)用層的文件訪(fǎng)問(wèn)請(qǐng)求。
[0072]步驟S304:判斷文件訪(fǎng)問(wèn)請(qǐng)求是否是根據(jù)查詢(xún)條件獲取文件的內(nèi)容。
[0073]在實(shí)際應(yīng)用中,文件系統(tǒng)沒(méi)有必要對(duì)所有的文件進(jìn)行預(yù)處理,可以只對(duì)特定的文件進(jìn)行預(yù)處理,對(duì)于沒(méi)有進(jìn)行預(yù)處理的文件,文件接收該文件的訪(fǎng)問(wèn)請(qǐng)求(即一般性的文件訪(fǎng)問(wèn)請(qǐng)求)后,按照原來(lái)的方式或流程進(jìn)行操作即可。因此,需要判斷文件訪(fǎng)問(wèn)請(qǐng)求是否是根據(jù)查詢(xún)條件獲取文件的內(nèi)容。
[0074]步驟S305:若文件訪(fǎng)問(wèn)請(qǐng)求中至少包含文件描述符、與查詢(xún)條件相關(guān)的參數(shù)以及緩沖區(qū),則文件訪(fǎng)問(wèn)請(qǐng)求是根據(jù)查詢(xún)條件獲取文件的內(nèi)容,進(jìn)入步驟S306,否則,進(jìn)入步驟S310。
[0075]文件描述符在形式上是一個(gè)非負(fù)整數(shù)。實(shí)際上,它是一個(gè)索引值,指向內(nèi)核為每一個(gè)進(jìn)程所維護(hù)的該進(jìn)程打開(kāi)文件的記錄表。緩沖區(qū)是文件在內(nèi)存中的存放位置。
[0076]文件訪(fǎng)問(wèn)請(qǐng)求中一般都包含文件描述符和緩沖區(qū),對(duì)于一般