OSDI2008摘要中文翻译

发布时间:   来源:文档文库   
字号:
OSDI2008摘要中文翻译

一、AutomatingNetworkApplicationDependencyDiscovery:Experiences,Limitations,andNewSolutions[自动网络应用依赖发现:经验、限制和新的解决方案]
大型的企业网络包含了数以千计的服务和应用。任何特定应用的性能和可靠性可能依赖于多样的服务、生成许多主机和网络组件。当这些依赖知识对于保证这些应用的稳定性和有效性变得没有价值的时候,那么唯一可证明的方式是通过利用人类专家知识来发现这这些复杂的依赖。而这些专家知识是不会随着大型企业的应用数量增加而增加的。
目前,研究者们提出了网络传输的依赖自动发现。本文中,通过和5个占优势的微软应用的基本事实进行比较,我们提出了针对这类依赖发现技术的性能和限制的可以理解的研究(包括我们之前的工作)。我们介绍了一个新的系统——Orion——基于对延迟尖峰的基本分析的新型洞察力,使用网络传输的包头和时序信息。虽然Orion大大提高了艺术的状态,但是仍有一些弊端。为了更进一步,Orion结合外部测试,来减少管理层的错误。我们的实验结果证明了Orion为结合自动发现和简单测试来获得正确性和可验证的依赖性提供了稳定的基础。
二、AvoidingFileSystemMicromanagementwithRangeWrites[使用并行写避免文件系统的微管理]
我们介绍并行写,一个对磁盘接口的简单但是很强大的改变,它将对文件系统的块位置的微管理需求移除了。通过允许文件系统指定可能地址目标的集合,并行写让磁盘选择请求的最终的磁盘上位置。磁盘通过写最近的位置和随后向上层的文件系统报告它的选择来提高性能。结果有很清晰的职责分别,文件系统(作为高层的管理者)提供了粗糙的位置控制,磁盘(作为底层的工作者)做出精细的位置决定来提高写的性能。通过大量的仿真和原型实现我们展示了并行写的好处,在一些情况下在合成和实际负载中能提高性能近3个数量级。
三、BinaryTranslationUsingPeepholeSuper-optimizers[使用窥孔超级优化器的二进制代码的翻译]
我们提出了新的优化二进制代码翻译的设计,它在更少的工程开销下可以产生和已有的二进制翻译器相当甚至更好的代码。并非手工编码一个指令集到另一个指令集的翻译程序,我们的方法使用超级优化器技术自动学习翻译规则。我们实现了一个PowerPC-x86二进制翻译器,并在一个大小不一的计算加强的平台上报告结果。和本地编译器相比,我们翻译的代码在大型平台上获得了67%的平均性能,而在一些小型的压力测试中性能实际上已经超过本地编译器。我们也和开源的二进制翻译器Qemu和一个商业化工具——苹果的Rosetta进行了对比,结果显示我们的翻译器在所有的平台上都要比前者要好,和后者相比,除了一个平台之外,我们的翻译器性能与之相当或者更快。


四、Corey:anoperatingsystemformanycores[Corey:一个多核的操作系统]多处理器操作系统内核一般提供了用锁保护的共享数据结构实现的复杂抽象。在多核系统的中,这种设计可能共享数据和锁的争夺以及核间的TLB刷新的代价使内核产生瓶颈。
Corey是基于这种规则的操作系统——应用程序控制所有的共享:所有的内核数据结构对于处理器应当是本地的除非由应用程序直接访问。Corey是一个类似于exokernel的操作系统,使用底层的抽象(共享、地址树、内核)允许库操作系统和应用控制所有的核间共享。Corey通过允许库操作系统将内核处理特定的功能和数据来充分利用核心。
一个运行在16个核心的AMDIntel机器上的Corey原型。对MapReduceWeb服务应用的测试说明了Corey能扩展并达到比Linux更好的性能(对于MapReduce提高了9%,对于内核加强的语义网络平台可以提高50%)。微平台和性能计数证实了这些提高主要来源于避免了多核心机器上的高代价操作。
五、CuriOS:ImprovingReliabilitythroughOperatingSystemStructure[通过操作系统结构提高可靠性]
发生在微内核操作系统服务上的错误可能潜在的导致状态冲突和服务崩溃。通过崩溃服务的简单重启并不一直是对于可靠性要求的解决方案。盲目的重启含有用户状态的服务,比如回话信息将导致状态丢失并影响所有使用这个服务的用户。CuriOS代表了一类新型的OS设计,它使用轻量级的分布性、独立性以及OS服务状态的持久性来减轻重启时状态丢失带来的问题。这种设计也大大减少了包含客户相关状态的OS服务的错误传播。这通过只有在需要请求处理时将服务压缩到分离的保护域以及授权访问客户相关的状态中来实现。错误注入实验显示从87%-100%的人工OS服务错误中恢复是可能的,比如文件系统、网络、定时器和调度器。而这带来的性能开销是较低的。

六、DeadlockImmunity:EnablingSystemsToDefendAgainstDeadlocks[死锁避免:让操作系统避免死锁]
死锁免疫是指在程序一旦被特定的死锁所困扰时,开发出能抵制未来偶然发生的类似死锁的能力的特性。我们描述了一种技术能让程序在不需要编程者和用户参与的情况下自动增加免疫的能力。我么为JavaPOSIX线程实现了这种技术并在几个实际系统上进行评估,包括MySQL,JBoss,SQLiteApacheActiveMQLimewireJavaJDK。结果显示了它有效的防御了死锁错误,而且只带来了合理的性能开销并能扩展到1024个线程。我们因此得出结论,死锁免疫为编程者和使用者提供了一个诱人的工具来避免难以捉摸的死锁的重复出现。

七、DeviceDriverSafetyThroughaReferenceValidationMechanism[通过参考验证机制的设备驱动安全]
设备驱动一般执行在超级管理员模式,因此必须被完全信任。本文介绍怎么将他们移出可信任计算的平台,不使用超级管理员特权运行它们并约束它们与硬

件设备的交互。通过Nexus操作系统将驱动执行在用户空间实现了这种方法。衡硬件的独立性并检验它们的行为获得安全规范。这些Nexus驱动在性能上和内核信任驱动相当,并且CPU开销的水平对于大部分应用是可以接受的。比如,Intele1000以太网卡驱动在吞吐量上和Linux下相同硬件的信任驱动基本相当。Inteli810声卡驱动提供了连续的录音回放。磁盘和USB鼠标驱动也在安全规范下被成功移动操作在用户空间下。

八、DifferenceEngine:HarnessingMemoryRedundancyinVirtualMachines[DifferenceEngine:在虚拟机中控制内存冗余]
VMM(虚拟机监视器)在因特网主机中心和云计算服务中是一个流行的平台。在虚拟机运行传统的操作系统中,通过多路复用硬件资源VMM减少了主要的费用以及管理主机中心的开销。合理的布置和移动策略可以使用统计上的多路复用有效的利用可用的处理器。然而,主存通常并不能应付这样的多路复用,且通常是实现高度合并的瓶颈。
以前的努力已经显示基于内容的页面共享适度减少了VM运行相似的操作系统和应用程序的内存痕迹。我们的研究表明通过平衡子页面共享(通过页面修补)和核内内存压缩可以获得更大的进步。我们构建了DifferenceEngine,一个XenVMM的扩展,除了标准的写时复制全页面共享,不管是运行相似应用和操作系统的VM(将近90%)还是跨VM运行不同工作集(将近65%),都能获得很大的节约。在直接的内存节约比较中,DifferenceEngine平台中上的VMwareESX服务器在相似工作集中获得1.5倍的提高,在不同的工作集中获得1.6-2.5倍的提高。在所有的例子中,DifferenceEngine性能开销不多于7%
九、DiggingForDataStructures[深挖数据结构]
由于书写计算机程序是困难的,计算机编程者都会使用封装和模块来隐藏复杂性并减少错误发生的潜在可能。他们的程序具有高层的继承结构,因而影响他们对内部抽象的选择。我们设计并构造了一个系统——Laika——使用Bayesian无人管理学习在内存中检测这种结构。因为几乎所有的程序都是用数据结构,们的内存映像包含了很多份相关少数模板的拷贝。考虑到内存映像,Laika可以发现数据结构和它们的实例。
我们使用Laika通过比较它们的数据结构检测到三个通常的多态错误。因为全面避免代码的多态性,Laika是非常准确的。最终,我们得出书写一个数据结构多态性病毒一般被认为比写一个代码多态性病毒要更难。

十、DryadLINQ:ASystemforGeneral-PurposeDistributedData-ParallelComputingUsingaHigh-LevelLanguage[DryadLINQ:使用高级语言的通用目分布式语言并行计算系统]
DryadLINQ是一个系统和一组语言扩展的集合,它支持大规模分布式计算反而编程模型。它以两种方式产生之前的执行环境(比如SQLMapReduce

Dryad):通过采用高昂代价的强类型.NET对象数据模型和通过支持通用目的强制性和声明式的在传统高级编程语言数据集的操作。
一个DryadLINQ序是一个顺序程序,它包含了LINQ语法产生无副作用的数据集转换,并可以使用标准的.NET开发工具进行书写和调试。DryadLINQ系统自动和透明的将程序的数据并行部分转换为能传送到Dryad执行平台的分布式执行计划。Dryad,在许多年连续在有用数以千计计算机的生产集群上操作,使得计划有效可靠的执行。
我们介绍了DryadLINQ编译器和运行时的实现。我们在不同的从域(比如web图分析、大规模日志简化以及机器学习)中获得的程序集上对DryadLINQ进行评估。结果显示可以获得完全正确的性能——一个通用目的对在240个计算机和960个磁盘集群上以319秒执行的1012字节数据的分类——并展示了在改变工作中计算机的个数时那些典型的应用能获得接近线性的比例执行时间的增加。

十一、Everest:ScalingdownpeakloadsthroughI/Ooff-loading[通过IO离线加载缩小尖峰负载]
对于存储子系统,数据中心工作量爆炸是个很实际的问题。数据量将IO请求率推到超过平均负载的水平。这严重的超过了预期,并经常导致严重的IO高峰时期延迟。
为了解决这个问题,我们提出了Everest,它允许将超过实际负载量的写入数据临时离线加载到一个短期的虚拟存储中。通过在数据中心的服务器上或者服务器间按机集中为充分利用的存储资源,Everest创建了短期的存储。写操作从过载量上离线载入到轻量级的加载量上从而减少了前面提到的IO负担。Everest是透明的,并且不需要修改应用程序变得可用,而不会改变存储系统的持久性和一致性。我们使用了生产邮件交换服务器和其他平台对Everest进行了评估:结果显示了在高峰期响应时间可以减少1.4-70倍。

十二、FindingandReproducingHeisenbugsinConcurrentPrograms[在并发程序中发现并重新产生Heisenbug]
并发在大型系统中普遍存在的。未预期的线程间冲突经常导致Heisenbugs它是很难重新产生和消除的。我们实现了一个叫CHESS的工具来发现和重新产生这些bug。当应用到程序中时,CHESS控制线程的调度并使用有效的搜索技术来驱动程序进行可能的线程交叉。这种对程序行为的系统探测是的CHESS能快速的发现那些可能隐藏很久的bug。对于每一个bugCHESS能连续的重新产生错误的执行来人为的制造bug,因此让调试程序变得非常的简单。CHESS能适应大型并发程序并能在已有的系统中发现大量的bug,而这些系统在被CHESS测试之前已经被广泛的测试过。CHESS已经被集成到微软内部的很多代码底层测试框架中,同时也被测试者在日常的基础开发中所使用。
十三、FlightPath:Obediencevs.ChoiceinCooperativeServices[FlightPath:在合作服务中的服从和选择]
我们提出了FlightPath一个为动态端集合提供了高可靠数据流的新型端到端流应用。我们证明了FlightPath大大减少了以前工作的实时比较。而且,尽管10%数量的恶意行为和端的自私动作,FlightPath还是使用了大量的运行时适应来尽量保持较低的实时比较。FlightPath成功的核心在于近似平衡。这种平衡让我们

设计出激励来严格的限制自私的行为,而他们提供了有效的灵活性来构建实用的系统。我们展示了怎样使用ε-Nash平衡,而不是严格的Nash,来构建一个在线流系统。这种系统能有效的使用宽带,吸收闪存拥挤,适应突发的端离线,处理扰动和忍受恶意的活动。

十四、Gadara:DynamicDeadlockAvoidanceforMultithreadedPrograms[Gadara:多线程动态死锁避免]
随着多核的革命强制驱动着并行编程的发展,死锁对于普通编程者来说越来越成为关心的内容。已有的针对死锁的方法给开发者带来了繁重的负担,产生了高运行时开销,而且对保持已有代码的不修改性没有任何帮助。Gadara自动为多线程程序产生动态的死锁避免。它对模型编程使用全程序的统计分析,而且离散控制理论合成轻量级的、分散的、高并发性的逻辑在运行时控制他们。Gadara是安全的,并能通过编程者适当的努力将之应用到已有的代码中去。Gadara之所以有效的是因为它离线方式而不是在线处理高代价的死锁避免计算。我们为C/Pthread程序实现了Gadara在平台测试中,Gadara成功的避免注入的死锁错误,带来的适度的性能开销可以忽略(约18%而且比软件事务存储系统做的要好。在实际应用中测试结果显示Gadara能识别并避免以前已知的和未知的死锁,而带来的性能开销可以控制在10%以内。

十五、HardwareEnforcementofApplicationSecurityPoliciesUsingTaggedMemory[使用标记内存的应用安全策略的硬件加强]
计算机在不安全方面是生命狼藉的,一部分由于应用程序安全策略不能和传统的保护机制有效的映射,比如Unix用户帐户和硬件页表。目前的工作显示,用策略可以被描述为在OS内核的信息流限制和强制下提供强力的安全保证。本文展示了这些策略的加强可以被处理器本身大规模的推送,通过支持标记内存和即使在OS内核的妥协下强制应用安全来提供强力的安全保障。
我们提出了Loki标记内存架构,和一个利用标记内存来加强硬件的应用安全策略下的新型OS结构。通过修改合成的SPARC核,将之映射到FPGA板上,并运行了一个类UnixOS——HiStar,我们构建了完整的Loki系统原型。结果是Loki允许HiStar,一个被设计好的小型可信内核,来进一步减少信任代码的数量近两倍,尽管内核妥协下来加强该安全策略。使用各种工作负载,我们也展示了运行Loki上的HiStar需要很低的性能开销。

十六、ImprovingMapReducePerformanceinHeterogeneousEnvironments[异构环境中提高MapReduce性能]
MapReduce在大型数据并行应用中逐渐浮现为一种重要的编程模型,比如web引、数据挖掘和科学仿真。HadoopMapReduce的开源实现并拥有广泛的应用,在处理短期任务时带来较低的响应时间。Hadoop的性能和它的任务调度器密切相关,它暗中假设集群节点都是同类的,并且任务的增长是现线性的,使用这些假设来决定什么时候重复执行那些掉队的应用。在实际情况下,同类的假设并不一定成立。在虚拟数据中心中存在这种强制性的设置,比如亚马逊的EC2。我们展示了Hadoop调度器在异构的环境下会导致严重的性能下降。我们设计了新的调度算法——LATE(LongestApproximateTimetoEnd,对于异构环境具有高度健壮性。EC2200个虚拟机的集群上,LATE可以提高Hadoop的响应时间将近

两倍。

十七、KLEE:UnassistedandAutomaticGenerationofHigh-Coverage
TestsforComplexSystemsPrograms[为系统程序无辅助自动产生高覆盖测试]我们提出了一个新的符号执行工具——KLEE——能自动为各种复杂的环境加强程序产生实现高覆盖的测试。我们使用KLEE全面检查了GNUCOREUTILS89个独立的程序,它们形成了核心的安装在百万Unix系统上的用户环境,且是可验证的已有开源程序的最具重量级的测试集。KLEE产生测试实现了高水平的线覆盖——平均每个工具超过90%(中值超过94%),完全打败了开发者自己手工开发的测试组建。当我们在BUSYBOX嵌入式系统组建上对75个等价工具做同样的事情,结果显示更好——其中31个被100%的覆盖。
我们也把KLEE用作bug查找工具,将其应用到452个应用中去(超过430000行代码),结果找到了56个严重的bug,包括COREUTILS在过去5年未发现3个。最后,我们用KLEEBUSYBOXCOREUTILS进行全面的检查,找到了功能修复错误和大量的不一致错误。
十八、LeveragingLegacyCodetoDeployDesktopApplicationsontheWeb[通过调整过去代码的桌面应用的Web部署]
Xax是一个浏览器插件模型,它使得开发者调整已有的工具、库以及整个程序,将特定丰富的应用传递到Web上。Xax使用一个典型的机制绑定来准确的提供安全性、OS独立性、性能以及对过去代码的支持。这些机制包括让内存独立本地代码在狭窄的系统调用接口后执行、一个提供了跨OS的一致二进制接口的抽象层、系统服务通过钩子保证浏览器机制以及对工具链和代码底层的轻量级的修改。我们展示了各种来源于各种代码底层、用各种编程语言书写的、用各种各样工具连开发的、运行在多种OS和多种浏览器上的应用程序和库。通过粗略估计2人周的努力,我们给Xax传送了330万行代码,其中包括PDF查看器、Python解释器、语音合成器和OpenGL管道。

十九、Lightweight,High-ResolutionMonitoringforTroubleshootingProductionSystems[对排错生产系统的轻量级高解决性控制]
生产系统经常不间断的被难诊断的问题所困扰。本文描述了一个新的诊断工具——Chopstix,它在执行、处理和指令粒度上不断的收集底层的OS事件的轮廓(比如调度、二级缓存丢失、CPU利用情况、IO操作、页面分配、锁定)。然后Chopstix离线重构这些新作为分析。我们已经使用Chopstix在大规模的生产系统中诊断了一些难以捉摸的问题,因此减少了这些连续出现的问题产生重复出现的bug,从而这些bug可以被利用标准技术进行调试。对于Chopstix,最关键的是近似的数据收集策略来保证较低的系统开销。实验结果评估显示Chopstix每天需要不到1%CPU开销、小于256KBRAM、低于16M磁盘空间利用来收集系统范围的丰富的数据集。

二十、Mencius:BuildingEfficientReplicatedStateMachinesforWANs[Mencius:WAN构建有效的状态机复制]
我们提出了一个通用状态机的复制协议——一个提供了强一致性的方法——在WAN中具有很高的性能。尤其是,即使改变了WAN环境和用户负载,我们的协议Mencius在高用户负载下具有高的吞吐量以及低用户负载下的低延迟。们开发的协议来源于已知的协议Paxos。当利用具体的网络和应用需求时,这种协议可以获得更好的进步和改善。

二十一、NetworkImprecision:ANewConsistencyMetricforScalableMonitoring[NetworkImprecision:可扩展监视的新型的连续矩阵]
本文介绍了一个新的连续矩阵NetworkImprecisionNI),来解决大型监视系统的核心挑战:在网络和节点崩溃时能安全保证正确性。为了实现NI,覆盖——那些当前可能丢失更新的节点的数目以及那些因为覆盖重复配置,输入被两次计算的节点的数目,监视了包含监视器本身的状态的一组属性集合,因此查询时返回的结果不仅仅是属性值,还有关于覆盖稳定性的信息。当NI证明了网络是稳定的时候,查询结果才能保证反映了系统的真实状态。但是当网络不稳定的时候,NI提示应用程序查询结果不能被信任,并允许它们做出修正行为,比如过滤不连续的结果。为了扩展实现NI自身提高,我们的原型介绍了一个关键的优化——二叉树前缀集合,利用覆盖的对称性大大的减少了开销。对三个监视系统的评估显示了在发生大量系统开销的时候NI标记出不正确的结果,监视程序利用NI选择好的结果可以大大的提高它们的准确性。

二十二、Quanto:TrackingEnergyinNetworkedEmbeddedSystems[Quanto在网络嵌入式系统中追踪能量]
我们提出了Quanto,一个嵌入式网络设备的网络广度的时间和能量的仿制机。通过结合给硬件能力状态、快速高解决方案能源测量和程序员定义活动因果追踪定义好的接口,Quanto将接点和网络间的能量和时间的花费进行映射。早TinyOS上实现Quanto需要修改350行,同时增加1275行代码。我们展示了和读取计数器一样快的精细能量开销测量让开发者精确的计算低层系统实现结果所带来的影响,比如使用DMA代替直接的总线操作、绘制占空比的外部接口的影响。最终,Quanto是个足够轻量级的,对系统行为具有较小的影响:每个样本需要100CPU周期和12字节的RAM

二十三、R2:AnApplication-LevelKernelforRecordandReplay[R2:为记录和重现的应用级别内核]
基于库的记录和重现工具旨在通过记录选择功能的结果到日志中重新产生应用的执行,在重现时,从日志中而不是重新执行程序的功能来返回结果。这些工具必须保证重现的执行对于记录运行是唯一的。这么做的挑战是仅仅应用的函数调用需要被记录,记录函数调用的副作用是困难的,并且在重现中不执行函数调用、多线程,另外工具的出现可能在记录和重现上给程序行为带来改变。这些

问题限制了这些工具的使用。
R2允许开发者选择需要记录并能正确执行的功能。开发者通过关键字注释被选择的函数功能,这样R2就可以处理带有具有副作用的调用和多线程。R2从模板中为记录和重现产生代码,允许开发者避免手工为数以百计的函数功能实现存根。为了追踪一个调用是否代表了应用或者实现了选择的功能,R2保留了一个mode位,来确定存根的保存和提取。
我们在Windows上实现了R2,并评注了大部分的Win32API1300个函数)和两个高级的接口MPISQLiteR2可以重现多线程web应用和数据库服务,而这些以前的基于库的工具是无法做到的。通过允许开发者选择高层接口,R2也可以让记录的开销变得很小:实验结果显示Apache的记录开销大约10%SQLite的记录和重现的日志大小减少了99%(和用Win32API实现比较),对BitTorrentMPI应用的最优注释将日志的大小的减少从13.7%99.4不等。

二十四、Redline:FirstClassSupportforInteractivityinCommodityOperatingSystems[R2:为记录和重现的应用级别内核]
当现代的工作变得交互性越来越强和资源加强的时候(比如:图形用户界面、浏览器、多媒体播放器)当前的操作系统却没能跟上它的步伐。这些操作系统,在七八十年代核心设计的发展中,对批处理和命令行提供了很好的支持,但是它们的adhoc试图处理交互性工作的时候就困难重重。它们的最大努力和基于优先级的调度提供了无跃变的延迟,他们的资源管理器(内存管理、磁盘IO调度)大部分能明显的相应及时的请求。这些资源的任何一个资源的压力都会严重降低应用的响应率。
我们提出了Redline,一个在传统OS上为交互应用带来一流支持的系统。Redline能和过去的应用和标准的API一起工作。它使用轻量级的对编制内存和磁IO管理的指定,从而满足了交互程序的需求。不像实时系统对待指定作为严格的需求而至于限制了系统的能力那样,Redline动态适应当前的任务,将响应率和系统利用最大化。我们展示了Redline提高了交互程序的响应率,即使在面对极端工作负载下,包括进程、内存爆发、大量磁盘IO请求时,也能将应用的延迟减少2个数量级。

二十五、SQCK:ADeclarativeFileSystemChecker[SOCK:一个声明式文件系统检查器]
文件系统的艺术状态的低效率检查和维护和为用户保持重要可用数据的需求并不匹配。当前的文件系统检查器比如e2fsck,是由很多复杂片用低层语言书写的并不完美的代码构成的。我们介绍了SOCK,一个基于声明查询语言的文件系统检查器,声明的查询和交叉检查自然匹配,这些检查必须能作用于文件系统映像的各种结构。我们展示了SOCK能使用令人惊讶的完美简洁的查询完成和e2fsck相同的功能。我么也展示了SOCK能通过结合文件系统间的可用信息简单的完成比e2fsck更多有用的维护。最后,我们的SOCK的原型通过和e2fsck相当的性能实现了这种更高级的功能。

二十六、TransactionalFlash[事务闪存]

TxFlashTransactionalflash)是一个新型的平滑状态驱动(SSD),它使用

闪存并输出事务接口(写原子的)到高层的软件。这种写时复制的闪存事务层特性和快速随机读写让闪存成为支持这种接口的合适媒介。我们进一步为TxFlash开发了一个新型的提交协议——轮转提交。这个协议已经被正规化说明并经过了模型检测。
在一个仿真器和一个SSD之上的模拟器上,我们对实验进行了评估,结果显TxFlash并没有过度增加闪存的固件的复杂性而且给事务特性带来了非常低的开销(不到1%),因此让文件系统更容易构造。实验结果进一步展示了在小型事务上,新的轮转提交协议大大超过了传统的提交方式(在事务吞吐量上有95%的提高),并完全消除了由于提交记录带来的空间开销。

本文来源:https://www.2haoxitong.net/k/doc/47c7a48dd0d233d4b14e695d.html

《OSDI2008摘要中文翻译.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式