EDA365电子论坛网

标题: Mini-OS的应用介绍 [打印本页]

作者: uqHZau    时间: 2020-3-10 10:49
标题: Mini-OS的应用介绍

8 J* A, \7 F+ Y8 JIntroductionToMiniosApplications  
* D' P  J- h, C, F3 O/ e
" @- J( H0 y6 A7 u- d( LMini-OS现有应用介绍: ~& N  K) T- p: q" T
Mini-OS是跟随Xen hypervisor发布的一款小内核操作系统,目前有一些基于Mini-OS的应用:HP实验室在2007年发布了基于Mini-OS的Xen Library OS;2008年剑桥大学进一步完善了HP的工作,完成了HVM stubdom并置于Xen源码树中;伊利诺伊大学芝加哥分校(UIC)正致力于开发一款基于Mini-OS的小内核系统—Ethos。
6 t/ M5 s/ q# m0 K* e! s, [+ `7 W7 \: h9 ?6 p" V- D4 q( y  M
Mini-OS 启动简介# F6 j! Q$ s# H5 c7 \& @7 J' i
arch_init()
9 G/ Y1 H( r1 Dtrap_init()
  ^8 f3 X; ~: i4 m5 linit_mm()
& o9 ?8 B( J# f' p, @3 o- @9 iXen Library OS8 u4 [' L( v. d! B
Xen Library OS的设计与实现
( ?9 n- A5 l  {7 |0 x开发工具链* b" N* K0 H$ i; ?+ A) J( L" G
Library OS. H' Q! C# o$ @# ~% }, ?% P
域间通信IDC
  }2 ?; S/ _& H, v% }Xen Library OS的应用% M' e6 A2 l1 P
轻量级Xen Domain
  Y% L8 g9 a' R7 Z  p* v7 A轻量级Xen Domain的设计与实现
& N7 i/ z: g5 H+ g. m轻量级Xen Domain的应用—HVM stub domain
, Y5 ?( h: W4 [" B  xEthos - An Operating system for the Xen hypervisor: g( j9 |7 }2 o: G
参考文献
9 Y# S0 _) Y: o. ~1 `2 ]& ]+ U; I
( C" }* i& Y# l* Q- W& O. V6 H4 `
6 Q7 s& @; U( `3 k. E, Z8 R8 QMini-OS 启动简介¶4 o6 J! ~- p# {# N" b& e
Mini-OS在start 处启动,加载SS和ESP指向的地址。KERNEL_SS由Xen的GDT提供,ESP指向的地址取自于stack_start 。ESI寄存器指向Mini-OS的start_info_t 结构体。ESI做为参数传入到启动函数start_kerel()中。
. k" X/ Z) B! q& f8 ^5 P2 g7 D" v. B1 |1 U4 s$ u5 r& R
start_kerel() 是启动Mini-OS的例程。它调用了一些初始化函数,然后建立了三个内核线程。由于Mini-OS是不可抢占的并只能运行单线程的操作系统,所以这三个内核线程依次被创建。
7 t3 [6 h: B% H
( I) ~% e: J0 K% [. K5 ?5 [1 X. Narch_init()¶
' w6 U( p0 h% f3 Z将start_info数据结构拷贝到内核映像的一片全局区中(start_info_union.start_info)" N* w" q* z! X
将全局变量phys_to_machine_mapping(mm.c)指向现有的P2M表(start_info.mfn_list)
" i/ G- d) Z+ o使用hypercall:HYPERVISOR_update_va_mapping把shared_info页映射到0x2000$ }; V) s6 `4 f, k1 \7 j/ G
注册回调句柄(callback handlers)2 c0 {% m/ J$ \9 B
// 通过set_callbacks(),注册各种event和failsafe的处理函数  set_callbacks(unsigned longevent_selector, unsigned long event_address, unsigned long failsafe_selector, unsigned longfailsafe_address)- u( p5 ]  \+ |/ d0 l6 A
trap_init()¶
) O7 i1 T0 b. e$ ^注册陷阱表(trap handler table),通常定义于Mini-OS的arch/x86/x86_32.h中。0 r# D% Y! R* g4 p" M# ^
5 w, Q% P* x+ I
void trap_init(void)  {      HYPERVISOR_set_trap_table(trap_table);  }/ p- ^: c2 s5 x+ K/ Y5 r
init_mm()¶
/ Q. A( S+ _/ M0 W# b3 ^该例程初始化Mini-OS的内存管理功能。) M/ e( r# A% R" _6 V; B9 p, Y

  q3 V* T6 j  B: m' v! jarch_init_mm()
% R$ J4 D1 J5 t' F# L2 @首先计算Mini-OS可以使用的页帧数。在Mini-OS中,text段起始于0x00,虚拟地址和客户物理地址是一致的。然后调用build_pagetables(start_pfg,max_pfn),建立页表。每增加一个页表项,调用HYPERVISOR_mmu_update()同步到hypervisor中。
; ]4 P. p: s3 Jarch_init_p2m()' a7 a$ J5 }, I7 G" y2 t
初始化HYPERVISOR_shared_info->arch.pfg_to_mfn_frame_list结构体,它记录了客户机页帧到物理机页帧的映射。8 j# u1 q- g% d
arch_init_demand_mapping_area()/ J: B# o  T9 n  N6 |/ }
创建一个额外的PTE,可以用来按需地映射大于max_pfn页地址。6 [! o- T0 b6 }4 R! h: s2 _/ `
Xen Library OS¶: ~2 n6 I2 K) e0 r1 X
Xen Library OS的设计与实现¶1 v% g8 z' G& N
Xen Library OS 是一个类虚拟化的操作系统,它由四部分组成:
9 C$ o9 M- x# y. a% k' c+ z) r9 v# Z% \, C& \
一个基于GNU工具链的cross-development环境
4 p9 e' o5 O% D2 I5 V7 R: eRed Hat的newlib C库: S9 t& e; u) N; G
Mini-OS内核
0 B  K* Q$ N2 _4 m3 }" @/ Z2 e域间通信机制IDC,基于Xen共享内存和时间通道实现
0 e8 l  \8 p3 R! ?  x" I4 U- E6 A
开发工具链¶
, S" J1 _3 z6 q; {+ u4 R! A& L. H3 U% r加入一个基于GNU工具链的cross-development环境,目的是获得最大的代码兼容性。Linux上的进程可以兼容的运行在Library OS上。通过修改GNU编译器和二进制工具来支持新的目标体系结构。Library OS的编译器称作i386-minios-gcc,它的头文件、库和加载器都被重写。
9 a! y+ A, _% r
4 ^4 m1 ?+ ?* d( m' e7 f2 [% X' oLibrary OS¶
- I( Y! }& Z  t% P, ]! uLibrary OS使用Red Hat的newlib C库支持C程序。但需要修改newlib库以适应Library OS,比如一些函数fork、exec等都不能在新的目标体系结构中使用。 Library OS选择Mini-OS为其kernel,主要原因是Mini-OS有完善的支持Xen类虚拟化接口,Xen社区对其提供维护。 由于程序、库、内核都运行在一个地址空间中,所以Library OS适合运行小的可信服务,而不是一般的用户程序。
9 B9 M& ]' ?3 |; e: Y4 Y1 |1 q3 z6 O9 z7 N4 V& e6 z1 p3 c& Y
域间通信IDC¶
  _" E. Y  n" G' c" B
5 e" @2 _6 k) w# ~1 PIDC是由Xen的事件通道实现的,包含读写两个IO环。IDC做为一个内核模块,向上层应用暴露6个接口。
! m9 W, G& A- |/ L( i2 ?- }
$ J3 N: O# n; T% C) z: @) e  Y( SInit: 初始化一个通道1 J9 `: L" h3 ]; R, i
Close: 关闭一个通道- N6 m# G' l6 \) L
Create: 允许用户向通道写数据,用户要有目标域的ID, E1 M; v) S* C7 L
Connect: 允许用户在通道中读数据$ f, k9 H5 a) F9 f
Write: 向通道中写6 E9 k* _! S# Y7 M
Read: 在通道中读
, z9 E6 s. Y0 X$ N7 g
4 E- b' A7 D* a/ L% m7 o# e& W0 ^# M& G" d! C7 u) A5 m* B  {
Xen Library OS的应用¶* F0 s' i5 g) Z$ P  J$ m. z& v
- g' s( f5 p, ~  [/ _; K* N
Xen 3.0的vTPM驱动体系结构如图所示。所有的vTPM操作都有Domain0完成。
7 h+ z2 |7 H1 {8 i4 g, C* d. P: T2 v: w- Y+ r6 \

. V/ n# [7 Y1 @5 S/ b如图所示,vTPM的守护进程置于Domain0中,而vTPM的实际模拟器放入Library OS中,它们之间通过IDC联系。并且使用修改过的GNU工具链编译安装vTPM emulator。DomainU通过vTPM前段驱动将请求发往Domaoin0的后端驱动,vTPM的守护进程转发请求到Domain0的IDC,实际由Library OS处理请求。+ j4 E6 x1 a" B6 ~% a1 x

. |- s: U7 R5 c5 P  [1 M1 z修改Domain0的vTPM守护进程大概花费了200行代码,而修改vTPM emulator更少于500行代码。
5 \% y4 I+ r6 w$ g
$ S" f/ i4 Y& a该结构的缺点是显而易见的,由于每个DomU都配属相应的Trust Dom,使得一些操作变得非常繁琐,比如虚拟域热迁移等。! }$ F9 P- `7 f% k( M2 ]2 v0 \

' Z9 H# G+ B, }, j9 W轻量级Xen Domain¶9 ~" P" g4 o* c" i. i" }
轻量级Xen Domain的设计与实现¶
2 r9 d! [6 \/ V; B2 n该轻量级Xen Domain 保留了Library OS的所有特性,包括cross-development环境、newlib库和IDC机制,并优化部分环境,更适合HPC(High Performance Computing)应用。5 z$ ~. k: g- k3 d' n7 @

+ Z/ q9 L' |5 Z& d% m1 r( e. b% x* E
如图所示,轻量级Xen Domain的设计思想是将Mini-OS内核、C库、IP堆栈、执行环境和单个应用程序有机的整合在一起。在技术方面看,需要安装一个plain ELF cross-compilation chain,即以plain ELF为目标建立可交叉编译的binutils和gcc。然后用交叉编译工具编译和安装各种C库,它们和Mini-OS有同样的内核C flag。
2 J; ?$ r  V; {
* {6 z9 A1 Q8 P. v5 ?+ u3 ^LwIP提供了一个轻量级的TCP/IP协议栈,它与Mini-OS中的Network frontend相连接。Newlib提供了一个标准C库,它比庞大的GNU libc更适用于轻量级环境。但需要修改部分newlib的系统调用:
: ^/ o; C( _  q4 o2 q
, V, s0 f& C1 X) ^/ \Mini-OS没有传统UNIX进程概念,getpid及其相似函数只输出某特定值,比如15 G% I; \! d, J: k
Mini-OS没有使用信号,可以忽略各种sig函数2 q# A! u6 s& @2 s, o1 q9 q
适当修改的函数:
2 N9 q( u/ }. b& T+ ESleep和gettimeofday必须小心的设计,使其符合虚拟化应用7 I. U; L9 {' O' o3 o
Mmap只负责处理匿名内存(anonymous memory),而不用实现映射普通文件和为无关联的进程提供共享空间的功能。* a3 u; X2 F7 x9 Z2 E- x! j, r* @3 E
该系统还实现了一个瘦虚拟文件层(thin virtual file layer),它对控制台、文件、块设备、网络设备以及TCP/IP协议函数提供统一的支持。实现思想是依靠文件描述符识别目标文件的类型,然后将操作重定向到Mini-OS的各个前端驱动或者内核模块的底层函数上。
% O6 ~% q8 q$ Z, [+ F5 D  d$ j9 ^: |1 ]
轻量级Xen Domain的进程调度完全依靠Mini-OS实现。Mini-OS提供非抢占式的多线程,并且目前只支持单虚拟CPU。这些线程由一个运行队列维护,它们之间没有优先权的差异。Mini-OS的内核也不需要支持任何自旋锁机制。 在内存管理方面借鉴了HPC(High Performance Computer)常用的sparse data机制,提供内存读写效率。4 ~. S! r0 s! k- V
6 @# Y2 k8 a% v8 n" O: e7 M/ X/ L
为提高读写磁盘的效率,应用了类似“零拷贝”的技术,IO操作不再由缓冲区缓冲。这意味着应用程序可以直接控制各种磁盘操作,不经过Mini-OS缓冲。4 J4 E! {# r8 a7 G, r2 R5 g' _5 l( J
' f0 y# }5 m, q- O; S5 d
轻量级Xen Domain的应用—HVM stub domain¶
. A* A- }6 `$ ^" W
* ?, z* e7 ]- x9 ^6 o* V剑桥团队应用该轻量级Xen Domain将 qemu移到一个单独的驱动域中。由于Mini-OS调度非常简单并且只运行qemu一个程序,大大简化了hypervisor的调度和审计工作。在stubdom 中,qemu可以直接调用系统服务,不需要经过用户、内核两态的转换,提高了效率。
' n. T$ v% |9 U( l; e/ r
( J. @) O7 U: M+ `Ethos - An Operating system for the Xen hypervisor¶# U& O% ^# H; P1 @6 N& c
Ethos 是UIC(University of Illinois at Chicago)正在开发的一款基于Xen和Mini-OS的轻量级操作系统。它开发的初衷是为了避免开发驱动程序、文件系统和网络设备。Ethos做为一个内核,只向外提供进程和系统调用接口。该项目的负责人Prof. Solworth称其为"Paired-OS"。6 g9 x, }" n* d' D6 }7 X

8 W' y2 v1 B1 P2 \0 A1 e( S
7 D: i! s( L/ a9 }Xen上同时运行Ethos和标准linux。Ethos将文件系统、网络和设备驱动托管给linux,剩余部分由Ethos实现。- |9 `8 p! B6 S) {  c# X* C$ d& X

: b  ~- W: A2 f目前该项工作正在进展之中。5 c) W) c5 ~1 r1 l' Y# d/ D8 l
  S# Y; o2 o: ]
参考文献¶1 X/ S  [8 e6 P. y6 y0 h
1.Satya Popuri, A tour of the Mini-OS kernel, http://www.cs.uic.edu/~spopuri/minios.html. `; A& B0 l& d3 \5 ^  D. }* N

, x! C" ]0 s7 x4 h% A2.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.8 z6 w, O5 f1 ]* T/ J2 d% u

) s+ y& ^: a# z  N. x3.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.
+ ?( o+ G0 r3 v! ?7 c( g3 y7 e% e# s! v
9 `+ u7 N# K2 ?: z5 N4.Satya Popuri, Ethos - An Operating system for the Xen hypervisor, http://www.cs.uic.edu/~spopuri/ethos.html1 T. U3 e) U5 ~+ C& i/ C- c& R

+ W9 Z) E( V0 K' `9 n* Z" f5.Jon A. Solworth, Ethos: an operating system which creates a culture of security,http://www.rites.uic.edu/~solworth/ethos.html
作者: yin123    时间: 2020-3-10 16:43
Mini-OS的应用介绍




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2