|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
7 }4 ^% ?) x5 q4 @
IntroductionToMiniosApplications
6 d [; u) E1 D' u0 ?- V$ v8 F
. y( U# H E( V" v+ ZMini-OS现有应用介绍: f& ]0 J1 t/ ~. g. p
Mini-OS是跟随Xen hypervisor发布的一款小内核操作系统,目前有一些基于Mini-OS的应用:HP实验室在2007年发布了基于Mini-OS的Xen Library OS;2008年剑桥大学进一步完善了HP的工作,完成了HVM stubdom并置于Xen源码树中;伊利诺伊大学芝加哥分校(UIC)正致力于开发一款基于Mini-OS的小内核系统—Ethos。
/ r0 k2 T, ?0 ~; B$ o& d
1 j7 q( e) _6 JMini-OS 启动简介) E. O6 Q9 g9 I6 c! L
arch_init()
! Z- B2 U; S0 R7 Etrap_init()1 P r: S" ]+ I& }3 B
init_mm()
/ D! `! ]% D; M1 GXen Library OS
& z6 ^ R0 E- `- UXen Library OS的设计与实现
" d4 k$ ^# l$ t开发工具链8 d# ~" G8 X! Q0 _( f" \0 ?
Library OS
, g+ W4 H9 | J# A' n( T域间通信IDC
0 d; ]$ I$ ]6 B, J' q- B& {, uXen Library OS的应用
Q$ _! Q+ S, I, j/ G& L8 @轻量级Xen Domain& i& L& V4 p& N6 s% p, v
轻量级Xen Domain的设计与实现8 J9 j/ j) u9 w9 k/ c
轻量级Xen Domain的应用—HVM stub domain5 p7 N: H! h% R) r2 i0 o' T6 T
Ethos - An Operating system for the Xen hypervisor/ Z4 o% @" T3 v
参考文献, h5 p/ \; k+ v3 [- U6 I
. i3 k& K1 O6 S; W3 }; L1 P7 B
" @2 n/ a4 q. vMini-OS 启动简介¶
. l- R- q+ U3 j4 g2 T7 Q- kMini-OS在start 处启动,加载SS和ESP指向的地址。KERNEL_SS由Xen的GDT提供,ESP指向的地址取自于stack_start 。ESI寄存器指向Mini-OS的start_info_t 结构体。ESI做为参数传入到启动函数start_kerel()中。
$ r! J* C3 O' ]0 g+ w% K6 B
L5 a3 h! b7 S$ R: c7 Estart_kerel() 是启动Mini-OS的例程。它调用了一些初始化函数,然后建立了三个内核线程。由于Mini-OS是不可抢占的并只能运行单线程的操作系统,所以这三个内核线程依次被创建。 H- e9 l9 X& t3 W5 \4 n
, o- y7 y- i9 Q
arch_init()¶9 F& V9 c% w# u; z0 n
将start_info数据结构拷贝到内核映像的一片全局区中(start_info_union.start_info)
9 m' S( b4 t q. O0 w3 G* H# ^5 M将全局变量phys_to_machine_mapping(mm.c)指向现有的P2M表(start_info.mfn_list)9 N) K% S/ [$ x a
使用hypercall:HYPERVISOR_update_va_mapping把shared_info页映射到0x2000# U! p& ]+ [$ V3 J" n4 `- c$ r% T! e' l
注册回调句柄(callback handlers)
+ ?$ `: {' `2 G. L* ]+ C5 Z// 通过set_callbacks(),注册各种event和failsafe的处理函数 set_callbacks(unsigned longevent_selector, unsigned long event_address, unsigned long failsafe_selector, unsigned longfailsafe_address)! w& ?4 ?% q. o6 M4 q
trap_init()¶
5 a7 c7 Y2 V1 y4 F3 z4 x4 _注册陷阱表(trap handler table),通常定义于Mini-OS的arch/x86/x86_32.h中。
: @. j( M& Q7 a- E- M0 z8 y3 @5 t0 P
void trap_init(void) { HYPERVISOR_set_trap_table(trap_table); }: k$ S8 j% a9 L
init_mm()¶
5 j% Y" y( I8 ?该例程初始化Mini-OS的内存管理功能。3 L9 S$ |1 b* M3 t
) c8 J& _0 n+ M& Y
arch_init_mm()* I! b" z a3 s1 q/ z
首先计算Mini-OS可以使用的页帧数。在Mini-OS中,text段起始于0x00,虚拟地址和客户物理地址是一致的。然后调用build_pagetables(start_pfg,max_pfn),建立页表。每增加一个页表项,调用HYPERVISOR_mmu_update()同步到hypervisor中。! e7 s0 [1 r z: o- t9 G
arch_init_p2m()
, z9 R5 e Z: |1 X! R% Q初始化HYPERVISOR_shared_info->arch.pfg_to_mfn_frame_list结构体,它记录了客户机页帧到物理机页帧的映射。
" h. j& a) O. \' N" W( J1 {arch_init_demand_mapping_area()) D; t7 K$ G2 f
创建一个额外的PTE,可以用来按需地映射大于max_pfn页地址。" Q( n0 {$ g' g- J& i
Xen Library OS¶
2 v" L# M0 t. m. U7 vXen Library OS的设计与实现¶
+ c, B$ d9 H FXen Library OS 是一个类虚拟化的操作系统,它由四部分组成:
J% v4 w6 m/ ], [+ r/ O- P0 a
3 n5 m4 `& N. w7 A一个基于GNU工具链的cross-development环境4 E: T; A& U2 E- d" Z$ K: F
Red Hat的newlib C库4 Y! q4 W8 ]7 o- O; [5 l& B z
Mini-OS内核
$ \9 @# h( Q8 f& M域间通信机制IDC,基于Xen共享内存和时间通道实现0 E |5 y- N4 i: ]) D
$ F/ i' A. K! I+ h$ R! @* J6 Q开发工具链¶
$ |. S: G+ d8 l6 e4 G! X! C, b加入一个基于GNU工具链的cross-development环境,目的是获得最大的代码兼容性。Linux上的进程可以兼容的运行在Library OS上。通过修改GNU编译器和二进制工具来支持新的目标体系结构。Library OS的编译器称作i386-minios-gcc,它的头文件、库和加载器都被重写。
( Q/ s$ s* Q% f; |
! O0 l2 D: l5 ]) tLibrary OS¶+ a# Q" R& e! W0 @) q v0 }. N4 T; M# ]
Library OS使用Red Hat的newlib C库支持C程序。但需要修改newlib库以适应Library OS,比如一些函数fork、exec等都不能在新的目标体系结构中使用。 Library OS选择Mini-OS为其kernel,主要原因是Mini-OS有完善的支持Xen类虚拟化接口,Xen社区对其提供维护。 由于程序、库、内核都运行在一个地址空间中,所以Library OS适合运行小的可信服务,而不是一般的用户程序。
5 b" D Z% `% P, h; z3 J
0 _. r( c% D* d m s# [8 ]$ ?+ T域间通信IDC¶
. H* W; v9 q" U0 k* a2 D1 @6 z% u1 Q, k9 i b/ r. U4 X }
IDC是由Xen的事件通道实现的,包含读写两个IO环。IDC做为一个内核模块,向上层应用暴露6个接口。
c M2 @: |" K0 `; m$ b6 [, |' e6 K& Z1 O
Init: 初始化一个通道
# r9 H( C- Z6 c1 M; x: L5 Z+ @! n+ wClose: 关闭一个通道1 o7 i* _4 `" I7 ]. d
Create: 允许用户向通道写数据,用户要有目标域的ID
# G5 O; j) w/ `3 uConnect: 允许用户在通道中读数据7 E2 V; \3 O; @, y# O; M
Write: 向通道中写
9 d% C% T9 @6 H. }6 x0 k" U) [# hRead: 在通道中读
+ C6 ^* T3 V) l. Y) F5 j/ ~# d" S( I4 o
! C& Q3 g7 Q$ P9 X# w5 {0 p0 c9 C5 X; X
Xen Library OS的应用¶9 X9 ~$ k+ N3 d2 u# E
8 A% u: b( [( T% s* C
Xen 3.0的vTPM驱动体系结构如图所示。所有的vTPM操作都有Domain0完成。
1 \$ n+ b7 ~# L( u0 N' y }& M* b2 L. P5 x. L& K0 ?
7 [! r3 [" c" Q" A. O
如图所示,vTPM的守护进程置于Domain0中,而vTPM的实际模拟器放入Library OS中,它们之间通过IDC联系。并且使用修改过的GNU工具链编译安装vTPM emulator。DomainU通过vTPM前段驱动将请求发往Domaoin0的后端驱动,vTPM的守护进程转发请求到Domain0的IDC,实际由Library OS处理请求。6 f1 q' V0 Y! `5 C: ]/ h# g
/ J e. h& @; K+ v/ w- U1 P
修改Domain0的vTPM守护进程大概花费了200行代码,而修改vTPM emulator更少于500行代码。
" J" S1 O* W/ P5 j6 g
% @# n3 O3 _8 X8 `, [该结构的缺点是显而易见的,由于每个DomU都配属相应的Trust Dom,使得一些操作变得非常繁琐,比如虚拟域热迁移等。
: `3 Z+ C( T, N4 R: s* @( f6 Z" q z. m% c" o* C* t& _
轻量级Xen Domain¶
. V( z/ x, \* }( X: F轻量级Xen Domain的设计与实现¶" l) X$ x% X5 c
该轻量级Xen Domain 保留了Library OS的所有特性,包括cross-development环境、newlib库和IDC机制,并优化部分环境,更适合HPC(High PeRFormance Computing)应用。
! B# A7 W* w3 v# u0 G" B+ S$ L8 A. q# Q" F
6 R! C0 E W) w n% H k. _
如图所示,轻量级Xen Domain的设计思想是将Mini-OS内核、C库、IP堆栈、执行环境和单个应用程序有机的整合在一起。在技术方面看,需要安装一个plain ELF cross-compilation chain,即以plain ELF为目标建立可交叉编译的binutils和gcc。然后用交叉编译工具编译和安装各种C库,它们和Mini-OS有同样的内核C flag。
' L% `& D9 q, G# J% r; n) S% J, P( }) a6 a# ~0 i/ r
LwIP提供了一个轻量级的TCP/IP协议栈,它与Mini-OS中的Network frontend相连接。Newlib提供了一个标准C库,它比庞大的GNU libc更适用于轻量级环境。但需要修改部分newlib的系统调用:
* J# o6 b& V7 L8 U. I6 q- n; n) o$ `+ w
Mini-OS没有传统UNIX进程概念,getpid及其相似函数只输出某特定值,比如1# x, s* k; A2 S* o( K' z$ F9 h
Mini-OS没有使用信号,可以忽略各种sig函数" A5 m: u- ?3 ~9 ?% d
适当修改的函数:. R/ O" u9 R9 r* B/ E
Sleep和gettimeofday必须小心的设计,使其符合虚拟化应用
5 @6 p8 C7 u5 o: YMmap只负责处理匿名内存(anonymous memory),而不用实现映射普通文件和为无关联的进程提供共享空间的功能。
M. s5 M- t( D( u: @该系统还实现了一个瘦虚拟文件层(thin virtual file layer),它对控制台、文件、块设备、网络设备以及TCP/IP协议函数提供统一的支持。实现思想是依靠文件描述符识别目标文件的类型,然后将操作重定向到Mini-OS的各个前端驱动或者内核模块的底层函数上。
5 i8 [9 {* {6 Z( G1 w
1 s. H5 w) Z- t/ ~: W, e% n; S轻量级Xen Domain的进程调度完全依靠Mini-OS实现。Mini-OS提供非抢占式的多线程,并且目前只支持单虚拟CPU。这些线程由一个运行队列维护,它们之间没有优先权的差异。Mini-OS的内核也不需要支持任何自旋锁机制。 在内存管理方面借鉴了HPC(High Performance Computer)常用的sparse data机制,提供内存读写效率。
- _5 ~2 }+ Y# _+ F, Z3 D
1 N% P5 d9 `- \1 r为提高读写磁盘的效率,应用了类似“零拷贝”的技术,IO操作不再由缓冲区缓冲。这意味着应用程序可以直接控制各种磁盘操作,不经过Mini-OS缓冲。
% F6 U& e' J( s. V2 ?3 \* K/ Z! F' R* Z, X2 j4 a
轻量级Xen Domain的应用—HVM stub domain¶
% ]- L# g( v E) S& O* Q- ~6 d4 ^" |
剑桥团队应用该轻量级Xen Domain将 qemu移到一个单独的驱动域中。由于Mini-OS调度非常简单并且只运行qemu一个程序,大大简化了hypervisor的调度和审计工作。在stubdom 中,qemu可以直接调用系统服务,不需要经过用户、内核两态的转换,提高了效率。
% [0 W+ S. U, O$ U; Q" j2 G
' _; s$ F9 e1 L/ g [- {: c$ ^Ethos - An Operating system for the Xen hypervisor¶
. G% g& U/ R$ P# z' O. EEthos 是UIC(University of Illinois at Chicago)正在开发的一款基于Xen和Mini-OS的轻量级操作系统。它开发的初衷是为了避免开发驱动程序、文件系统和网络设备。Ethos做为一个内核,只向外提供进程和系统调用接口。该项目的负责人Prof. Solworth称其为"Paired-OS"。
) v0 j: g4 N7 Z/ Y: }, _# [- o: o' d1 K; ?- Q: Q5 i- F
' @0 J1 Q- c& ]+ q" J }7 qXen上同时运行Ethos和标准linux。Ethos将文件系统、网络和设备驱动托管给linux,剩余部分由Ethos实现。
9 _! d" [! ]6 r3 \$ X0 p5 D/ ~3 c$ t) l t' u
目前该项工作正在进展之中。
, y4 F& u; n1 ?
& Y; q2 f$ U' T& M& {参考文献¶4 J8 V: \6 h8 d* o3 Q" O: ]
1.Satya Popuri, A tour of the Mini-OS kernel, http://www.cs.uic.edu/~spopuri/minios.html
! B, i1 }8 b3 R
/ e! p1 {' s3 C: Y' H% P( 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.
3 D# s5 Q' j: u( L9 U& V$ Z" C/ o3 q5 ?# W: _+ X7 E4 q& K
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.5 B1 y) Q4 r4 E! o* o
o1 \5 q) [% D# V
4.Satya Popuri, Ethos - An Operating system for the Xen hypervisor, http://www.cs.uic.edu/~spopuri/ethos.html d& Q% \0 c( T+ t9 o- O: k/ D
) Z: m# ?* n% l9 l
5.Jon A. Solworth, Ethos: an operating system which creates a culture of security,http://www.rites.uic.edu/~solworth/ethos.html |
|