專利名稱:備份系統(tǒng)和備份方法
技術領域:
本發(fā)明涉及操作計算機系統(tǒng)的方法,尤其涉及一種對存儲在存儲設備里數據提供備份副本的方法,對預防存儲設備出現故障或者數據出錯、丟失或感染計算機病毒的可能。本發(fā)明尤其涉及對個人計算機(PCS)提供備份。
背景技術:
通常,在包括著例如一個硬盤或固定磁盤的存儲裝置的簡單的單用戶計算機系統(tǒng)里,在任何給定時間只有一個應用程序存取該存儲裝置。對存儲裝置存儲的數據進行備份的任務是由一個應用程序進行的,在進行備份操作時該應用程序獨占地使用該存儲裝置,因為在終止備份應用程序之前別的應用程序都不能在這個環(huán)境下運行。
隨著引入允許同時運行幾個應用程序的多任務環(huán)境以及引入允許幾個用戶共享相同資源的網絡系統(tǒng),出現了多于一個的應用程序同時存取同一個存儲裝置的情況。當出現這種情況時,存在應用程序之間發(fā)生沖突的可能。例如,一個應用程序可能要修改或刪除另一個應用程序正在使用的一個文件。這會引起混亂并且可能弄亂存儲裝置以及造成數據丟失。
已經在操作系統(tǒng)引入了所謂的“文件鎖定”方法和“記錄鎖定”方法,以在文件鎖定情況下避免多于一個的應用程序對一個文件寫,或者在記錄鎖定的情況下避免兩個應用程序修改一個給定文件的相同區(qū)域。這些方法對于大多數應用程序相當復雜,尤其是對于僅對共享文件作出相當小的修改從而不對其它想要存取其鎖定的文件或記錄的應用程序造成明顯延誤的應用程序更是如此。但是,在共享存儲裝置的計算機系統(tǒng)中用于周期性地備份數據的應用程序是一種特殊情況。
因為備份應用程序或操作系統(tǒng)都不知道可和任何應用程序相關的文件的內部結構,可以備份的數據最小單元是單個文件。
此外,文件的備份副本必須是某一特定時刻的原始文件的準確映象。但是,復制一個文件不是瞬時過程,復制所需的時間取決于文件的長度和復制操作的速度。除非備份應用程序可以確保在復制處理期間別的應用程序不會修改文件,將會造成問題。
為了復制一個文件,備份應用程序把隨機存取存儲器(RAM)的一個區(qū)域指定成為轉送緩沖器,并且繼續(xù)不斷交替地把源文件的塊讀到該緩沖器并接著把緩沖器的內容寫到輔助存儲裝置中。除非文件非常小,為了構造文件的一份完整副本,需要數次填滿傳送緩沖器以及數次讀寫操作。
在復制處理期間允許文件被修改而造成的潛在問題可以通過研究一個正按10個塊的序列復制的文件的例子來顯示。如果復制這個文件的1至5塊后該文件被一個需要對文件的塊3和塊8進行更改的事物處理修改,復制過程接著會復制對塊8的修改但是不復制對塊3的修改,因為在發(fā)生該事務處理之前塊3已經得到復制。從而備份副本只包含一部分事務處理,這有可能使該備份副本完全無用,因為“擁有”該副本的應用程序可能認為該文件被損壞。
我們的美國5,086,502號專利公開一種把每次寫操作由對輔助存儲裝置的復寫操作進行備份的方法。除該方法之外,還存在兩種對具有共享存儲裝置的計算機系統(tǒng)的文件進行備份的方法i)在備份時鎖定文件。它通過拒絕別的用戶的寫訪問防止別的用戶修改該文件。如果別的用戶已具有寫訪問,備分應用程序必須跳過該文件或等到獲得獨占的寫訪問時再寫文件。
ii)檢測該文件的改變。在復制文件之后,備份應用程序可以利用操作系統(tǒng)檢查在復制操作期間是否進行過修改。如果進行過修改,必須重做復制或者跳過該文件。
因為許多文件(尤其是數據庫文件)處于不斷的使用之中,后兩種方法都不能提供適當的解決辦法。而且,在進行備份時這兩種方法要求有效地把用戶鎖定。另外,只有很少的輔助存儲設備與操作系統(tǒng)的組合能夠支持每分鐘大于15兆字節(jié)(Mb)的持續(xù)傳送速率,從而復制一個大文件所需的時間是相當長的。
一些應用程序通過提供把它們自己的文件可靠地備份到共享環(huán)境中處理該問題,但是每個應用程序的過程是不同的。為了備份整個存儲裝置,備份應用程序因此需要知道各個不同的內部過程是怎樣工作的或者必須依靠適當時刻時的人工干預。
從而,因為備份應用程序必須備份整個文件而且因為在備份處理期間文件不能被別的應用程序修改,采用現有的備份方法會在具有共享存儲裝置的計算機系統(tǒng)中引起延遲。在備份大型文件時情況更是這樣。
Walls的美國5,163,148號專利說明一種備份系統(tǒng),在這種系統(tǒng)中開始備份文件之前,文件進入相容狀態(tài);例如,如果與一次事務處理有關需要多次操作,則完成所有這些操作。如果正在備份的文件的一部分需要更新,在進行更新之前把原始文件的這一部分復制到盤的獨立部分上。備份程序備份文件時用已被復制并且已被保存在盤上別處的原始部分來代替已更新過的部分。通常保持著文件占據著的盤上的磁道和扇區(qū)的列表的盤范圍圖被擴充成包括一個索引表,該索引表把已復制的原始文件部分的磁道及扇區(qū)位置和更新部分的磁道及扇區(qū)位置聯系起來,更新部分占據著從中對它們進行復制的區(qū)域。
1995年7月20日我們以目錄號WO95/19599分布的國際專利申請?zhí)朠CT/GB94/01581說明一種運行具有一個在幾個應用程序中共享的存儲設備的計算機的方法,該方法還包含一個備份進程,其中包括一個用于保持在執(zhí)行該備份進程的同時對存儲設備上的數據實行更改的記錄的進程。該記錄用于確保在執(zhí)行備份進程時備份進程所看到的數據是未改變的,同時允許其它進程按常規(guī)地依舊更新存儲設備,從而避免和文件封鎖技術相關的延遲。以使計算機的常規(guī)使用不受到影響的方式在微機的操作系統(tǒng)的接口級上執(zhí)行附加的操作。在該方法中一個備份進程可操作為發(fā)出一個啟動信號和停止信號并至少執(zhí)行一個從存儲裝備如硬盤讀原始數據的備份讀操作。中央處理機(CPU)執(zhí)行至少一個周期地向存儲裝置的主區(qū)寫數據的常規(guī)寫操作和至少一個從存儲裝置中讀數據的常規(guī)讀操作。
在接收所述的啟動信號之后,執(zhí)行偵聽寫操作的偵聽操作,并且把數據寫到存儲裝置的輔助存儲區(qū)以保護否則會被寫操作改寫的原始數據。保持一個被寫到輔助區(qū)的文件部分的記錄,并且當執(zhí)行備份操作和常規(guī)讀操作中的一種操作時,詢問該記錄以便根據該記錄從主存儲區(qū)和輔助存儲區(qū)中的一個區(qū)中讀數據。以這種方式對備份進程提供剛在發(fā)出啟動信號之前狀態(tài)下的得到保護的原始數據。不過在這種情況下,該記錄是按文件記錄而不是按盤上的磁道和扇區(qū)位置定義文件部分的。這避免了如果記錄是按磁盤位置即磁道和扇區(qū)時會造成的問題,從而提供一定的優(yōu)點。
記錄最好包括一個在其中存儲第一數據的δ區(qū)和包括第一數據的實際位置與其預定位置之間的映象關系??商鎿Q地,第二數據可記錄在δ區(qū)而且其它的應用程序可以依舊對存儲設備上的該預定位置進行寫。
δ區(qū)最好是同一存儲設備如硬盤的一個不同的區(qū)域。所需的附加操作存儲在及運行在計算機系統(tǒng)的操作系統(tǒng)接口級上是有利的。如果軟件存儲在操作系統(tǒng)級上,可把它做成對用戶是透明的,從而不會影響應用軟件。
該備份記錄可存儲在各種存儲裝置上,例如磁帶機、光盤或者基本存儲介質的別的區(qū)中。一旦完成備份,可按常規(guī)方式復原備份。
發(fā)明內容
本發(fā)明提供可應用于上述各方法的改進。首先,要求系統(tǒng)可以把由備份程序發(fā)出的讀請求和由其它可能正在運行的應用程序發(fā)出的讀請求區(qū)分開。
在本發(fā)明的第一方面中提供一種操作包含著一個指令存儲器、一個中央處理機以及一個存儲裝置的基于微處理機的計算機系統(tǒng)的方法,該方法包括以下步驟提供在該計算機系統(tǒng)上運行的備份進程,該備份進程可操作以發(fā)出一個啟動信號和一個停止信號并且發(fā)出至少一個從存儲裝置讀原始數據的備份讀指令;對中央處理機提供存儲在存儲器中的第一指令組以使中央處理機執(zhí)行至少一個從存儲裝置中讀數據的常規(guī)讀操作;保持寫入到存儲裝置中的數據的記錄,以關聯存儲裝置的主存儲區(qū)和存儲裝置的輔助存儲區(qū)的對應區(qū)域;以及在接收啟動信號之后一旦接收讀指令判定該讀指令是和備份讀操作有關還是和常規(guī)讀操作有關,并且在執(zhí)行備份讀操作和常規(guī)讀操作中的一種操作時,詢問記錄以根據記錄從主存儲區(qū)和輔助存儲區(qū)中的一個區(qū)中讀數據,而在執(zhí)行另一種備份讀操作和常規(guī)讀操作時從主存儲區(qū)讀數據;判定讀指令是和備份讀操作有關還是和常規(guī)讀操作有關的步驟包括考察發(fā)出該讀指令的存儲器的區(qū)域以確定發(fā)出該讀指令的程序的身份的步驟。
在本發(fā)明的供選的第二方面中提供一種在計算機網絡里操作包含著一個指令存儲器、一個中央處理機和一個存儲裝置的基于微處理機的計算機系統(tǒng)的方法,該方法包括以下步驟提供在計算機系統(tǒng)上運行的備份進程,該備份進程可操作為發(fā)出一個啟動信號和一個停止信號并且發(fā)出至少一個從存儲裝置讀原始數據的備份讀指令;對中央處理機提供存儲在存儲器中的第一指令組以使中央處理機執(zhí)行至少一個從存儲裝置讀數據的常規(guī)讀操作;保持寫入到存儲裝置中的數據的記錄,以關聯存儲裝置的主存儲區(qū)和存儲裝置的輔助存儲區(qū)的對應區(qū)域;以及在接收啟動信號之后一旦接收讀指令判定該讀指令是和備份讀操作有關還是和常規(guī)讀操作有關,并且在執(zhí)行備份讀操作和常規(guī)讀操作中的一種操作時,詢問記錄以根據記錄從主存儲區(qū)和輔助存儲區(qū)中的一個區(qū)內讀數據,而在執(zhí)行另一種備份讀操作和常規(guī)讀操作時從主存儲區(qū)讀數據;并且其中的改進包括對備份進程分配一個唯一用戶標識,從而判定讀指令是和備份讀操作有關還是和常規(guī)讀操作有關的步驟包括判定讀操作是否由帶有所述唯一用戶標識的用戶請求的步驟。
前一個應用方法中的一個潛在問題是,由于一個文件已為別的應用程序打開,有可能不能向這個文件提供所需的備份操作,因為操作系統(tǒng)拒絕備份進程訪問該文件。
在本發(fā)明的第三方面(最好和本發(fā)明的上述各方面一起使用第三方面)中,提供一種操作包含著一個指令存儲器、一個中央處理機以及一個存儲裝置的基于微處理機的計算機系統(tǒng)的方法,該方法包括以下步驟提供在計算機系統(tǒng)上運行的備份進程,該備份進程可操作為發(fā)出一個啟動信號和一個停止信號并且執(zhí)行至少一個從存儲裝置讀原始數據的備份讀操作,對中央處理機提供存儲在存儲器里的指令以使中央處理機執(zhí)行至少一個從存儲裝置讀數據的常規(guī)讀操作;以及提供文件打開裝置,其用于打開一個文件以由常規(guī)讀操作讀并用于拒絕其它讀操作訪問該文件,其中的改進包括設置和備份進程相關的裝置,該裝置停用文件打開裝置的拒絕功能以允許同時由一個備份讀操作和一個常規(guī)讀操作對該文件進行讀訪問。
最后,盡管前一個應用的備份方法可以復制在進行備份的同時對正在備份的文件所實施的修改,但是本發(fā)明者已意識到當備份操作實際開始時如果該文件處于寫處理時將會出現問題。
在本發(fā)明的第四方面中提供一種操作包含著一個指令存儲器、一個中央處理機和一個存儲裝置的基于微處理機的計算機系統(tǒng)的方法,該方法包括以下步驟提供在計算機系統(tǒng)上運行的備份進程,該備份進程可操作為發(fā)出一個啟動信號和一個停止信號并且執(zhí)行至少一個從存儲裝置中讀原始數據的備份讀操作;以及向所述中央處理機提供存儲在所述存儲器里的指令以使所述中央處理機執(zhí)行至少一個對存儲裝置寫數據的常規(guī)寫操作;而其中備份進程能夠操作和由所述指令打開的供訪問的文件,其中的改進包括在完成對要備份的文件的任何系列的寫操作之前推遲發(fā)出啟動信號的步驟。
下面將參照附圖以示例的方式說明本發(fā)明。
圖1是一臺個人計算機和一臺盒式磁帶機的方塊圖;圖2A和2B分別說明常規(guī)的個計算機以及修改以根據本發(fā)明的方法運行的計算機在操作系統(tǒng)級上的系統(tǒng)存儲映象;圖3是備份操作中記錄數據的方法的流程圖;圖4是圖3的方法的第二種實施方式的流程圖;以及圖5是一個流程圖,說明對參照圖3和圖4說明的實施方式的改進。
具體實施例方式
參照圖1,一臺個人計算機10通常包括一個中央處理機12、一個隨機存取存儲器14和一個以硬盤機16為形式的非易失性存儲設備,在該示例中,出于提供備份存儲裝置的目的,一臺磁帶機18和計算機10連接。
為了控制磁盤機16和計算機10的其它部分之間的數據流,備份應用程序的一部分形成為一個記錄進程,其運行為偵聽分別從磁盤機16的常規(guī)讀操作和對磁盤機16的常規(guī)寫操作。
在開始對一個文件的備份復制之前,備份應用程序啟動記錄進程,以便把所有的磁盤寫活動重定向到稱為“δ”區(qū)的磁盤的另一個區(qū)上。保持一個δ變換表來提供所有已重定向到δ區(qū)的磁盤寫操作的記錄。該表保持每個磁盤寫操作所關聯的數據在盤上的預期目的地和它在δ區(qū)中的實際存儲位置之間的映象。如果在已經是表中某項的對象的一個區(qū)域中出現后來的寫操作,允許用新數據重寫δ區(qū)中的老數據。以這種方式,因為所有的改變都重定向到δ區(qū),在進行備份復制時盤的主要部分上的數據不發(fā)生變化。
當由備份應用程序請求讀盤操作時,該操作不加改變地通過從而回送給備份應用程序的數據來自盤的主要部分上的原始數據區(qū)。但是,當由別的應用程序請求讀盤操作時,記錄進程首先運行成檢查表以確定從記錄進程開始偵聽寫操作以示對該區(qū)域是否已發(fā)生過寫盤操作。如果已發(fā)生過,把讀操作重定向到δ區(qū)中的對應位置。如果沒有發(fā)生過寫操作,即從開始偵聽寫操作以來該條數據沒有改變,則不加改變地執(zhí)行該讀操作。
以這種方式,除備份應用程序之外的所有應用程序常規(guī)地了解盤16上所存儲的數據的改變。備份應用程序看見的數據是在發(fā)出停止偵聽讀寫操作的記錄進程的指令之前不會改變的數據。
在備份復制操作完成后,驅動記錄進程使計算機返回到常規(guī)操作。通過使用表中存儲的映象把存儲在δ區(qū)的改變施加到盤16的主要部分的適當原始數據區(qū)域中實現該恢復階段。在實施δ改變中,仍如上述繼續(xù)偵聽寫盤操作。當不再存在施加到原始數據區(qū)的寫操作時,停止對寫操作的偵聽并且常規(guī)地運行系統(tǒng)。
作為進一步的改進,如果一個記錄保持著備份復制進程已進展到的范圍,在盤16的主要部分業(yè)已備份后,軟件可以允許對這部分的寫操作不加改變地通過,因為在這部分上數據改變已不重要。這可減小δ映象表的長度。而且如果該操作所朝向的盤的主要部分上的區(qū)域已經是映象表中一項的對象,則可簡單地刪掉該項從而縮短恢復階段所需的時間。
本發(fā)明尤其可應用于IBM兼容個人計算機,即其中中央處理機(CPU)采用英特公司制造的8086、8088、80286、80386、80486以及奔騰型號處理機芯片的大多數個人計算機,以及類似的基于微處理機的系統(tǒng)。在這些計算機中,一旦一個程序希望訪問一個文件它調用一個對盤寫數據的標準例行程序。該例行程序是操作系統(tǒng)的一個必備部分,在DOS操作系統(tǒng)的情況下稱為Interrupt 21 hex(INT 21h)。該例行程序執(zhí)行的活動(稱之為中斷處理程序)取決于進入時傳送給該例行程序的參數。在圖2A中該例行程序表示成在系統(tǒng)存儲映象中構成操作系統(tǒng)的一部分,圖中用箭頭指示INT 21h的進入點。為了實現根據本發(fā)明的最佳方法,如圖2B中所示在操作系統(tǒng)的接口級上增添了附加的程序代碼。實際上,在DOS環(huán)境下,可利用CONFIG.SYS文件把它們作為設備驅動程序裝入到計算機里。
增添的軟件具有用一組供選的指令代替一條寫數據的指令的作用。類似的技術可用于偵聽從盤讀數據的指令并且也用供選的一組指令代替讀數據指令。
圖3的流程圖表示該供選的一組指令所提供的有關操作序列。一旦接收INT 21h調用,程序首先檢查以判定該調用是否是寫調用。如果是,在步驟20程序檢查是否意味偵聽寫調用。如果不是,數據寫入(步驟22)原始數據區(qū)24。
如果寫調用在偵聽中,接著程序檢查δ映象表(步驟26)判定是否以前已對原始文件24的該區(qū)進行過寫操作,這由該文件的特定記錄或特定部分定義。如果(步驟28)以前進行過寫操作,則用新數據重寫(步驟32)和原始文件24的該部分先前相映射的δ區(qū)30的有關部分。
如果寫調用正在偵聽中但是未對原始文件24的這個部分進行過寫操作,則在表中增加這次寫操作并對該塊數據分配δ區(qū)的一個新區(qū)域(步驟34)。然后把該數據寫到該新的δ區(qū)域中(步驟36)。
如果調用是讀調用,程序在步驟38檢查是否意味偵聽讀調用。如果不是,則從原始文件24讀數據(步驟40)。
如果程序是偵聽讀調用,它首先在步驟42判定該調用是否來自備份應用程序。如果調用的確來自備份應用程序,程序進入步驟40并從原始文件24讀數據。
如果該讀調用不來自備份應用程序,程序檢查δ映象表以判定對和這次讀調用對應的原始文件24的該區(qū)的一次寫操作是否已重定向到δ區(qū)(步驟44)。如果沒有重定向過(步驟46)程序回到步驟40并從原始文件24讀數據。如果這次讀操作已被重定向,則從δ區(qū)30的正確區(qū)域中讀數據(步驟48)。
如果INT 21h調用既不是寫調用也不是讀調用,則返回到常規(guī)的INT 21h處理程序。
在本發(fā)明的第二實施方式中,當在記錄進程期間偵聽讀操作和寫操作中,對文件的一個特定區(qū)的第一次寫操作不再把改變后的數據存儲到δ區(qū),而是把原始數據存儲到δ區(qū)并允許修改原始文件。在映象表中構成一項,該項指向現已存儲到δ區(qū)的原始文件的該區(qū)的原始內容。記錄進程將忽略對文件的該相同區(qū)域的隨后的任何寫請求。如果映象表表明原始文件的該區(qū)已被重寫過,則來自備份應用程序的讀請求會重定向到δ區(qū)。
在圖4,以流程圖表示第二實施方式。該圖類似于圖3,具有相同參考數字的步驟表示類似的行為。
圖3和圖4之間的差別如下在步驟60中,如果讀偵聽是有效的(步驟38)并且讀不是來自于備份應用程序,則從原始數據區(qū)讀數據。這和圖3的步驟42相反。
在步驟28之后插入一個附加的步驟62,其在數據第一次被重寫之前從原始數據區(qū)讀數據。
圖3的步驟36被修改以形成新的步驟64,步驟64插入一個對步驟62中所讀數據的δ區(qū)的附加寫操作。
步驟32被修改形成新的步驟66,步驟66不再重定向數據以對δ區(qū)重寫,而是代之以用數據重寫原始數據區(qū)。
第二方法比第一方法慢,因為每次文件寫請求從第一方法的單次重定向寫變?yōu)橐淮巫x和兩次寫。但是,一旦完成備份,第二方法不需要把存儲在δ區(qū)中的修改施加給原始文件。可以簡單地廢除δ映象表以及存儲在δ區(qū)中的數據。此外,由于這些差別,不需要準備當尚未全部把δ區(qū)的改變施加到原始數據之前出現致命狀況(例如電源失效)時進行恢復的措施。
在上述的方法構成備份應用程序的一部分的情況下,讀操作偵聽可在備份程序之內發(fā)生,不必涉及到使用操作系統(tǒng)的例行程序。
參照圖3和圖4說明的系統(tǒng)的詳細實現在熟練的技術人員的能力之內,不必對此作出全面的說明。如果在MS.DOS下實現,需要時讀者可把IBM DOS Technical Reference手冊作為背景材料參用。
本發(fā)明最好實現為操作系統(tǒng)本身的一部分,或者原始操作系統(tǒng)碼的一個組成部分,或者以設備驅動程序的形式構成對操作系統(tǒng)的擴展。在Intel 80386 CPU(以及更高)的情況下本發(fā)明應該典型地運行稱為“Ring 0”的最高特權級上,在這級上對系統(tǒng)中的所有部件的訪問是不受限制的。
但是,本發(fā)明在運行上并不依賴任何特殊的CPU體系。它可在其它系統(tǒng)上方便地實現,例如在采用68000和Power PC系列CPU的Macintosh計算機上。
本發(fā)明可用于多用戶環(huán)境。在該情況下本發(fā)明最好用在帶有文件訪問控制的環(huán)境中。本發(fā)明將確保進行無差錯備份復制,同時系統(tǒng)的其余部分仍有效地完整運行仿佛不存在本發(fā)明。在缺少文件訪問控制下,不管是否應用本發(fā)明,都存在著文件出錯的可能。
本發(fā)明尤其可應用到由數據庫(例如dBase)生成的文件,文件可很大并劃分成記錄。更新過的記錄登記在表中,并且在完成備份之前保持記錄的更新版本及原始版本兩者。該表例如可包括文件中從其開始更新數據的起點以及對應于更新的數據量的長度值。備擇地,該表可包含以更新的記錄的身份表示的標識。
在多用戶或網絡情況下,當計算機環(huán)境允許標識希望進行備份的特定用戶時,本方法還可包括識別用戶并且按上述方式只備份該用戶的文件的步驟。以這種方式不需要偵聽所有的數據事務處理而僅需要偵聽和該用戶有關的數據事務處理。
請求源的標識上面所說明的能夠對打開文件運行的備份方法依賴于區(qū)分來自于備份應用程序的讀請求和來自其它源即常規(guī)應用程序發(fā)出的讀請求的能力。這在圖3的步驟42和圖4的步驟60中出現。
只要把打開文件方法設置成備份應用程序的一個組成部分,就可以容易地確定讀請求的源,因為備份應用程序‘明白’已發(fā)出那種請求。但是,如果備份應用程序已經存在,例如以標準的現成的軟件包的形式或者以別的不能更改以容納打開文件方法的形式存在,則會出現問題,從而必須代以用附加的代碼來實現。
按照第一種改進,通過探尋事件鏈(即追溯或者“向上”)以鑒別激發(fā)讀請求的代碼區(qū)以將來自備份應用程序的請求和來自別的方面的請求區(qū)別開。在這種方法的下述示例中仍采用MS.DOS操作系統(tǒng)說明;但是,類似的技術可應用于其它操作系統(tǒng)環(huán)境。
讀請求是由INT 21h調用激發(fā)的,其常規(guī)地直接進入中斷處理程序。一般中斷處理程序不知道調用程序。它只簡單地通知執(zhí)行某個特定功能然后返回到調用程序。在上述的用于DOS環(huán)境的Intel CPU中,CPU自動地把調用程序的返回地址放在“?!敝校⑥D移到中斷例行程序的第一條指令。當實現該功能之后,中斷處理程序發(fā)出一條IRET(中斷返回)指令,其使CPU從棧中檢索返回地址并在返回地址上繼續(xù)執(zhí)行。從而中斷處理程序不需要知道并且確實不知道調用程序。
在上面參照圖3和圖4說明的系統(tǒng)中,用另一組指令代替INT21h中斷例行程序。除上面所說明的功能外,這組指令可適用于如下述附加地確定請求源。
在該改進中中斷處理程序檢查棧以確定返回地址。在80×86系列Intel CPU情況下將調用程序的代碼位置偏移和區(qū)段分別作為第一個字和第二個字存儲在棧頂,即分別為SS:〔SP〕和SS:〔SP+2〕。在本說明書的附錄中給出在MS.DOS下實現該改進所涉及的概要步驟。
接著該例行程序可以檢查由該棧定義的調用源并按一些可能的方法確定做出該調用的程序,下面是這些方法的一些例子(i)因為一個現成的程序的各個版本的代碼是類似的,可以檢查返回地址附近代碼的各種特性以判定該調用程序是否是一個已知的備用程序。返回地址附近的代碼和所使用的備份程序的預期代碼進行比較,以判定是否存在表示該調用是由備份程序作出的匹配。
(ii)備擇地,通過參考和每個裝入程序有關的程序段前綴和環(huán)境串可確定程序名。從該??芍绦蚨尾⒖勺x出PSP。這將允許定位環(huán)境串從而得到程序名。在Andrew Schulman等人著的教科書“Undocumented DOS”(Addison-Wesley出版社,1993年第二版,ISBN 0-201-63287-X,見章7,尤其見356-359頁)中對該技術作了詳細說明。
在非MS.DOS的操作系統(tǒng)的情況下,調用程序的身份可由棧中的其它參數確定,參數包括連接號、任務身份號、進程號等等。在某些操作系統(tǒng)中,還可利用全局變量確定進程名。
該方法依靠辨認調用程序的一些已知特征,例如程序名、進程名(或線程名),或者依靠辨認程序碼中某些“標志”,“標志”可以通過該棧追溯調用程序而得到的已知字節(jié)序列。
按照可用于網絡服務器環(huán)境的第二種改進,通過只為備份進程保留一個特定的用戶名可以確定調用程序的身份。鑒別用戶名(唯一用戶標識)以代替確定程序的身份,并且所有來自保留用戶的請求都假定來自備份程序。因為在準予訪問文件前要求每個用戶在服務器上注冊,這是一種有效的方法,當然以用戶名永遠用于備份而不用于其它目的為前提。該方法不需要事先了解特定的備分程序。
以類似的方式,可以詢問專用于標識備份進程的進程標識或任務標識以判定是備份進程還是別的應用程序在請求讀。在同一時刻從不存在兩個具有相同標識(ID)的任務,從而在任何時刻標識唯一地辨別進程(盡管任務號是重復使用的)。
上述說明應用于讀請求,但它也可能用于寫請求的相似過程。在由備份程序發(fā)出寫請求的事件中可采取適當的活動,通常這將涉及某個錯誤處理例程,因為備份應用程序常規(guī)地不應向中斷處理程序發(fā)出寫請求。
如上面所述,增添的指令組首先判定中斷調用是否是讀(或寫)請求,而當如果是時判定該請求是由備份程序還是由其它應用程序發(fā)出的。原則上這兩個操作的次序是可以顛倒的,在檢查調用的性質之前可首先確定調用源。
受保證的文件訪問參照圖3和4所說明的打開文件備份方法假定備份應用程序總是可得到對文件的讀訪問。在實際中,可能并非總是這種情況,因為可能已由別的應用程序打開該文件進行排它性的讀/寫使用,從而可能拒絕備份應用程序的訪問。
本發(fā)明者明白,因為備份應用程序決不應該在備份之中寫文件,并且由于上面所說明的打開文件的方法將確保備份應用程序所接收到的文件副本在備份過程中不會改變,對于具有對文件讀訪問的備份應用程序事實上是完全安全的。
可以按下述提供備份目的訪問。通常操作系統(tǒng)保持著一個所有打開文件的表,它包括著諸如文件處理標識符、當前文件相對位置指針以及各個打開文件持有的訪問權等信息。
在MS.DOS操作系統(tǒng)的情況下,利用INT 21h功能打開文件。通過增加和上面所述的相同的另一組指令可以辨別文件打開請求。通過采用上一節(jié)中所說明的請求源標識技術,或者通過來自備份程序的直接指令,可以確定該文件打開請求是由備份應用程序作出的,而在這種情況下可以暫時地處理打開文件表以確保該文件訪問是許可的,甚至在常規(guī)下不允許的情況下也可如此做。一旦訪問得到許可并在中斷處理程序返回前,該表恢復到它以前的狀態(tài),從而來自別的應用程序的相繼請求將如常規(guī)地被拒絕訪問。這樣將滿足來自備份應用程序的讀請求,盡管原始應用程序認為它自己仍排它地使用著文件。
在MS.DOS中打開文件表稱為系統(tǒng)文件表(SFT)。SFT是一個對每個打開文件含有一條項的表。每條項包含文件訪問所許可的訪問方式。所必需的附加指令在備份應用程序請求訪問一個打開文件時修改SFT,即暫時地改變適當的SFT項以造成常規(guī)下阻止備份程序的訪問尚未得到許可的印象。接著將允許訪問并且分配“文件柄”。在返回到調用程序之前,SFT項中的訪問權恢復到原始狀態(tài)。
上面所提到的教科書“Undocumented DOS”中全面地說明了系統(tǒng)文件表(SFT),見第8章,465-469頁和490-494頁。具體地,在DOS操作系統(tǒng)的情況下,INT 21h中斷處理程序中所需的許可備份應用程序訪問的步驟在圖5中示出。
參照圖5,一旦接收到作為INT 21h調用的文件打開命令,在步驟70中利用上一節(jié)所說明的技術中的一種來判定請求源。如果是備份應用程序,則在步驟72判定請求訪問的文件是否已打開。如果上述兩個問題中的一個的答案為NO,則程序返回到步驟74的常規(guī)INT21h處理例行程序。如果這兩個問題的答案都是YES,則執(zhí)行圖5中所說明的專用代碼。
該處理如下述繼續(xù)。在SFT中的每條項包含對請求處理所許可的訪問方式(‘訪問方式屬性’)。在步驟76中,保留SFT中適當條項的當前或原始訪問方式屬性。在步驟78,把訪問方式屬性改變?yōu)椤疾痪芙^’狀態(tài),從而實際上使SFT變?yōu)椴黄鹱饔玫?,也即它不再制止對打開文件的多個訪問。現在在步驟80可調用常規(guī)INT 21h中斷處理程序以便在常規(guī)方式下為備份程序打開文件。當備份程序結束該文件時,把事先存儲的原始的訪問方式屬性放回到SFT中(步驟82)。最后利用讀棧的IRET指令執(zhí)行返回到調用程序(步驟84)。
在附錄中給出的程序步驟設想該提供文件訪問許可的改進已在使用。
修改SFT的準確方式并不重要,而且可采用各種方法。最佳方法操縱共享字段“share-prev-sft”和“share-net-machine”(見Undocumented DOS,478頁)。通過操縱這些字段,例如把“deny read(拒絕讀)”值改成“deny none(都不拒絕)”,可許可備份程序的訪問。備擇地,可以改變MS.DOS中的SHARE公用程序的一部分以許可訪問(見op.cit.,490-494頁)。
在其它操作系統(tǒng)環(huán)境下可用類似方法,例如Novell公司的NetWare環(huán)境。
建立‘良好’狀態(tài)參照圖3和4的上面所述的打開文件備份方法確保打開供備份的文件在備份進行之中不會改變。但是該方法在開始備份的瞬間不確立該文件處于‘良好’狀態(tài)。例如,另一個應用程序可能正在寫一個涉及一系列寫操作的事務處理,一些寫操作已完成而另一些寫操作尚未完成。因為該備份方法在打開的文件上運行,從而有可能備份應用程序接收含有部分事務處理的文件的副本。
本發(fā)明者知道,通過在確定事務處理不再繼續(xù)進行之前延遲備份應用程序的文件打開請求,可確保文件的‘良好狀態(tài)’備份副本。因為大多數網絡操作系統(tǒng)理所當然地是多線程的,即是設計成在同一時刻運行多于一個的進程的,從而在完成別的進程的同時延遲一個進程的能力是這些操作系統(tǒng)都具備的,因此可以容易實現延遲備份程序。通常如果短期停止備份操作無關緊要,因為一般用戶并不依賴備份的完成,尤其如果文件在打開時可被備份的情況下更如此。文件打開請求的延遲對應于推遲開始執(zhí)行參照圖3和4所說明的程序的起始信號。
事務處理通常在相對短的時間長度上發(fā)生,在事務處理之間存在較長的時間間隔。一般應用程序將在一個很快的序列中完成單個事務處理所需的全部寫操作,因為否則的話電源故障或類似的致命問題的危險會造成盤的數據只包含部分的事務處理,從而當再啟動系統(tǒng)時它將作為損壞的文件被處理。很清楚,事務處理寫盤的時間越短,在事務處理期間發(fā)生不能連接的致命問題(例如電源故障)的可能越小。通過測量連續(xù)寫操作之間的時間長度,有可能把對一個量值的判斷作為文件的事務處理的狀態(tài)。例如,如果在過去的一分鐘內沒有發(fā)生寫操作,則應用程序非常不可能處于寫單個事務處理的中途。通過根據經驗調整各應用程序的不活動時間周期,可以建立事務處理完整性的高可靠的指示器。
從而說明了對參照圖3和圖4所示方法的各種改進,即用于請求源標識的各種技術、用于確保許可文件訪問的一種技術、以及用于確保在開始備份前所備份的文件處于‘良好’狀態(tài)的各種技術。最好組合地應用各種改進。但是,可以選擇性地和獨立地應用這些改進,而且不必在同一個應用中同時實現所有這些改進。
本發(fā)明主要根據DOS操作系統(tǒng)尤其根據MS.DOS得到說明。但是,本發(fā)明在運行上并不依賴任何特定的CPU體系。具體地,本發(fā)明不限于DOS操作系統(tǒng),并可在Novell NetWare、OS/2或UNIX以及采用6800及PowerPC系列CPU的Macintosh計算機上實現。
附錄
權利要求
1.一種操作包括著一個指令存儲器、一個中央處理機和一個存儲裝置的基于微處理機的計算機系統(tǒng)的方法,該方法包括以下步驟提供在所述計算機系統(tǒng)上運行的備份進程,所述備份進程可操作為發(fā)出一個啟動信號和一個停止信號和完成至少一個從所述存儲裝置讀原始數據的備份讀操作;以及向所述中央處理機提供存儲在所述存儲器里的指令以使所述中央處理機執(zhí)行至少一個向所述存儲裝置寫數據常規(guī)寫操作;以及其中所述備份進程可操作打開以供所述指令訪問的文件,其中的改進包括在完成對要備份的文件的任何序列的寫操作之前推遲發(fā)出啟動信號的步驟。
2.一種用于包括著一個指令存儲器、一個中央處理機和一個存儲裝置的基于微處理機的計算機系統(tǒng)的備份系統(tǒng),該備份系統(tǒng)包括一個備份程序,用于在所述計算機系統(tǒng)上運行,它可操作成發(fā)出一個啟動信號和一個停止信號和執(zhí)行至少一個從所述存儲裝置讀原始數據的備份讀操作;以及用于向所述中央處理機提供存儲在所述存儲器中的指令以使所述中央處理機執(zhí)行至少一個對所述存儲裝置寫數據的常規(guī)寫操作的裝置;以及其中所述備份程序能夠操作打開以供所述指令訪問的文件,其中的改進包括用于在完成對要備份的文件的任何序列的寫操作之前推遲發(fā)出啟動信號的裝置。
全文摘要
一種用于帶有硬盤的計算機系統(tǒng)的備份程序保持正在備份的文件中對數據的改變記錄。在備份期間原始文件和更新文件的一部分或記錄被存儲,并且備份程序讀原始數據而其它應用程序讀更新數據。為了辨別讀操作是由備份程序激發(fā)還是由別的應用程序激發(fā),系統(tǒng)利用棧確定讀請求的源。備擇地,系統(tǒng)詢問用戶、進程或任務標識。通過操縱系統(tǒng)文件表保證備份程序對文件的訪問。通過按預定的時間推遲啟動備份操作確保文件處于“良好”狀態(tài)。
文檔編號G06F9/46GK1627267SQ0210179
公開日2005年6月15日 申請日期1996年3月18日 優(yōu)先權日1995年3月23日
發(fā)明者皮特·布里安·馬爾科爾姆 申請人:切恩尼軟件(英國)有限公司