不可变可共享零复制数据和流传输的制作方法_5

文档序号:9332660阅读:来源:国知局
的语义与DM存储器区 域直接交互。特殊类型铸造支持使得程序员将DM存储器区域当作对象成为可能,并且因 此以自然的方式直接读和写存储器,从而最大化效率、提高正确性、并简化程序员的任务。 模型扩展出仅DM存储器之外,并且还支持经扩展的类型铸造语义以用于正常垃圾收集存 储器。
[0116] 为了维护类型安全性,允许任意类型之间的类型铸造是不可能或不合乎需要的。 相反,存在约束这一扩展的类型铸造中能涉及的所允许的类型的集合的特定规则。然而,该 规则相当宽泛,且结果对DM操作中通常涉及的数据种类完美地起作用。
[0117] 在受管编程语言中,每当存储器被分配时,它被分配给定类型。该类型确定存储器 块的不同部分的重要性以及可对该存储器块执行的操作。该类型不能针对该存储器块改 变,直至该存储器变得不活动并通过垃圾收集过程回收。语言环境始终负责分配、类型化、 以及回收存储器块。
[0118] 类型铸造是将一些存储器当作与受管环境所知的类型不同的类型的能力。类型铸 造在本机编程语言中是常见的,但受管语言通常不提供类型铸造。相反,受管环境提供使得 将一个类型的值复制到另一类型成为可能的类型转换机制。例如,将整数值转换成浮点值 是可能的。然而,这总是通过复制来完成的一一原始存储器位置保持不变。
[0119] 根据本文描述的原理,类型铸造被引入作为受管语言中的通用工具。约束被应用 以确保类型安全性得到保留,如稍后解释的。
[0120] 在受管操作系统中,用于I/O操作的存储器必须是锁定对象或专用于I/O的存储 器区域。如上所述,将对象锁定在存储器中以防止它们移动是昂贵的且导致垃圾收集环境 中的许多问题。本文描述的原理假借不可变缓冲区(如图3A、3B和5的不可变缓冲区330) 来使用专用I/O存储器。
[0121] I/O存储器在受管存储器子系统的范围之外。受管环境不控制这一存储器的类型, 并且因此从受管程序直接访问这一种类的存储器是不可能的。相反,通常将使用特殊连接 (即,胶合)代码以允许这一存储器被使用显式调用来读或写。访问这些I/O缓冲区内的任 何种类的结构化数据涉及极其低效的代码,或涉及将去往和来自I/O存储器的数据复制到 正常受管存储器,这也是低效的。
[0122] 考虑从网络设备获取的不可变缓冲区。在这一缓冲区中,存在保持联网协议信息 的TCP头部。存在基本上两种方式来在受管编程语言中使用TCP头部中的数据。下表示出 了这两种方式以及每一方式中涉及的步骤。
[0123]
[0124] 使用类型铸造比使用传统方法获得可使用的TCP头部对象快得多。该新方法模仿 本机操作环境中发生的事物,其中指针数学是可能的且在这一类型的场景中被频繁利用。 指针数学在受管编程语言中不是可用的,但类型安全类型铸造给出了相同的功能。
[0125] 传统方法的各种变型(它们导致更多或更少开销)是可能的。例如,所讨论的存 储器缓冲区对程序员直接可用且因此可比通过使用读/写方法更高效地访问是可能的。然 而,在这种情况下,程序员仍然负责将字节序列转换成更高级对象,这是冗长的、易错的且 执行很差。
[0126] 使类型铸造成为可能并确保类型安全性被保留的是类型铸造只对被设计成允许 它的类型才是可能的。为了参与类型铸造,各类型:1)是值类型(与引用类型相对),2)只 包括支持类型铸造的其他类型,3)不包括引用,4)被定义为使用特定存储器布局,以及5) 在其各字段中的任一者中容忍任何位模式。
[0127] 这些约束意味着为了被用于类型铸造,类型不能包含对其他对象的引用。结果是, 这些约束完美地描述了被定义为表示数据格式(如TCP头部)的类型以及其他这样的数据 结构的广大集合的特性。
[0128] 如上所述,类型安全类型铸造可被用来读或写位于受管存储器环境的范围之外的 I/O缓冲区,且也可被用来将受管存储器看作不同类型。具体而言,这一技术对将字节阵列 改为看作一个或多个更丰富类型的实例是有用的。
[0129] 图13描绘正常受管字节阵列,它具有指向它的两个不同的跨度并允许应用将该 阵列的各部分看作不同的类型。可以此方式创建任何数量的跨度,每一跨度具有不同的类 型。各跨度可自由重叠,可能引用同一存储器区域作为不同的类型。
[0130] 声明任何位模式必须在其各字段中的任一者中是可容忍的规则对模型的可靠性 而言是重要的。在使用类型铸造时,以其他方式看起来正常的对象的实例被引入该环境,而 无需执行类型构造器。通常,构造器执行输入自变量的确认并用于最终约束组成对象的所 允许的值的集合。但使用类型铸造,通过将现有存储器跨度看作不同的类型来无中生有地 创建对象是可能的。
[0131] 将数据复制到受管堆中的不同对象的传统方法提供了在数据被推送到受管对象 的构造器时确认该数据的机会。这意味着在现实世界系统中,受管对象的无效版本从不存 在于系统内,构造器确保只有有效的版本可被创建。与此相反,使用类型铸造,任何位模式 可以出现。如果存在语义上无效的值,则它们可被检测到,因为对象构造不会发生。
[0132] 对正确性问题的解决方案是在软件中引入附加抽象层。具体而言,如果再次以读 取TCP头部作为示例,可以想象开发人员已经定义了两个不同类型:RawTcpHeader (原始 TCP 头部)和 ValidTcpHeader (有效 TCP 头部)。
[0133] 输入缓冲区中的数据将被类型铸造成RawTcpHeader。给定该对象, AcquireValidTcpHeader (获取有效TCP头部)方法可被调用。这一方法将确 认RawTcpHeader中的各字段并且返回ValidTcpHeader的新实例,该新实例担当 RawTcpHeader的平凡包装器并将告知持有者它持有了保证有效的头部。这全部在无需复制 的情况下完成,仅创建了通过对象(它是ValidTcpHeader值类型)。
[0134] 本发明可具体化为其它具体形式而不背离其精神或本质特征。所描述的实施例在 所有方面都应被认为仅是说明性而非限制性的。因此,本发明的范围由所附权利要求书而 非前述描述指示。落入权利要求书的等效方案的含义和范围内的所有改变都被权利要求书 的范围所涵盖。
【主权项】
1. 一种用于在多个计算实体之间共享数据的方法,所述方法包括: 用数据填充缓冲区的动作; 将所述缓冲区分类成不可变缓冲区的动作,其中所述分类保护填充在所述不可变缓冲 区中的所述数据在所述不可变缓冲区的寿命期间免于改变,并且还保护所述不可变缓冲区 在所述不可变缓冲区的寿命期间免于改变其物理地址; 向第一计算实体授予所述不可变缓冲区的第一视图的动作;以及 向第二计算实体授予所述不可变缓冲区的第二视图的动作,其中所述第二视图不同于 所述第一视图。2. 如权利要求1所述的方法,其特征在于,所述第二视图是所述第一视图的子集。3. 如权利要求1所述的方法,其特征在于,进一步包括: 基于所述第一计算实体提供的作为处理所述不可变缓冲区的第一视图的结果的信息 来计算所述第二视图的动作。4. 如权利要求1所述的方法,其特征在于,所述第一计算实体是第一进程,并且所述第 二计算实体是第二进程。5. 如权利要求1所述的方法,其特征在于,所述第一和第二计算实体在保护边界的不 同侧上。6. 如权利要求1所述的方法,其特征在于,第一和第二计算实体是受管系统中的第一 和第二受管代码组件。7. 如权利要求1所述的方法,其特征在于,函数调用不能被置于所述第一计算实体和 所述第二计算实体之间,而是进程间通信或跨保护边界通信被用于供所述第一计算实体和 所述第二计算实体进行通信。8. 如权利要求1所述的方法,其特征在于,所述第一和第二计算实体是非受管代码组 件。9. 如权利要求1所述的方法,其特征在于,所述缓冲区是第一缓冲区,且所述不可变缓 冲区是第一不可变缓冲区,所述方法还包括: 用数据填充第二缓冲区的动作; 将所述第二缓冲区分类成不可变缓冲区的动作,其中所述第二缓冲区被分类成不可变 保护填充在所述第二不可变缓冲区内的数据在所述第二不可变缓冲区的寿命期间免于改 变,且还保护所述第二不可变缓冲区在所述第二不可变缓冲区的寿命期间免于改变其物理 地址; 向第三计算实体授予所述第二不可变缓冲区的第一视图的动作;以及 向第四计算实体授予所述不可变缓冲区的第二视图的动作,其中所述第二不可变缓冲 区的第二视图不同于所述第二不可变缓冲区的第一视图。10. -种包括其上存储有计算机可执行指令的一个或多个计算机存储介质的计算机程 序产品,所述计算机可执行指令在由计算系统的一个或多个处理器执行时,使得所述计算 系统执行一种用于在多个计算实体之间共享数据的方法,所述方法包括: 用数据填充缓冲区的动作; 将所述缓冲区分类成不可变缓冲区的动作,其中所述分类保护填充在所述不可变缓冲 区中的所述数据在所述不可变缓冲区的寿命期间免于改变,并且还保护所述不可变缓冲区 在所述不可变缓冲区的寿命期间免于改变其物理地址; 向第一计算实体授予所述不可变缓冲区的第一视图的动作;以及 向第二计算实体授予所述不可变缓冲区的第二视图的动作,其中所述第二视图不同于 所述第一视图。
【专利摘要】不可变缓冲区的环境和使用。计算实体获取数据或生成数据,并将该数据填充到缓冲区,在这之后该缓冲区被分类成不可变的。该分类保护填充在不可变缓冲区中的数据在该不可变缓冲区的寿命期间免于改变,并且还保护不可变缓冲区在该不可变缓冲区的寿命期间免于改变其物理地址。在不同的计算实体使用来自不可变缓冲区的数据时,它们通过视图提供实体所提供的视图来这样做。不可变缓冲区体系结构还可被用于流传输数据,其中流传输数据中的每一分量使用不可变缓冲区。因此,不同计算实体可以不同地查看不可变数据,而不必实际上复制该数据。
【IPC分类】G06F9/54
【公开号】CN105051695
【申请号】CN201480003955
【发明人】J·T·亨特, J·于, M·塔耶费尔, G·M·内沃洛夫, D·卡库林, A·H·莫罕默德, J·J·达菲, C·W·布鲁密, F·S·特瑞克
【申请人】微软技术许可有限责任公司
【公开日】2015年11月11日
【申请日】2014年1月3日
【公告号】EP2941703A1, US9189446, US20140195632, WO2014107552A1
当前第5页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1