專利名稱:合并的文件系統(tǒng)目錄中的虛擬刪除的制作方法
合并的文件系統(tǒng)目錄中的虛擬刪除
些旦 冃眾
有時期望在允許在計算機或計算機系統(tǒng)上運行的應(yīng)用程序共享某些文件 的同時,限制對其他文件的訪問。例如,在特定機器上運行的所有應(yīng)用程序可
能需要共享文件一到十,但或許只有應(yīng)用程序A才可訪問文件十一并且只有應(yīng) 用程序B才可訪問文件十二和十三。實現(xiàn)這一點的一種方法是生成所有應(yīng)用程 序都需要的若干文件集。即,第一文件集可包括供應(yīng)用程序A使用的文件一到 十和文件十一的副本。第二文件集可包括供應(yīng)用程序B使用的文件一到十和文 件十二和十三的副本。該方法的一個很明顯的缺點是維護各獨立的文件集所需 的額外的存儲空間。該方法也可導(dǎo)致對于諸如存儲器和分頁空間等其他系統(tǒng)資 源的重復(fù)需求。該方法的另一缺點是當(dāng)需要修改一文,件時,該文件必須在兩個 文件集中修改(例如,如果文件一的新版本變?yōu)榭捎茫瑒t必須更新兩個文件集 中的文件一)。
有時也期望允許對于文件系統(tǒng)的不同部分的不同訪問級別。例如,可能期 望允許應(yīng)用程序A刪除文件一但不允許應(yīng)用程序B刪除文件一。本發(fā)明的各 實施例解決了這些和其他需求。
概述
兩個或多個單獨的實際文件系統(tǒng)目錄作為單個(虛擬的)合并文件系統(tǒng)目 錄來呈現(xiàn)給在被稱為豎井的受控執(zhí)行環(huán)境中運行的應(yīng)用程序。通??捎糜趯ξ?件系統(tǒng)目錄執(zhí)行的所有操作都能夠?qū)υ摵喜⒛夸泩?zhí)行,然而,操作系統(tǒng)控制對 合并目錄中的文件的訪問級別。操作系統(tǒng)通過監(jiān)視由計算機或計算機系統(tǒng)上的 豎井中的進程做出的文件系統(tǒng)請求,并響應(yīng)于檢測到特定類型的文件系統(tǒng)訪問 請求,通過執(zhí)行特殊處理來提供看上去合并的目錄的視圖,來提供文件系統(tǒng)目 錄的合并視圖。觸發(fā)特殊處理的改變或請求的類型的示例包括枚舉、打開、創(chuàng) 建、重命名、關(guān)閉或刪除。創(chuàng)建合并視圖所需的狀態(tài)不存儲在永久介質(zhì)上。
對文件、目錄或子目錄的虛擬刪除的需求在包括以下條件在內(nèi)的各種情形中可能變成必要的或期望的
做出刪除文件的請求的用戶基于與該文件相關(guān)聯(lián)的ACL(訪問控制
列表)具有刪除該文件的許可。
合并目錄的專用構(gòu)成目錄經(jīng)由其訪問掩碼具有對將被虛擬地刪除
的文件的刪除許可。
對于其中存在對其接收到刪除請求的文件的合并目錄啟用刪除語
義支持。
當(dāng)滿足所有以上條件時,在專用目錄中為正被虛擬地刪除的文件創(chuàng)建刪除 標(biāo)記。從豎井的觀點來看,如此標(biāo)記的文件已被刪除。因此,在請求特定類型 的文件系統(tǒng)操作時可能需要特殊的虛擬刪除處理。觸發(fā)特殊虛擬刪除處理的請 求的類型包括枚舉、打開、創(chuàng)建、重命名、和刪除。
附圖簡述 在附圖中
圖1是示出其中可以實現(xiàn)本發(fā)明各方面的示例性計算環(huán)境的框圖; 圖2是根據(jù)本發(fā)明的某些實施例的用于合并文件系統(tǒng)目錄中的文件的虛 擬刪除的系統(tǒng)的框圖3是根據(jù)本發(fā)明的某些實施例的用于合并文件系統(tǒng)目錄的方法的流程
圖4是根據(jù)本發(fā)明的某些實施例的圖3的方法的一部分的流程圖;以及 圖5是根據(jù)本發(fā)明的某些實施例的對于打開/創(chuàng)建請求的虛擬刪除處理的 流程圖6是根據(jù)本發(fā)明的某些實施例的對于枚舉請求的虛擬刪除處理的流程 圖;以及
圖7是根據(jù)本發(fā)明的某些實施例的對于刪除請求的虛擬刪除處理的流程
詳細描述
概覽理想地,操作系統(tǒng)將能夠控制文件的共享并將能夠在應(yīng)用層控制對文件的 訪問。例如,操作系統(tǒng)能夠允許應(yīng)用程序A對文件一到十進行只讀訪問并對文 件十一進行讀寫訪問,而允許應(yīng)用程序B對文件一到十進行只讀訪問并對文件 十二和十三進行讀寫訪問可能是有用的。然而,通常當(dāng)前已知的操作系統(tǒng)為在 同一個用戶帳戶下運行的所有進程提供對相同的文件集的相同的訪問級別。因 此,在上述示例中,如果同一個用戶啟動了應(yīng)用程序一和二,以便允許應(yīng)用程
序A向文件十一寫入并允許應(yīng)用程序B向文件十二和十三寫入,則應(yīng)用程序A 將也可對文件十二和十三進行讀寫訪問而應(yīng)用程序B將可對文件十一進行讀
寫訪問。 一
因此,在許多系統(tǒng)中,在操作系統(tǒng)進程層以及操作M統(tǒng)本身的機器邊界處
存在系統(tǒng)中有限的密封點,但在這些層之間,使用諸如訪問控制列表(ACL) 以及與運行應(yīng)用程序的用戶的身份相關(guān)聯(lián)的特權(quán)等安全控制來控制對文件的 進程訪問。因為對系統(tǒng)資源的訪問與運行應(yīng)用程序的用戶的身份而不是與應(yīng)用 程序本身相關(guān)聯(lián),所以應(yīng)用程序可訪問該應(yīng)用程序不需要的文件,如以上示例 所展示的。因為多個應(yīng)用程序可能能夠修改同一個文件,所以可能導(dǎo)致應(yīng)用程 序之間的不兼容。也可能產(chǎn)生安全問題,因為一個應(yīng)用程序可能惡意或故意干 擾另一應(yīng)用程序的操作。
此處被稱為豎井的操作系統(tǒng)內(nèi)隔離/密封機制允許對在使用操作系統(tǒng)的單 個實例的單個計算機上運行的進程進行分組和隔離。操作系統(tǒng)的單個實例將系 統(tǒng)的處理空間分為多個并排和/或嵌套的執(zhí)行環(huán)境(豎井),從而允許對某些文 件的受控共享以及對其他文件的訪問限制。操作系統(tǒng)通過為每一個豎井創(chuàng)建不 同的文件系統(tǒng)視圖來控制文件共享和訪問。該視圖對于在豎井中運行的進程表 現(xiàn)為單個目錄,該單個目錄是兩個或多個實際文件相同目錄的至少各部分的并 集。即,對于應(yīng)用程序可用的文件取決于該應(yīng)用程序在哪個豎井中運行并且在 一豎井中運行的應(yīng)用程序"看見"的文件系統(tǒng)通過在表面上合并兩個或多個文 件系統(tǒng)目錄或文件系統(tǒng)目錄的各部分來創(chuàng)建。服務(wù)于計算機或計算機系統(tǒng)的單 個OS映像由此提供文件系統(tǒng)的不同視圖以控制哪個進程、進程組、應(yīng)用程序 或應(yīng)用程序組可使用哪些文件以及如何能夠使用這些文件。對文件的訪問以及 對文件的訪問程度因此直接關(guān)聯(lián)于或基于進程、應(yīng)用程序、進程組、應(yīng)用程序組被放置的豎井而不是單獨或主要由用戶特權(quán)來確定。
當(dāng)兩個或多個實際目錄經(jīng)由一個邏輯視圖來展示時,刪除文件可展示或顯 示其他構(gòu)成目錄之一中具有與所刪除的文件相同的名稱的文件。通常在合并目 錄情況下,對各構(gòu)成目錄排序。當(dāng)發(fā)生沖突(即,在兩個或多個構(gòu)成目錄中存 在具有相同名稱的文件)時,排序策略確定將展示哪個文件。然而,如果排名
最高的文件已被刪除,則將在沒有干預(yù)(absent intervention)的情況下展示來 自構(gòu)成目錄的具有相同名稱的文件。該文件的展示可能不是合乎需要的。因此, 需要"記住"在構(gòu)成目錄中存在過具有相同名稱的文件并防止在同名的排名最 高的文件已被刪除時展示該文件。
為了解決以上需求,將刪除標(biāo)記與在合并目錄環(huán)境中對于其接收到刪除請 求的文件相關(guān)聯(lián)。在展示合并目錄時,通常將存在可寫入的合并目錄的專用部 分以及只讀的公共部分(由一個或多個公共目錄構(gòu)成)。專用目錄以及一個或 多個公共目錄兩者構(gòu)成邏輯合并目錄。新'文件以及可能可修改的文件(例如, 經(jīng)由寫時復(fù)制(c叩y-on-write)操作)通常進入合并目錄的專用部分。合并目 錄的公共部分中的文件通常是可見的但是不可修改的。專用目錄中所創(chuàng)建的具 有與一個或多個構(gòu)成公共目錄中的一個或多個文件相同的名稱的文件通常將 屏蔽或隱藏公共文件,因為專用文件的排名高于類似命名的公共文件。但是如 果排名最高的專用文件被刪除,則可顯示或展示公共文件中的一個,因為現(xiàn)在 公共文件是該名稱的排名最高的文件。對于先前訪問過專用文件的應(yīng)用程序而 言,該專用文件將不會看上去已被刪除。先前已經(jīng)訪問過專用文件的應(yīng)用程序 現(xiàn)在將訪問先前隱藏但現(xiàn)在改為展示的文件,其據(jù)該應(yīng)用程序所知是同一個文 件,但該先前隱藏的文件的內(nèi)容很可能是不同的。此外,刪除文件的進一步嘗 試將失敗,因為現(xiàn)在正被打開的文件處于只讀位置中。這是成問題的。
為了解決這些問題,將標(biāo)記添加到專用目錄以指示所標(biāo)記的文件將被認(rèn)為 是"已刪除的"并且因此應(yīng)當(dāng)不再經(jīng)由邏輯合并目錄視圖可見。因此,在本發(fā)明 的實施例中,提供用于刪除標(biāo)記的存儲并且在文件訪問操作期間創(chuàng)建并遵循刪 除標(biāo)記。存儲刪除標(biāo)記需要對于刪除信息的某一種持久存儲。因此,刪除數(shù)據(jù) 可指示所刪除的文件、目錄或子目錄的名稱以及該文件、目錄或子目錄被刪除 的位置。這些目標(biāo)可通過存儲標(biāo)識刪除的文件、目錄或子目錄的特殊文件,存儲諸如刪除的文件、目錄或子目錄的重解析點等另一文件系統(tǒng)標(biāo)記,將另一流 或擴展屬性與刪除的文件、目錄或子目錄存儲在一起,以及將刪除數(shù)據(jù)存儲在 外部(單獨的)存儲中來實現(xiàn)。因為刪除可在事務(wù)中發(fā)生,所以所使用的任何
實現(xiàn)都可以是知曉事務(wù)的。在某些WINDOWS操作系統(tǒng)中,文件系統(tǒng)是事務(wù) 型的(transactional),這意味著多個文件系統(tǒng)操作可作為一組來一起完成。當(dāng) 已完成所有操作時,可或者提交或者中止改變。因此或者所有改變都出現(xiàn),或 者沒有一個改變出現(xiàn)。因此,如果刪除標(biāo)記作為事務(wù)的一部分來創(chuàng)建,則刪除 標(biāo)記直到提交事務(wù)才出現(xiàn),并且如果事務(wù)被中止,則刪除標(biāo)記也消失。
在從合并目錄中虛擬地刪除文件、目錄或子目錄時需要創(chuàng)建刪除標(biāo)記。在 接收到對于先前從合并目錄中刪除的文件、目錄或子目錄的打開文件、目錄或 子目錄的請求,接收到對于先前從合并目錄中刪除的文件、目錄或子目錄的枚 舉文件、目錄或子目錄的請求,接收到對于先前從合并目錄中刪除的文件、目 錄或子目錄的創(chuàng)建文件、目錄或子目錄的請求等時需要遵循刪除標(biāo)記。
在本發(fā)明的某些實施例中,當(dāng)文件、目錄或子目錄被刪除時,具有相同名 稱的文件、目錄或子目錄將不會再次從除了合并目錄的專用部分之外的構(gòu)成目 錄中展示。在這種情況下,如果來自構(gòu)成(公共)目錄的具有相同名稱的文件、 目錄或子目錄隨后開始存在,則該文件、目錄或子目錄將不會在該合并目錄中 可見。在本發(fā)明的某些實施例中,標(biāo)記只在合并目錄的公共部分中存在與正被 刪除的文件、目錄或子目錄同名的文件、目錄或子目錄的情況下才創(chuàng)建。在這 種情況下,刪除專用文件、目錄或子目錄否則將導(dǎo)致展示或顯示同名的公共文 件、目錄或子目錄。如果同名的文件、目錄或子目錄隨后開始存在,則該文件、 目錄或子目錄將會在合并目錄中可見。
示例性計算環(huán)境
圖1及以下討論旨在提供可在其中實現(xiàn)本發(fā)明的合適計算環(huán)境的簡要概 括描述。然而,應(yīng)當(dāng)理解,構(gòu)想了所有種類的手持式、便攜式和其它計算設(shè)備 來結(jié)合本發(fā)明使用。盡管以下描述了通用計算機,但是這僅是一個示例,并且 本發(fā)明只需具有網(wǎng)絡(luò)服務(wù)器互操作性和交互的瘦客戶機。由此,本發(fā)明可在其 中蘊含了極少或最小客戶機資源的聯(lián)網(wǎng)的主存服務(wù)的環(huán)境,例如其中客戶機設(shè) 備僅用作瀏覽器或到萬維網(wǎng)的接口的聯(lián)網(wǎng)環(huán)境中實現(xiàn)。盡管并非所需,但本發(fā)明可經(jīng)由開發(fā)者使用的,和/或包括在網(wǎng)絡(luò)瀏覽軟 件中的應(yīng)用程序編程接口 (API)來實現(xiàn),該網(wǎng)絡(luò)瀏覽軟件將在諸如程序模塊 等由諸如客戶機工作站、服務(wù)器或其它設(shè)備等一個或多個計算機執(zhí)行的計算機 可執(zhí)行指令的一般上下文中描述。 一般而言,程序模塊包括執(zhí)行特定任務(wù)或?qū)?現(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等。通常,程序模 塊的功能可以在各個實施例中按需進行組合或分布。此外,本領(lǐng)域的技術(shù)人員 可以理解,本發(fā)明可以用其它計算機系統(tǒng)配置來實施。適用于本發(fā)明的其它眾 所周知的計算系統(tǒng)、環(huán)境和/或配置包括但不限于,個人計算機(PC)、自動 柜員機、服務(wù)器計算機、手持式或膝上型設(shè)備、多處理器系統(tǒng)、基于微處理器 的系統(tǒng)、可編程消費者電子設(shè)備、網(wǎng)絡(luò)PC、小型計算機、大型計算機等等。 本發(fā)明也可以在其中任務(wù)由通過通信網(wǎng)絡(luò)鏈接或其它數(shù)據(jù)傳輸介質(zhì)的遠程處 理設(shè)備來執(zhí)行的分布式計算環(huán)境中實踐。在分布式計算環(huán)境中,程序模塊可以 位于包括存儲器存儲設(shè)備在內(nèi)的本地和遠程計算機存儲介質(zhì)中。
因此,圖1示出了其中可實現(xiàn)本發(fā)明的合適的計算系統(tǒng)環(huán)境100的一個示 例,盡管如上所述,計算系統(tǒng)環(huán)境100僅為合適的計算環(huán)境的一個示例,并非
對本發(fā)明的使用范圍或功能提出任何局限。也不應(yīng)該把計算環(huán)境ioo解釋為對
示例性操作環(huán)境100中示出的任一組件或其組合有任何依賴性或要求。
參考圖1,用于實現(xiàn)本發(fā)明的示例性系統(tǒng)包括計算機110形式的通用計算 設(shè)備。計算機110的組件可以包括,但不限于,處理單元120、系統(tǒng)存儲器130 和將包括系統(tǒng)存儲器在內(nèi)的各種系統(tǒng)組件耦合至處理單元120的系統(tǒng)總線 121。系統(tǒng)總線121可以是幾種類型的總線結(jié)構(gòu)中的任何一種,包括存儲器總 線或存儲控制器、外圍總線、以及使用各種總線體系結(jié)構(gòu)中的任一種的局部總 線。作為示例,而非限制,這樣的體系結(jié)構(gòu)包括工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu)(ISA)總 線、微通道體系結(jié)構(gòu)(MCA)總線、增強型ISA (EISA)總線、視頻電子技 術(shù)標(biāo)準(zhǔn)協(xié)會(VESA)局部總線和外圍部件互連(PCI)總線(也稱為夾層 (Mezzanine)總線)。
計算機110通常包括各種計算機可讀介質(zhì)。計算機可讀介質(zhì)可以是能由計 算機110訪問的任何可用介質(zhì),而且包含易失性、非易失性介質(zhì)以及可移動和 不可移動介質(zhì)。作為示例而非局限,計算機可讀介質(zhì)可以包括計算機存儲介質(zhì)和通信介質(zhì)。計算機存儲介質(zhì)包括以用于存儲諸如計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、 程序模塊或其它數(shù)據(jù)等信息的任何方法或技術(shù)實現(xiàn)的易失性和非易失性、可移
動和不可移動介質(zhì)。計算機存儲介質(zhì)包括但不限于,RAM、 ROM、 EEPROM、 閃存或其它存儲器技術(shù)、CDROM、數(shù)字多功能盤(DVD)或其它光盤存儲、 磁盒、磁帶、磁盤存儲或其它磁存儲設(shè)備、或可以用來儲存所期望的信息并可 由計算機110訪問的任一其它介質(zhì)。通信介質(zhì)通常以諸如載波或其它傳輸機制 等己調(diào)制數(shù)據(jù)信號來體現(xiàn)計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù), 并包括任意信息傳送介質(zhì)。術(shù)語"已調(diào)制數(shù)據(jù)信號"指的是其一個或多個特征以 在信號中編碼信息的方式被設(shè)定或更改的信號。作為示例而非限制,通信介質(zhì) 包括有線介質(zhì),諸如有線網(wǎng)絡(luò)或直接線連接,以及無線介質(zhì),諸如聲學(xué)、RF、 紅外線和其它無線介質(zhì)。以上的任何組合也應(yīng)包括在計算機可讀介質(zhì)的范圍 內(nèi)。
系統(tǒng)存儲器130包括易失性和/或非易失性存儲器形式的計算機存儲介質(zhì), 如只讀存儲器(ROM) 131和隨機存取存儲器(RAM) 132?;据斎?輸出系 統(tǒng)133 (BIOS)包括如在啟動時幫助在計算機110內(nèi)的元件之間傳輸信息的基 本例程,它通常儲存在ROM131中。RAM132通常包含處理單元120可以立 即訪問和/或目前正在其上操作的數(shù)據(jù)和/或程序模塊。作為示例而非局限,圖 l示出了操作系統(tǒng)134、應(yīng)用程序135、其它程序模塊136和程序數(shù)據(jù)137。
計算機110也可以包括其它可移動/不可移動、易失性/非易失性計算機存 儲介質(zhì)。僅作為示例,圖l示出了對不可移動、非易失性磁介質(zhì)進行讀寫的硬 盤驅(qū)動器141,對可移動、非易失性磁盤152進行讀寫的磁盤驅(qū)動器151,以 及對諸如CD ROM或其它光學(xué)介質(zhì)等可移動、非易失性光盤156進行讀寫的 光盤驅(qū)動器155??梢栽谑纠圆僮鳝h(huán)境中使用的其它可移動/不可移動、易失 性/非易失性計算機存儲介質(zhì)包括但不限于,磁帶盒、閃存卡、數(shù)字多功能盤、 數(shù)字錄像帶、固態(tài)RAM、固態(tài)ROM等等。硬盤驅(qū)動器141通常由不可移動 存儲器接口,諸如接口 140連接至系統(tǒng)總線121,磁盤驅(qū)動器151和光盤驅(qū)動 器155通常由可移動存儲器接口,諸如接口 150連接至系統(tǒng)總線121。
上文討論并在圖1中示出的驅(qū)動器及其關(guān)聯(lián)的計算機存儲介質(zhì)為計算機 110提供了計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其它數(shù)據(jù)的存儲。在圖1中,例如,硬盤驅(qū)動器141被示為存儲操作系統(tǒng)144、應(yīng)用程序145、其它程 序模塊146和程序數(shù)據(jù)147。注意,這些組件可以與操作系統(tǒng)134、應(yīng)用程序 135、其它程序模塊136和程序數(shù)據(jù)137相同,也可以與它們不同。操作系統(tǒng) 144、應(yīng)用程序145、其它程序模塊146和程序數(shù)據(jù)147在這里被標(biāo)注了不同的 標(biāo)號是為了說明至少它們是不同的副本。用戶可以通過輸入設(shè)備,諸如鍵盤162 和定點設(shè)備161 (通常指鼠標(biāo)、跟蹤球或觸摸墊)向計算機110輸入命令和信 息。其它輸入設(shè)備(未示出)可以包括話筒、操縱桿、游戲手柄、圓盤式衛(wèi)星 天線、掃描儀等。這些和其它輸入設(shè)備通常由耦合至系統(tǒng)總線121的用戶輸入 接口 160連接到處理單元120,但是也可由諸如并行端口、游戲端口或通用串 行總線(USB)之類的其它接口和總線結(jié)構(gòu)連接。
監(jiān)視器191或其它類型的顯示設(shè)備也經(jīng)由接口,諸如視頻接口 190連接至 系統(tǒng)總線121。諸如北橋等圖形接口 182也可連接到系統(tǒng)總線121。北橋是與 CPU或主機處理單元120通信的芯片組,并承擔(dān)了加速圖形端口 (AGP)通信 的責(zé)任。 一個或多個圖形處理單元(GPU) 184可以與圖形接口 182通信。在 這一點上,GPU 184—般包括諸如寄存器存儲等片上存儲器存儲,并且GPU 184 與視頻存儲器186通信。然而,GPU184僅是協(xié)處理器的一個示例,且因此計 算機110中可包括各種協(xié)處理設(shè)備。監(jiān)視器191或其它類型的顯示設(shè)備也通過 接口,如視頻接口 190連接至系統(tǒng)總線121,而視頻接口 190又與視頻存儲器 186通信。除監(jiān)視器191之外,計算機也可包括其它外圍輸出設(shè)備,如揚聲器 197和打印機196,它們通過輸出外圍接口 195連接。
計算機110可使用至一個或多個遠程計算機,如遠程計算機180的邏輯連 接在網(wǎng)絡(luò)化環(huán)境中操作。遠程計算機180可以是個人計算機、服務(wù)器、路由器、 網(wǎng)絡(luò)PC、對等設(shè)備或其它常見的網(wǎng)絡(luò)節(jié)點,并且通常包括許多或所有以上相 對于計算機IIO所描述的元件,盡管在圖1中僅示出了存儲器存儲設(shè)備181。 圖1中所示的邏輯連接包括局域網(wǎng)(LAN) 171和廣域網(wǎng)(WAN) 173,但也 可以包括其它網(wǎng)絡(luò)。這樣的聯(lián)網(wǎng)環(huán)境在辦公室、企業(yè)范圍計算機網(wǎng)絡(luò)、內(nèi)聯(lián)網(wǎng) 和因特網(wǎng)中是常見的。
當(dāng)在LAN聯(lián)網(wǎng)環(huán)境中使用時,計算機110通過網(wǎng)絡(luò)接口或適配器170連 接至LAN 171。當(dāng)在WAN聯(lián)網(wǎng)環(huán)境中使用時,計算機110通常包括調(diào)制解調(diào)器172或用于通過諸如因特網(wǎng)等WAN 173建立通信的其它裝置。調(diào)制解調(diào)器 172可以是內(nèi)置或外置的,它可以通過用戶輸入接口 160或其它適當(dāng)?shù)臋C制連 接至系統(tǒng)總線121。在網(wǎng)絡(luò)化環(huán)境中,相對于計算機110所描述的程序模塊或 其部分可被儲存在遠程存儲器存儲設(shè)備中。作為示例而非局限,圖1示出遠程 應(yīng)用程序185駐留在存儲器設(shè)備181上??梢岳斫猓镜木W(wǎng)絡(luò)連接是示例性 的,且可以使用在計算機之間建立通信鏈路的其它手段。
本領(lǐng)域的普通技術(shù)人員可以理解,計算機110或其它客戶機設(shè)備可作為計 算機網(wǎng)絡(luò)的一部分來部署。在這一點上,本發(fā)明涉及具有任意數(shù)量的存儲器或 存儲單元以及在任意數(shù)量的存儲單元或巻上發(fā)生的任意數(shù)量的應(yīng)用程序和進
程的任何計算機系統(tǒng)。本發(fā)明可應(yīng)用于具有部署在網(wǎng)絡(luò)環(huán)境中的具有遠程或本 地存儲的服務(wù)器計算機和客戶計算機的環(huán)境。本發(fā)明也可應(yīng)用于具有編程語言 功能、解釋和執(zhí)行能力的獨立計算設(shè)備。 合并文件系統(tǒng)目錄中的虛擬刪除
操作系統(tǒng)監(jiān)視由在豎井中運行的進程做出的文件系統(tǒng)訪問請求。在計算機 或計算機系統(tǒng)中可同時存在多個豎井。多個進程可在每一個豎井中執(zhí)行。單個
操作系統(tǒng)映像創(chuàng)建豎井并創(chuàng)建和監(jiān)視所有豎井中的所有進程。文件系統(tǒng)目錄的 豎井專用視圖由操作系統(tǒng)通過在表面上將兩個或多個實際后臺存儲(文件目 錄) 一起合并為對于豎井看上去是單個目錄的樣子來創(chuàng)建。即,兩個或多個單 獨的文件系統(tǒng)目錄可作為單個目錄展示給豎井(以及在該豎井中運行的進程)。 可使用這些實際后臺存儲中的一個或多個來為這些豎井中的一個或多個構(gòu)建 豎井專用視圖的一部分。
圖2示出了用于如上所述的合并文件系統(tǒng)目錄中的文件、目錄或子目錄的 刪除的系統(tǒng)200的一個實施例。系統(tǒng)200可駐留在一臺或多臺計算機上,諸如 以上參考圖1所述的計算機110。在圖2中, 一個或多個執(zhí)行環(huán)境可在計算機 IIO上運行。所構(gòu)想的一種類型的執(zhí)行環(huán)境是豎井(以上已更詳細地描述)。 在圖2中,描繪了豎井202和豎井220。豎井可以是嵌套的,即,豎井202自 身可包括豎井(未示出)。豎井可被嵌套成任何所需層次。另一豎井內(nèi)所嵌套 的豎井有時被稱為子豎井,而其中嵌套豎井的豎井有時被稱為其父豎井。父豎 井可控制其資源(包括文件在內(nèi))對于其子豎井可用的程度。豎井可用于創(chuàng)建隔離的執(zhí)行環(huán)境以使得與一個豎井相關(guān)聯(lián)的資源對于在 該豎井中運行的進程可用而不可由在計算機或計算機系統(tǒng)或計算機網(wǎng)絡(luò)中的 其他計算機上運行的其他豎井來訪問。例如,如果豎井202是隔離的執(zhí)行環(huán)境,
則對于在豎井202中運行的進程216可用的資源(未示出)將對于諸如在第二 豎井,g卩,豎井220中運行的諸如進程226等進程不可用。然而,在豎井202 中運行的第二進程(諸如進程217)可訪問該資源。類似地,對于進程226和 227可用的資源對于在豎井202中運行的資源216和217不可用。
或者,根據(jù)本發(fā)明的實施例,豎井可用于創(chuàng)建半隔離的或受控的執(zhí)行環(huán)境, 其中某些資源是共享的而某些資源不是共享的,或者其中資源的某些部分是共 享的而該資源的其他部分不是共享的。這樣一個構(gòu)想到的資源是文件系統(tǒng)目 錄。例如,在豎井202中諸如進程216和217等'一個或多個進程正在運行并可 訪問文件系統(tǒng)目錄。在本發(fā)明的某些實施例中,文件系統(tǒng)目錄是虛擬合并目錄 212,其中盡管對于進程216和217而言作為單個實際目錄出現(xiàn),但虛擬合并 目錄212實際上是操作系統(tǒng)通過使用回調(diào)在特定情況下對特定類型的操作執(zhí)行 特殊處理而創(chuàng)建的兩個或多個目錄的并集的虛擬視圖。由操作系統(tǒng)214創(chuàng)建的 視圖可包括被合并在一起以創(chuàng)建虛擬合并目錄的至少一個(實際)公共或全局 (對于計算機系統(tǒng)而言)可共享目錄以及至少一個(實際)專用或本地(對于 豎井而言)目錄的條目的并集,但所構(gòu)想的本發(fā)明并不限于此。合并目錄可從 兩個或更多公共或?qū)S媚夸浀娜魏谓M合中構(gòu)建,公共或?qū)S媚夸浿械囊粋€或多 個可被設(shè)計為只讀或讀寫的。此外,對于構(gòu)成目錄中的一個或多個可能不存在 公共后臺存儲。例如,在本發(fā)明的某些實施例中由操作系統(tǒng)創(chuàng)建的虛擬合并目 錄的可共享部分是全局目錄(例如,WINDOWS目錄),而虛擬合并目錄的專 用、非共享部分與特定豎井相關(guān)聯(lián)(例如,與豎井202相關(guān)聯(lián)),并且可表示 例如,在該豎井中運行的應(yīng)用程序的本地或?qū)S梦募?。例如,在圖2中,與豎 井202相關(guān)聯(lián)的虛擬合并目錄212包括從全局目錄(例如,公共或全局 WINDOWS目錄204)導(dǎo)出的可共享部分204a以及從本地目錄(與豎井202 相關(guān)聯(lián)的專用、非共享目錄206)導(dǎo)出的不可共享部分206a。與豎井220相關(guān) 聯(lián)的虛擬合并目錄232包括從全局目錄(例如,公共或全局WINDOWS目錄 204)導(dǎo)出的可共享部分204a以及從本地目錄(與豎井220相關(guān)聯(lián)的專用、非共享目錄203)導(dǎo)出的不可共享部分236a。在本發(fā)明的某些實施例中,虛擬合 并目錄212的可共享部分204a是只讀的,而虛擬合并目錄212的專用、非共 享部分206a是讀寫的,但可以理解,所構(gòu)想的本發(fā)明并不限于此。即,虛擬 合并目錄的專用部分可以是只讀的或讀寫的或者可包括只讀或讀寫的部分。類 似地,虛擬合并目錄的可共享部分可以是只讀的或讀寫的或者可包括僅僅只讀 的或讀寫的部分。此外,可以理解,所構(gòu)想的本發(fā)明并不限于合并兩個目錄。 可合并任何數(shù)量的目錄(n個目錄)以創(chuàng)建虛擬合并目錄。虛擬合并目錄在本 發(fā)明的某些實施例中并非持久存儲在永久存儲上或本質(zhì)上在存儲器中創(chuàng)建,而 是由操作系統(tǒng)214通過監(jiān)視文件訪問請求并如以下更詳細描述地執(zhí)行與文件訪 問請求的類型相關(guān)聯(lián)的特殊處理來按需推導(dǎo)出。
因此,可以理解,因為在計算機上或計算機系統(tǒng)中可能同時存在不止一個 豎井,所以也可能同時存在不止一個虛擬合并目錄,g卩,在豎井和虛擬合并目 錄之間存在一對一的對應(yīng)關(guān)系,但在特定計算機或計算機系統(tǒng)上在任一時刻可 能存在任何數(shù)量的豎井及合并目錄。此外,每一個虛擬合并目錄的一部分可包 括可共享部分(例如,在圖2中,虛擬合并目錄212和232的可共享部分是 WINDOWS目錄204a),其對于計算機系統(tǒng)中的所有豎井而言可以是相同的 或不相同的,并且可以與實際后臺目錄204相同或不相同。在本發(fā)明的某些實 施例中,在系統(tǒng)中的所有豎井中運行的所有應(yīng)用程序或進程共享豎井的合并目 錄的單個可共享部分,其可能存在或不存在于豎井在其上運行的特定計算機 上。此外,作為合并目錄的可共享或不可共享部分的"后臺"的實際目錄可存 在于諸如可移動盤、CDROM、 USB鑰匙等可移動介質(zhì)上。類似地,實際后臺 目錄可駐留在遠程系統(tǒng)上。對于合并目錄的專用或不可共享部分及其后臺存儲 而言亦是如此。
在本發(fā)明的某些實施例中,操作系統(tǒng)214中創(chuàng)建合并目錄(例如,合并目 錄212和232)的機制是過濾器驅(qū)動程序,其能夠通過注冊回調(diào)來將其自身插 入到操作的代碼路徑中。在本發(fā)明的某些實施例中,過濾器驅(qū)動程序包括文件 系統(tǒng)的一部分。在本發(fā)明的某些實施例中,所注冊的回調(diào)包括PreCreate、 PostCreate 、 PreDirectoryControl 、 PreQuerylnformation 、 Pre Setlnformation 、 PreClose和Setlnformation,但可以理解,可注冊其他回調(diào)。在本發(fā)明的某些實施例中,對其執(zhí)行特殊處理(例如,經(jīng)由回調(diào))的操作是對文件、目錄或子目 錄的枚舉、打開、創(chuàng)建、重命名、關(guān)閉和刪除操作。例如,枚舉操作可以與
PreDirectoryControl和PreQuerylnformation回調(diào)相關(guān)聯(lián),打開和創(chuàng)建與PreCreate 和PostCreate回調(diào)相關(guān)聯(lián),關(guān)閉與PreClose回調(diào)相關(guān)聯(lián),刪除與Setlnformation 回調(diào)相關(guān)聯(lián),而重命名與PreSetlnformation回調(diào)相關(guān)聯(lián)。在某些實施例中,當(dāng) 文件系統(tǒng)訪問請求從進程發(fā)出時,操作系統(tǒng)經(jīng)由回調(diào)來監(jiān)視該請求并且如果操 作是對于其將發(fā)生特殊處理的操作中的一個,則執(zhí)行特殊處理。例如,在圖2 中,操作系統(tǒng)214可監(jiān)視諸如由豎井202中的進程216發(fā)起的請求240等文件 系統(tǒng)訪問請求并執(zhí)行特殊處理以便從專用目錄206 (與豎井202相關(guān)聯(lián))和公 共目錄204中創(chuàng)建虛擬合并目錄212。虛擬合并目錄212中從專用目錄206導(dǎo) 出的各部分由(虛擬的)專用目錄206a來表示,而虛擬合并目錄212中從公 共目錄204導(dǎo)出的各部分由(虛擬的)公共目錄204a來表示。
每一個構(gòu)成(后臺存儲)目錄都可以與一排名相關(guān)聯(lián)(例如,在圖2中, 專用(后臺存儲)目錄206與排名2I0相關(guān)聯(lián)、公共WINDOWS (后臺存儲) 目錄204與排名208相關(guān)聯(lián))。在某些實施例中排名在需要時用作平局打破器 (tiebreaker)。例如,如果請求目錄文件訪問(例如,打開、枚舉、刪除等), 并且所指示的文件存在于兩個同名目錄中,則可使用構(gòu)成目錄的排名來確定向 請求者展示哪個文件,即,向請求者展示具有最高排名的目錄中的文件。類似 地,如果給定名稱是一個構(gòu)成目錄中的文件并且相同的名稱是另一組構(gòu)成目錄 中的子目錄,則在某些實施例中向請求者展示具有最高排名的目錄中的條目。 在本發(fā)明的某些實施例中,給予專用目錄206比公共目錄204更高的排名。
例如,在某些實施例中文件系統(tǒng)枚舉是來自所有構(gòu)成目錄的所有文件和子 目錄的并集。如果在不止一個構(gòu)成目錄中存在相同的名稱,則使用每一構(gòu)成目 錄的排名來確定應(yīng)展示哪個目錄的版本的名稱。當(dāng)從合并目錄中打開文件時, 該文件從展示該文件的排名最高的目錄中打開。在創(chuàng)建文件時,如果該文件還 未存在于任一構(gòu)成目錄中,則它將在具有最高排名的目錄中創(chuàng)建。在重命名文 件時,査詢每一個構(gòu)成目錄以確定新名稱尚未被使用,并且如果未被使用,則 將該文件重命名為該新名稱。
在本發(fā)明的某些實施例中,將每一個目錄中的每一個文件與在不止一個文件或目錄在各構(gòu)成目錄中具有相同的名稱時確定向豎井展示哪個文件的排名 相關(guān)聯(lián),而不是將排名與目錄相關(guān)聯(lián)。
如上所述,當(dāng)兩個或更多實際目錄經(jīng)由一個邏輯視圖來展示時,刪除文件 可展示或顯示其他構(gòu)成目錄之一中具有與所刪除的文件相同的名稱的文件。例 如,如果排名最高的文件已被刪除,則可展示來自一構(gòu)成目錄的具有相同名稱 的文件。該文件的展示可能不是合乎需要的。因此,需要"記住"在構(gòu)成目錄中 存在過具有相同名稱的文件并防止在同名的排名最高的文件已被刪除時展示 該文件,因為否則,專用文件對于先前訪問過該專用文件的應(yīng)用程序而言將不 會看上去已被刪除。
為了解決以上需求,將刪除標(biāo)記與在合并目錄環(huán)境中對其接收到刪除請求 的文件相關(guān)聯(lián)。在某些實施例中,將標(biāo)記添加到專用目錄以指示所標(biāo)記的文件 將被認(rèn)為是"已刪除的"并因此應(yīng)當(dāng)不再經(jīng)由邏輯合并目錄視圖可見。因此,在 本發(fā)明的實施例中,提供用于刪除標(biāo)記的存儲并且在文件訪問操作期間創(chuàng)建并 遵循刪除標(biāo)記。存儲刪除標(biāo)記需要用于刪除信息的某一種持久存儲。構(gòu)想用于
存儲刪除標(biāo)記的多個選項。 一個選項是裝飾或發(fā)消息通知(message)所刪除 的文件的名稱以指示刪除。例如,假設(shè)文件"ABC.txt"將被虛擬地刪除。ABC.txt 可通過創(chuàng)建被稱為"SSdeletedSS ABC.txt"(己向其添加包括"SSdeletedSS的裝飾 的原始名稱")的文件來虛擬地刪除。適當(dāng)?shù)难b飾的存在指示虛擬地刪除的文 件。很明顯,任何類型的裝飾都可指示虛擬刪除所示裝飾僅僅是一種可能的 裝飾的示例。另一選項是將刪除標(biāo)記作為重解析點來存儲。S卩,文件系統(tǒng)可存 儲"名稱條目",其不是指向文件的直接指針而是由過濾器驅(qū)動程序存儲的、用 于確定何時重解析到另一位置的文件數(shù)據(jù)。在某些實施例中,第三方可提供其 自己的重解析點。提供重解析點結(jié)構(gòu)并且在檢測到重解析點結(jié)構(gòu)時將其作為刪 除標(biāo)記來處理(如對于特殊命名的文件所做的那樣)。重解析點可從響應(yīng)于枚 舉請求而返回的結(jié)果中過濾掉。另一選項是將刪除標(biāo)記存儲在外部數(shù)據(jù)庫中。 例如,諸如文件名、經(jīng)裝飾的名稱或重解析點等刪除標(biāo)記可被存儲在文件系統(tǒng) 中的另一位置中(或許被存儲在被稱為"刪除的文件"的文件、目錄或子目錄 中),或者刪除標(biāo)記可被存儲在另一非文件系統(tǒng)存儲中。在這種情況下,將存 儲刪除的文件的名稱,而不是存儲經(jīng)裝飾的名稱以指示虛擬地刪除的文件,從而需要查找操作以確定給定文件是否已被虛擬地刪除。另一選項是使用擴展屬 性來指示文件已被刪除。即,特殊擴展屬性可以與文件名存儲在一起(例如, 而不是裝飾文件名),該特殊擴展屬性指示文件已被虛擬地刪除。因此,刪除 數(shù)據(jù)可指示所刪除的文件、目錄或子目錄的名稱以及該文件、目錄或子目錄被 刪除的位置。這些目標(biāo)可通過存儲標(biāo)識刪除的文件、目錄或子目錄的特殊文件, 存儲諸如刪除的文件、目錄或子目錄的重解析點等另一文件系統(tǒng)標(biāo)記,將另一 流或擴展屬性與刪除的文件、目錄或子目錄存儲在一起,以及將刪除數(shù)據(jù)存儲 在外部(單獨的)存儲中來實現(xiàn)。因為刪除可在事務(wù)中發(fā)生,所以所使用的任 何實現(xiàn)都應(yīng)當(dāng)是知曉事務(wù)的。例如,如果刪除標(biāo)記被存儲在外部存儲中,則該 外部存儲將需要知道事務(wù)何時被提交并且將在事務(wù)提交期間將結(jié)果提交給外 部存儲。類似地,如果事務(wù)被中止,則該外部存儲將回退(或撤銷)改變。該 外部存儲還必須在事務(wù)中提供動作已經(jīng)發(fā)生的視圖,但在該事務(wù)之外使得看上 去就像該動作還未發(fā)生。
在從合并目錄中刪除文件時需要創(chuàng)建刪除標(biāo)記。在接收到對于先前從合并 目錄中刪除的文件的打開文件的請求、接收到對于先前從合并目錄中刪除的文 件的枚舉文件的請求、接收到對于先前從合并目錄中刪除的文件的創(chuàng)建文件的 請求等時需要遵循刪除標(biāo)記。
在本發(fā)明的某些實施例中,當(dāng)文件被刪除時,具有相同名稱的文件將不會 再次從除了合并目錄的專用部分之外的構(gòu)成目錄中展示。 在這種情況下, 如果來自構(gòu)成(公共)目錄的具有相同名稱的文件隨后開始存在,則該文件將 不會在該合并目錄中可見。在本發(fā)明的某些實施例中,標(biāo)記只在合并目錄的公 共部分中存在與正被刪除的文件同名的文件的情況下才創(chuàng)建。在這種情況下, 刪除專用文件否則將導(dǎo)致展示或顯示同名的公共文件。如果同名的文件隨后開 始存在,則該文件將會在合并目錄中可見。
在本發(fā)明的某些實施例中,操作系統(tǒng)的過濾器驅(qū)動程序掛鉤各種文件系統(tǒng) 操作并且與上述合并目錄操作協(xié)同展示虛擬地刪除的文件、目錄或子目錄的正
確語義。例如,對于諸如枚舉操作(例如,使用PreDirectoryControl)等操作 而言刪除標(biāo)記本身是被隱藏的,并且已經(jīng)被虛擬地刪除的任何文件、目錄或子 目錄都是被隱藏的。即,可過濾掉刪除標(biāo)記以使得在接收到枚舉請求時不返回刪除標(biāo)記。類似地,對其存在刪除標(biāo)記的文件不響應(yīng)于枚舉請求來返回。對于
諸如創(chuàng)建或打開(例如,使用PreCreate)等操作而言防止調(diào)用者打開刪除標(biāo)記 或虛擬地刪除的文件、目錄或子目錄。在合并目錄環(huán)境中,在接收到打開或創(chuàng) 建操作請求時提供邏輯以確定是否試圖打開合并目錄的專用或公共部分中的 文件、目錄或子目錄。如果打開操作中所指定的文件、目錄或子目錄處于公共 部分中,則執(zhí)行檢查以確定在專用位置中是否存在對于該文件、目錄或子目錄 的刪除標(biāo)記。如果存在,則打開失敗(例如,返回"未找到狀態(tài)對象名")。不 允許打開刪除標(biāo)記形式的文件。對于重命名操作而言,將文件重命名為刪除標(biāo) 記形式的名稱是不被準(zhǔn)許的。對于刪除操作而言,在合并目錄的專用部分中為 文件、目錄或子目錄創(chuàng)建刪除標(biāo)記。在某些實施例中刪除標(biāo)記通過創(chuàng)建具有文 件名的發(fā)消息通知的版本的新文件來創(chuàng)建。(例如,如果文件名的ABC,如 果ABC將被虛擬地刪除,則創(chuàng)建名為SSdeletedSS ABC的文件。文件SSdeletedSS ABC的存在指示ABC已被虛擬地刪除。傳統(tǒng)上,目錄或子目錄在可被刪除之 前必須是空的。在目錄或子目錄虛擬刪除的情況下,可刪除其中只有刪除標(biāo)記 的目錄。在本發(fā)明的某些實施例中,這按照以下步驟來實現(xiàn)創(chuàng)建目錄的刪除 標(biāo)記、刪除嵌套的刪除標(biāo)記并且然后照常刪除目錄。
圖3是根據(jù)本發(fā)明的實施例的用于在表面上合并文件系統(tǒng)目錄的方法的 流程圖;在302,操作系統(tǒng)(例如,圖2的OS214)監(jiān)視文件系統(tǒng)訪問請求(諸 如由在豎井202中運行的進程216做出的文件系統(tǒng)訪問請求240)。當(dāng)操作系 統(tǒng)檢測到文件系統(tǒng)訪問請求(304)(例如,經(jīng)由回調(diào))日寸,操作系統(tǒng)214確 定所做出的文件系統(tǒng)訪問請求的類型(306、 314、 322、 326、 330)并執(zhí)行適 當(dāng)?shù)奶幚恚鐚⒃谝韵赂敿毜孛枋龅摹?br>
例如,在306,操作系統(tǒng)可確定文件系統(tǒng)訪問請求是創(chuàng)建或打開文件或目 錄的操作(306)。圖4是可在隨后發(fā)生的處理(308)的流程圖。當(dāng)打開或創(chuàng) 建中斷請求(IRP)被發(fā)送到其上存在合并目錄的巻時,調(diào)用使得操作系統(tǒng)的 過濾器驅(qū)動程序能夠檢查該請求以確定是否需要特殊處理的創(chuàng)建回調(diào)(例如, PreCreate)。使用過濾器驅(qū)動程序使得能夠?qū)崿F(xiàn)所描述的各特征而不修改底層 文件系統(tǒng)。或者,合并目錄的創(chuàng)建可通過修改底層文件系統(tǒng)來創(chuàng)建。在調(diào)用打 開或創(chuàng)建操作時,提供絕對路徑名或相對于現(xiàn)有打開的文件或目錄的路徑名。在使用相對打開時,請求分組中表示現(xiàn)有的打開的文件或目錄的字段引用應(yīng)接 收該請求的文件系統(tǒng)設(shè)備實例。在絕對打開的情況下,操作系統(tǒng)的IO管理器 解析名稱,對象管理器解析該名稱中指向設(shè)備對象的一部分并將該名稱的未解
析余額(balance)(尚未被解析的部分)連同指向其所處的設(shè)備對象的指針一 起傳回到I/O管理器。當(dāng)所涉及的文件或目錄應(yīng)使用豎井視圖(402)而不是 使用普通系統(tǒng)文件目錄來打開時需要特殊處理。如此處所使用的,"使用豎井 視圖"來執(zhí)行操作意味著文件或目錄的名稱在豎井的虛擬合并目錄的上下文中 而不是在普通(系統(tǒng))文件系統(tǒng)目錄的上下文中解釋。
在402,如果打開是絕對打開(不是相對打開)并且調(diào)用者處于豎井中, 則處理在404處繼續(xù)。在本發(fā)明的某些實施例中,操作系統(tǒng)通過觀察文件系統(tǒng) 訪問請求中的若干字段來確定打開或創(chuàng)建文件請求是相對還是絕對打開/創(chuàng)建。 如果文件系統(tǒng)訪問請求僅包括文件名并且發(fā)起該請求的線程不屬于在豎井中 運行的進程,則該請求被認(rèn)為是絕對打開。類似地,當(dāng)進程(在豎井中或不在 豎井中)將文件的句柄傳遞給另一進程時,如果原始句柄是在豎井中打開的, 則處理在404處繼續(xù)??墒褂镁浔侄沃兴鎯Φ男畔頇z索與該句柄相關(guān)聯(lián) 的元數(shù)據(jù)(408)。
由此,在404,在豎井的上下文中檢查該文件的名稱。文件或目錄使用豎 井視圖來打開,只要請求中所引用的文件或目錄最初在豎井中打開(例如,可 能在第一進程在一豎井中打開文件并且然后將該文件的句柄傳遞給豎井內(nèi)或 外的另一進程時發(fā)生)。在本發(fā)明的某些實施例中,如果請求中表示現(xiàn)有打開 的文件或目錄的句柄的字段不為空,則該請求被認(rèn)為是相對請求。在402,如 果調(diào)用者不在豎井中或如果原始句柄不是在豎井中打開的,則處理照常進行 (406)。如果請求使用絕對名稱(即,使用路徑名來顯式命名文件或目錄并 且請求的打開文件字段為空),則操作系統(tǒng)確定發(fā)起請求的進程(調(diào)用者)是 否處于豎井中。在本發(fā)明的某些實施例中,操作系統(tǒng)通過確定發(fā)起文件系統(tǒng)訪 問請求的線程是否處于豎井中來確定調(diào)用者是否處于豎井中?;蛘?,在某些實 施例中操作系統(tǒng)可通過檢査可用豎井標(biāo)識符來標(biāo)記的文件系統(tǒng)訪問請求以確 定該請求是否源自豎井中的調(diào)用者來確定調(diào)用者是否處于豎井中。如果調(diào)用者 處于豎井中,則文件或目錄使用豎井視圖來打開。因此,如果請求中所引用的文件或目錄最初不是在豎井中打開的,或者如 果請求是絕對打開并且調(diào)用者不在豎井中,則處理在406處繼續(xù)?!熠啵M行普 通處理。在本發(fā)明的某些實施例的普通處理中,I/O管理器檢查設(shè)備對象以確
定該設(shè)備對象是否具有指向巻參數(shù)塊(VPB)的有效指針并使用該VPB的設(shè) 備對象字段來找出正確的文件系統(tǒng)設(shè)備對象。如果設(shè)備對象沒有有效的VPB 指針,則I/O管理器將IRP_MJ—CREATE請求直接發(fā)送到由對象管理器傳入的 設(shè)備對象的設(shè)備驅(qū)動程序。
在404,如果操作將使用豎井視圖來處理,則檢查請求中的文件或目錄的 名稱并在豎井的上下文中解釋該文件或目錄的名稱。假設(shè)例如,"文件l"同時 存在于全局目錄(例如,.合并目錄視圖的可共享部分)和專用目錄('例如,不 可與其他豎井共享的部分)兩者中。假設(shè)在豎井中運行的應(yīng)用程序請求使用相 對打開來打開"文件1"。假設(shè)文件1將相對于在豎井中打開的"CAWINDOWS" 來打開,其中"C:VWINDOWS"實際上是"CASilosV)00(AWINDOWS"。在這種情 況下,該請求將會被重寫以使得將引用專用目錄(例如, "C:\Silos\0000\WINDOWS")中的文件1,而不是全局目錄中的文件1。發(fā)生普 通出錯處理。即,例如在打開操作中,如果搜索由文件系統(tǒng)訪問請求中的名稱 來標(biāo)識的文件但在任一目標(biāo)目錄中都未找到,則返回出錯消息。如果在適當(dāng)?shù)?目錄中找到文件,則將該文件的句柄返回給調(diào)用者。可在句柄被返回給調(diào)用者 之前將元數(shù)據(jù)附加到該句柄以便成功地打開或創(chuàng)建。如果未找到文件,則返回 出錯消息。在408,檢索豎井的合并目錄元數(shù)據(jù)。在410,如果未在合并目錄 的專用部分中中找到所請求的名稱,則處理在422處繼續(xù)。在422,可檢查其 他目錄(諸如公共位置)以查找文件。如果請求是創(chuàng)建請求,則文件可在合并 位置中創(chuàng)建。如果請求成功,則將元數(shù)據(jù)附加到該請求以便正確地處理將來對 該句柄的請求。在410,如果在合并目錄中找到所請求的名稱,則確定是否要 創(chuàng)建或打開所命名的文件(412)。在某些操作系統(tǒng)中,可使用"創(chuàng)建操作"來 同時打開和創(chuàng)建文件。如果是這種情況,則需要步驟412。在420,如果所請 求的操作是"打開文件",則操作系統(tǒng)確定在合并目錄的專用(不可共享部分) 中是否存在該文件。在420,如果操作系統(tǒng)確定在虛擬合并文件目錄的專用部 分中不存在該文件,則檢查合并目錄的公共部分以查找該文件。如果在合并目錄的公共部分中不存在該文件,則返回出錯消息。如果在合并目錄中找到該文 件,則返回該文件的句柄。在412,如果確定將要創(chuàng)建文件,則在414,操作 系統(tǒng)檢查以查看在公共或?qū)S媚夸浿惺欠褚呀?jīng)存在該文件。如果存在,則導(dǎo)致
出錯(418)。如果不存在,則在專用目錄中創(chuàng)建文件,將元數(shù)據(jù)與該句柄相 關(guān)聯(lián)(416)并將該句柄連同該元數(shù)據(jù)一起返回給調(diào)用者。 -
例如,假設(shè)豎井202中的進程216發(fā)出文件系統(tǒng)請求240。還假設(shè)文件系 統(tǒng)請求240是創(chuàng)建文件請求(在WINDOWS中,這可能需要向其上存在合并 目錄的巻發(fā)送IRP一MJ—CREATE IRP)。在發(fā)送IRP一MJ一CREATE IRP時調(diào)用 PreCreate回調(diào)。因為做出了回調(diào),所以O(shè)S 214中的過濾器驅(qū)動程序能夠檢查 請求并確定對于該特定創(chuàng)建操作是否需要特殊處理。如果文件應(yīng)使用豎井虛擬 視圖(合并目錄)來訪問,則需要特殊處理。如果不是,則不需要特殊處理。 如果需要特殊處理,則檢索特定豎井的合并目錄元數(shù)據(jù)。在某些操作系統(tǒng)中, 可使用"創(chuàng)建"操作來打開文件或創(chuàng)建新文件。如果創(chuàng)建語句的設(shè)置指示將創(chuàng)建 文件,則操作系統(tǒng)檢查以查看在公共構(gòu)成目錄(例如,WINDOWS目錄204) 中是否已經(jīng)存在該文件。(這將是出錯條件并且隨后將發(fā)生適當(dāng)?shù)某鲥e處理。) 如果創(chuàng)建語句的設(shè)置指示將打開現(xiàn)有文件,則操作系統(tǒng)檢查以査看在專用目錄 206中是否存在該文件。如果找到該文件,則請求連同現(xiàn)有文件的位置一起沿 著桟向下繼續(xù)。如果未找到該文件的現(xiàn)有版本,則將從其執(zhí)行打開的位置改為 其他構(gòu)成目錄(改為目錄204)并且請求沿著棧向下繼續(xù)。或者,請求可通過 在棧的頂部重新發(fā)出該請求來重解析。如果正在被訪問的文件名不在合并目錄 中,則處理照常進行。如果執(zhí)行對請求的任何特殊處理,則將元數(shù)據(jù)與該文件 句柄相關(guān)聯(lián)。該元數(shù)據(jù)可在執(zhí)行對該文件的其他操作(諸如例如查詢文件名的 請求或打開相對于打開目錄的另一文件的嘗試)的情況下訪問。在本發(fā)明的某 些實施例中,元數(shù)據(jù)將在PostCreate期間被附加到文件句柄。
再次參考圖3,在314,如果操作系統(tǒng)檢測到對文件系統(tǒng)目錄的枚舉請求, 則首先,操作系統(tǒng)確定是否存在與該目錄相關(guān)聯(lián)的元數(shù)據(jù)(316)。在本發(fā)明 的某些實施例中,如果存在元數(shù)據(jù),則目錄是合并目錄(318)。或者,操作 系統(tǒng)可從該元數(shù)據(jù)中確定該目錄是否是合并目錄。在任一種情況下,如果目錄 是合并目錄(318),則返回合并在一起的兩個目錄的結(jié)果(320)。如果目錄不是合并目錄,則執(zhí)行普通處理。例如,如果目錄枚舉IRP是由諸如豎井202
的進程216等進程發(fā)起的,則操作系統(tǒng)檢查以查看是否存在與要枚舉的目錄(請
求中所命名的目錄)相關(guān)聯(lián)的任何元數(shù)據(jù)。如果存在與該目錄相關(guān)聯(lián)的元數(shù)據(jù)
或者如果操作系統(tǒng)從該元數(shù)據(jù)中確定該目錄是合并目錄(318),則將兩個目 錄合并在一起并將結(jié)果返回給調(diào)用者。因此,在接收到初始枚舉請求時,執(zhí)行 對每一個構(gòu)成目錄的枚舉并將結(jié)果存儲在枚舉高速緩存中。通過比較每一個枚 舉高速緩存的最新條目來用枚舉結(jié)果來填充調(diào)用者的緩沖區(qū)。如果高速緩存變 為空,則可向該構(gòu)成目錄重新發(fā)出枚舉以接收更多結(jié)果。如果構(gòu)成目錄沒有更 多的結(jié)果,則從其他高速緩存中拉取。當(dāng)耗盡了所有高速緩存并且構(gòu)成目錄中 沒有一個具有任何結(jié)果時,枚舉完成。結(jié)果可有序地存儲以使得可確定從哪個
高速緩存拉取(基于排序次序)?;蛘?,如果底層文件系統(tǒng)不按序枚舉結(jié)果(作 為示例,像諸如但不限于由微軟針對MS-DOS以及微軟WINDOWS的某些版 本開發(fā)的文件分配表文件系統(tǒng)等文件系統(tǒng)的情況那樣),則完全填充高速緩存, 并且排序前的結(jié)果。如果在不止一個目錄中遇到相同的名稱,則將構(gòu)成目錄的 排名用作平局打破器(如以上所描述的)。
如果操作是查詢(322)(諸如對名稱或關(guān)于文件的其他信息的請求), 則在324,檢索該文件的實際名稱并更新該名稱(如果有必要的話)以反映對 于請求者的合適名稱。在某些情況下,如果接收到對文件名的請求或接收到對 關(guān)于文件的其他信息的請求,則返回相對于豎井的名稱而不是該文件在穩(wěn)定存 儲上的實際名稱。即,如果接收到接收文件信息的請求,則由操作系統(tǒng)來返回 該信息并且按需更新任何信息(328)以使其匹配調(diào)用者慣用于打開該文件的 名稱,由此保持構(gòu)成目錄的所有內(nèi)容都在同一個合并目錄中的假象。例如,假 設(shè)豎井中的進程已將句柄傳遞給該豎井外的進程并且該進程現(xiàn)在想要該文件 的名稱,將被返回給請求者的該文件的名稱將會是非豎井的或是系統(tǒng)文件名, 不是豎井文件名。類似地,如果豎井中的進程具有系統(tǒng)文件的句柄,則它將需 要該豎井文件名,不是系統(tǒng)文件名。因此,給定一句柄,返回適于請求者的文 件名。
如果遇到的操作是重命名文件(326),則操作系統(tǒng)必須確保作為相對于 豎井的名稱的新名稱(文件將被重命名為的名稱)在底層文件系統(tǒng)看見它之前被轉(zhuǎn)換為實際名稱以使得文件系統(tǒng)正確地重命名該文件。在330,如果操作被
確定為關(guān)閉,則調(diào)用PreClose回調(diào)。在332,刪除與正被關(guān)閉的文件相關(guān)聯(lián)的 任何元數(shù)據(jù)。可以理解,以上所列出的動作中的一個或多個可以是可任選的或 跳過的并且各動作可以按除了圖3所描繪的之外的順序來進行。
圖5示出了遵循虛擬刪除的創(chuàng)建/打開操作的實施例。在502,接收對文件、 目錄或子目錄的創(chuàng)建/打開請求。在504,如上所述地執(zhí)行普通豎井合并目錄處 理。在506,確定正被打開的文件、目錄或子目錄是否處于公共構(gòu)成目錄中。 在508,如果正被打開的文件位于合并目錄的公共部分中,則確定對于該文件、 目錄或子目錄是否存在刪除標(biāo)記并且如果是,則在510,打開請求失敗。在508, 如果確定對于所述文件、目錄或子目錄不存在刪除標(biāo)記,則執(zhí)行普通豎井合并 目錄處理(512)。在506,如果確定正被打開的文件、目錄或子目錄不在公共 構(gòu)成目錄中,則處理在512處繼續(xù)。刪除標(biāo)記可以按如上所述的任何合適的方 式來實現(xiàn)。
圖6示出了遵循虛擬刪除的枚舉操作的某些實施例。在602,接收對文件、 目錄或子目錄的枚舉請求。在604,如上所述地執(zhí)行普通豎井合并目錄處理。 在606,從專用位置(合并目錄的專用部分)中過濾刪除標(biāo)記。在608,過濾 掉公共位置中具有專用位置中的對應(yīng)的刪除標(biāo)記的條目。在610,執(zhí)行普通豎 井合并目錄操作。在本發(fā)明的某些實施例中,過濾掉對于其存在刪除標(biāo)記的文 件。顯示結(jié)果或以其他方式返回結(jié)果。
圖7示出了虛擬刪除操作的某些實施例。在702,接收對文件、目錄或子 目錄的刪除請求。在704,如果未對合并目錄啟用虛擬刪除語義,則普通處理 在706處繼續(xù)。然而,如果對于合并目錄啟用虛擬刪除語義,則處理在708處 繼續(xù)并且為正被刪除的文件創(chuàng)建刪除標(biāo)記。在710,如果對其接收到刪除請求 的文件處于專用位置中,貝U"刪除"該文件(706.)。在710,如果對其接收到刪 除請求的文件處于公共位置中,則處理在712處繼續(xù)。在712,如果與該刪除 請求相關(guān)聯(lián)的訪問許可允許刪除,貝'j"刪除"該文件(706)。在712,如果與該 刪除請求相關(guān)聯(lián)的訪問許可不允許刪除,則不刪除該文件(714)。
此處所述的各種技術(shù)可結(jié)合硬件或軟件,或在適當(dāng)時以其組合來實現(xiàn)。由 此,本發(fā)明的方法和裝置或其特定方面或部分可采取包含在諸如軟盤、CD-ROM、硬盤驅(qū)動器或任何其它機器可讀存儲介質(zhì)等有形介質(zhì)中的程序代碼
(即,指令)的形式,其中當(dāng)程序代碼被加載到諸如計算機等機器內(nèi)并由其執(zhí) 行時,該機器成為用于實現(xiàn)本發(fā)明的裝置。在程序代碼在可編程計算機上執(zhí)行 的情況下,計算設(shè)備通常將包括處理器、該處理器可讀的存儲介質(zhì)(包括易失 性和非易失性的存儲器和/或存儲元件)、至少一個輸入設(shè)備、以及至少一個輸
出設(shè)備??衫缤ㄟ^使用數(shù)據(jù)處理API等來利用本發(fā)明的域?qū)S镁幊棠P偷膭?chuàng)
建和/或?qū)崿F(xiàn)的各方面的一個或多個程序較佳地用高級過程語言或面向?qū)ο蟮?編程語言來實現(xiàn)以與計算機系統(tǒng)通信。然而,如果需要,程序可以用匯編語言 或機器語言來實現(xiàn)。在任何情形中,語言可以是編譯的或解釋的語言,且與硬 件實現(xiàn)相結(jié)合。
盡管結(jié)合各附圖的優(yōu)選實施例描述了本發(fā)明,但是可以理解,可以使用其 它類似的實施例,或可以對所述實施例進行修改或添加來執(zhí)行本發(fā)明的相同功 能而不背離本發(fā)明。因此,本發(fā)明不應(yīng)限于任何單個實施例,而是應(yīng)該根據(jù)所 附權(quán)利要求書的廣度和范圍來解釋。
權(quán)利要求
1. 一種用于執(zhí)行合并目錄中的元素的虛擬刪除的系統(tǒng),包括為在豎井(202)中運行的進程(216、217)提供多個文件系統(tǒng)目錄(206、204)的豎井專用合并視圖(212)的操作系統(tǒng)(214),其中所述操作系統(tǒng)(214)通過監(jiān)視發(fā)自所述在豎井(202)中運行的進程(216、217)的文件系統(tǒng)訪問請求(240)并且響應(yīng)于檢測到文件系統(tǒng)刪除請求,執(zhí)行為所述文件系統(tǒng)刪除請求中所標(biāo)識的元素創(chuàng)建刪除標(biāo)記的回調(diào)處理來創(chuàng)建所述豎井專用合并視圖(212),其中為其創(chuàng)建所述刪除標(biāo)記的元素從所述多個文件系統(tǒng)目錄的豎井專用合并視圖(212)中過濾,所述豎井專用合并視圖(212)對于在所述豎井(202)中運行的進程(216、217)而言看上去是包括所述多個文件系統(tǒng)目錄(206、204)中的條目的單個目錄。
2. 如權(quán)利要求1所述的系統(tǒng),其特征在于,所述多個文件系統(tǒng)目錄中的每 一個都與一排名相關(guān)聯(lián)。
3. 如權(quán)利要求2所述的系統(tǒng),其特征在于,與所述多個文件系統(tǒng)目錄中的 每一個相關(guān)聯(lián)的排名用作當(dāng)所述多個目錄中的不止一個條目憑特定名稱而被 知曉時用于確定所述豎井專用視圖中所包括的條目的平局打破器。
4. 如權(quán)利要求3所述的系統(tǒng),其特征在于,所述豎井專用合并視圖包括專 用目錄和至少一個公共目錄,其中在所述專用目錄中對所述刪除請求中所標(biāo)識 的元素的虛擬刪除隱藏所述至少一個公共目錄中的相同命名的元素。
5. 如權(quán)利要求1所述的系統(tǒng),其特征在于,所述操作系統(tǒng)包括經(jīng)由插入在 文件系統(tǒng)訪問請求處理路徑中的回調(diào)來檢測虛擬刪除的過濾器驅(qū)動程序,所述 文件系統(tǒng)訪問請求處理路徑包括刪除處理、枚舉處理、創(chuàng)建處理、打開處理和 重命名處理。
6. 如權(quán)利要求5所述的系統(tǒng),其特征在于,所述文件系統(tǒng)刪除請求為所述文件系統(tǒng)刪除請求中所標(biāo)識的文件系統(tǒng)元素創(chuàng)建刪除標(biāo)記。
7. —種用于向在豎井中運行的進程提供構(gòu)成包括多個文件系統(tǒng)目錄的虛 擬合并目錄的視圖的多個文件系統(tǒng)目錄的視圖的方法,包括使用操作系統(tǒng)中的過濾器驅(qū)動程序來監(jiān)視由在所述豎井中運行的進程 做出的訪問請求(502),其中所述過濾器驅(qū)動程序通過與文件系統(tǒng)的元素相 關(guān)聯(lián)的刪除標(biāo)記的存在來檢測所述元素的虛擬刪除(508);響應(yīng)于檢測到所述刪除標(biāo)記,執(zhí)行與文件訪問請求的類型相關(guān)聯(lián)的處 理,其中與所述刪除標(biāo)記相關(guān)聯(lián)的元素從所述多個文件系統(tǒng)目錄的視圖中過濾(510)。
8. 如權(quán)利要求7所述的方法,其特征在于,還包括通過用指示虛擬刪除的 文本來裝飾所述元素的標(biāo)識符來創(chuàng)建所述刪除標(biāo)記。
9. 如權(quán)利要求7所述的方法,其特征在于,還包括將所述刪除標(biāo)記存儲在 外部文件中。 .
10. 如權(quán)利要求7所述的方法,其特征在于,響應(yīng)于確定所述文件訪問 請求是枚舉文件或枚舉目錄操作,所述操作系統(tǒng)返回所述視圖,其中所述視圖 包括第一個文件目錄和第二個文件目錄中除了與刪除標(biāo)記相關(guān)聯(lián)的條目之外 的條目的列表。
11. 如權(quán)利要求7所述的方法,其特征在于,響應(yīng)于確定所述文件訪問 請求是枚舉文件或枚舉目錄操作,所述操作系統(tǒng)返回所述視圖,其中所述視圖 包括第一個文件目錄和第二個文件目錄中除了包括刪除標(biāo)記的條目之外的條 目的列表。
12. 如權(quán)利要求7所述的方法,其特征在于,將文件系統(tǒng)元素重命名為 指示虛擬刪除的名稱的文件訪問請求是被禁止的。12. 如權(quán)利要求7所述的方法,其特征在于,試圖打開與刪除標(biāo)記相關(guān) 聯(lián)的元素的文件訪問請求失敗。
13. 如權(quán)利要求7所述的方法,其特征在于,所述進程對第一個文件目錄中的條目的訪問經(jīng)由創(chuàng)建所述視圖被限于只讀訪問。
14. 如權(quán)利要求7所述的方法,其特征在于,所述進程對第二個文件目 錄中的條目的訪問是讀寫訪問。
15. —種其上存儲有程序代碼的計算機可讀介質(zhì),所述程序代碼當(dāng)由計算環(huán)境執(zhí)行時使得所述計算環(huán)境使用操作系統(tǒng)的過濾器驅(qū)動程序來監(jiān)視在豎井中運行的進程,其中所述過濾器驅(qū)動程序檢測由在所述豎井中運行的進程做出的文件訪問請求(602);響應(yīng)于檢測到所述文件訪問請求,執(zhí)行與文件訪問請求的類型相關(guān)聯(lián)的 處理,其中多個實際文件目錄的視圖被提供給所述進程,其中所述視圖將所述多個實際文件目錄作為包括所述多個實際文件目錄的條目的單個合并虛擬目 錄來呈現(xiàn)給所述進程,其中與刪除標(biāo)記相關(guān)聯(lián)的條目從所述視圖中消除(608)。
16. 如權(quán)利要求15所述的計算機可讀介質(zhì),其特征在于,其上還存儲 有當(dāng)由所述計算環(huán)境執(zhí)行時使得所述計算環(huán)境執(zhí)行以下動作的程序代碼.-將刪除標(biāo)記與刪除訪問請求所標(biāo)識的元素相關(guān)聯(lián),其中所述刪除標(biāo)記包 括經(jīng)裝飾的元素標(biāo)識符。
17. 如權(quán)利要求15所述的計算機可讀介質(zhì),其特征在于,其上還存儲 有當(dāng)由所述計算環(huán)境執(zhí)行時使得所述計算環(huán)境執(zhí)行以下動作的程序代碼將刪除標(biāo)記與刪除訪問請求所標(biāo)識的元素相關(guān)聯(lián),其中所述刪除標(biāo)記被 存儲在外部數(shù)據(jù)存儲中。
18. 如權(quán)利要求15所述的計算機可讀介質(zhì),其特征在于,其上還存儲 有當(dāng)由所述計算環(huán)境執(zhí)行時使得所述計算環(huán)境執(zhí)行以下動作的程序代碼將刪除標(biāo)記與刪除訪問請求所標(biāo)識的元素相關(guān)聯(lián),其中所述刪除標(biāo)記被 存儲在所述文件系統(tǒng)中。
19. 如權(quán)利要求16所述的計算機可讀介質(zhì),其特征在于,其上還存儲 有當(dāng)由所述計算環(huán)境執(zhí)行時使得所述計算環(huán)境執(zhí)行以下動作的程序代碼在接收到枚舉請求時過濾掉與刪除標(biāo)記相關(guān)聯(lián)的元素。
20. 如權(quán)利要求16所述的計算機可讀介質(zhì),其特征在于,其上還存儲有當(dāng)由所述計算環(huán)境執(zhí)行時使得所述計算環(huán)境執(zhí)行以下動作的程序代碼 禁止將元素重命名為指示所述元素已被刪除的名稱。
全文摘要
文件系統(tǒng)的元素通過為該元素創(chuàng)建刪除標(biāo)記來虛擬地刪除。兩個或多個單獨的實際文件系統(tǒng)目錄作為一個合并的(虛擬的)文件系統(tǒng)目錄來呈現(xiàn)給在豎井中運行的進程。操作系統(tǒng)通過監(jiān)視由計算機或計算機系統(tǒng)上的豎井中的進程做出的文件系統(tǒng)請求并過濾掉與刪除標(biāo)記相關(guān)聯(lián)的元素來提供文件系統(tǒng)目錄的合并視圖。特殊處理響應(yīng)于檢測到特定類型的文件系統(tǒng)訪問請求來調(diào)用,該文件系統(tǒng)訪問請求的類型包括枚舉、打開、創(chuàng)建、重命名或刪除。
文檔編號G06F13/00GK101535968SQ200780041090
公開日2009年9月16日 申請日期2007年10月19日 優(yōu)先權(quán)日2006年11月2日
發(fā)明者F·J·史密斯, J·L·哈文斯, M·泰魯利, Y·A·哈利迪 申請人:微軟公司