xen架构与源码分析ppt课件.ppt
xen架构与源码分析,xen架构与源码分析,xen源码概览xen架构实现与源码分析Xen启动过程关注点下周计划,xen架构与源码分析,xen源码概览xen架构实现与源码分析Xen启动过程关注点下周计划,Xen-3.4.0/,buildconfigs/config/docs/extras/stubdom/tools/unmodified_drivers/xen/,.bk-to-hg.hg_archival.txt.hgignore.hgtags.hg-to-bk.rootkeysConfig.mkCopyinginstall.shMakefileREADME,xen源码概览,buildconfigs/config/该文件夹下包含在多种操作系统下编译xen的配置参数设置文件。docsLaTEK格式的Xen文档以及man文档,xen源码概览,extras/ - mini-OS,内含可运行在Xen DomainU的微操作系统stubdom/IOEMU Stub DomU, PV-GRUB Stub DomU, 以及创建新的stub domainU的示例代码。tools/用于支持或增强xen监控器的工具集合,xen源码概览,unmodified_drivers/Linux 2.6 驱动程序xen/Xen监控器内核,xen-3.4.0/xen,arch/ 架构相关,函数实现common/ 公用crypto/ 加解密drivers/ 驱动include/ 头文件目录, 函数定义tools/ 工具xsm/ 安全模块,COPYINGMakefileRules.mk make配置规则,xen架构与源码分析,xen源码概览xen架构实现与源码分析MMUCPUIOVMXXen启动过程关注点,xen,-Xen and the Art of Virtualization Revisited, Ian Pratt, Citrix Systems Inc,Xen源码分析,虚拟化四个核心技术MMU虚拟化CPU虚拟化事件通道IO虚拟化硬件支持VMX技术,xen架构与源码分析,xen源码概览xen架构实现与源码分析MMUxen内存管理Guest内存管理CPUIOVMXXen启动过程关注点,MMU,/xen/include/asm-x86/config.h/xen/include/mm.h/xen/arch/x86/mm.c/xen/include/asm-x86/p2m.h/xen/include/public/memory.h/xen/common/memory.c/xen/include/public/xen.h,Xen-guest内存分配/隔离分页机制,分段机制地址转换,e.g. xen内存,/xen/include/asm-x86/config.h 最高168M给xen专用,e.g. Guest内存,/xen/include/asm-x86/p2m.h 伪物理内存模型,xen架构与源码分析,xen源码概览xen架构实现与源码分析MMUCPUIOVMXXen启动过程关注点,CPU,/xen/arch/x86/irq.c/xen/include/xen/irq.h/linux*/include/linux/Interrupt.h/xen/arch/x86/trap.c/xen/include/asm-x86/processor.h/xen/include/asm-x86/desc.h/xen/include/xen/sched.h/xen/include/xen/timer.h/xen/common/timer.c/xen/arch/x86/time.c/xen/include/public/xen.h/linux*/arch/i386/kernel/time-xen.c/xen/include/public/vcpu.h/xen/include/asm-x86/domain.h/xen/include/public/arch-x86/xen.h/xen/arch/x86/setup.c/xen/common/domain.c/xen/common/schedule.c/xen/include/xen/sched-if.h,中断/异常处理时间/计时器VCPU及其调度,xen架构与源码分析,xen架构实现与源码分析MMUCPU物理中断虚拟中断异常处理xen异常处理Guest异常处理IOVMX,xen架构与源码分析,xen架构实现与源码分析MMUCPU物理中断虚拟中断异常处理xen异常处理Guest异常处理IOVMX,物理中断处理,/xen/arch/x86/irq.c,Xen自行处理两个中断:- 串口中断+计时器中断,Guest处理中断-利用异步通信机制 xen-guest-通知所有注册该中断的GuestOS,物理中断向量表,/xen/arch/x86/trap.c 定义IDT/xen/include/asm-x86/processor.h/xen/include/asm-x86/desc.h,IDT初始化,/xen/arch/x86/boot/x86_32.S 第一次初始化/xen/arch/x86/i8259.c 第二次初始化,xen架构与源码分析,xen架构实现与源码分析MMUCPU物理中断虚拟中断异常处理xen异常处理Guest异常处理IOVMX,虚拟中断,/xen/include/public/xen.h VIRQ定义虚拟中断,8种 (3个局部vcpu,5个全局中断),虚拟中断,/linux-*/drivers/xen/core/evtchn.c L101IRQ VIRQ 映射 /xen/common/event_channel.cXen发送中断通知,xen架构与源码分析,xen架构实现与源码分析MMUCPU物理中断虚拟中断异常处理xen异常处理Guest异常处理IOVMX,异常处理xen,xen内核异常处理IDT中0-31的中断向量+hypercall(0 x82)重要源文件/xen/arch/x86/traps.c/xen/arch/x86/x86_32/entry.S/xen/include/asm-x86/processor.h,异常处理Guest,Guest内核异常处理VIDT,Guest OS自行处理异常一旦domain不运行,对应VIDT被删除重要源文件/xen/include/public/arch-x86/xen.h/linux-*/arch/i386/kernel/traps-xen.c/xen/arch/x86/traps.c/xen/include/asm-x86/domain.h/xen/arch/x86/x86_32/entry.S,xen异常处理,/xen/arch/x86/traps.c 将处理程序插入IDT表项,xen异常处理,/xen/arch/x86/traps.c,xen异常处理,/xen/arch/x86/traps.c 初始化IDThypercall双重错误NMI延迟,xen异常处理,/xen/arch/x86/traps.c 初始化IDThypercall双重错误NMI延迟,e.g. INT3,/xen/arch/x86/x86_32/entry.STRAP_int3为中断向量定义在/xen/include/asm-x86/processor.h L87-110hanlde_exception定义在/xen/arch/x86/x86_32/entry.S保存寄存器-调用C语言处理函数-退出处理函数,e.g. INT3,/xen/arch/x86/x86_32/entry.S,e.g. INT3,/xen/arch/x86/x86_32/entry.Sdo_int3由C语言实现 /xen/arch/x86/traps.c,xen架构与源码分析,xen架构实现与源码分析MMUCPU物理中断虚拟中断异常处理xen异常处理Guest异常处理IOVMX,Guest异常处理,初始化VIDTGuest OS可直接使用xen的IDT表处理异常,也可以使用自己的VIDT自行处理异常GuestOS启动时会将自己的异常表发送给xen,注册到VCPU相应的数据结构。重要源码/xen/include/public/arch-x86/xen.h: struct trap_info/linux*/arch/i386/kernel/traps.xen.c: trap_init()注册到xen/xen/arch/x86/traps.c: do_set_trap_table() 完成VCPU注册,Guest异常处理,处理流程domain内部异常 xen捕获/识别 xen在Guest中创建异常栈框 交由Guest处理/xen/arch/x86/traps.c,系统调用,快速异常处理程序 Fast Handler重要源码/xen/include/public/arch-x86/xen.h/linux-*/arch/i386/kernel/traps-xen.c/xen/arch/x86/traps.c/xen/include/asm-x86/domain.h/xen/arch/x86/x86_32/entry.S,系统调用,快速异常处理程序 Fast Handler/xen/arch/x86/x86_32/traps.cVoid init_int80_direct_trap(struct vcpu *u)VCPU中int80_desc成员当GuestOS中产生系统调用时,将会直接调用该描述符中记录的处理程序,而不需要由xen处理/xen/include/asm-x86/domain.h,xen架构与源码分析,xen源码概览xen架构实现与源码分析MMUCPUIOVMXXen启动过程关注点xen校验domain0MMU监控:进程页/段的完整性CPU监控:Hypercall/system_call校验发起对象IO监控:校验发起对象,IO设备虚拟化,/xen/include/public/io/ring.h /xen/include/public/io/blkif.h/linux*/drivers/xen/blkfront/blkfront.c/xen/include/public/io/netif.h/xen/include/public/io/xs_wire.h/linux*/drivers/xen/xenbus/xenbus_xs.c/xen/include/public/io/xenbus.h/linux*/drivers/xen/xenbus/xenbus_probe.c/linux*/drivers/xen/blkback/xenbus.c,IO环事件通道授权表xenstore和xenbus,设备模型,仿真设备模型Qemu直接分配设备模型IOMMU虚拟设备模型 半虚拟化修改guestOS,性能最好前端后端设备驱动分离页面共享,设备模型,仿真设备模型Qemu直接分配设备模型IOMMU虚拟设备模型 半虚拟化修改guestOS,性能最好前端后端设备驱动分离页面共享,设备模型,虚拟设备模型 半虚拟化设备IO环生产者消费者通讯方式事件通道一位表示一个事件,虚拟的“硬件中断”授权表Domain之间共享内存,授权表记录权限xenstore树状数据库,存放虚拟机的配置数据。xenbus数据交换中心,为设备读写的前后端提供安全通道。,设备IO环,/xen/include/public/io/ring.h IO环定义文件/xen/include/public/io/blkif.h块设备IO接口/linux*/drivers/xen/blkfront/blkfront.c块设备前端/xen/include/public/io/netif.h网络设备IO接口,xenstore & xenbus,xenstore/xen/include/public/io/xs_wire.h/linux*/drivers/xen/xenbus/xenbus_xs.cxenbus/xen/include/public/io/xenbus.h/linux*/drivers/xen/xenbus/xenbus_probe.c/linux*/drivers/xen/blkback/xenbus.c,xen架构与源码分析,xen源码概览xen架构实现与源码分析MMUCPUIOVMXXen启动过程关注点xen校验domain0MMU监控:进程页/段的完整性CPU监控:Hypercall/system_call校验发起对象IO监控:校验发起对象,VMX技术,/xen/include/asm-x86/hvm/*,VMCS初始化陷入事件处理程序,VMCS的设置,VMCS定义/创建/设置/xen/include/asm-x86/hvm/vmx/vmcs.h,xen架构与源码分析,xen源码概览xen架构实现与源码分析Xen启动过程三个启动阶段_start_xen()关注点,Xen启动,三个启动阶段/xen/arch/x86/boot/head.S初始化页表,解析早期命令行参数等工作/xen/arch/x86/boot/trampoline.S读取内存,磁盘,视频信息进入保护模式装入新的GDT(gdt_table)/xen/arch/x86/boot/x86_32.S启动第三阶段调用_start_xen (/xen/arch/x86/setup.c),参考:http:/,Xen启动 _start_xen,获取命令行参数从mod指向的module_t数组的第一个元素中取出kernel的启动参数。默认第一个是内核,第二个是initrd。/xen/arch/x86/setup.c,参考: http:/,Xen启动 _start_xen,加载dom0,下周计划,考察xen启动函数。在dom0加载运行之前实现简单的校验函数:计算校验和并输出。后续再完善/扩展校验功能。,参考资料,xen虚拟化技术 石磊,邹德清head.s解析http:/,Thanks,