- 浏览: 517401 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
lin_kk:
最近正在学,请问LZ有源码事例吗,如果有能发一下我邮箱吗,万分 ...
使用libgdx及其中的box2d 2.1的注意事项 -
ahong520:
编译都通不过
ffmpeg对音频解码的一般步骤 -
辽东小小:
yajun_soft 写道XXX@XXX:~$ adb she ...
adb push的Permission denied -
cdtdx:
好文, 相当不错啊. 收了.
什么是app2sd,app2ext,data2ext?app移动到SD卡哪里去了? /mnt/asec /mnt/secure -
dickycat:
学习了,最近正在学这一块,年纪大了,学起来有点吃亏!
使用libgdx及其中的box2d 2.1的注意事项
我们学习操作系统课程的时候,一直在讲微内核,说什么“微内核是现代操作系统的主流”(时间太久,记不清了,如果说错了,不要拍我)。可是事实上,真正进入工业级别应用的微内核操作系统并不多,Microsoft的系统虽然宣称是微内核,但是应该不是,因为从来没有见过一个人可以把XP或者2000系统裁减到50M以内(95/98可以做小,这个可以从网络搜索到相关资料,但是它们是DOS的封装,这里不谈)。但是Linux不是微内核,而是 monolitic,这是大家都公认的,Linux的前辈Unix当然也不是微内核。具体说来,这个分歧主要是学术界和工业届的分歧。学术界认为,微内核是操作系统发展的主流方向,但是工业界却不这样认为。这也许是当linus推出Linux以后,和他的老师Andy Taonenbau(写Minix的牛人)互相拍砖头的缘由。
不过确切的说,microkernel的整体性能不如monolitic,这对于追求性价比的厂商而言,采用monolitic也是有道理的。不过 microkernel也有自己的长处,就是稳定。相对而言,microkernel比monolitic的依赖更为简单,所以它更稳定。不过第一代microkernel真的很令人失望,到了 Jochen Liedtke(German),他设计了第二代microkernel,称为L4,为了追求效率,所有的L4用汇编语言实现(牛人吧,用汇编写操作系统),但是这样的结果是在追求效率的同时,使得第一代L4只能运行在486和pentium上面。但是目前L4已经变成微内核的一个设计标准,围绕这个标准,有很多的L4的实现(http://os.inf.tu-dresden.de/L4/impl.html)。最初的由Jochen设计的L4目前称之为L4/X86,现在最活跃的两个分别是Pistachio和Fiasco。前者是普通的 microkernel,后者是专门为实时系统设计的microkernel,实现了L4V2(L4 API Version 2)。由于Fiasco跟L4的这种关系,所以平时Fiasco也被称做L4/Fiasco,以强调它是L4的一个implementation。
现在,终于开讲Fiasco,Fiasco的意思是“失败“,好像是从意大利语里面借来的(不知道他们为什么去这么一个名字,不过听起来还蛮上口的)。 Fiasco是Dresden Real-Time Operating Systems Project(德累斯敦大学实时操作系统项目)的核心子项目,它是一个具备实时功能的microkernel。我们知道,在一个实时系统里面,通常有两种任务,一种是real-time的,另一种是time- sharing的。real-time部分由Fiasco提供,在time-sharing部分,开发者们利用了Linux。平常Linux都是跑在某一种硬件平台(X86,ARM,PowerPC,MIPS),而在Fiasco/L4里面,开发者对Linux进行了修改,使得Linux能够运行在L4 /Fiasco,这部分叫做L4Linux。目前,L4Linux的最新版本已经到了L4Linux-2.6.17,这是现行的最新的Linux-2.6 的稳定版本。
下面,我们说说L4/Fiasco中的服务模式(程序架构),这个我认为比较有意思。如果没有任何module被加载,单纯一个microkernel那是什么事情也做不了的。所以基于L4/Fiasco有好多的module被设计出来,这些module以server的形式为后面加载的module提供服务,就好似多个C/S嵌套起来一样。
最后,讲一下microkernel跟monolitic的区别,前面说Fiasco的时候,也说到module,大家在编译Linux kernel的时候,也会有module。这两个地方的module是不一样的。前面的module是彼此之间是隔离的,具有不同的address space,而后者之间共享同一个address space。
Operating System Based L4-Like Microkernel
关于L4系统,一般来讲,目前公认的L4系统有2个特点,Fast IPC和Sigma0协议。Sigma0是一种基于IPC的内存管理协议,使用Sigma0,内存管理呈现出一种层次状。举例:有A和B两个程序,如果程序B想使用程序A的内存。如果使用Sigma0,那么很容易实现,只要把A设置为B的pager,并提供B的page fault handler程序就可以。在这种情况下,程序A和程序B依然具有不同的Address Space,A和B之间互相隔离(关于这种层次式的内存管理,请参考The sawmill framework for virtual memory diversity)。 但是如果使用Linux来实现这种模式,除非使用share memory,我想不出其它更好的办法,但是share memory使得A和B之间有的Address Space有了交集,从security和safety两个方面来讲,都不是很好的解决方法。近年来,越来越多的L4系统开始支持一种新的特性-Capability, Capability是为了提高操作系统安全性而设计的,Capability和要访问的Resource之间的关系类似于文件描述符号和文件之间的关系一样,要访问一个Resource,必须通过Capability来进行,Capability里面规定了那么资源可以被访问等安全特性,Capability
允许被grant(从一个用户转移到另外一个用户),总之,Capability是比Access Control List更好的一种增强系统安全性的方法。
Live System
1, PikeOS/ELinOS 德国SYSGO AG公司的商用非开源系统,它提供了很好的Resource Isolation机制,使用ParaVirtualization,让每一个OS Personality运行在一个VM里面,可以支持Java和Ada的应用程序。PikeOS不但具有Spatial Isolation,还具有很好的Temporal Isolation,因此也支持Real-Time application。ELinOS是移植到PikeOS的嵌入式Linux系统(2.4和2.6),支持众多硬件平台和开发板。PikeOS通过ARINIC 653,D0-178B认证,因此被用于军工航天等Safety-Critical和Secure Application。PikeOS是从98年开始开发的,近几年Sysgo已经成为欧洲增长最快嵌入式厂商,ELinOS也成为比较流行的嵌入式Linux开发环境。因为是商用系统,可参考的资料很少。(www.sysgo.com, http://en.wikipedia.org/wiki/PikeOS)
2,Fiasco/L4Env/L4Linux Fiasco是TUD Operating System Group (os.inf.tu-dresden.de)开发的Real-Time微内核,支持L4 V2.0和L4 X.0标准(L4的接口标准),Fiasco是由C++实现的典型L4系统,Fiasco提供众多L4系统调用以及Fiasco的实时扩展,请点击Fiasco Syscalls。L4Env是一套基于Fiasco的服务程序,包括roottask, sigma0, log, names, dm_phys, l4vfs, l4io, dope, con等各种server,L4Env是一种典型SawMill Multi-Server OS (参考paper The SawMill multiserver approach),关于L4Env的一些基本情况,请点击L4Env Manual。L4Linux是基于L4Env移植的Linux系统,Linux-2.0, Linux-2.2, Linux-2.4, Linux-2.6前后分别被移植到L4Env上面,目前L4Linux版本更新到2.6.26,L4Linux相当于一种基于“L4 CPU”的Linux系统,对Linux系统的修改都存放在arch/l4目录下面,较好地维持了Linux系统semantic integrity。关于Fiasco/L4Env/L4Linux的设计,请参考Paper The Performance of µ-Kernel-Based Systems ,这个Paper也是微内核领域最著名的Paper之一。值得注意的是,基于Fiasco和L4Linux,有2个很重要的研究成果,DROPS实时系统是一种面向服务质量需求的实时系统,可以提供某种程度的保证(guarantee)。L4/Nizza,一种面向Trusted Computing的基于微内核的系统架构,这也是最早利用L4微内核进行security system研究的工作,可以参考Paper : Security Architecture Revisited。此外,他们维护一个IDL for L4,称为Dice。
3, Pistachio/AfterBurner Pistachio是目前最好的L4微内核之一,它由卡尔斯鲁尔大学系统体系结构研究组和新南威尔士州立大学操作系统研究小组共同开发的微内核。跟所有的研究机构一样,一开始大家都是单干,卡尔斯鲁尔作Hazelnut,新南威尔士州立做L4/MIPS,L4/Alpha。后来,大家联合起来,做成了Pistachio。不过微内核之上的部分大家一直单干,各有各的系统。卡尔斯鲁尔的Pistachio小组在很长的时间内,一直使用来自TUD的L4Linux作为基于Pistachio的虚拟化技术,直到Pistachio的Afterburner技术出现为止才有了改观。AfterBurning是该小组研发的一种Pre-Virtulization技术(Pre-Virtualization是一种兼顾Para-Virtulization的高性能和Modularity的可维护性而出现的一种尝试,具体来说,是把一种source code可以根据需求编译出不同的系统,同样的Linux,可以编译出适用于Xen的Guest OS,也可以编译出使用L4:Pistachio的Virtual Machine。由于这项工作是在编译阶段完成的,因此诸多优化也可以同时生效,而避免了Para-Virtualization的单一性。比如L4Linux只能应用用Fiasco,XenLinux只适合于Xen等等),因为是通过编译来完成的,所以性能会更好一些。比较有趣的是,他们有一个BurnNT技术,可以支持Multi-Windows,网站上面提供源代码下载。他们关于Device Driver Virtualization有一篇Paper是OSDI的,Unmodified Device Driver Reuse ,是近几年L4领域一篇少有的佳作。其主要思想是把每一个Virtual Linux当作一个Device Driver Server,从而提供Dependable System.
4, OKL4/Iguana OKL4是L4:Pistachio-Embedded的延续,它目前有Open Kernel Labs公司维护,但是研究工作基本上都是在ERTOS完成的。目前OKL4的市场化推广作的不错,已经有很多产品使用了OKL4,包括基于OKL4的OpenMoko,也已经面世。相当于TU-D和Uni Karlsruhe的L4小组,ERTOS规模显得很庞大,他们网站上面的项目也很多,各种项目都有。主要有:1)基本系统维护, OKL4+ Iguana+ Magpie+ Wombat, Iguana类似于L4Env, Magpie类似于Dice,Wombat类似于L4Linux,一一对应。2)Security seL4+L4.Verified,我分不清楚2个项目的目标有什么不同,seL4是security Embedded L4的意思,总之,其核心内容即使使用formal method来验证OKL4 is secure kernel,似乎他们现在已经达到验证机器码的程度,大概步骤就是使用Haskell重新实现OKL4的API,然后使用Isabela进行证明,在这个方面,Kernel Verification,他们作的很成功,这也是他们可以赢得众多工业厂商青睐的一个原因3)Real-Time 既然是面向Embedded的,Real-Time自然是要用;Component-based Microkernel;Power Management,这些也都是目前OS研究的一些Hotopic.
5, Coyotos 首先,Coyotos不是L4,但是Coyotos和L4之间的关系之密切远远胜过了其他微内核和L4之间的关系。比如Fast IPC, Capability-Based OS, IDL。Coyotos是KeyKOS和EROS(Extremely Reliable OS)的改进版本,从EROS的名称或许可以看出,这个系统和以上的系统有些不同,它强调reliable,所以EROS刚开始的时候,被应用于一些军用系统,但是后来发现Synchronous IPC会导致一个Denial of Service的Bug,这个Bug存在于所有基于Synchronous IPC的系统中,当然也包括所有的L4,在Vulnerability In Synchronous IPC design中有详细的描述。当然,现在这个Bug也已经被修正。Coyotos的目标应该是提供具有军用级别的(EAL7 =Evaluation Assurance Level)的microkernel, 它使用一种新的称为BitC(类似于Haskell的Safety Language)来实现这个系统,而且整个系统采用一种类似于OOP的形式(所有的L4系统都是OOP的,Fiasco和Pistachio都是C++的)。Coyotos is still persistant and transactional microkernel OS。从概念上来讲,Coyotos更为先进,Capability也是在该系统上面首次被应用,所以有志于研发3rd Microkernel的不妨多多关注这个Microkernel.
6,Mungi Mungi是ERTOS小组开发的persistant SASOS (single address space operating system), 这个项目已经停止。但是作为第一个利用L4/Microkernel来开发不同类型的OS,仍然可以给我们提供很多新的idea,尤其是persistant,即使到目前为止,应该有值得研究的价值。http://www.coyotos.org/官网上面有很多该Microkernel的设计文档,值得一看。
7, M. D. Bennett 《A Kernel For IMA Systems》 这是University of York的以为PH.D基于L4尝试构建IMA系统,IMA全程是Integrated_Modular_Avionics,也就是面向航空航天控制的系统,这也是我能找到的基于L4所作的safety critical system的唯一一次尝试,因为我自己是倾向于作这个方向的,所以列举这个Kernel在这里。因为University Of York是safety critical system的大本营,所以这篇paper应该不错。
8, Genode OS Framework. 一个recursive hierarchical constructive os framework. 目前基于L4/Fiasco开发,主页: genode.org
发表评论
-
关于2的补码
2013-04-16 11:40 1124from : http://www.ruanyifeng.co ... -
睡眠和休眠有什么区别?
2012-12-08 01:01 1167到底用睡眠和休眠, ... -
MMU结构以及工作原理
2012-11-25 00:15 1367MMU的大名,早就听说了,可是一直不知道它是怎么工作的,前几月 ... -
Thread-Specific Data 注:相当于线程内的全局变量,可减少线程内调用其他函数的变量数
2012-11-18 01:20 1403Linux多线程编程中引入了Thread-Specific D ... -
简单的RPC编程实践——HelloWorld的实现
2012-11-13 01:39 1724近期课程的作业需要 ... -
微内核(microkernel)相关
2012-11-10 22:50 1761from : http://www.yandong.or ... -
Linux模块编程
2012-11-10 12:38 606Linux模块简介 首先这个module不同于m ... -
这场官司让BSD错过了机会,让linux在应用广泛度上超越了它
2012-11-10 00:50 120170年代末,在Unix发展到 ... -
主存与Cache的地址映像
2012-10-02 20:14 1488在线课件:http://210.44.176.183/jsjx ... -
满二叉树及完全二叉树的定义
2012-09-25 10:39 1371满二叉树:除了叶节点,每个父亲节点都有两个子树的,满满的二叉树 ... -
LINUX进程, 线程
2012-09-08 12:55 642http://shaohui.me/archives/256 ... -
linux线程浅析
2012-09-08 12:32 832http://hi.baidu.com/_kouu/item/ ... -
Linux进程-进程的创建
2012-09-07 23:07 1636今天学习了Linux的进程 ... -
Byte位元组单位-KB KiB MB MiB GB GiB区别
2012-09-04 16:48 2457一般而言大部份都只知道KB、MB、GB、TB…等, 倒是 ... -
内存分段机制
2012-09-03 09:24 1140转:http://book.51cto.com/art/ ... -
Linux内核学习之分段机制
2012-09-03 09:21 1064转:http://www.linuxidc.com/linux ... -
GDT与LDT的关系
2012-09-02 17:13 1308转:http://hi.baidu.com/bluewi ... -
分页和分段内存的区别
2012-09-01 01:44 3541转:http://www.cnhonkerarmy.com ... -
流水线、超流水线、超标量技术对比
2012-08-25 08:20 1049http://blog.csdn.net/do2jian ... -
哈佛结构与冯.诺依曼结构的区别
2012-08-21 14:28 969过去知道计算机的体系结构分为哈佛结构与冯.诺依曼结构,但并没有 ...
相关推荐
本文将重点介绍微内核中的L4操作系统,以及它的实现之一——Fiasco。 微内核架构主张将操作系统的基本服务最小化,仅包含基本的通信机制和设备驱动,其他服务如文件系统、网络协议等则作为独立的服务进程运行在用户...
### L4微内核介绍 #### 一、微内核概览 微内核作为一种操作系统设计模式,旨在将操作系统的核心功能精简至最小限度,并将其他服务移至用户空间执行。这种方式与传统的单块内核(Monolithic Kernel)形成鲜明对比,...
fiasco源码 Fiasco.OC + L4Re core
详细说明了编译l4linux fiasco l4re,以及如何在qemu上运行l4linux fiasco ,希望对大家有帮助
L4技术是一种微内核操作系统架构,以其高效的性能、模块化的设计、以及强大的隔离性在操作系统领域中占有一席之地。L4微内核的名称来源于它是一个第四代微内核,相比于早期的微内核,L4提供了更高的性能和更简洁的...
L4微内核操作系统家族,特别是Fiasco实现,是微内核设计的一个例子。在多核架构上扩展L4,需要对原有的调度策略、内存管理和通信机制进行改造,以充分利用多核的并行性。通过这样的设计,不仅可以满足Intel等公司...
fiasco内核源码 Fiasco.OC kernel + preprocess tool
Fiasco.OC微内核存储库该存储库包含L4Re微内核(也称为Fiasco.OC微内核)的源代码。 用户级别的应用程序不包含在此软件包中。 Fiasco用于构建灵活的系统,这些系统支持在一个系统上同时运行实时,分时和虚拟化工作...
FIASCO法筛选铜锈环棱螺微卫星标记,黄巧,顾钱洪,2011年9-10月,从武昌南湖和江苏太湖分别采集了50个鲜活的铜锈环棱螺(Bellamya aeruginosa)和10~20个不等的铜锈环棱螺(Bellamya aeruginosa),梨形�
目前,物联网情景下的使用Linux以及Unix系统存在不适用的问题,在该环境下,需要使用物联网专用的操作系统去访问和控制相应的硬件设备,硬件的使用离不开硬件驱动的支撑。为减小驱动重新开发带来的弊端,提出了一种...
例如:The project turned into a fiasco due to poor planning.(由于规划不佳,项目变成了一个大失败。) - **wryly**:这个词是副词,表示“挖苦地”或“带着讽刺的微笑”。例如:She replied wryly, knowing ...
应用程序接口搜索(请求:字符串):承诺<GeniusSearchResult> genius.search('adoration of the magi') .then(console.log)// =>[ { artist: 'Lupe Fiasco (Ft. Crystal Torres)', title: 'Adoration Of The Magi',...
1997 - 2003 Sergio A....and fixed it. Some minor bugs that I don‘t remember fixed.- Added MIME-compliant base64 support (not for use by now). Added examples.0.9.2.1b- Fixed a bug when send a mail and ...
7. **初始化顺序问题**(Static Initialization Order Fiasco):C++ 中的一个常见问题是静态对象的初始化顺序问题,osdevc_libglobal 可能解决了这个问题,通过提供一种明确的初始化顺序,保证了程序的稳定运行。...