首页> 中国专利> 合并的文件系统目录中的虚拟删除

合并的文件系统目录中的虚拟删除

摘要

文件系统的元素通过为该元素创建删除标记来虚拟地删除。两个或多个单独的实际文件系统目录作为一个合并的(虚拟的)文件系统目录来呈现给在竖井中运行的进程。操作系统通过监视由计算机或计算机系统上的竖井中的进程做出的文件系统请求并过滤掉与删除标记相关联的元素来提供文件系统目录的合并视图。特殊处理响应于检测到特定类型的文件系统访问请求来调用,该文件系统访问请求的类型包括:枚举、打开、创建、重命名或删除。

著录项

  • 公开/公告号CN101535968A

    专利类型发明专利

  • 公开/公告日2009-09-16

    原文格式PDF

  • 申请/专利权人 微软公司;

    申请/专利号CN200780041090.7

  • 申请日2007-10-19

  • 分类号G06F13/00(20060101);

  • 代理机构31100 上海专利商标事务所有限公司;

  • 代理人黄嵩泉

  • 地址 美国华盛顿州

  • 入库时间 2023-12-17 22:40:15

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-05-27

    专利权的转移 IPC(主分类):G06F13/00 变更前: 变更后: 登记生效日:20150507 申请日:20071019

    专利申请权、专利权的转移

  • 2011-05-18

    授权

    授权

  • 2009-11-11

    实质审查的生效

    实质审查的生效

  • 2009-09-16

    公开

    公开

说明书

背景

有时期望在允许在计算机或计算机系统上运行的应用程序共享某些文件 的同时,限制对其他文件的访问。例如,在特定机器上运行的所有应用程序可 能需要共享文件一到十,但或许只有应用程序A才可访问文件十一并且只有应 用程序B才可访问文件十二和十三。实现这一点的一种方法是生成所有应用程 序都需要的若干文件集。即,第一文件集可包括供应用程序A使用的文件一到 十和文件十一的副本。第二文件集可包括供应用程序B使用的文件一到十和文 件十二和十三的副本。该方法的一个很明显的缺点是维护各独立的文件集所需 的额外的存储空间。该方法也可导致对于诸如存储器和分页空间等其他系统资 源的重复需求。该方法的另一缺点是当需要修改一文件时,该文件必须在两个 文件集中修改(例如,如果文件一的新版本变为可用,则必须更新两个文件集 中的文件一)。

有时也期望允许对于文件系统的不同部分的不同访问级别。例如,可能期 望允许应用程序A删除文件一但不允许应用程序B删除文件一。本发明的各 实施例解决了这些和其他需求。

概述

两个或多个单独的实际文件系统目录作为单个(虚拟的)合并文件系统目 录来呈现给在被称为竖井的受控执行环境中运行的应用程序。通常可用于对文 件系统目录执行的所有操作都能够对该合并目录执行,然而,操作系统控制对 合并目录中的文件的访问级别。操作系统通过监视由计算机或计算机系统上的 竖井中的进程做出的文件系统请求,并响应于检测到特定类型的文件系统访问 请求,通过执行特殊处理来提供看上去合并的目录的视图,来提供文件系统目 录的合并视图。触发特殊处理的改变或请求的类型的示例包括枚举、打开、创 建、重命名、关闭或删除。创建合并视图所需的状态不存储在永久介质上。

对文件、目录或子目录的虚拟删除的需求在包括以下条件在内的各种情形 中可能变成必要的或期望的:

·做出删除文件的请求的用户基于与该文件相关联的ACL(访问控制 列表)具有删除该文件的许可。

·合并目录的专用构成目录经由其访问掩码具有对将被虚拟地删除 的文件的删除许可。

·对于其中存在对其接收到删除请求的文件的合并目录启用删除语 义支持。

当满足所有以上条件时,在专用目录中为正被虚拟地删除的文件创建删除 标记。从竖井的观点来看,如此标记的文件已被删除。因此,在请求特定类型 的文件系统操作时可能需要特殊的虚拟删除处理。触发特殊虚拟删除处理的请 求的类型包括枚举、打开、创建、重命名、和删除。

附图简述

在附图中:

图1是示出其中可以实现本发明各方面的示例性计算环境的框图;

图2是根据本发明的某些实施例的用于合并文件系统目录中的文件的虚 拟删除的系统的框图;

图3是根据本发明的某些实施例的用于合并文件系统目录的方法的流程 图;

图4是根据本发明的某些实施例的图3的方法的一部分的流程图;以及

图5是根据本发明的某些实施例的对于打开/创建请求的虚拟删除处理的 流程图;

图6是根据本发明的某些实施例的对于枚举请求的虚拟删除处理的流程 图;以及

图7是根据本发明的某些实施例的对于删除请求的虚拟删除处理的流程 图;

详细描述

概览

理想地,操作系统将能够控制文件的共享并将能够在应用层控制对文件的 访问。例如,操作系统能够允许应用程序A对文件一到十进行只读访问并对文 件十一进行读写访问,而允许应用程序B对文件一到十进行只读访问并对文件 十二和十三进行读写访问可能是有用的。然而,通常当前已知的操作系统为在 同一个用户帐户下运行的所有进程提供对相同的文件集的相同的访问级别。因 此,在上述示例中,如果同一个用户启动了应用程序一和二,以便允许应用程 序A向文件十一写入并允许应用程序B向文件十二和十三写入,则应用程序A 将也可对文件十二和十三进行读写访问而应用程序B将可对文件十一进行读 写访问。

因此,在许多系统中,在操作系统进程层以及操作系统本身的机器边界处 存在系统中有限的密封点,但在这些层之间,使用诸如访问控制列表(ACL) 以及与运行应用程序的用户的身份相关联的特权等安全控制来控制对文件的 进程访问。因为对系统资源的访问与运行应用程序的用户的身份而不是与应用 程序本身相关联,所以应用程序可访问该应用程序不需要的文件,如以上示例 所展示的。因为多个应用程序可能能够修改同一个文件,所以可能导致应用程 序之间的不兼容。也可能产生安全问题,因为一个应用程序可能恶意或故意干 扰另一应用程序的操作。

此处被称为竖井的操作系统内隔离/密封机制允许对在使用操作系统的单 个实例的单个计算机上运行的进程进行分组和隔离。操作系统的单个实例将系 统的处理空间分为多个并排和/或嵌套的执行环境(竖井),从而允许对某些文 件的受控共享以及对其他文件的访问限制。操作系统通过为每一个竖井创建不 同的文件系统视图来控制文件共享和访问。该视图对于在竖井中运行的进程表 现为单个目录,该单个目录是两个或多个实际文件相同目录的至少各部分的并 集。即,对于应用程序可用的文件取决于该应用程序在哪个竖井中运行并且在 一竖井中运行的应用程序“看见”的文件系统通过在表面上合并两个或多个文 件系统目录或文件系统目录的各部分来创建。服务于计算机或计算机系统的单 个OS映像由此提供文件系统的不同视图以控制哪个进程、进程组、应用程序 或应用程序组可使用哪些文件以及如何能够使用这些文件。对文件的访问以及 对文件的访问程度因此直接关联于或基于进程、应用程序、进程组、应用程序 组被放置的竖井而不是单独或主要由用户特权来确定。

当两个或多个实际目录经由一个逻辑视图来展示时,删除文件可展示或显 示其他构成目录之一中具有与所删除的文件相同的名称的文件。通常在合并目 录情况下,对各构成目录排序。当发生冲突(即,在两个或多个构成目录中存 在具有相同名称的文件)时,排序策略确定将展示哪个文件。然而,如果排名 最高的文件已被删除,则将在没有干预(absent intervention)的情况下展示来 自构成目录的具有相同名称的文件。该文件的展示可能不是合乎需要的。因此, 需要“记住”在构成目录中存在过具有相同名称的文件并防止在同名的排名最 高的文件已被删除时展示该文件。

为了解决以上需求,将删除标记与在合并目录环境中对于其接收到删除请 求的文件相关联。在展示合并目录时,通常将存在可写入的合并目录的专用部 分以及只读的公共部分(由一个或多个公共目录构成)。专用目录以及一个或 多个公共目录两者构成逻辑合并目录。新文件以及可能可修改的文件(例如, 经由写时复制(copy-on-write)操作)通常进入合并目录的专用部分。合并目 录的公共部分中的文件通常是可见的但是不可修改的。专用目录中所创建的具 有与一个或多个构成公共目录中的一个或多个文件相同的名称的文件通常将 屏蔽或隐藏公共文件,因为专用文件的排名高于类似命名的公共文件。但是如 果排名最高的专用文件被删除,则可显示或展示公共文件中的一个,因为现在 公共文件是该名称的排名最高的文件。对于先前访问过专用文件的应用程序而 言,该专用文件将不会看上去已被删除。先前已经访问过专用文件的应用程序 现在将访问先前隐藏但现在改为展示的文件,其据该应用程序所知是同一个文 件,但该先前隐藏的文件的内容很可能是不同的。此外,删除文件的进一步尝 试将失败,因为现在正被打开的文件处于只读位置中。这是成问题的。

为了解决这些问题,将标记添加到专用目录以指示所标记的文件将被认为 是“已删除的”并且因此应当不再经由逻辑合并目录视图可见。因此,在本发明 的实施例中,提供用于删除标记的存储并且在文件访问操作期间创建并遵循删 除标记。存储删除标记需要对于删除信息的某一种持久存储。因此,删除数据 可指示所删除的文件、目录或子目录的名称以及该文件、目录或子目录被删除 的位置。这些目标可通过存储标识删除的文件、目录或子目录的特殊文件,存 储诸如删除的文件、目录或子目录的重解析点等另一文件系统标记,将另一流 或扩展属性与删除的文件、目录或子目录存储在一起,以及将删除数据存储在 外部(单独的)存储中来实现。因为删除可在事务中发生,所以所使用的任何 实现都可以是知晓事务的。在某些WINDOWS操作系统中,文件系统是事务 型的(transactional),这意味着多个文件系统操作可作为一组来一起完成。当 已完成所有操作时,可或者提交或者中止改变。因此或者所有改变都出现,或 者没有一个改变出现。因此,如果删除标记作为事务的一部分来创建,则删除 标记直到提交事务才出现,并且如果事务被中止,则删除标记也消失。

在从合并目录中虚拟地删除文件、目录或子目录时需要创建删除标记。在 接收到对于先前从合并目录中删除的文件、目录或子目录的打开文件、目录或 子目录的请求,接收到对于先前从合并目录中删除的文件、目录或子目录的枚 举文件、目录或子目录的请求,接收到对于先前从合并目录中删除的文件、目 录或子目录的创建文件、目录或子目录的请求等时需要遵循删除标记。

在本发明的某些实施例中,当文件、目录或子目录被删除时,具有相同名 称的文件、目录或子目录将不会再次从除了合并目录的专用部分之外的构成目 录中展示。在这种情况下,如果来自构成(公共)目录的具有相同名称的文件、 目录或子目录随后开始存在,则该文件、目录或子目录将不会在该合并目录中 可见。在本发明的某些实施例中,标记只在合并目录的公共部分中存在与正被 删除的文件、目录或子目录同名的文件、目录或子目录的情况下才创建。在这 种情况下,删除专用文件、目录或子目录否则将导致展示或显示同名的公共文 件、目录或子目录。如果同名的文件、目录或子目录随后开始存在,则该文件、 目录或子目录将会在合并目录中可见。

示例性计算环境

图1及以下讨论旨在提供可在其中实现本发明的合适计算环境的简要概 括描述。然而,应当理解,构想了所有种类的手持式、便携式和其它计算设备 来结合本发明使用。尽管以下描述了通用计算机,但是这仅是一个示例,并且 本发明只需具有网络服务器互操作性和交互的瘦客户机。由此,本发明可在其 中蕴含了极少或最小客户机资源的联网的主存服务的环境,例如其中客户机设 备仅用作浏览器或到万维网的接口的联网环境中实现。

尽管并非所需,但本发明可经由开发者使用的,和/或包括在网络浏览软 件中的应用程序编程接口(API)来实现,该网络浏览软件将在诸如程序模块 等由诸如客户机工作站、服务器或其它设备等一个或多个计算机执行的计算机 可执行指令的一般上下文中描述。一般而言,程序模块包括执行特定任务或实 现特定抽象数据类型的例程、程序、对象、组件、数据结构等。通常,程序模 块的功能可以在各个实施例中按需进行组合或分布。此外,本领域的技术人员 可以理解,本发明可以用其它计算机系统配置来实施。适用于本发明的其它众 所周知的计算系统、环境和/或配置包括但不限于,个人计算机(PC)、自动 柜员机、服务器计算机、手持式或膝上型设备、多处理器系统、基于微处理器 的系统、可编程消费者电子设备、网络PC、小型计算机、大型计算机等等。 本发明也可以在其中任务由通过通信网络链接或其它数据传输介质的远程处 理设备来执行的分布式计算环境中实践。在分布式计算环境中,程序模块可以 位于包括存储器存储设备在内的本地和远程计算机存储介质中。

因此,图1示出了其中可实现本发明的合适的计算系统环境100的一个示 例,尽管如上所述,计算系统环境100仅为合适的计算环境的一个示例,并非 对本发明的使用范围或功能提出任何局限。也不应该把计算环境100解释为对 示例性操作环境100中示出的任一组件或其组合有任何依赖性或要求。

参考图1,用于实现本发明的示例性系统包括计算机110形式的通用计算 设备。计算机110的组件可以包括,但不限于,处理单元120、系统存储器130 和将包括系统存储器在内的各种系统组件耦合至处理单元120的系统总线 121。系统总线121可以是几种类型的总线结构中的任何一种,包括存储器总 线或存储控制器、外围总线、以及使用各种总线体系结构中的任一种的局部总 线。作为示例,而非限制,这样的体系结构包括工业标准体系结构(ISA)总 线、微通道体系结构(MCA)总线、增强型ISA(EISA)总线、视频电子技 术标准协会(VESA)局部总线和外围部件互连(PCI)总线(也称为夹层 (Mezzanine)总线)。

计算机110通常包括各种计算机可读介质。计算机可读介质可以是能由计 算机110访问的任何可用介质,而且包含易失性、非易失性介质以及可移动和 不可移动介质。作为示例而非局限,计算机可读介质可以包括计算机存储介质 和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、 程序模块或其它数据等信息的任何方法或技术实现的易失性和非易失性、可移 动和不可移动介质。计算机存储介质包括但不限于,RAM、ROM、EEPROM、 闪存或其它存储器技术、CDROM、数字多功能盘(DVD)或其它光盘存储、 磁盒、磁带、磁盘存储或其它磁存储设备、或可以用来储存所期望的信息并可 由计算机110访问的任一其它介质。通信介质通常以诸如载波或其它传输机制 等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据, 并包括任意信息传送介质。术语“已调制数据信号”指的是其一个或多个特征以 在信号中编码信息的方式被设定或更改的信号。作为示例而非限制,通信介质 包括有线介质,诸如有线网络或直接线连接,以及无线介质,诸如声学、RF、 红外线和其它无线介质。以上的任何组合也应包括在计算机可读介质的范围 内。

系统存储器130包括易失性和/或非易失性存储器形式的计算机存储介质, 如只读存储器(ROM)131和随机存取存储器(RAM)132。基本输入/输出系 统133(BIOS)包括如在启动时帮助在计算机110内的元件之间传输信息的基 本例程,它通常储存在ROM 131中。RAM 132通常包含处理单元120可以立 即访问和/或目前正在其上操作的数据和/或程序模块。作为示例而非局限,图 1示出了操作系统134、应用程序135、其它程序模块136和程序数据137。

计算机110也可以包括其它可移动/不可移动、易失性/非易失性计算机存 储介质。仅作为示例,图1示出了对不可移动、非易失性磁介质进行读写的硬 盘驱动器141,对可移动、非易失性磁盘152进行读写的磁盘驱动器151,以 及对诸如CD ROM或其它光学介质等可移动、非易失性光盘156进行读写的 光盘驱动器155。可以在示例性操作环境中使用的其它可移动/不可移动、易失 性/非易失性计算机存储介质包括但不限于,磁带盒、闪存卡、数字多功能盘、 数字录像带、固态RAM、固态ROM等等。硬盘驱动器141通常由不可移动 存储器接口,诸如接口140连接至系统总线121,磁盘驱动器151和光盘驱动 器155通常由可移动存储器接口,诸如接口150连接至系统总线121。

上文讨论并在图1中示出的驱动器及其关联的计算机存储介质为计算机 110提供了计算机可读指令、数据结构、程序模块和其它数据的存储。在图1 中,例如,硬盘驱动器141被示为存储操作系统144、应用程序145、其它程 序模块146和程序数据147。注意,这些组件可以与操作系统134、应用程序 135、其它程序模块136和程序数据137相同,也可以与它们不同。操作系统 144、应用程序145、其它程序模块146和程序数据147在这里被标注了不同的 标号是为了说明至少它们是不同的副本。用户可以通过输入设备,诸如键盘162 和定点设备161(通常指鼠标、跟踪球或触摸垫)向计算机110输入命令和信 息。其它输入设备(未示出)可以包括话筒、操纵杆、游戏手柄、圆盘式卫星 天线、扫描仪等。这些和其它输入设备通常由耦合至系统总线121的用户输入 接口160连接到处理单元120,但是也可由诸如并行端口、游戏端口或通用串 行总线(USB)之类的其它接口和总线结构连接。

监视器191或其它类型的显示设备也经由接口,诸如视频接口190连接至 系统总线121。诸如北桥等图形接口182也可连接到系统总线121。北桥是与 CPU或主机处理单元120通信的芯片组,并承担了加速图形端口(AGP)通信 的责任。一个或多个图形处理单元(GPU)184可以与图形接口182通信。在 这一点上,GPU 184一般包括诸如寄存器存储等片上存储器存储,并且GPU 184 与视频存储器186通信。然而,GPU 184仅是协处理器的一个示例,且因此计 算机110中可包括各种协处理设备。监视器191或其它类型的显示设备也通过 接口,如视频接口190连接至系统总线121,而视频接口190又与视频存储器 186通信。除监视器191之外,计算机也可包括其它外围输出设备,如扬声器 197和打印机196,它们通过输出外围接口195连接。

计算机110可使用至一个或多个远程计算机,如远程计算机180的逻辑连 接在网络化环境中操作。远程计算机180可以是个人计算机、服务器、路由器、 网络PC、对等设备或其它常见的网络节点,并且通常包括许多或所有以上相 对于计算机110所描述的元件,尽管在图1中仅示出了存储器存储设备181。 图1中所示的逻辑连接包括局域网(LAN)171和广域网(WAN)173,但也 可以包括其它网络。这样的联网环境在办公室、企业范围计算机网络、内联网 和因特网中是常见的。

当在LAN联网环境中使用时,计算机110通过网络接口或适配器170连 接至LAN 171。当在WAN联网环境中使用时,计算机110通常包括调制解调 器172或用于通过诸如因特网等WAN 173建立通信的其它装置。调制解调器 172可以是内置或外置的,它可以通过用户输入接口160或其它适当的机制连 接至系统总线121。在网络化环境中,相对于计算机110所描述的程序模块或 其部分可被储存在远程存储器存储设备中。作为示例而非局限,图1示出远程 应用程序185驻留在存储器设备181上。可以理解,所示的网络连接是示例性 的,且可以使用在计算机之间建立通信链路的其它手段。

本领域的普通技术人员可以理解,计算机110或其它客户机设备可作为计 算机网络的一部分来部署。在这一点上,本发明涉及具有任意数量的存储器或 存储单元以及在任意数量的存储单元或卷上发生的任意数量的应用程序和进 程的任何计算机系统。本发明可应用于具有部署在网络环境中的具有远程或本 地存储的服务器计算机和客户计算机的环境。本发明也可应用于具有编程语言 功能、解释和执行能力的独立计算设备。

合并文件系统目录中的虚拟删除

操作系统监视由在竖井中运行的进程做出的文件系统访问请求。在计算机 或计算机系统中可同时存在多个竖井。多个进程可在每一个竖井中执行。单个 操作系统映像创建竖井并创建和监视所有竖井中的所有进程。文件系统目录的 竖井专用视图由操作系统通过在表面上将两个或多个实际后台存储(文件目 录)一起合并为对于竖井看上去是单个目录的样子来创建。即,两个或多个单 独的文件系统目录可作为单个目录展示给竖井(以及在该竖井中运行的进程)。 可使用这些实际后台存储中的一个或多个来为这些竖井中的一个或多个构建 竖井专用视图的一部分。

图2示出了用于如上所述的合并文件系统目录中的文件、目录或子目录的 删除的系统200的一个实施例。系统200可驻留在一台或多台计算机上,诸如 以上参考图1所述的计算机110。在图2中,一个或多个执行环境可在计算机 110上运行。所构想的一种类型的执行环境是竖井(以上已更详细地描述)。 在图2中,描绘了竖井202和竖井220。竖井可以是嵌套的,即,竖井202自 身可包括竖井(未示出)。竖井可被嵌套成任何所需层次。另一竖井内所嵌套 的竖井有时被称为子竖井,而其中嵌套竖井的竖井有时被称为其父竖井。父竖 井可控制其资源(包括文件在内)对于其子竖井可用的程度。

竖井可用于创建隔离的执行环境以使得与一个竖井相关联的资源对于在 该竖井中运行的进程可用而不可由在计算机或计算机系统或计算机网络中的 其他计算机上运行的其他竖井来访问。例如,如果竖井202是隔离的执行环境, 则对于在竖井202中运行的进程216可用的资源(未示出)将对于诸如在第二 竖井,即,竖井220中运行的诸如进程226等进程不可用。然而,在竖井202 中运行的第二进程(诸如进程217)可访问该资源。类似地,对于进程226和 227可用的资源对于在竖井202中运行的资源216和217不可用。

或者,根据本发明的实施例,竖井可用于创建半隔离的或受控的执行环境, 其中某些资源是共享的而某些资源不是共享的,或者其中资源的某些部分是共 享的而该资源的其他部分不是共享的。这样一个构想到的资源是文件系统目 录。例如,在竖井202中诸如进程216和217等一个或多个进程正在运行并可 访问文件系统目录。在本发明的某些实施例中,文件系统目录是虚拟合并目录 212,其中尽管对于进程216和217而言作为单个实际目录出现,但虚拟合并 目录212实际上是操作系统通过使用回调在特定情况下对特定类型的操作执行 特殊处理而创建的两个或多个目录的并集的虚拟视图。由操作系统214创建的 视图可包括被合并在一起以创建虚拟合并目录的至少一个(实际)公共或全局

(对于计算机系统而言)可共享目录以及至少一个(实际)专用或本地(对于 竖井而言)目录的条目的并集,但所构想的本发明并不限于此。合并目录可从 两个或更多公共或专用目录的任何组合中构建,公共或专用目录中的一个或多 个可被设计为只读或读写的。此外,对于构成目录中的一个或多个可能不存在 公共后台存储。例如,在本发明的某些实施例中由操作系统创建的虚拟合并目 录的可共享部分是全局目录(例如,WINDOWS目录),而虚拟合并目录的专 用、非共享部分与特定竖井相关联(例如,与竖井202相关联),并且可表示 例如,在该竖井中运行的应用程序的本地或专用文件。例如,在图2中,与竖 井202相关联的虚拟合并目录212包括从全局目录(例如,公共或全局 WINDOWS目录204)导出的可共享部分204a以及从本地目录(与竖井202 相关联的专用、非共享目录206)导出的不可共享部分206a。与竖井220相关 联的虚拟合并目录232包括从全局目录(例如,公共或全局WINDOWS目录 204)导出的可共享部分204a以及从本地目录(与竖井220相关联的专用、非 共享目录203)导出的不可共享部分236a。在本发明的某些实施例中,虚拟合 并目录212的可共享部分204a是只读的,而虚拟合并目录212的专用、非共 享部分206a是读写的,但可以理解,所构想的本发明并不限于此。即,虚拟 合并目录的专用部分可以是只读的或读写的或者可包括只读或读写的部分。类 似地,虚拟合并目录的可共享部分可以是只读的或读写的或者可包括仅仅只读 的或读写的部分。此外,可以理解,所构想的本发明并不限于合并两个目录。 可合并任何数量的目录(n个目录)以创建虚拟合并目录。虚拟合并目录在本 发明的某些实施例中并非持久存储在永久存储上或本质上在存储器中创建,而 是由操作系统214通过监视文件访问请求并如以下更详细描述地执行与文件访 问请求的类型相关联的特殊处理来按需推导出。

因此,可以理解,因为在计算机上或计算机系统中可能同时存在不止一个 竖井,所以也可能同时存在不止一个虚拟合并目录,即,在竖井和虚拟合并目 录之间存在一对一的对应关系,但在特定计算机或计算机系统上在任一时刻可 能存在任何数量的竖井及合并目录。此外,每一个虚拟合并目录的一部分可包 括可共享部分(例如,在图2中,虚拟合并目录212和232的可共享部分是 WINDOWS目录204a),其对于计算机系统中的所有竖井而言可以是相同的 或不相同的,并且可以与实际后台目录204相同或不相同。在本发明的某些实 施例中,在系统中的所有竖井中运行的所有应用程序或进程共享竖井的合并目 录的单个可共享部分,其可能存在或不存在于竖井在其上运行的特定计算机 上。此外,作为合并目录的可共享或不可共享部分的“后台”的实际目录可存 在于诸如可移动盘、CD ROM、USB钥匙等可移动介质上。类似地,实际后台 目录可驻留在远程系统上。对于合并目录的专用或不可共享部分及其后台存储 而言亦是如此。

在本发明的某些实施例中,操作系统214中创建合并目录(例如,合并目 录212和232)的机制是过滤器驱动程序,其能够通过注册回调来将其自身插 入到操作的代码路径中。在本发明的某些实施例中,过滤器驱动程序包括文件 系统的一部分。在本发明的某些实施例中,所注册的回调包括PreCreate、 PostCreate、PreDirectoryControl、PreQueryInformation、PreSetInformation、 PreClose和SetInformation,但可以理解,可注册其他回调。在本发明的某些实 施例中,对其执行特殊处理(例如,经由回调)的操作是对文件、目录或子目 录的枚举、打开、创建、重命名、关闭和删除操作。例如,枚举操作可以与 PreDirectoryControl和PreQueryInformation回调相关联,打开和创建与PreCreate 和PostCreate回调相关联,关闭与PreClose回调相关联,删除与SetInformation 回调相关联,而重命名与PreSetInformation回调相关联。在某些实施例中,当 文件系统访问请求从进程发出时,操作系统经由回调来监视该请求并且如果操 作是对于其将发生特殊处理的操作中的一个,则执行特殊处理。例如,在图2 中,操作系统214可监视诸如由竖井202中的进程216发起的请求240等文件 系统访问请求并执行特殊处理以便从专用目录206(与竖井202相关联)和公 共目录204中创建虚拟合并目录212。虚拟合并目录212中从专用目录206导 出的各部分由(虚拟的)专用目录206a来表示,而虚拟合并目录212中从公 共目录204导出的各部分由(虚拟的)公共目录204a来表示。

每一个构成(后台存储)目录都可以与一排名相关联(例如,在图2中, 专用(后台存储)目录206与排名210相关联、公共WINDOWS(后台存储) 目录204与排名208相关联)。在某些实施例中排名在需要时用作平局打破器 (tie breaker)。例如,如果请求目录文件访问(例如,打开、枚举、删除等), 并且所指示的文件存在于两个同名目录中,则可使用构成目录的排名来确定向 请求者展示哪个文件,即,向请求者展示具有最高排名的目录中的文件。类似 地,如果给定名称是一个构成目录中的文件并且相同的名称是另一组构成目录 中的子目录,则在某些实施例中向请求者展示具有最高排名的目录中的条目。 在本发明的某些实施例中,给予专用目录206比公共目录204更高的排名。

例如,在某些实施例中文件系统枚举是来自所有构成目录的所有文件和子 目录的并集。如果在不止一个构成目录中存在相同的名称,则使用每一构成目 录的排名来确定应展示哪个目录的版本的名称。当从合并目录中打开文件时, 该文件从展示该文件的排名最高的目录中打开。在创建文件时,如果该文件还 未存在于任一构成目录中,则它将在具有最高排名的目录中创建。在重命名文 件时,查询每一个构成目录以确定新名称尚未被使用,并且如果未被使用,则 将该文件重命名为该新名称。

在本发明的某些实施例中,将每一个目录中的每一个文件与在不止一个文 件或目录在各构成目录中具有相同的名称时确定向竖井展示哪个文件的排名 相关联,而不是将排名与目录相关联。

如上所述,当两个或更多实际目录经由一个逻辑视图来展示时,删除文件 可展示或显示其他构成目录之一中具有与所删除的文件相同的名称的文件。例 如,如果排名最高的文件已被删除,则可展示来自一构成目录的具有相同名称 的文件。该文件的展示可能不是合乎需要的。因此,需要“记住”在构成目录中 存在过具有相同名称的文件并防止在同名的排名最高的文件已被删除时展示 该文件,因为否则,专用文件对于先前访问过该专用文件的应用程序而言将不 会看上去已被删除。

为了解决以上需求,将删除标记与在合并目录环境中对其接收到删除请求 的文件相关联。在某些实施例中,将标记添加到专用目录以指示所标记的文件 将被认为是“已删除的”并因此应当不再经由逻辑合并目录视图可见。因此,在 本发明的实施例中,提供用于删除标记的存储并且在文件访问操作期间创建并 遵循删除标记。存储删除标记需要用于删除信息的某一种持久存储。构想用于 存储删除标记的多个选项。一个选项是装饰或发消息通知(message)所删除 的文件的名称以指示删除。例如,假设文件“ABC.txt”将被虚拟地删除。ABC.txt 可通过创建被称为“$$deleted$$ ABC.txt”(已向其添加包括“$$deleted$$的装饰 的原始名称”)的文件来虚拟地删除。适当的装饰的存在指示虚拟地删除的文 件。很明显,任何类型的装饰都可指示虚拟删除:所示装饰仅仅是一种可能的 装饰的示例。另一选项是将删除标记作为重解析点来存储。即,文件系统可存 储“名称条目”,其不是指向文件的直接指针而是由过滤器驱动程序存储的、用 于确定何时重解析到另一位置的文件数据。在某些实施例中,第三方可提供其 自己的重解析点。提供重解析点结构并且在检测到重解析点结构时将其作为删 除标记来处理(如对于特殊命名的文件所做的那样)。重解析点可从响应于枚 举请求而返回的结果中过滤掉。另一选项是将删除标记存储在外部数据库中。 例如,诸如文件名、经装饰的名称或重解析点等删除标记可被存储在文件系统 中的另一位置中(或许被存储在被称为“删除的文件”的文件、目录或子目录 中),或者删除标记可被存储在另一非文件系统存储中。在这种情况下,将存 储删除的文件的名称,而不是存储经装饰的名称以指示虚拟地删除的文件,从 而需要查找操作以确定给定文件是否已被虚拟地删除。另一选项是使用扩展属 性来指示文件已被删除。即,特殊扩展属性可以与文件名存储在一起(例如, 而不是装饰文件名),该特殊扩展属性指示文件已被虚拟地删除。因此,删除 数据可指示所删除的文件、目录或子目录的名称以及该文件、目录或子目录被 删除的位置。这些目标可通过存储标识删除的文件、目录或子目录的特殊文件, 存储诸如删除的文件、目录或子目录的重解析点等另一文件系统标记,将另一 流或扩展属性与删除的文件、目录或子目录存储在一起,以及将删除数据存储 在外部(单独的)存储中来实现。因为删除可在事务中发生,所以所使用的任 何实现都应当是知晓事务的。例如,如果删除标记被存储在外部存储中,则该 外部存储将需要知道事务何时被提交并且将在事务提交期间将结果提交给外 部存储。类似地,如果事务被中止,则该外部存储将回退(或撤销)改变。该 外部存储还必须在事务中提供动作已经发生的视图,但在该事务之外使得看上 去就像该动作还未发生。

在从合并目录中删除文件时需要创建删除标记。在接收到对于先前从合并 目录中删除的文件的打开文件的请求、接收到对于先前从合并目录中删除的文 件的枚举文件的请求、接收到对于先前从合并目录中删除的文件的创建文件的 请求等时需要遵循删除标记。

在本发明的某些实施例中,当文件被删除时,具有相同名称的文件将不会 再次从除了合并目录的专用部分之外的构成目录中展示。在这种情况下, 如果来自构成(公共)目录的具有相同名称的文件随后开始存在,则该文件将 不会在该合并目录中可见。在本发明的某些实施例中,标记只在合并目录的公 共部分中存在与正被删除的文件同名的文件的情况下才创建。在这种情况下, 删除专用文件否则将导致展示或显示同名的公共文件。如果同名的文件随后开 始存在,则该文件将会在合并目录中可见。

在本发明的某些实施例中,操作系统的过滤器驱动程序挂钩各种文件系统 操作并且与上述合并目录操作协同展示虚拟地删除的文件、目录或子目录的正 确语义。例如,对于诸如枚举操作(例如,使用PreDirectoryControl)等操作 而言删除标记本身是被隐藏的,并且已经被虚拟地删除的任何文件、目录或子 目录都是被隐藏的。即,可过滤掉删除标记以使得在接收到枚举请求时不返回 删除标记。类似地,对其存在删除标记的文件不响应于枚举请求来返回。对于 诸如创建或打开(例如,使用PreCreate)等操作而言防止调用者打开删除标记 或虚拟地删除的文件、目录或子目录。在合并目录环境中,在接收到打开或创 建操作请求时提供逻辑以确定是否试图打开合并目录的专用或公共部分中的 文件、目录或子目录。如果打开操作中所指定的文件、目录或子目录处于公共 部分中,则执行检查以确定在专用位置中是否存在对于该文件、目录或子目录 的删除标记。如果存在,则打开失败(例如,返回“未找到状态对象名”)。不 允许打开删除标记形式的文件。对于重命名操作而言,将文件重命名为删除标 记形式的名称是不被准许的。对于删除操作而言,在合并目录的专用部分中为 文件、目录或子目录创建删除标记。在某些实施例中删除标记通过创建具有文 件名的发消息通知的版本的新文件来创建。(例如,如果文件名的ABC,如 果ABC将被虚拟地删除,则创建名为$$deleted$$ ABC的文件。文件$$deleted$$ ABC的存在指示ABC已被虚拟地删除。传统上,目录或子目录在可被删除之 前必须是空的。在目录或子目录虚拟删除的情况下,可删除其中只有删除标记 的目录。在本发明的某些实施例中,这按照以下步骤来实现:创建目录的删除 标记、删除嵌套的删除标记并且然后照常删除目录。

图3是根据本发明的实施例的用于在表面上合并文件系统目录的方法的 流程图;在302,操作系统(例如,图2的OS214)监视文件系统访问请求(诸 如由在竖井202中运行的进程216做出的文件系统访问请求240)。当操作系 统检测到文件系统访问请求(304)(例如,经由回调)时,操作系统214确 定所做出的文件系统访问请求的类型(306、314、322、326、330)并执行适 当的处理,如将在以下更详细地描述的。

例如,在306,操作系统可确定文件系统访问请求是创建或打开文件或目 录的操作(306)。图4是可在随后发生的处理(308)的流程图。当打开或创 建中断请求(IRP)被发送到其上存在合并目录的卷时,调用使得操作系统的 过滤器驱动程序能够检查该请求以确定是否需要特殊处理的创建回调(例如, PreCreate)。使用过滤器驱动程序使得能够实现所描述的各特征而不修改底层 文件系统。或者,合并目录的创建可通过修改底层文件系统来创建。在调用打 开或创建操作时,提供绝对路径名或相对于现有打开的文件或目录的路径名。 在使用相对打开时,请求分组中表示现有的打开的文件或目录的字段引用应接 收该请求的文件系统设备实例。在绝对打开的情况下,操作系统的IO管理器 解析名称,对象管理器解析该名称中指向设备对象的一部分并将该名称的未解 析余额(balance)(尚未被解析的部分)连同指向其所处的设备对象的指针一 起传回到I/O管理器。当所涉及的文件或目录应使用竖井视图(402)而不是 使用普通系统文件目录来打开时需要特殊处理。如此处所使用的,“使用竖井 视图”来执行操作意味着文件或目录的名称在竖井的虚拟合并目录的上下文中 而不是在普通(系统)文件系统目录的上下文中解释。

在402,如果打开是绝对打开(不是相对打开)并且调用者处于竖井中, 则处理在404处继续。在本发明的某些实施例中,操作系统通过观察文件系统 访问请求中的若干字段来确定打开或创建文件请求是相对还是绝对打开/创建。 如果文件系统访问请求仅包括文件名并且发起该请求的线程不属于在竖井中 运行的进程,则该请求被认为是绝对打开。类似地,当进程(在竖井中或不在 竖井中)将文件的句柄传递给另一进程时,如果原始句柄是在竖井中打开的, 则处理在404处继续。可使用句柄字段中所存储的信息来检索与该句柄相关联 的元数据(408)。

由此,在404,在竖井的上下文中检查该文件的名称。文件或目录使用竖 井视图来打开,只要请求中所引用的文件或目录最初在竖井中打开(例如,可 能在第一进程在一竖井中打开文件并且然后将该文件的句柄传递给竖井内或 外的另一进程时发生)。在本发明的某些实施例中,如果请求中表示现有打开 的文件或目录的句柄的字段不为空,则该请求被认为是相对请求。在402,如 果调用者不在竖井中或如果原始句柄不是在竖井中打开的,则处理照常进行 (406)。如果请求使用绝对名称(即,使用路径名来显式命名文件或目录并 且请求的打开文件字段为空),则操作系统确定发起请求的进程(调用者)是 否处于竖井中。在本发明的某些实施例中,操作系统通过确定发起文件系统访 问请求的线程是否处于竖井中来确定调用者是否处于竖井中。或者,在某些实 施例中操作系统可通过检查可用竖井标识符来标记的文件系统访问请求以确 定该请求是否源自竖井中的调用者来确定调用者是否处于竖井中。如果调用者 处于竖井中,则文件或目录使用竖井视图来打开。

因此,如果请求中所引用的文件或目录最初不是在竖井中打开的,或者如 果请求是绝对打开并且调用者不在竖井中,则处理在406处继续。即,进行普 通处理。在本发明的某些实施例的普通处理中,I/O管理器检查设备对象以确 定该设备对象是否具有指向卷参数块(VPB)的有效指针并使用该VPB的设 备对象字段来找出正确的文件系统设备对象。如果设备对象没有有效的VPB 指针,则I/O管理器将IRP_MJ_CREATE请求直接发送到由对象管理器传入的 设备对象的设备驱动程序。

在404,如果操作将使用竖井视图来处理,则检查请求中的文件或目录的 名称并在竖井的上下文中解释该文件或目录的名称。假设例如,“文件1”同时 存在于全局目录(例如,合并目录视图的可共享部分)和专用目录(例如,不 可与其他竖井共享的部分)两者中。假设在竖井中运行的应用程序请求使用相 对打开来打开“文件1”。假设文件1将相对于在竖井中打开的“C:\WINDOWS” 来打开,其中“C:\WINDOWS”实际上是“C:\Silos\0000\WINDOWS”。在这种情 况下,该请求将会被重写以使得将引用专用目录(例如, “C:\Silos\0000\WINDOWS”)中的文件1,而不是全局目录中的文件1。发生普 通出错处理。即,例如在打开操作中,如果搜索由文件系统访问请求中的名称 来标识的文件但在任一目标目录中都未找到,则返回出错消息。如果在适当的 目录中找到文件,则将该文件的句柄返回给调用者。可在句柄被返回给调用者 之前将元数据附加到该句柄以便成功地打开或创建。如果未找到文件,则返回 出错消息。在408,检索竖井的合并目录元数据。在410,如果未在合并目录 的专用部分中中找到所请求的名称,则处理在422处继续。在422,可检查其 他目录(诸如公共位置)以查找文件。如果请求是创建请求,则文件可在合并 位置中创建。如果请求成功,则将元数据附加到该请求以便正确地处理将来对 该句柄的请求。在410,如果在合并目录中找到所请求的名称,则确定是否要 创建或打开所命名的文件(412)。在某些操作系统中,可使用“创建操作”来 同时打开和创建文件。如果是这种情况,则需要步骤412。在420,如果所请 求的操作是“打开文件”,则操作系统确定在合并目录的专用(不可共享部分) 中是否存在该文件。在420,如果操作系统确定在虚拟合并文件目录的专用部 分中不存在该文件,则检查合并目录的公共部分以查找该文件。如果在合并目 录的公共部分中不存在该文件,则返回出错消息。如果在合并目录中找到该文 件,则返回该文件的句柄。在412,如果确定将要创建文件,则在414,操作 系统检查以查看在公共或专用目录中是否已经存在该文件。如果存在,则导致 出错(418)。如果不存在,则在专用目录中创建文件,将元数据与该句柄相 关联(416)并将该句柄连同该元数据一起返回给调用者。

例如,假设竖井202中的进程216发出文件系统请求240。还假设文件系 统请求240是创建文件请求(在WINDOWS中,这可能需要向其上存在合并 目录的卷发送IRP_MJ_CREATE IRP)。在发送IRP_MJ_CREATE IRP时调用 PreCreate回调。因为做出了回调,所以OS 214中的过滤器驱动程序能够检查 请求并确定对于该特定创建操作是否需要特殊处理。如果文件应使用竖井虚拟 视图(合并目录)来访问,则需要特殊处理。如果不是,则不需要特殊处理。 如果需要特殊处理,则检索特定竖井的合并目录元数据。在某些操作系统中, 可使用“创建”操作来打开文件或创建新文件。如果创建语句的设置指示将创建 文件,则操作系统检查以查看在公共构成目录(例如,WINDOWS目录204) 中是否已经存在该文件。(这将是出错条件并且随后将发生适当的出错处理。) 如果创建语句的设置指示将打开现有文件,则操作系统检查以查看在专用目录 206中是否存在该文件。如果找到该文件,则请求连同现有文件的位置一起沿 着栈向下继续。如果未找到该文件的现有版本,则将从其执行打开的位置改为 其他构成目录(改为目录204)并且请求沿着栈向下继续。或者,请求可通过 在栈的顶部重新发出该请求来重解析。如果正在被访问的文件名不在合并目录 中,则处理照常进行。如果执行对请求的任何特殊处理,则将元数据与该文件 句柄相关联。该元数据可在执行对该文件的其他操作(诸如例如查询文件名的 请求或打开相对于打开目录的另一文件的尝试)的情况下访问。在本发明的某 些实施例中,元数据将在PostCreate期间被附加到文件句柄。

再次参考图3,在314,如果操作系统检测到对文件系统目录的枚举请求, 则首先,操作系统确定是否存在与该目录相关联的元数据(316)。在本发明 的某些实施例中,如果存在元数据,则目录是合并目录(318)。或者,操作 系统可从该元数据中确定该目录是否是合并目录。在任一种情况下,如果目录 是合并目录(318),则返回合并在一起的两个目录的结果(320)。如果目录 不是合并目录,则执行普通处理。例如,如果目录枚举IRP是由诸如竖井202 的进程216等进程发起的,则操作系统检查以查看是否存在与要枚举的目录(请 求中所命名的目录)相关联的任何元数据。如果存在与该目录相关联的元数据 或者如果操作系统从该元数据中确定该目录是合并目录(318),则将两个目 录合并在一起并将结果返回给调用者。因此,在接收到初始枚举请求时,执行 对每一个构成目录的枚举并将结果存储在枚举高速缓存中。通过比较每一个枚 举高速缓存的最新条目来用枚举结果来填充调用者的缓冲区。如果高速缓存变 为空,则可向该构成目录重新发出枚举以接收更多结果。如果构成目录没有更 多的结果,则从其他高速缓存中拉取。当耗尽了所有高速缓存并且构成目录中 没有一个具有任何结果时,枚举完成。结果可有序地存储以使得可确定从哪个 高速缓存拉取(基于排序次序)。或者,如果底层文件系统不按序枚举结果(作 为示例,像诸如但不限于由微软针对MS-DOS以及微软WINDOWS的某些版 本开发的文件分配表文件系统等文件系统的情况那样),则完全填充高速缓存, 并且排序前的结果。如果在不止一个目录中遇到相同的名称,则将构成目录的 排名用作平局打破器(如以上所描述的)。

如果操作是查询(322)(诸如对名称或关于文件的其他信息的请求), 则在324,检索该文件的实际名称并更新该名称(如果有必要的话)以反映对 于请求者的合适名称。在某些情况下,如果接收到对文件名的请求或接收到对 关于文件的其他信息的请求,则返回相对于竖井的名称而不是该文件在稳定存 储上的实际名称。即,如果接收到接收文件信息的请求,则由操作系统来返回 该信息并且按需更新任何信息(328)以使其匹配调用者惯用于打开该文件的 名称,由此保持构成目录的所有内容都在同一个合并目录中的假象。例如,假 设竖井中的进程已将句柄传递给该竖井外的进程并且该进程现在想要该文件 的名称,将被返回给请求者的该文件的名称将会是非竖井的或是系统文件名, 不是竖井文件名。类似地,如果竖井中的进程具有系统文件的句柄,则它将需 要该竖井文件名,不是系统文件名。因此,给定一句柄,返回适于请求者的文 件名。

如果遇到的操作是重命名文件(326),则操作系统必须确保作为相对于 竖井的名称的新名称(文件将被重命名为的名称)在底层文件系统看见它之前 被转换为实际名称以使得文件系统正确地重命名该文件。在330,如果操作被 确定为关闭,则调用PreClose回调。在332,删除与正被关闭的文件相关联的 任何元数据。可以理解,以上所列出的动作中的一个或多个可以是可任选的或 跳过的并且各动作可以按除了图3所描绘的之外的顺序来进行。

图5示出了遵循虚拟删除的创建/打开操作的实施例。在502,接收对文件、 目录或子目录的创建/打开请求。在504,如上所述地执行普通竖井合并目录处 理。在506,确定正被打开的文件、目录或子目录是否处于公共构成目录中。 在508,如果正被打开的文件位于合并目录的公共部分中,则确定对于该文件、 目录或子目录是否存在删除标记并且如果是,则在510,打开请求失败。在508, 如果确定对于所述文件、目录或子目录不存在删除标记,则执行普通竖井合并 目录处理(512)。在506,如果确定正被打开的文件、目录或子目录不在公共 构成目录中,则处理在512处继续。删除标记可以按如上所述的任何合适的方 式来实现。

图6示出了遵循虚拟删除的枚举操作的某些实施例。在602,接收对文件、 目录或子目录的枚举请求。在604,如上所述地执行普通竖井合并目录处理。 在606,从专用位置(合并目录的专用部分)中过滤删除标记。在608,过滤 掉公共位置中具有专用位置中的对应的删除标记的条目。在610,执行普通竖 井合并目录操作。在本发明的某些实施例中,过滤掉对于其存在删除标记的文 件。显示结果或以其他方式返回结果。

图7示出了虚拟删除操作的某些实施例。在702,接收对文件、目录或子 目录的删除请求。在704,如果未对合并目录启用虚拟删除语义,则普通处理 在706处继续。然而,如果对于合并目录启用虚拟删除语义,则处理在708处 继续并且为正被删除的文件创建删除标记。在710,如果对其接收到删除请求 的文件处于专用位置中,则“删除”该文件(706)。在710,如果对其接收到删 除请求的文件处于公共位置中,则处理在712处继续。在712,如果与该删除 请求相关联的访问许可允许删除,则“删除”该文件(706)。在712,如果与该 删除请求相关联的访问许可不允许删除,则不删除该文件(714)。

此处所述的各种技术可结合硬件或软件,或在适当时以其组合来实现。由 此,本发明的方法和装置或其特定方面或部分可采取包含在诸如软盘、 CD-ROM、硬盘驱动器或任何其它机器可读存储介质等有形介质中的程序代码 (即,指令)的形式,其中当程序代码被加载到诸如计算机等机器内并由其执 行时,该机器成为用于实现本发明的装置。在程序代码在可编程计算机上执行 的情况下,计算设备通常将包括处理器、该处理器可读的存储介质(包括易失 性和非易失性的存储器和/或存储元件)、至少一个输入设备、以及至少一个输 出设备。可例如通过使用数据处理API等来利用本发明的域专用编程模型的创 建和/或实现的各方面的一个或多个程序较佳地用高级过程语言或面向对象的 编程语言来实现以与计算机系统通信。然而,如果需要,程序可以用汇编语言 或机器语言来实现。在任何情形中,语言可以是编译的或解释的语言,且与硬 件实现相结合。

尽管结合各附图的优选实施例描述了本发明,但是可以理解,可以使用其 它类似的实施例,或可以对所述实施例进行修改或添加来执行本发明的相同功 能而不背离本发明。因此,本发明不应限于任何单个实施例,而是应该根据所 附权利要求书的广度和范围来解释。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号