專利名稱:在文件系統(tǒng)中訪問(wèn)硬盤任意扇區(qū)的方法
技術(shù)領(lǐng)域:
本發(fā)明屬于在存儲(chǔ)器系統(tǒng)或體系結(jié)構(gòu)內(nèi)存取、尋址或分配方法技術(shù)領(lǐng)域,尤其是一種在文件系統(tǒng)中訪問(wèn)硬盤任意扇區(qū)的方法。
背景技術(shù):
計(jì)算機(jī)系統(tǒng)中的文件是數(shù)據(jù)的邏輯組織和表現(xiàn)形式,通常要訪問(wèn)一個(gè)文件中的數(shù)據(jù)時(shí),要通過(guò)文件系統(tǒng)的定位和組織,才能將文件按可識(shí)別的邏輯形式表現(xiàn)出來(lái)。文件系統(tǒng)在帶來(lái)高效訪問(wèn)和合理抽象的同時(shí),也帶來(lái)了對(duì)數(shù)據(jù)訪問(wèn)的種種限制。在一個(gè)確定的文件系統(tǒng)下,用戶可訪問(wèn)的文件存儲(chǔ)位置會(huì)受到限制,這不但與文件系統(tǒng)的結(jié)構(gòu)有關(guān),也與操作系統(tǒng)提供的底層函數(shù)接口有關(guān)。在文件系統(tǒng)中訪問(wèn)硬盤任意扇區(qū),僅通過(guò)文件系統(tǒng)是不行的。若直接由硬盤的驅(qū)動(dòng)程序訪問(wèn)硬盤任意扇區(qū),則修改硬盤的驅(qū)動(dòng)程序?qū)⑸婕暗皆S多兼容性問(wèn)題,危險(xiǎn)性較大,而且由硬盤驅(qū)動(dòng)直接提供這樣的接口對(duì)上層用戶程序,將會(huì)破壞硬件的封裝性。
發(fā)明內(nèi)容
為克服上述不足,本發(fā)明的目的在于提供一種在文件系統(tǒng)中訪問(wèn)硬盤任意扇區(qū)的方法,它可實(shí)現(xiàn)對(duì)指定硬盤任意扇區(qū)的非受限訪問(wèn)。
為完成上述發(fā)明目的,本發(fā)明采取的技術(shù)方案是一種在文件系統(tǒng)中訪問(wèn)硬盤任意扇區(qū)的方法,包括把硬盤劃分為多個(gè)由確定物理位置表示的區(qū)域,對(duì)文件系統(tǒng)中的設(shè)備文件的訪問(wèn)請(qǐng)求用映射算法處理,激活獲得當(dāng)前映射因子,當(dāng)訪問(wèn)地址處于當(dāng)前可操作區(qū)時(shí)計(jì)算在此操作區(qū)中的偏移量,進(jìn)行訪問(wèn),如果訪問(wèn)地址不處于當(dāng)前可操作區(qū),則調(diào)用映射加載過(guò)程重設(shè)可操作區(qū),更新映射因子,并根據(jù)計(jì)算后的新的可操作區(qū)中的偏移量進(jìn)行訪問(wèn)的步驟。
區(qū)域的劃分尺寸小于當(dāng)前使用的文件系統(tǒng)可允許訪問(wèn)文件的最大尺寸;所說(shuō)的激活方法指的是由映射算法確定一個(gè)映射因子,該映射因子作為參數(shù)傳給處于操作系統(tǒng)內(nèi)核的加載函數(shù),由加載函數(shù)將系統(tǒng)中的用于表示讀或?qū)懣刹僮鲄^(qū)的塊設(shè)備文件與該映射因子表示的硬盤上的一段用于存儲(chǔ)數(shù)據(jù)的物理位置之間的硬盤空間聯(lián)系起來(lái);所說(shuō)的映射因子指的是用一個(gè)數(shù)字表示硬盤上事先劃分好的等待操作區(qū);所說(shuō)的加載函數(shù)指的是將系統(tǒng)中的用于表示讀或?qū)懣刹僮鲄^(qū)的塊設(shè)備文件與當(dāng)前系統(tǒng)維護(hù)的映射因子表示的硬盤上的一段用于存儲(chǔ)數(shù)據(jù)的物理位置之間的硬盤空間聯(lián)系起來(lái)的一段計(jì)算機(jī)程序方法;動(dòng)態(tài)加載函數(shù)的加載方法包括對(duì)比計(jì)算出的映射因子與當(dāng)前系統(tǒng)維護(hù)的映射因子,如果相同,不進(jìn)行加載操作,如果不同,通過(guò)向自己添加的系統(tǒng)調(diào)用提出加載請(qǐng)求,并由該系統(tǒng)調(diào)用在操作系統(tǒng)內(nèi)核態(tài)完成將系統(tǒng)中的用于表示讀或?qū)懣刹僮鲄^(qū)的塊設(shè)備文件與當(dāng)前系統(tǒng)維護(hù)的映射因子表示的硬盤上的一段物理位置之間的空間聯(lián)系起來(lái)的步驟;映射算法負(fù)責(zé)計(jì)算要求訪問(wèn)的扇區(qū)是處于哪一個(gè)等待操作區(qū)中,并計(jì)算出對(duì)應(yīng)的映射因子以及在此操作區(qū)中的位置偏移量;任意時(shí)刻硬盤上只存在一個(gè)激活的讀可操作區(qū)和一個(gè)激活的寫可操作區(qū);利用處于操作系統(tǒng)核心態(tài)的映射加載函數(shù)動(dòng)態(tài)地加載某一等待操作區(qū)到一個(gè)事先確定的文件系統(tǒng)中的塊設(shè)備文件,通過(guò)對(duì)該文件的訪問(wèn)實(shí)現(xiàn)對(duì)硬盤上任意位置的扇區(qū)進(jìn)行訪問(wèn)。
本發(fā)明采用增加操作系統(tǒng)內(nèi)核提供的接口并結(jié)合現(xiàn)有文件系統(tǒng)特點(diǎn)實(shí)現(xiàn)的底層接口方案,具有顯著的技術(shù)效果,它既利用了成熟操作系統(tǒng)與文件系統(tǒng)在文件訪問(wèn)操作上的高效性,又避免了硬盤訪問(wèn)空間受文件系統(tǒng)限制,對(duì)于在用戶態(tài)的程序訪問(wèn)不在文件系統(tǒng)可操作范圍內(nèi)的硬盤空間提供了一種良好的解決方案,這尤其是在類似嵌入式系統(tǒng)的操作環(huán)境中具有很好的可應(yīng)用性。
圖1是本發(fā)明的硬盤操作區(qū)結(jié)構(gòu)圖;圖2是本發(fā)明接口的操作流程圖;圖3是本發(fā)明等待操作區(qū)動(dòng)態(tài)加載過(guò)程示意圖。
具體實(shí)施例方式
一嵌入式Linux系統(tǒng)(一種可免費(fèi)使用的多用戶計(jì)算機(jī)操作系統(tǒng)),用硬盤作為存儲(chǔ)設(shè)備,在其上實(shí)現(xiàn)系統(tǒng)的備份與恢復(fù)功能。為了實(shí)現(xiàn)備份時(shí)數(shù)據(jù)狀態(tài)與恢復(fù)后數(shù)據(jù)狀態(tài)的完全一致性,就要對(duì)保存在硬盤上的任意位置的所有數(shù)據(jù)實(shí)現(xiàn)可讀寫功能,但這無(wú)法僅依靠文件系統(tǒng)已有的對(duì)文件的操作實(shí)現(xiàn)。運(yùn)用本發(fā)明的訪問(wèn)方式,使用兩個(gè)Linux下的塊設(shè)備文件,分別用于讀數(shù)據(jù)和寫數(shù)據(jù),讀和寫的數(shù)據(jù)位置通過(guò)硬盤的邏輯塊扇區(qū)地址來(lái)區(qū)別,通過(guò)對(duì)請(qǐng)求訪問(wèn)的邏輯塊扇區(qū)地址的映射,計(jì)算把讀和寫的數(shù)據(jù)請(qǐng)求分別映射到可隨時(shí)運(yùn)用映射加載函數(shù)動(dòng)態(tài)加載的兩個(gè)設(shè)備文件上,這兩個(gè)設(shè)備文件分別對(duì)應(yīng)事先確定的硬盤上的物理等待操作區(qū),從而通過(guò)對(duì)這兩個(gè)設(shè)備文件不斷重映射而實(shí)現(xiàn)對(duì)指定的任意扇區(qū)的訪問(wèn)機(jī)制,結(jié)果就實(shí)現(xiàn)了對(duì)硬盤上的任何一個(gè)扇區(qū)的數(shù)據(jù)可讀寫功能。
參閱圖1,把硬盤的整個(gè)邏輯塊地址空間劃分為一個(gè)個(gè)確定大小的等待操作區(qū)1、2、3......x+1,每個(gè)等待操作區(qū)的尺寸是事先確定的。
參閱圖2,上層程序請(qǐng)求訪問(wèn)系統(tǒng)上某一硬盤上的某一確定位置的扇區(qū)內(nèi)容;該硬盤由當(dāng)前系統(tǒng)中的硬盤編號(hào)表示,該扇區(qū)由其邏輯塊地址表示,這些都作為參數(shù)傳給底層接口,判斷該進(jìn)程的訪問(wèn)許可權(quán)限以及訪問(wèn)地址的許可限制,不同的進(jìn)程具有不同的可訪問(wèn)地址限制,這增加了該接口的靈活性并增加了接口以及訪問(wèn)過(guò)程的安全性,防止未授權(quán)的惡意進(jìn)程非法讀寫受保護(hù)的數(shù)據(jù),訪問(wèn)請(qǐng)求得到許可后,利用映射算法對(duì)傳進(jìn)接口的邏輯塊地址扇區(qū)地址作映射處理,得到該扇區(qū)位于哪一塊等待操作區(qū)中,映射算法可以稱為投影算法,其原理為根據(jù)事先確定的等待操作區(qū)的物理位置邊界來(lái)確定要求訪問(wèn)的具體邏輯扇區(qū)位置處于哪一個(gè)等待操作區(qū),獲得表示該等待操作區(qū)的。
映射算法采用投影的原理,假設(shè)事先確定的硬盤上的等待操作區(qū)的大小為pG,現(xiàn)在需要訪問(wèn)硬盤邏輯塊編號(hào)為a的扇區(qū)中的內(nèi)容,則a/(p*1024*1024*1024/512)整除得b,求余得m,其中1024*1024*1024表示1G字節(jié)數(shù),除以512表示把字節(jié)數(shù)化成扇區(qū)數(shù),得到的b,這個(gè)數(shù)就表示當(dāng)前要求訪問(wèn)的扇區(qū)所處的等待操作區(qū)的編號(hào)即映射因子,它從0開(kāi)始,得到的m即為在此等待操作區(qū)中的偏移量。即映射因子b=取整a/(p*1024*1024*1024/512)偏移量m=求余a/(p*1024*1024*1024/512)其中a為要求訪問(wèn)的扇區(qū)的編號(hào),p為事先確定的硬盤上的等待操作區(qū)的大小。
同時(shí),利用映射算法得到表示該扇區(qū)位于哪一塊等待操作區(qū)中的映射因子,判斷系統(tǒng)是否有正在維護(hù)的映射因子,如沒(méi)有,表示當(dāng)前系統(tǒng)中沒(méi)有被激活的操作區(qū),這時(shí)應(yīng)根據(jù)映射算法計(jì)算出的映射因子調(diào)用處于操作系統(tǒng)內(nèi)核心態(tài)的動(dòng)態(tài)加載函數(shù),將計(jì)算出的映射因子表示的等待操作區(qū)與系統(tǒng)中用于可讀或可寫操作區(qū)的塊設(shè)備文件聯(lián)系起來(lái),即完成一次動(dòng)態(tài)加載。動(dòng)態(tài)加載函數(shù)的加載方法是對(duì)比計(jì)算出的映射因子與當(dāng)前系統(tǒng)維護(hù)的映射因子,如果相同,不進(jìn)行加載操作,如果不同,通過(guò)向自己添加的系統(tǒng)調(diào)用提出加載請(qǐng)求,并由該系統(tǒng)調(diào)用在操作系統(tǒng)內(nèi)核態(tài)完成將系統(tǒng)中的用于表示讀或?qū)懣刹僮鲄^(qū)的塊設(shè)備文件與當(dāng)前系統(tǒng)維護(hù)的映射因子表示的硬盤上的一段物理位置之間的空間聯(lián)系起來(lái)的功能,由于這些操作步驟由計(jì)算出的映射因子的比較結(jié)果驅(qū)動(dòng),不需上層程序的干涉,所以對(duì)于調(diào)用接口的程序而言是透明的自動(dòng)完成的,可以稱為動(dòng)態(tài)加載。假設(shè)傳入操作系統(tǒng)內(nèi)核態(tài)的映射因子為x,事先確定的硬盤上的等待操作區(qū)的大小為pG,事先確定的用于動(dòng)態(tài)加載讀可操作區(qū)的塊設(shè)備文件為/dev/hda15,則在內(nèi)核態(tài)的系統(tǒng)調(diào)用函數(shù)體中用hd->part數(shù)組的第16(15+1)元素指定/dev/hda15表示硬盤上起始位置為邏輯塊扇區(qū)編號(hào)x*p*1024*1024*1024/512,大小為p*1024*1024*1024/512扇區(qū),即hd->part[15].start_sect=x*p*1024*1024*1024/512(塊設(shè)備文件/dev/hda15表示的哪一段硬盤存儲(chǔ)空間的起始地址,用扇區(qū)為單位)hd->part[15].nr_sects=p*1024*1024*1024/512,(塊設(shè)備文件/dev/hda15表示的哪一段硬盤存儲(chǔ)空間所占的大小,用扇區(qū)為單位)此時(shí)就把映射因子(從0開(kāi)始)X表示的等待操作區(qū)加載為當(dāng)前讀可操作區(qū),至此一個(gè)加載過(guò)程結(jié)束,該讀可操作區(qū)現(xiàn)在可以通過(guò)/dev/hda15訪問(wèn)。同時(shí),此時(shí)用于表示當(dāng)前系統(tǒng)中可讀或可寫操作區(qū)的映射因子即為系統(tǒng)維護(hù)的激活映射因子;判斷系統(tǒng)是否有正在維護(hù)的映射因子,如有,表示當(dāng)前系統(tǒng)中已經(jīng)存在被激活的操作區(qū),這時(shí)將根據(jù)映射算法計(jì)算出的映射因子與當(dāng)前系統(tǒng)維護(hù)的映射因子相比較,如果相同,表明當(dāng)前指定要訪問(wèn)的扇區(qū)正好處于當(dāng)前系統(tǒng)中的可讀或可寫操作區(qū)中,這時(shí)不需動(dòng)態(tài)加載函數(shù)作處理,只要根據(jù)這次映射算法得到的偏移量訪問(wèn)即可,如果這次計(jì)算出的映射因子與系統(tǒng)當(dāng)前維護(hù)的映射因子不同,表明此次要求訪問(wèn)的扇區(qū)位于系統(tǒng)中當(dāng)前沒(méi)有被激活的等待操作區(qū)中,此時(shí),調(diào)用處于操作系統(tǒng)內(nèi)核態(tài)的動(dòng)態(tài)加載函數(shù),重新將計(jì)算出的新的映射因子表示的等待操作區(qū)與系統(tǒng)中用于可讀或可寫操作區(qū)的塊設(shè)備文件聯(lián)系起來(lái),即完成一次動(dòng)態(tài)加載,同時(shí),此時(shí)用于表示當(dāng)前系統(tǒng)中可讀或可寫操作區(qū)的映射因子即為系統(tǒng)維護(hù)的激活映射因子,即以前的激活映射因子被現(xiàn)在這次計(jì)算出的新的映射因子替換,經(jīng)過(guò)上述步驟,此時(shí)根據(jù)映射算法得到的偏移量地址就可訪問(wèn)該指定扇區(qū)。
任意時(shí)刻硬盤上只存在一個(gè)激活的讀可操作區(qū)和一個(gè)激活的寫可操作區(qū),物理上的等待操作區(qū)激活后就成為可操作區(qū),可操作區(qū)對(duì)應(yīng)系統(tǒng)中的一個(gè)確定的設(shè)備文件。參閱圖3,激活的物理等待操作區(qū)即可操作區(qū)由一個(gè)映射因子表示,動(dòng)態(tài)加載前讀映射因子n,動(dòng)態(tài)加載前寫映射因子m,動(dòng)態(tài)加載后讀映射因子x,動(dòng)態(tài)加載后寫映射因子y,每一個(gè)物理等待操作區(qū)的位置在硬盤上是不變的,但映射因子是隨激活的物理等待操作區(qū)而變化的,通過(guò)對(duì)請(qǐng)求訪問(wèn)的扇區(qū)位置進(jìn)行映射計(jì)算使打開(kāi)設(shè)備文件時(shí)的請(qǐng)求訪問(wèn)均處于可操作區(qū)之內(nèi),這是通過(guò)變化映射因子重新對(duì)應(yīng)激活的物理等待操作區(qū)來(lái)實(shí)現(xiàn)的。利用處于操作系統(tǒng)核心態(tài)的映射加載函數(shù)動(dòng)態(tài)的加載該等待操作區(qū)到一個(gè)事先確定的設(shè)備文件,通過(guò)對(duì)該文件的訪問(wèn)實(shí)現(xiàn)對(duì)硬盤上任意位置的扇區(qū)進(jìn)行訪問(wèn)。
權(quán)利要求
1.一種在文件系統(tǒng)中訪問(wèn)硬盤任意扇區(qū)的方法,其特征在于它包括以下步驟(a)把硬盤劃分為多個(gè)由確定物理位置表示的區(qū)域;(b)對(duì)文件系統(tǒng)中的設(shè)備文件的訪問(wèn)請(qǐng)求用映射算法處理,激活獲得當(dāng)前映射因子,當(dāng)訪問(wèn)地址處于當(dāng)前可操作區(qū)時(shí)計(jì)算在此操作區(qū)中的偏移量,進(jìn)行訪問(wèn);(c)如果訪問(wèn)地址不處于當(dāng)前可操作區(qū),則調(diào)用映射加載過(guò)程重設(shè)可操作區(qū),更新映射因子,并根據(jù)計(jì)算后的新的可操作區(qū)中的偏移量進(jìn)行訪問(wèn)。
2.根據(jù)權(quán)利要求1所述的在文件系統(tǒng)中訪問(wèn)硬盤任意扇區(qū)的方法,其特征在于區(qū)域的劃分尺寸小于當(dāng)前使用的文件系統(tǒng)可允許訪問(wèn)文件的最大尺寸。
3.根據(jù)權(quán)利要求1所述的在文件系統(tǒng)中訪問(wèn)硬盤任意扇區(qū)的方法,其特征在于所說(shuō)的激活方法指的是由映射算法確定一個(gè)映射因子,該映射因子作為參數(shù)傳給處于操作系統(tǒng)內(nèi)核的加載函數(shù),由加載函數(shù)將系統(tǒng)中的用于表示讀或?qū)懣刹僮鲄^(qū)的塊設(shè)備文件與該映射因子表示的硬盤上的一段用于存儲(chǔ)數(shù)據(jù)的物理位置之間的硬盤空間聯(lián)系起來(lái)。
4.根據(jù)權(quán)利要求1所述的在文件系統(tǒng)中訪問(wèn)硬盤任意扇區(qū)的方法,其特征在于所說(shuō)的映射因子指的是用一個(gè)數(shù)字表示硬盤上事先劃分好的等待操作區(qū)。
5.根據(jù)權(quán)利要求3所述的在文件系統(tǒng)中訪問(wèn)硬盤任意扇區(qū)的方法,其特征在于所說(shuō)的加載函數(shù)指的是將系統(tǒng)中的用于表示讀或?qū)懣刹僮鲄^(qū)的塊設(shè)備文件與當(dāng)前系統(tǒng)維護(hù)的映射因子表示的硬盤上的一段用于存儲(chǔ)數(shù)據(jù)的物理位置之間的硬盤空間聯(lián)系起來(lái)的一段計(jì)算機(jī)程序方法。
6.根據(jù)權(quán)利要求1所述的在文件系統(tǒng)中訪問(wèn)硬盤任意扇區(qū)的方法,其特征在于映射算法負(fù)責(zé)計(jì)算要求訪問(wèn)的扇區(qū)是處于哪一個(gè)等待操作區(qū)中,并計(jì)算出對(duì)應(yīng)的映射因子以及在此操作區(qū)中的位置偏移量。
7.根據(jù)權(quán)利要求1所述的在文件系統(tǒng)中訪問(wèn)硬盤任意扇區(qū)的方法,其特征在于任意時(shí)刻硬盤上只存在一個(gè)激活的讀可操作區(qū)和一個(gè)激活的寫可操作區(qū)。
8.根據(jù)權(quán)利要求1所述的在文件系統(tǒng)中訪問(wèn)硬盤任意扇區(qū)的方法,其特征在于利用處于操作系統(tǒng)核心態(tài)的加載函數(shù)動(dòng)態(tài)地加載某一等待操作區(qū)到一個(gè)事先確定的文件系統(tǒng)中的塊設(shè)備文件,通過(guò)對(duì)該文件的訪問(wèn)實(shí)現(xiàn)對(duì)硬盤上任意位置的扇區(qū)進(jìn)行訪問(wèn)。
9.根據(jù)權(quán)利要求5所述的在文件系統(tǒng)中訪問(wèn)硬盤任意扇區(qū)的方法,其特征在于所說(shuō)的動(dòng)態(tài)加載函數(shù)的加載方法進(jìn)一步包括以下步驟對(duì)比計(jì)算出的映射因子與當(dāng)前系統(tǒng)維護(hù)的映射因子,如果相同,不進(jìn)行加載操作,如果不同,通過(guò)向自己添加的系統(tǒng)調(diào)用提出加載請(qǐng)求,并由該系統(tǒng)調(diào)用在操作系統(tǒng)內(nèi)核態(tài)完成將系統(tǒng)中的用于表示讀或?qū)懣刹僮鲄^(qū)的塊設(shè)備文件與當(dāng)前系統(tǒng)維護(hù)的映射因子表示的硬盤上的一段物理位置之間的空間聯(lián)系起來(lái)。
全文摘要
本發(fā)明屬于在存儲(chǔ)器系統(tǒng)或體系結(jié)構(gòu)內(nèi)存取、尋址或分配方法技術(shù)領(lǐng)域。包括把硬盤劃分為多個(gè)由確定物理位置表示的區(qū)域,對(duì)文件系統(tǒng)中的設(shè)備文件的訪問(wèn)請(qǐng)求用映射算法處理,激活獲得當(dāng)前映射因子,當(dāng)訪問(wèn)地址處于當(dāng)前可操作區(qū)時(shí)計(jì)算在此操作區(qū)中的偏移量,進(jìn)行訪問(wèn),若訪問(wèn)地址不處于當(dāng)前可操作區(qū),則調(diào)用映射加載過(guò)程重設(shè)可操作區(qū),更新映射因子,根據(jù)計(jì)算后的新可操作區(qū)中的偏移量進(jìn)行訪問(wèn)的步驟。它可解決數(shù)據(jù)訪問(wèn)受限、僅通過(guò)文件系統(tǒng)不能訪問(wèn)硬盤任意扇區(qū)、由硬盤驅(qū)動(dòng)程序訪問(wèn)硬盤任意扇區(qū)存在改寫驅(qū)動(dòng)程序接口帶來(lái)安全性等問(wèn)題,具有很好的可應(yīng)用性,尤其適用于類似嵌入式系統(tǒng)的操作環(huán)境。
文檔編號(hào)G06F12/06GK1480849SQ0212938
公開(kāi)日2004年3月10日 申請(qǐng)日期2002年9月6日 優(yōu)先權(quán)日2002年9月6日
發(fā)明者張鵬, 柯克, 張 鵬 申請(qǐng)人:聯(lián)想(北京)有限公司