著录项信息
专利名称 | 创建虚拟进程的进程内中介 |
申请号 | CN201080016206.3 | 申请日期 | 2010-03-26 |
法律状态 | 暂无 | 申报国家 | 中国 |
公开/公告日 | 2012-03-14 | 公开/公告号 | CN102378964A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F9/455 | IPC分类号 | G;0;6;F;9;/;4;5;5;;;G;0;6;F;9;/;2;2查看分类表>
|
申请人 | 微软公司 | 申请人地址 | 美国华盛顿州
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 微软技术许可有限责任公司 | 当前权利人 | 微软技术许可有限责任公司 |
发明人 | J·M·希恩;R·P·西斯特拉;N·雅各布森 |
代理机构 | 上海专利商标事务所有限公司 | 代理人 | 顾嘉运 |
摘要
在一种实施例中,工具和技术可以包括借助于在正在运行的非虚拟进程中的中介模块来截取来自正在运行的非虚拟进程的创建所请求的非虚拟进程的请求。响应于所截取的请求,可以标识对应于所请求的非虚拟进程的适当的虚拟进程。另外,可以准备被配置为主控该虚拟进程的虚拟环境,且可以将该虚拟进程添加到该虚拟环境。最终,可以借助于该虚拟进程来履行请求。
1.一种计算机实现的方法,包括:
借助于正在运行的非虚拟进程(210)中的中介模块(214)来截取来自所述正在运行的非虚拟进程(210)的创建请求的非虚拟进程(236)的请求(212);
响应于所截取的所述请求(212),标识对应于所请求的非虚拟进程(236)的适当的虚拟进程(294);
准备被配置为主控所述虚拟进程(294)的虚拟环境(230);
将所述虚拟进程(294)添加到所述虚拟环境(230);以及
借助于所述虚拟进程(294)来履行所述请求(212)。
2.如权利要求1所述的方法,其特征在于,所述中介模块、所述正在运行的非虚拟进程和所述虚拟环境全部都在计算环境中的存储器上,且所述截取、标识、准备、添加和履行全部都由所述计算环境中的一个或多个处理器执行,所述一个或多个处理器能够访问被存储在所述存储器上的信息。
3.如权利要求1所述的方法,其特征在于,标识所述适当的虚拟进程包括使用关于所请求的非虚拟进程的标识信息。
4.如权利要求3所述的方法,其特征在于,所述标识信息包括全局名称。
5.如权利要求4所述的方法,其特征在于,所述名称包括文件名和路径。
6.如权利要求1所述的方法,其特征在于,所述中介模块包括所述正在运行的非虚拟进程的调用堆栈中的组件。
7.如权利要求1所述的方法,其特征在于:
所述虚拟环境包括第一环境,所述第一环境将该环境中的一个或多个虚拟进程与在所述虚拟环境外的一个或多个外部进程隔离开来,但是所述虚拟环境促进所述第一环境中的所述一个或多个虚拟进程访问由底层操作系统管理的资源;
所述中介模块包括所述正在运行的非虚拟进程的调用堆栈中的组件;
标识所述适当的虚拟进程包括从所述中介模块向虚拟化代理传送对应于所请求的非虚拟进程的标识符,所述虚拟化代理被配置为管理一个或多个虚拟环境;
准备所述虚拟环境包括借助于所述虚拟化代理来准备所述虚拟环境;以及添加所述虚拟进程包括响应于截取所述请求借助于所述虚拟化代理来添加所述虚拟进程。
8.一种计算机系统,包括:
虚拟化代理模块(220);
正在运行的非虚拟进程模块(210),所述正在运行的非虚拟进程模块(210)被配置为发起创建所请求的非虚拟进程(236)的进程创建请求(212);
所述正在运行的非虚拟进程模块(210)包括中介模块(214),所述中介模块(214)被配置为截取所述进程创建请求(212);
所述虚拟化代理模块(220)被配置为执行以下动作:
从所述中介模块(214)接收所述进程创建请求(212)的通知;
准备虚拟环境(230);以及
向所述虚拟环境(230)添加对应于所请求的非虚拟进程(236)的虚拟进程(294)。
9.如权利要求8所述的计算机系统,其特征在于,所述计算机系统被配置为借助于所述虚拟进程来履行所述进程创建请求。
10.一种计算机实现的方法,包括:
在计算环境(100)中的正在运行的非虚拟进程(210)中发起创建非虚拟进程(236)的进程创建请求(212);
在从所述正在运行的非虚拟进程(210)传送所述进程创建请求(212)之前,借助于所述正在运行的非虚拟进程内中介模块(214)来截取所述进程创建请求(212);
判断所述进程创建请求(212)是否对应于可用的虚拟进程(294);
如果所述进程创建请求对应于所述可用的虚拟进程(294),那么:
将所述虚拟进程(294)添加到虚拟环境(230);以及
借助于所述虚拟进程(294)来履行所述进程创建请求(212)。
11.如权利要求10所述的计算机实现的方法,其特征在于,履行所述进程创建请求包括根据来自所述正在运行的非虚拟进程的进程创建应用程序编程接口调用中的一个或多个参数在所述虚拟环境中运行所述虚拟进程。
12.如权利要求10所述的计算机实现的方法,其特征在于,判断所述进程创建请求是否对应于可用的虚拟进程包括判断所述进程创建请求中的标识符是否对应于可用的虚拟进程。
13.如权利要求10所述的计算机实现的方法,其特征在于,将所述虚拟进程添加到所述虚拟环境包括使用虚拟化代理来将所述虚拟进程添加到所述虚拟环境。
14.如权利要求10所述的计算机实现的方法,其特征在于,还包括:
判断是否已经准备所述虚拟环境;
如果还没有准备所述虚拟环境,那么,准备所述虚拟环境。
15.如权利要求10所述的计算机实现的方法,其特征在于,借助于所述虚拟进程来履行所述进程创建请求包括根据一个或多个参数运行所述虚拟进程。
创建虚拟进程的进程内中介\n背景技术\n[0001] 应用程序或进程虚拟化软件可以解耦应用程序,应用程序中的每一个在运行时可以包括来自底层操作系统的一个或多个正在运行的进程。因而,应用程序虚拟化通常可以允许应用程序在不需要访问其中安装应用程序的特定物理机器的情况下就运行。例如,可以在网络上或在可移动存储设备上按需提供包括应用程序和应用程序自己的一组虚拟环境配置的虚拟应用程序包。\n[0002] 虚拟环境将在环境中的一个或多个虚拟应用程序或进程与在环境外的应用程序或进程(例如,底层操作系统和/或运行在虚拟环境外的操作系统上的一个或多个其他应用程序或进程)隔离开来。虚拟环境也促进在虚拟环境内的一个或多个应用程序或进程对诸如由底层操作系统管理的资源等的在虚拟环境外的资源的访问。因而,应用程序或进程虚拟化通常包括两个方面:隔离和资源管理。隔离通常包括将在虚拟环境内的命名空间保持为与在虚拟环境外的一个或多个命名空间隔离。资源管理通常包括以允许虚拟环境中的进程适当地运行而不考虑隔离的方式来管理资源,且通常以虚拟环境中的进程不知晓的虚拟化的方式来管理资源。\n[0003] 因为虚拟化的隔离方面,虚拟环境可以在底层操作系统和虚拟环境中的虚拟进程之间提供间接层。一旦虚拟进程运行在虚拟环境中,就可以在虚拟环境和非虚拟环境之间转换通信,如同现有应用程序虚拟化软件所做的那样。\n[0004] 对正在运行的虚拟进程来说,难以以自然的方式创建新的虚拟进程,这是因为仍然不存在为新的虚拟进程设立的转换或间接方案。一些应用程序虚拟化软件已经通过使得代理截取已经从启动非虚拟进程发送的新的进程创建应用程序编程接口(API)调用来处理这种类型的虚拟进程创建。如果可用的虚拟进程可以履行进程创建调用,则可以使用代理来唤醒过程以便在适当的虚拟环境中创建对应的虚拟进程。\n发明内容\n[0005] 无论用于创建虚拟进程的先前的工具和技术有什么优点,它们既没有认识到在此描述和要求保护的虚拟进程创建工具和技术,也没有认识到由这样的工具和技术产生的优点。\n[0006] 在一种实施例中,工具和技术可以包括借助于在正在运行的虚拟进程中的中介模块来截取来自正在运行的非虚拟进程的创建所请求的非虚拟进程的请求。响应于所截取的请求,可以标识对应于所请求的非虚拟进程的适当的虚拟进程。另外,可以准备被配置为主控虚拟进程的虚拟环境,且可以将虚拟进程添加到虚拟环境。最终,可以借助于虚拟进程来履行请求。\n[0007] 在工具和技术的另一实施例中,正在运行的非虚拟进程可以被配置为发起创建所请求的非虚拟进程的进程创建请求。正在运行的虚拟进程中的中介模块可以被配置为截取进程创建请求。另外,虚拟化代理可以被配置为从中介模块接收进程创建请求的通知、准备虚拟环境并向虚拟环境添加对应于所请求的非虚拟进程的虚拟进程。\n[0008] 在工具和技术的又另一实施例中,可以在正在运行的非虚拟进程中发起创建非虚拟进程的进程创建请求。在从正在运行的非虚拟进程传送进程创建请求之前,可以借助于进程内中介模块来截取请求。也可以判断进程创建请求是否对应于可用的虚拟进程。如果进程创建请求对应于可用的虚拟进程,那么,可以将虚拟进程添加到虚拟环境,且可以借助于虚拟进程来履行进程创建请求。\n[0009] 提供本概述以便以简化形式介绍概念的选集。下面在详细描述中进一步描述各概念。本概述不旨在标识所要求保护的本主题的关键特征或必要特征,也不旨在被用来限制所要求保护的本主题的范围。类似地,本发明不限于解决在背景、详细描述或附图中讨论的特定的技术、工具、环境、缺点或优点的实现。\n附图说明\n[0010] 图1是可在其中实现所描述的实施例中的一个或多个的合适的计算环境的框图。\n[0011] 图2是阐释用于从非虚拟进程创建请求创建虚拟进程的计算环境的框图。\n[0012] 图3是阐释用于从非虚拟进程创建请求创建虚拟进程的技术的流程图。\n[0013] 图4是用于从非虚拟进程创建请求创建虚拟进程的另一技术的流程图。\n具体实施方式\n[0014] 所描述的实施例针对用于改善地从非虚拟进程创建请求创建虚拟进程的技术和工具。这样的改进可以得自分离地或组合地使用各种技术和工具。\n[0015] 这样的技术和工具可以包括在请求仍然在发起请求的正在运行的进程中时截取非虚拟进程创建请求(即,用于创建非虚拟进程的进程创建请求)。非虚拟请求可以被用来标识适当的虚拟进程,且可以将虚拟进程添加到虚拟环境,使得虚拟进程可以履行非虚拟进程创建请求。发起进程可以响应于诸如从操作系统或从另一进程接收的用户输入或信息等的各种类型的信息并以各种方式发起进程创建请求。因为可以在其中发起请求的进程中截取进程创建请求,且在请求离开发起进程之前可以使用进程创建请求来将对应的虚拟进程添加到适当的虚拟环境,所以可以借助于虚拟进程来履行请求而不依赖于进程外代理。\n[0016] 在虚拟应用程序场景中,虚拟化工具通常知晓多个命名空间,例如非虚拟系统命名空间和一个或多个虚拟环境命名空间。虚拟环境通常定义命名空间视图,包括虚拟环境具有对其的访问权的命名空间和用于进行对应于命名空间的名称的合成的策略。在这样的虚拟环境内操作的虚拟进程通常操作为仿佛仅存在单个命名空间,且虚拟化软件以及在其他虚拟环境中操作的虚拟进程通常在该单个命名空间和可以由非虚拟软件使用的其他命名空间之间转换。虚拟化代理(例如微软的App-V虚拟化软件中的虚拟化代理)通常根据需要通过准备或创建和关闭虚拟环境来管理虚拟环境的生命周期。\n[0017] 在虚拟环境中的虚拟进程和在该虚拟环境外的进程之间的转换方案通常是不操作的,直到创建了虚拟环境并将虚拟进程添加到虚拟环境。因而,在现有的技术中,发起进程创建请求的正在运行的发起进程通常不能够在没有进程外(即,在发起进程之外)代理的帮助下创建虚拟进程。这样的进程外代理通常被用来截取请求以便在请求离开发起请求的进程之后创建所请求的进程。因为请求已经离开发起进程,例如以创建进程API调用的形式,发起进程和/或操作系统期望接收API调用的模块是所请求的进程并且起到所请求的进程将起到的作用。因为代理而不是所请求的进程接收API调用,代理通常模拟正被请求的实际进程的行为。\n[0018] 这样的进程外代理具有若干缺陷。例如,这样的代理的一个挑战是尝试维持最初预期发生的事情的保真度。例如,在应用程序起动时,它可以处理诸如命令行参数、环境块或由计算环境中的操作系统支持的其他参数等的信息。因而,代理通常需要具有操作那些参数的功能。如果新的扩展点(即,操作系统中可以为要触发的代码而注册代码的场所,例如快捷方式扩展点、文件类型关联扩展点、com对象扩展点、服务扩展点(例如NT服务扩展点)等等)被用来起动应用程序,则代理需要扩展为包括处理新的扩展点和扩展点支持的所有不同的参数或元数据的功能。一些虚拟化方案甚至具有用于每一扩展点的不同代理。\n[0019] 另外,一个进程可以在不利用操作系统扩展点的情况下直接地调用(且由此请求创建)另一进程。为了在该情况中起动对应于所调用的进程的虚拟进程,可以使用用于该特定的所调用的进程的代理。然而,为在应用程序中被调用的每一进程创建这样的代理是极其困难的,对于复杂的应用程序来说尤其如此。另外,在这样的情况中,调用进程有时检查所调用的进程的一个或多个属性,例如版本号、文件大小或数字签名。因为调用进程期望代理实际上是所调用的进程,进程外代理将需要模拟这样的属性,这是非常难以实现的。\n[0020] 在此描述的用于从非虚拟请求创建虚拟进程的工具和技术可以克服使用进程外代理的缺陷中的一个或多个。然而,在一些情况中,连同进程外代理一起使用下面讨论的工具和技术是可能的。\n[0021] 在所附权利要求中界定的本主题并不必定限于在此描述的益处。本发明的特定实现可以提供在此描述中的益处中的全部、一些或不提供这些益处。尽管为便于呈现在此以特定的、连续的次序来描述用于各种技术的操作,但应理解,除非要求特定的排序,否则这一描述方式包括操作的次序的重排。例如,在一些情况中,循序描述的操作可以被重排或同时执行。在此参考流程图描述的技术可以与在此描述的系统中的一个或多个和/或一个或多个其他系统一起使用。此外,为简单起见,各流程图可以不示出与其他技术联合使用特定技术的各种方式。\n[0022] I.示例性计算环境\n[0023] 图1阐释其中可以实现所描述的实施例中的一个或多个的合适的计算环境(100)的一般化示例。例如,一个或多个这样的计算环境可以被用作实现下面描述的用于从非虚拟请求创建虚拟进程的工具和技术的系统。一般地,可以使用各种不同的通用或专用计算系统配置。可以与在此描述的工具和技术一起使用的公知的计算系统配置的示例包括但不限于服务器群和服务器群集、个人计算机、服务器计算机、手持式设备或膝上型设备、多处理器系统、基于微处理器的系统、可编程的消费性电子设备、网络PC、小型计算机、大型计算机、包括以上系统或设备中的任何在内的分布式计算环境等等。\n[0024] 计算环境(100)不旨在建议关于本发明的使用范围或功能的任何限制,这是因为可以在多种多样的通用或专用计算环境中实现本发明。\n[0025] 参考图1,计算环境(100)包括至少一个处理单元(110)和存储器(120)。在图1中,这一最基本的配置(130)被包括在虚线内。处理单元(110)执行计算机可执行指令且可以是真实处理器或虚拟处理器。在多处理系统中,多个处理单元执行计算机可执行指令以便增加处理能力。存储器(120)可以是易失性存储器(例如,寄存器、高速缓冲存储器、RAM)、非易失性存储器(例如,ROM、EEPROM、闪速存储器)或两者的某种组合。存储器(120)存储实现创建虚拟应用程序的进程内中介的软件(180)。\n[0026] 尽管为了清晰起见用线条示出了图1中的各种块,但事实上,描绘各种组件并不如此清晰,并且从比喻上说图1和下面讨论的其他图中的线条更准确地是灰色的和模糊的。例如,可以认为诸如显示设备等的呈现组件是I/O组件。而且,处理器具有存储器。在此的发明者认识到这是本领域的本质,并且重申,图1的简图仅仅是说明可以与本发明的一个或多个实施例结合使用的示例性计算设备。在“工作站”、“服务器”、“膝上型设备”、“手持式设备”等等的这样的类别之间不做区分,这是因为预期所有这些都落在图1和对“计算机”、“计算环境”或“计算设备”的引用的范围内。\n[0027] 计算环境(100)可以具有额外的特征。在图1中,计算环境(100)包括存储(140)、一个或多个输入设备(150)、一个或多个输出设备(160)和一个或多个通信连接(170)。诸如总线、控制器或网络等的互连机制(未示出)将计算环境(100)的组件相互连接起来。通常,操作系统软件(未示出)为在计算环境(100)中执行的其他软件提供操作环境,并协调计算环境(100)的组件的活动。\n[0028] 存储(140)可以是可移动的或不可移动的,且可以包括磁盘、磁带或盒式磁带、CD-ROM、CD-RW、DVD或可以是被用来存储信息且可以在计算环境(100)内访问的任何其他介质。存储(140)存储用于软件(180)的指令。\n[0029] 输入设备(150)可以是诸如键盘、鼠标、笔或跟踪球等的触摸输入设备;语音输入设备;扫描设备;网络适配器;CD/DVD读取器;或向计算环境(100)提供输入的另一设备。\n输出设备(160)可以是显示器、打印机、扬声器、CD/DVD刻录机、网络适配器或从计算环境(100)提供输出的另一设备。\n[0030] 通信连接(170)允许在通信介质上与另一计算实体通信。因而,计算环境(100)可以在使用到诸如个人计算机、服务器、路由器、网络PC、对等设备或另一普通网络节点等的一个或多个远程计算设备的逻辑连接的联网环境中操作。通信介质以经调制的数据信号传送诸如数据或计算机可执行指令或请求等的信息。经调制的数据信号是以在信号中编码信息的方式来设置或改变其特性中的一个或多个的信号。作为示例而非限制,通信介质包括借助于电、光、RF、红外、声学或其他载波来实现的有线或无线技术。\n[0031] 可以在计算机可读介质的一般上下文中描述工具和技术。计算机可读介质是可以在计算环境内访问的任何可用的介质。作为示例而非限制,对于计算环境(100),计算机可读介质包括存储器(120)、存储(140)和以上的组合。\n[0032] 可以在诸如被包括在程序模块中的、正在目标真实处理器或虚拟处理器上的计算环境中执行的那些计算机可执行指令等的计算机可执行指令的一般上下文中描述工具和技术。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、库、对象、类、组件、数据结构等等。在各种实施例中,根据期望,程序模块的功能可以被组合起来或者可以在程序模块之间分拆。可以在本地计算环境或分布式计算环境内执行用于程序模块的计算机可执行指令。在分布式计算环境中,程序模块可以位于本地计算机存储介质和远程计算机存储介质两者中。\n[0033] 为便于呈现,详细描述使用类似于“确定”、“选择”、“调整”、“截取”和“操作”的术语来描述计算环境中的计算机操作。这些和其他类似的术语是由计算机执行的操作的高级抽象,且不应与由人类执行的动作相混淆,除非明确地提到人类(例如“用户”)的动作的执行。对应于这些术语的实际的计算机操作取决于实现而改变。\n[0034] II.用于从非虚拟请求创建虚拟进程的系统和环境\n[0035] 图2是可以与其结合实现所描述的实施例中的一个或多个的虚拟进程创建环境(200)的框图。虚拟进程创建环境(200)可以包括正在运行的非虚拟发起进程(210)。非虚拟发起进程(210)可以发起非虚拟进程创建请求(212),该非虚拟进程创建请求(212)可以是创建非虚拟进程的标准请求。在发起进程内,请求可以采取不同的形式,例如在发起进程(210)的不同的组件之间的握手或调用。\n[0036] 在进程创建请求(212)离开发起进程(210)之前,可以由进程内中介模块(214)(在发起进程(210)中截取进程创建请求以便促进虚拟应用程序的创建的模块)截取进程创建请求(212)。例如,在请求(212)以进程创建API调用的形式离开发起进程(210)之前,可以截取请求(212)。可以通过将进程内中介模块(214)包括为发起进程(210)的调用堆栈中的组件来促进这一截取,这使得可以在将来自发起进程的对其他进程的调用传送到发起进程(210)外之前由进程内中介模块(214)来传送这些调用。通过将用于进程内中介模块(214)的代码包括在通用应用程序发起文件(例如在通常被用于一些版本的微软Windows 操作系统的AppInit_DLL值中指定的动态链接列表文件)中,可以将进程内中介模块(214)包括在运行在特定的机器上的多个不同进程中。\n[0037] 在进程内中介模块(214)截取进程创建请求(212)时,中介模块(214)可以将虚拟进程查询(216)发送给相同的计算环境(200)中的虚拟化代理(220)。虚拟进程查询(216)可以包括标识进程创建请求(212)寻求创建的进程的信息。例如,虚拟进程查询(216)可以包括诸如进程的路径和文件名等的全局名称,例如微软Word字处理软件的c:\Program Files\Microsoft Office\Office12\WINWORD.exe。除了这样的全局名称之外或者代替这样的全局名称,可以使用其他类型的标识信息。例如,在对因特网验证服务应用程序的调用中,调用可以包括标识符,例如不是应用程序的路径或文件名的部分的全球唯一标识符(GUID)。无论标识信息是什么,它都可以被虚拟化代理(220)用来判断所请求的进程是否对应于可用的虚拟进程,并且如果对应,则查找(222)对应于该虚拟进程的虚拟包。例如,标识信息可以位于提供对应于特定的进程的虚拟包的信息的查询表。虚拟包是包括用于虚拟环境和在该虚拟环境中运行的一个或多个虚拟进程的信息的包。然而,可以以某种其他方式封装用于虚拟环境和/或虚拟进程的信息。虚拟化代理(220)可以包括一个或多个虚拟化模块,例如对于被虚拟化的每一子系统(例如COM+,Windows Management Instrumentation(Windows管理工具)等等)有一个虚拟化模块。对于许多子系统,关于子系统进程的专门知识可以被用来判断是否应该以及在哪个虚拟环境中虚拟化该子系统。如果虚拟化代理(220)不能够将进程标识为应该被虚拟化的进程,则它可以给予每一虚拟化模块判断该进程是否是应该被虚拟化的进程的机会。如果虚拟化模块判断该进程是应该被虚拟化的进程,则该虚拟化模块可以将适当的虚拟环境标识符返回给虚拟化代理(220)。\n[0038] 如果不存在对应于进程创建请求(212)的可用的虚拟进程,那么,可以向中介模块(214)告知这一情况,且可以允许创建进程(创建所请求的进程的进程)继续进行创建非虚拟进程。如果可用的虚拟进程对应于所请求的进程,那么,虚拟化代理(220)可以判断虚拟环境(230)是否适于主控已经被准备或创建的虚拟进程。如果不是这样,那么,虚拟化代理(220)可以以标准方式准备或创建(224)虚拟环境(230)。无论是否已经准备虚拟环境(230),或者无论是否由虚拟化代理(220)响应于虚拟进程查询(216)而准备虚拟环境(230),虚拟化代理(220)都可以将虚拟环境标识符(232)返回给发起进程(210)中的中介模块(214)。\n[0039] 一旦接收到虚拟环境标识符(232),中介模块(214)就可以创建和挂起(234)作为非虚拟进程(236)的所请求的新进程。在创建和挂起(234)之前,发起进程(210)和/或底层操作系统可能已经采取用于创建的一些预备性步骤,尽管这样的步骤将通常不导致所请求的进程的创建。在一种实现中,可以以诸如产生可以由操作系统(280)中的进程创建模块(282)处理的进程创建API调用(270)等的标准方式进行新的非虚拟进程(236)的创建和挂起(234)。可以将关联的参数(284)(如果有的话)传送给新的非虚拟进程(236)。\n可以与非虚拟进程的创建相同的方式来实现参数的这一创建和传送。一旦创建,就可以挂起新的非虚拟进程(236)。\n[0040] 在创建并挂起(234)新的非虚拟进程(236)之后,中介模块(214)可以将添加进程请求(290)添加到虚拟化代理(220)。添加进程请求(290)可以提示虚拟化代理(220)将新的非虚拟进程(236)作为虚拟进程(294)添加(292)到适当的虚拟环境(230),例如以当前借助于现有的应用程序虚拟化软件来将应用程序添加到虚拟环境的相同方式。虚拟进程(294)可以已经包括先前在它是非虚拟进程(236)时被传送给它的参数(284),使得在稍后恢复它时它可以作用于那些参数。\n[0041] 用于虚拟环境(230)和虚拟进程(294)的代码可以被提供为定义用于虚拟环境(230)和要在该虚拟环境中运行的一个或多个虚拟进程(294)的设置和配置的虚拟包的部分。替代地,可以以某种其他方式提供用于虚拟环境(230)和虚拟进程(294)的代码。\n[0042] 将虚拟进程(294)添加到虚拟环境(230)可以使得计算环境(200)被配置为使得对所请求的非虚拟进程的调用被虚拟化软件重定向到虚拟进程(294)。这可以借助于诸如微软的App-V软件等的可用的应用程序虚拟化软件来完成。虚拟化代理(220)可以将通知(296)传送给中介模块(214),通知中介模块(214)虚拟进程(294)被成功地添加到虚拟环境(230)。响应于通知(296),中介模块(214)可以恢复(297)虚拟进程(294),如果需要这样的恢复(297)的话。例如,如果发起进程(210)已经出于某种其他原因而挂起新进程,且发起进程(210)还没有准备好恢复该新进程,则可以不需要虚拟进程(294)的恢复(297)。\n在一种实现中,可以以诸如产生可由操作系统(280)中的进程恢复模块(299)处理以便恢复虚拟环境(230)中的虚拟进程(294)的进程恢复API调用(298)等的标准方式进行虚拟进程(294)的恢复(297)。\n[0043] 因为发起进程(210)可以做出创建作为虚拟进程(294)而被添加到虚拟环境(230)的非虚拟进程(236)的创建API调用(270),而不是做出创建代理的调用,所以可以避免与这样的代理相关联的缺陷。例如,发起进程(210)可以与虚拟进程(294)交互,正如在关联的非虚拟进程正在运行时它会这样做的那样。发起进程(210)可以对虚拟进程(294)做出其正常调用,验证数字签名或关于虚拟进程(294)的其他信息,等等。可以由虚拟进程(294)正常地处理这样的调用和验证,这是因为虚拟进程(294)是发起进程(210)预期调用的相同进程(尽管它正运行在虚拟环境(230)中)。因此,不需要在发起进程(210)和虚拟进程(294)之间的复杂代理。\n[0044] 在图2中阐释并在以上描述的各组件(210、220、230、236、294、280等等)中的每一个可以驻留在诸如以上参考图1所描述的存储器(120)等的存储器中。另外,在图2中阐释的各组件(210、220、230、236、294、280等等)中的每一个可以由诸如以上参考图1所描述的处理单元(110)等的一个或多个处理单元执行,以便如上所述执行。也可以借助于一个或多个这样的处理单元来执行下面讨论的技术。\n[0045] 尽管已经作为示例描述了特定的环境(200),但应明白,也可以使用其他环境和进程创建技术。例如,环境(200)可以包括运行在单个操作系统上的多个虚拟环境或(各)操作系统和(各)虚拟环境的某种其他配置。另外,可以不同于上面的描述而排序或排列在环境(200)内的通信和进程。作为这种重排序或重排列的示例,虚拟化代理可以创建虚拟环境并在将用于虚拟环境的标识符返回给发起进程之前将虚拟进程添加到虚拟环境。\n[0046] III.用于从非虚拟请求创建虚拟进程的技术\n[0047] 可以在诸如以上参考图1和图2所描述的计算环境(100和200)等的环境或某种其他环境中执行下面讨论的图3和图4的技术。\n[0048] 参见图3,将讨论虚拟进程创建技术。在非虚拟进程创建请求仍然在发起请求的进程中时,可以截取(310)该非虚拟进程创建请求。例如,可以由位于发起进程的调用堆栈的中介模块截取请求。可以标识(320)对应于由进程创建请求所请求的进程的虚拟进程。例如,这一标识(320)可以包括将进程标识符传送给虚拟化代理并使得该代理在查询表中查找进程标识符。替代地,可以以某种其他方式进行标识(320),例如通过使得发起进程中的中介模块在查询表中查找进程标识符。可以准备(330)虚拟环境。这可以响应于进程创建请求而进行,或者环境可以已经事先准备好。\n[0049] 可以将虚拟进程添加(340)到虚拟环境,使得可以由虚拟进程而不是由所请求的非虚拟进程履行(350)进程创建请求。这一履行(350)可以包括根据适当的参数在虚拟环境中运行虚拟进程,使得虚拟进程可以按照从发起进程中的请求的上下文所预期的运转。\n例如,虚拟进程可以加载关联的文档或文件,或以特定的模式起动。\n[0050] 现在参见图4,将讨论另一虚拟进程创建技术。在发起进程中可以发起(405)对创建所请求的非虚拟进程的进程创建请求。在请求仍然在发起进程中时,可以截取(410)该请求,且可以判断(420)所请求的进程是否对应于可用的虚拟进程。如果不是这样,或者如果起动非虚拟进程比启动虚拟进程是更加优选的,那么,非虚拟进程创建可以继续(425)。\n如果所请求的非虚拟进程对应于可用的虚拟进程且起动该虚拟进程是优选的,那么,可以判断(430)是否已经准备好用于虚拟进程的适当的虚拟环境。如果不是这样,那么,可以准备(432)虚拟环境。无论是在截取(410)进程创建请求之前还是之后准备适当的虚拟环境,都可以将对应于所请求的进程的虚拟进程添加(440)到虚拟环境。另外,可以借助于虚拟环境中的虚拟进程来履行(450)进程创建请求。例如,发起进程可以发送可以包括关联的参数的进程创建API调用。虚拟进程可以接收到参数,这可以导致虚拟进程以特定的方式运行,例如加载特定的文件、以特定的模式起动,等等。在一些情况中,履行(450)可以包括虚拟进程仅仅以默认的模式运行。\n[0051] 尽管已经用对结构特征和/或方法论动作来说专用的语言描述了本主题,但应理解,在所附权利要求中界定的本主题并不必定限于以上所描述的具体的特征或动作。相反,以上所描述的具体的特征和动作是作为实现权利要求的示例形式而公开的。
法律信息
- 2015-05-20
专利权的转移
登记生效日: 2015.04.29
专利权人由微软公司变更为微软技术许可有限责任公司
地址由美国华盛顿州变更为美国华盛顿州
- 2013-05-29
- 2012-04-25
实质审查的生效
IPC(主分类): G06F 9/455
专利申请号: 201080016206.3
申请日: 2010.03.26
- 2012-03-14
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| | 暂无 |
1994-10-25
| | |
2
| |
2005-11-23
|
2005-04-29
| | |
3
| | 暂无 |
1995-12-01
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |