Xen

  
在一台机器上运行多个操作系统挑战在于:
1 操作系统相互之间不能互相影响
2 需要支持不同的操作系统同时运行
3 虚拟化带来的性能上的影响应该尽可能的小
       Xen 设计的目标是:
1 修改应用程序对于用户来说是不能接受的。否则用户不会去使用 xen, 因此 xen 必须虚拟出 ABIs 要求的所有的体系结构特征
2 支持多任务的操作系统。
3 为了达到高的性能和资源的隔离性, paravirtualization 是必须的
       Xen Denali 的区别:
1 Denali 目标不在于 ABIs 的虚拟,所以在 VM 接口里可以不用某些体系特征,比如 x86 里面的段结构
2 Denali 的设计没有考虑在单 OS 里支持多任务和多地址空间,实际上虚拟的是一个单用户单任务无保护的“操作系统”
3 Denali 结构里, VMM 页的管理使用的是磁盘,可能是因为在虚拟层缺少内存管理的支持。 Xen 里,每个客户 OS 的页面管理使用的是自己的保留的内存地址
4 Denali 虚拟了所有机器资源的 namespaces VM 不能 access 没有命名的资源。但是, hypervisor 能提供足够的保证,让物理的资源对于客户 OS 可见也能保证强正确性和性能。
1 Xen 的内存管理:
       每次当客户 OS 需要新的页表,就从自己的内存空间里面分配和初始化一个页,并向 xen 注册,客户 OS 放弃写入特权到页表内存里去,后继的更新由 Xen 来完成。每个地址空间起始的 64M 分配给 Xen ,客户 OS 不能 access 或是从新映射这段空间。一般的 x86 ABIs 不需要这段地址空间。所以不会破坏程序的兼容性。
2 xen CPU
       内存的虚拟是最难的部分。大多数处理器只提供两个优先级,这样客户 OS 只好和应用程序享用同一个优先级。用户 OS 为了保护自己需要让自己运行在单独的地址空间里面。用户 OS 需要通过 hypervisor 来设定虚拟的优先级,修改自己的地址空间
       x86 里面,有 4 个优先级, hypervisor 优先级为 0 ,客户 OS 1 ,应用程序为 3 ,这样即可以保证客户 OS 优先级低于 hypervisor, 又能保证客户 OS 和应用程序间的隔离性。
       异常,包括内存错误和陷阱。用很简单的方式虚拟出来。用一个表来描述在 Xen 里面注册的异常对应的 handle
      Xen 的设计细节:
1 控制转移: domain  同步 call Xen 使用 hypercall Xen 传递 notification domain 使用异步事件机制。 Hypercall 允许 domain 产生一个同步 trap hypervisor 以执行特权操作(例如页表的更新)。异步的事件机制替代传统的设备中断使用的传递机制,允许重要事件的轻量 notification Pending 事件被存储在每个 domain bitmask 里面, Xen 在调用客户 OS 的事件回调 handler 之前更新 bitmask 。回调 handler 负责处理重置 pending 事件集。
2 数据传递, I/O 环: hypervisor 意味着在客户 OS I/O 设备间添加了保护 domain 。系统垂直传递机制的开销应该尽可能小。
异步 I/O 环是个圆型的 descriptor 队列, descripter domain 分配,由 Xen 来使用。 Descripter 不直接包含数据,它只是一个指向数据 buffer 的指针。通过两对 producter-consumer 指针来 Access to 环。 Domain 放置一个 request 到环上去, advance a request producer 指针。 Xen remove requests ,然后处理这些 requests advance 相关 request consumer 指针。
3 子系统的虚拟化:
CPU 策略: BVT Borrowed Virtual Time provides low-latency dispatch by using virtual-time warping, a mechanism which temporarily violates `ideal' fair sharing to favor recently-woken domains. However,other scheduling algorithms could be trivially implemented over our generic scheduler abstraction. Per-domain scheduling parameters can be adjusted by management software running in Domain0.
       虚地址转换: Vmware 的做法是为每个客户 OS 提供虚拟页表, Xen 的做法是将每个客户 OS 的页表直接向 MMU 注册,限制客户 OS 只允许它们以只读的方式访问页表,使用 hypercall Xen 执行页表的更新,执行前必须验证请求。
       物理内存:每个 domain 被生成时初始化内存分配,如果某个 domain 内存不足时,可以向 Xen 申请更多的内存。
       网络: Xen 提供 VFR virtual firewall-router )抽象,每个 domain 拥有一个或多个网络接口( VIFs )与 VFR 连接。 VIF 有些类似于网卡。
磁盘: Only Domain0 has direct unchecked access to physical (IDE and SCSI) disks. 其他的 domains 通过 VBDs virtual block devices )访问磁盘。在 Xen 里面为每个 VBD 维护 translation table
 
资源下载链接为: https://pan.quark.cn/s/3d8e22c21839 随着 Web UI 框架(如 EasyUI、JqueryUI、Ext、DWZ 等)的不断发展与成熟,系统界面的统一化设计逐渐成为可能,同时代码生成器也能够生成符合统一规范的界面。在这种背景下,“代码生成 + 手工合并”的半智能开发模式正逐渐成为新的开发趋势。通过代码生成器,单表数据模型以及一对多数据模型的增删改查功能可以被直接生成并投入使用,这能够有效节省大约 80% 的开发工作量,从而显著提升开发效率。 JEECG(J2EE Code Generation)是一款基于代码生成器的智能开发平台。它引领了一种全新的开发模式,即从在线编码(Online Coding)到代码生成器生成代码,再到手工合并(Merge)的智能开发流程。该平台能够帮助开发者解决 Java 项目中大约 90% 的重复性工作,让开发者可以将更多的精力集中在业务逻辑的实现上。它不仅能够快速提高开发效率,帮助公司节省大量的人力成本,同时也保持了开发的灵活性。 JEECG 的核心宗旨是:对于简单的功能,可以通过在线编码配置来实现;对于复杂的功能,则利用代码生成器生成代码后,再进行手工合并;对于复杂的流程业务,采用表单自定义的方式进行处理,而业务流程则通过工作流来实现,并且可以扩展出任务接口,供开发者编写具体的业务逻辑。通过这种方式,JEECG 实现了流程任务节点和任务接口的灵活配置,既保证了开发的高效性,又兼顾了项目的灵活性和可扩展性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值