• [转]MiniOS现有应用介绍


    IntroductionToMiniosApplications  

    Mini-OS现有应用介绍

    Mini-OS是跟随Xen hypervisor发布的一款小内核操作系统,目前有一些基于Mini-OS的应用:HP实验室在2007年发布了基于Mini-OS的Xen Library OS;2008年剑桥大学进一步完善了HP的工作,完成了HVM stubdom并置于Xen源码树中;伊利诺伊大学芝加哥分校(UIC)正致力于开发一款基于Mini-OS的小内核系统—Ethos。

     

     

    Mini-OS 启动简介

    Mini-OS在start 处启动,加载SS和ESP指向的地址。KERNEL_SS由Xen的GDT提供,ESP指向的地址取自于stack_start 。ESI寄存器指向Mini-OS的start_info_t 结构体。ESI做为参数传入到启动函数start_kerel()中。

    start_kerel() 是启动Mini-OS的例程。它调用了一些初始化函数,然后建立了三个内核线程。由于Mini-OS是不可抢占的并只能运行单线程的操作系统,所以这三个内核线程依次被创建。

    arch_init()

    • 将start_info数据结构拷贝到内核映像的一片全局区中(start_info_union.start_info)
    • 将全局变量phys_to_machine_mapping(mm.c)指向现有的P2M表(start_info.mfn_list)
    • 使用hypercall:HYPERVISOR_update_va_mapping把shared_info页映射到0x2000
    • 注册回调句柄(callback handlers)
      // 通过set_callbacks(),注册各种event和failsafe的处理函数  set_callbacks(unsigned longevent_selector, unsigned long event_address, unsigned long failsafe_selector, unsigned longfailsafe_address)

    trap_init()

    注册陷阱表(trap handler table),通常定义于Mini-OS的arch/x86/x86_32.h中。

    void trap_init(void)  {      HYPERVISOR_set_trap_table(trap_table);  }

    init_mm()

    该例程初始化Mini-OS的内存管理功能。

    • arch_init_mm()
      首先计算Mini-OS可以使用的页帧数。在Mini-OS中,text段起始于0x00,虚拟地址和客户物理地址是一致的。然后调用build_pagetables(start_pfg,max_pfn),建立页表。每增加一个页表项,调用HYPERVISOR_mmu_update()同步到hypervisor中。
    • arch_init_p2m()
      初始化HYPERVISOR_shared_info->arch.pfg_to_mfn_frame_list结构体,它记录了客户机页帧到物理机页帧的映射。
    • arch_init_demand_mapping_area()
      创建一个额外的PTE,可以用来按需地映射大于max_pfn页地址。

    Xen Library OS

    Xen Library OS的设计与实现

    Xen Library OS 是一个类虚拟化的操作系统,它由四部分组成:

    • 一个基于GNU工具链的cross-development环境
    • Red Hat的newlib C库
    • Mini-OS内核
    • 域间通信机制IDC,基于Xen共享内存和时间通道实现

    开发工具链

    加入一个基于GNU工具链的cross-development环境,目的是获得最大的代码兼容性。Linux上的进程可以兼容的运行在Library OS上。通过修改GNU编译器和二进制工具来支持新的目标体系结构。Library OS的编译器称作i386-minios-gcc,它的头文件、库和加载器都被重写。

    Library OS

    Library OS使用Red Hat的newlib C库支持C程序。但需要修改newlib库以适应Library OS,比如一些函数fork、exec等都不能在新的目标体系结构中使用。 Library OS选择Mini-OS为其kernel,主要原因是Mini-OS有完善的支持Xen类虚拟化接口,Xen社区对其提供维护。 由于程序、库、内核都运行在一个地址空间中,所以Library OS适合运行小的可信服务,而不是一般的用户程序。

    域间通信IDC

    IDC是由Xen的事件通道实现的,包含读写两个IO环。IDC做为一个内核模块,向上层应用暴露6个接口。

    • Init: 初始化一个通道
    • Close: 关闭一个通道
    • Create: 允许用户向通道写数据,用户要有目标域的ID
    • Connect: 允许用户在通道中读数据
    • Write: 向通道中写
    • Read: 在通道中读

     

    Xen Library OS的应用

    Xen 3.0的vTPM驱动体系结构如图所示。所有的vTPM操作都有Domain0完成。

    如图所示,vTPM的守护进程置于Domain0中,而vTPM的实际模拟器放入Library OS中,它们之间通过IDC联系。并且使用修改过的GNU工具链编译安装vTPM emulator。DomainU通过vTPM前段驱动将请求发往Domaoin0的后端驱动,vTPM的守护进程转发请求到Domain0的IDC,实际由Library OS处理请求。

    修改Domain0的vTPM守护进程大概花费了200行代码,而修改vTPM emulator更少于500行代码。

    该结构的缺点是显而易见的,由于每个DomU都配属相应的Trust Dom,使得一些操作变得非常繁琐,比如虚拟域热迁移等。

    轻量级Xen Domain

    轻量级Xen Domain的设计与实现

    该轻量级Xen Domain 保留了Library OS的所有特性,包括cross-development环境、newlib库和IDC机制,并优化部分环境,更适合HPC(High Performance Computing)应用。

    如图所示,轻量级Xen Domain的设计思想是将Mini-OS内核、C库、IP堆栈、执行环境和单个应用程序有机的整合在一起。在技术方面看,需要安装一个plain ELF cross-compilation chain,即以plain ELF为目标建立可交叉编译的binutils和gcc。然后用交叉编译工具编译和安装各种C库,它们和Mini-OS有同样的内核C flag。

    LwIP提供了一个轻量级的TCP/IP协议栈,它与Mini-OS中的Network frontend相连接。Newlib提供了一个标准C库,它比庞大的GNU libc更适用于轻量级环境。但需要修改部分newlib的系统调用:

    • Mini-OS没有传统UNIX进程概念,getpid及其相似函数只输出某特定值,比如1
    • Mini-OS没有使用信号,可以忽略各种sig函数
    • 适当修改的函数:
      1. Sleep和gettimeofday必须小心的设计,使其符合虚拟化应用
      2. Mmap只负责处理匿名内存(anonymous memory),而不用实现映射普通文件和为无关联的进程提供共享空间的功能。

    该系统还实现了一个瘦虚拟文件层(thin virtual file layer),它对控制台、文件、块设备、网络设备以及TCP/IP协议函数提供统一的支持。实现思想是依靠文件描述符识别目标文件的类型,然后将操作重定向到Mini-OS的各个前端驱动或者内核模块的底层函数上。

    轻量级Xen Domain的进程调度完全依靠Mini-OS实现。Mini-OS提供非抢占式的多线程,并且目前只支持单虚拟CPU。这些线程由一个运行队列维护,它们之间没有优先权的差异。Mini-OS的内核也不需要支持任何自旋锁机制。 在内存管理方面借鉴了HPC(High Performance Computer)常用的sparse data机制,提供内存读写效率。

    为提高读写磁盘的效率,应用了类似“零拷贝”的技术,IO操作不再由缓冲区缓冲。这意味着应用程序可以直接控制各种磁盘操作,不经过Mini-OS缓冲。

    轻量级Xen Domain的应用—HVM stub domain

    剑桥团队应用该轻量级Xen Domain将 qemu移到一个单独的驱动域中。由于Mini-OS调度非常简单并且只运行qemu一个程序,大大简化了hypervisor的调度和审计工作。在stubdom 中,qemu可以直接调用系统服务,不需要经过用户、内核两态的转换,提高了效率。

    Ethos - An Operating system for the Xen hypervisor

    Ethos 是UIC(University of Illinois at Chicago)正在开发的一款基于Xen和Mini-OS的轻量级操作系统。它开发的初衷是为了避免开发驱动程序、文件系统和网络设备。Ethos做为一个内核,只向外提供进程和系统调用接口。该项目的负责人Prof. Solworth称其为"Paired-OS"。

    Xen上同时运行Ethos和标准linux。Ethos将文件系统、网络和设备驱动托管给linux,剩余部分由Ethos实现。

    目前该项工作正在进展之中。

    参考文献

    1.Satya Popuri, A tour of the Mini-OS kernel, http://www.cs.uic.edu/~spopuri/minios.html

    2.M.J. Anderson, M. Moffie, and C.I. Dalton. Towards Trustworthy Virtualisation Environments: Xen Library OS Security Service Infrastructure. Technical Report HPL-2007-69, Hewlett-Packard Development Company, L.P., April 2007.

    3.Samuel Thibault and Tim Deegan. Improving performance by embedding hpc applications in lightweight xen domains. In HPCVirt '08: Proceedings of the 2nd workshop on Systemlevel virtualization for high performance computing, pages 9--15, New York, NY, USA, 2008. ACM.

    4.Satya Popuri, Ethos - An Operating system for the Xen hypervisor, http://www.cs.uic.edu/~spopuri/ethos.html

    5.Jon A. Solworth, Ethos: an operating system which creates a culture of security,http://www.rites.uic.edu/~solworth/ethos.html

    来源:http://blog.csdn.net/tinnycloud/article/details/5742596 
  • 相关阅读:
    整理诗稿有感
    穿越校园有感
    晚饭后独自散步有感
    漫步锦里有感
    世界经理人: 三个重要法则让你彻底改变!
    看艺人名字作诗有感
    如果你不想成为默默无闻的人,那么规划生涯
    技术人员PK管理人员的博弈论
    英雄气概
    与君相识天涯有感
  • 原文地址:https://www.cnblogs.com/feisky/p/2338060.html
Copyright © 2020-2023  润新知