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

一種線性訪問文件的方法

文檔序號:6445048閱讀:346來源:國知局
專利名稱:一種線性訪問文件的方法
技術(shù)領(lǐng)域
本發(fā)明涉及計(jì)算機(jī)和通信領(lǐng)域的文件系統(tǒng),尤其涉及一種線性訪問文件的方法。
背景技術(shù)
傳統(tǒng)的文件系統(tǒng)在存儲(chǔ)文件數(shù)據(jù)時(shí),把數(shù)據(jù)分解為多個(gè)部分在存儲(chǔ)空間中不同的位置進(jìn)行保存,并通過鏈表對存儲(chǔ)位置進(jìn)行關(guān)聯(lián)。
現(xiàn)有的存儲(chǔ)器從訪問/操作模式上分為總線(Bus)模式和輸入輸出(I/O)模式,在總線模式下,存儲(chǔ)器數(shù)據(jù)的讀取非常方便。但目前訪問/操作總線存儲(chǔ)器的文件系統(tǒng)都是采用傳統(tǒng)方法進(jìn)行讀寫,在向總線存儲(chǔ)器寫數(shù)據(jù)時(shí),需要先將數(shù)據(jù)存入內(nèi)存,然后再寫入到存儲(chǔ)中;在從總線存儲(chǔ)器讀數(shù)據(jù)時(shí),先將數(shù)據(jù)讀到內(nèi)存后再進(jìn)行處理;數(shù)據(jù)的流向如圖1中的虛線所示。這種方式不僅因速度慢而導(dǎo)致效率低,而且使總線存儲(chǔ)器的優(yōu)勢得不到發(fā)揮。

發(fā)明內(nèi)容
本發(fā)明提供一種線性訪問文件的方法,以解決現(xiàn)有的文件系統(tǒng)在訪問總線存儲(chǔ)器時(shí)存在效率低和不能充分發(fā)揮總線存儲(chǔ)器性能的問題。
為解決上述問題,本發(fā)明提供以下技術(shù)方案一種線性訪問文件的方法,該方法包括存儲(chǔ)步驟,用于將文件數(shù)據(jù)寫入連續(xù)的存儲(chǔ)區(qū),并在該文件的屬性信息中記錄該文件為線性讀取文件;判斷步驟,用于在文件系統(tǒng)讀取文件時(shí),先根據(jù)文件的屬性信息判斷該文件是否為線性讀取文件,并在該文件為線性讀取文件時(shí)獲取該文件的首地址和文件長度;線性讀取步驟,用于根據(jù)文件的首地址和文件長度,通過總線直接讀取文件數(shù)據(jù)進(jìn)行處理。
所述線性存儲(chǔ)步驟中,如果將存儲(chǔ)器中已有的非線性讀取文件存儲(chǔ)為線性讀取文件,則將該文件寫入到連續(xù)的存儲(chǔ)區(qū)后將原存儲(chǔ)區(qū)的數(shù)據(jù)刪除。
所述存儲(chǔ)步驟中,如果所有的連續(xù)存儲(chǔ)區(qū)均不足以存儲(chǔ)所述文件數(shù)據(jù)時(shí),則移動(dòng)數(shù)據(jù)存儲(chǔ)區(qū)的數(shù)據(jù)以形成一個(gè)與該文件數(shù)據(jù)大小相應(yīng)的連續(xù)存儲(chǔ)區(qū)存儲(chǔ)文件數(shù)據(jù)。
先選擇最大的并且未被使用的連續(xù)存儲(chǔ)區(qū),從該連續(xù)存儲(chǔ)區(qū)的尾部開始將文件數(shù)據(jù)從尾部到頭部方連續(xù)寫入,在寫滿后將該連續(xù)存儲(chǔ)區(qū)前部已被占用的存儲(chǔ)區(qū)中的數(shù)據(jù)移動(dòng)到其他存儲(chǔ)區(qū)域,將剩余的文件數(shù)據(jù)寫入該前部存儲(chǔ)區(qū)。
所述文件系統(tǒng)包括但不限于FAT系統(tǒng)和NTFS文件系統(tǒng)。
本發(fā)明采用存儲(chǔ)器中連續(xù)的存儲(chǔ)空間存儲(chǔ)文件數(shù)據(jù),在記取的時(shí)候根據(jù)文件首地址和文件長度,通過總線線性地讀取文件數(shù)據(jù)進(jìn)行處理,不需要先將存儲(chǔ)器里面讀出到內(nèi)存后進(jìn)行處理。因此,本發(fā)明不僅提高了文件的讀取速度和減少了內(nèi)存開銷,而且可直接執(zhí)行位于存儲(chǔ)器的可執(zhí)行文件,使總線存儲(chǔ)器的性能得到充分發(fā)揮。


圖1為計(jì)算機(jī)裝置中采用現(xiàn)有的文件系統(tǒng)訪問存儲(chǔ)器時(shí)文件數(shù)據(jù)的流向示意圖;圖2A、圖2B、圖2C、圖2D為本發(fā)明中將非線性和線性存儲(chǔ)文件數(shù)據(jù)的存儲(chǔ)位置示意圖;圖3為本發(fā)明中文件系統(tǒng)訪問存儲(chǔ)器時(shí)文件數(shù)據(jù)的流向示意圖。
具體實(shí)施例方式
本實(shí)施例主要以文件分配表(File Allocation Table,F(xiàn)AT)文件系統(tǒng)對本發(fā)明進(jìn)行說明。
FAT系統(tǒng)在計(jì)算機(jī)中主要完成三項(xiàng)功能跟蹤記錄存儲(chǔ)器上中被耗用的空間和自由空間,維護(hù)目錄名和文件名,跟蹤記錄每一個(gè)文件的物理存儲(chǔ)位置。FAT文件系統(tǒng)采用文件描述表(FDT)來記錄文件的屬性信息,如存儲(chǔ)文件的起始位置、文件長度(大小)等;通過FAT表來記錄文件的物理存儲(chǔ)位置,F(xiàn)AT表是在FAT文件系統(tǒng)中用于磁盤數(shù)據(jù)(文件)索引和定位的一種鏈?zhǔn)奖?,表中記錄存?chǔ)各文件的簇號。簇(Cluster)是將某一線形范圍的物理位置(地址)形成一個(gè)管理單位,如磁盤的最小單位是一個(gè)扇區(qū),一個(gè)簇可以根據(jù)需要包含兩個(gè)、四個(gè)甚至更多的扇區(qū)。
為了提高訪問總線存儲(chǔ)器的效率和充分發(fā)揮其性能,本發(fā)明將文件數(shù)據(jù)寫入總線存儲(chǔ)器中連續(xù)的存儲(chǔ)區(qū),即把文件數(shù)據(jù)順序線性存儲(chǔ),并在記錄該文件屬性信息的文件描述表中記錄該文件為線性讀取文件;在文件系統(tǒng)讀取文件時(shí),先根據(jù)文件的屬性信息判斷該文件是否為線性讀取文件,并在該文件為線性讀取文件時(shí)從文件描述表中獲取該文件的首地址和文件長度;最后文件系統(tǒng)根據(jù)文件的首地址和文件長度,通過總線直接讀取整個(gè)文件數(shù)據(jù)進(jìn)行處理。
所述總線存儲(chǔ)器是指可以通過向總線直接發(fā)送地址獲得數(shù)據(jù)(如內(nèi)存\NorFLash),而非命令型存儲(chǔ)器。對于命令型存儲(chǔ)器,其處理方式與現(xiàn)有技術(shù)相同,不再贅述。
以圖2A所示的一個(gè)已存儲(chǔ)在存儲(chǔ)器中的文件A為例進(jìn)行說明。文件A在總線存儲(chǔ)器上占用簇10、12、14、16、18五個(gè)非連續(xù)的存儲(chǔ)區(qū)。將文件A存儲(chǔ)為線性文件時(shí),首先設(shè)置將一個(gè)文件為線性讀取文件,然后文件系統(tǒng)在存儲(chǔ)器內(nèi)尋找一塊連續(xù)的未被使用的區(qū)域,即圖2B中的簇30、31、32、33、34,將文件A的數(shù)據(jù)存入該區(qū),并清除簇10、12、14、16、18的數(shù)據(jù)內(nèi)容。在文件A的數(shù)據(jù)存儲(chǔ)區(qū)改變的修改FAT表中相應(yīng)的表項(xiàng),并將文件描述表的首地址指向簇30。
上述情況是在存儲(chǔ)連續(xù)的存儲(chǔ)空間足以存儲(chǔ)文件A的數(shù)據(jù),但當(dāng)總線存儲(chǔ)器中存儲(chǔ)空間的碎片較多,所有的連續(xù)存儲(chǔ)區(qū)均不足以存儲(chǔ)文件數(shù)據(jù)時(shí),則需要移動(dòng)數(shù)據(jù)存儲(chǔ)區(qū)的數(shù)據(jù)以形成一個(gè)與該文件數(shù)據(jù)大小相應(yīng)的連續(xù)存儲(chǔ)區(qū)存儲(chǔ)文件數(shù)據(jù)。
參閱圖2C所示,文件A需要占用5個(gè)簇,而當(dāng)前存儲(chǔ)空間最大的連續(xù)空間為4個(gè)簇,即簇31到簇34。為了提高存儲(chǔ)文件數(shù)據(jù)的效率,在這種情況下的一種處理方式如下1、先選擇最大的并且未被使用的連續(xù)存儲(chǔ)區(qū),即圖2C中的簇31到簇34。
2、從連續(xù)存儲(chǔ)區(qū)的尾部開始存儲(chǔ)數(shù)據(jù),即從簇34開始存儲(chǔ),而文件數(shù)據(jù)也從尾部到頭部方向?qū)懭氪鎯?chǔ)區(qū),先將簇14的文件數(shù)據(jù)寫入簇34,寫完后將簇13的文件數(shù)據(jù)寫入簇33,至到將簇11的文件數(shù)據(jù)寫入簇31。
3、此時(shí),將連續(xù)存儲(chǔ)區(qū)前部的簇30中的數(shù)據(jù)移動(dòng)到簇35(也可以是其他未被占用的簇),然后將簇10中的文件數(shù)據(jù)寫入簇30,其結(jié)果如圖2D所示。
在上述對數(shù)據(jù)存儲(chǔ)位置的改變過程中,均要對FAT表和文件描述表作相應(yīng)的修改。當(dāng)然上述過程中,也可以選擇其他的連續(xù)的存儲(chǔ)區(qū)域進(jìn)行線性存儲(chǔ)文件A的數(shù)據(jù),只是需要移動(dòng)較多的數(shù)據(jù),效率更低。
對于文件系統(tǒng)需要寫入總線存儲(chǔ)器的文件,首先選擇連續(xù)的存儲(chǔ)空間寫入,如果沒有足夠大的空間,則采用與上述相同的處理方式。
由于處理器在執(zhí)行程序前需要獲得程序指令,而現(xiàn)有技術(shù)中程序指令一般存于內(nèi)存,由處理器通過總線發(fā)送地址請求數(shù)據(jù),對該數(shù)據(jù)進(jìn)行譯碼等操作來執(zhí)行程序。一般情況下,先從存儲(chǔ)設(shè)備(如硬盤)復(fù)制數(shù)據(jù)到內(nèi)存,再修改處理器程序計(jì)數(shù)器的值指向該數(shù)內(nèi)存區(qū)的地址,處理器立刻對該數(shù)據(jù)處理。
當(dāng)采用線形讀取方法時(shí),由于存儲(chǔ)器也是通過總線訪問并且是連續(xù)存儲(chǔ)數(shù)據(jù)的,因此,只需把處理器程序計(jì)數(shù)的地址設(shè)置為線形可執(zhí)行文件的起始地址即可,無需內(nèi)存復(fù)制工作。
在欲讀取文件前,首先根據(jù)文件描述表中的屬性信息(即文件是否為線性讀取文件)判斷是否進(jìn)行線形讀取(因?yàn)橥ㄓ玫奈募x取操作,都是需要開一個(gè)內(nèi)存緩沖區(qū),所以必須判斷。),若欲進(jìn)行線形讀取,就不需要開內(nèi)存緩沖區(qū),并使用有別于通用讀取函數(shù)(如標(biāo)準(zhǔn)C語言的fread)的線性讀取函數(shù),同時(shí)需要向該函數(shù)輸入欲讀取的文件路徑,函數(shù)輸出文件的起始地址指針和文件的長度。
以標(biāo)準(zhǔn)C語言為例,線性讀取的實(shí)現(xiàn)過程如下<pre listing-type="program-listing"> int linear_length(char*filename);//獲取文件長度的函數(shù)char*linear_read(char*filename);//獲取文件起始位置的函數(shù)int main(int argc,char*argv[]){ char*fh;//文件指針保存文件起始地址的變量int i;//用于計(jì)數(shù)的變量int len;//文件長度變量len=linear_length(″c/abc″);//獲取文件的長度fh=linear_read(″c/abc″);//從文件系統(tǒng)獲取文件的起始地址//將全部文件的內(nèi)容輸出for(i=0;i<len;i++)//執(zhí)行循環(huán){printf(″fh[%d]=%x\n″,i,fh[i]);//輸出緩沖區(qū)的數(shù)據(jù)}return l;}</pre>對于線性存儲(chǔ)的文件,F(xiàn)AT系統(tǒng)根據(jù)文件的首地址和文件長度通過總線直接從存儲(chǔ)器讀取并進(jìn)行處理,無須通過內(nèi)存進(jìn)行數(shù)據(jù)復(fù)制,減少了對總線操作頻率,并且無須一次讀取一個(gè)大的緩存,而可以按需讀取每一個(gè)字節(jié),大大減小系統(tǒng)開銷;尤其是可執(zhí)行文件,處理器可直接讀取并執(zhí)行,如圖3所示。
上述的存儲(chǔ)器包括但不限于軟硬盤、內(nèi)存、閃存(Flash)等總線存儲(chǔ)器,本發(fā)明的文件系統(tǒng)同樣適用于NTFS系統(tǒng)。
顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若對本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。
權(quán)利要求
1.一種線性訪問文件的方法,其特征在于該方法包括線性存儲(chǔ)步驟,用于將文件數(shù)據(jù)寫入存儲(chǔ)器中連續(xù)的存儲(chǔ)區(qū),并在該文件的屬性信息中記錄該文件為線性讀取文件;判斷步驟,用于在文件系統(tǒng)讀取文件時(shí),先根據(jù)文件的屬性信息判斷該文件是否為線性讀取文件,并在該文件為線性讀取文件時(shí)獲取該文件的首地址和文件長度;線性讀取步驟,用于根據(jù)文件的首地址和文件長度,通過總線直接讀取文件數(shù)據(jù)進(jìn)行處理。
2.如權(quán)利要求1所述的方法,其特征在于,所述線性存儲(chǔ)步驟中,如果將存儲(chǔ)器中已有的非線性讀取文件存儲(chǔ)為線性讀取文件,則將該文件寫入到連續(xù)的存儲(chǔ)區(qū)后將原存儲(chǔ)區(qū)的數(shù)據(jù)刪除。
3.如權(quán)利要求2所述的方法,其特征在于,所述線性存儲(chǔ)步驟中,如果所有的連續(xù)存儲(chǔ)區(qū)均不足以存儲(chǔ)所述文件數(shù)據(jù)時(shí),則移動(dòng)數(shù)據(jù)存儲(chǔ)區(qū)的數(shù)據(jù)以形成一個(gè)與該文件數(shù)據(jù)大小相應(yīng)的連續(xù)存儲(chǔ)區(qū)存儲(chǔ)文件數(shù)據(jù)。
4.如權(quán)利要求3所述的方法,其特征在于,先選擇最大的并且未被使用的連續(xù)存儲(chǔ)區(qū),從該連續(xù)存儲(chǔ)區(qū)的尾部開始將文件數(shù)據(jù)從尾部到頭部方連續(xù)寫入,在寫滿后將該連續(xù)存儲(chǔ)區(qū)前部已被占用的存儲(chǔ)區(qū)中的數(shù)據(jù)移動(dòng)到其他存儲(chǔ)區(qū)域,將剩余的文件數(shù)據(jù)寫入該前部存儲(chǔ)區(qū)。
5.如權(quán)利要求1至4任一項(xiàng)所述的方法,其特征在于,所述判斷步驟中,從文件的描述表中獲取文件的首地址和文件長度。
6.如權(quán)利要求5所述的所述文件系統(tǒng)包括但不限于FAT系統(tǒng)和NTFS文件系統(tǒng)。
7.如權(quán)利要求5所述的方法,其特征在于,所述存儲(chǔ)器為可以通過向總線直接發(fā)送地址獲得數(shù)據(jù)的存儲(chǔ)器,該存儲(chǔ)器包括但不限于軟盤、硬盤和閃存。
全文摘要
本發(fā)明公開了一種線性訪問文件的方法,該方法為將文件數(shù)據(jù)寫入連續(xù)的存儲(chǔ)區(qū),并在該文件的屬性信息中記錄該文件為線性讀取文件;在文件系統(tǒng)讀取文件時(shí),先根據(jù)文件的屬性信息判斷該文件是否為線性讀取文件,并在該文件為線性讀取文件時(shí)獲取該文件的首地址和文件長度,然后根據(jù)文件的首地址和文件長度,通過總線直接讀取文件數(shù)據(jù)進(jìn)行處理。
文檔編號G06F17/30GK1632764SQ20041010109
公開日2005年6月29日 申請日期2004年12月31日 優(yōu)先權(quán)日2004年12月31日
發(fā)明者譚帥 申請人:北京中星微電子有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1
东丽区| 昌宁县| 张家川| 贵阳市| 武陟县| 伊通| 民权县| 田阳县| 丰宁| 新巴尔虎左旗| 青神县| 松滋市| 崇文区| 凤城市| 延庆县| 洱源县| 抚顺县| 昭觉县| 大安市| 纳雍县| 云霄县| 科尔| 济南市| 来宾市| 靖安县| 新乡市| 汨罗市| 台山市| 汝州市| 昌邑市| 南和县| 鄱阳县| 建始县| 镇康县| 邵阳市| 黄陵县| 安顺市| 上高县| 康乐县| 安化县| 乌拉特前旗|