openKylin论坛
标题:
内核
[打印本页]
作者:
笨鸟弟弟
时间:
2013-11-17 08:04
标题:
内核
[nèi hé]
内核是操作系统最基本的部分。它是为众多应用
程序
提供对计算机
硬件
的安全访问的一部分
软件
,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。内核的分类可分为
单内核
和双内核以及
微内核
。严格地说,内核并不是
计算机系统
中必要的组成部分。
基本简介
2历史发展
3内核分类
3.2
微内核
3.4
外内核
4优点
4.2
源代码管理
4.4
代码覆盖分析
内核,是一个
操作系统
的核心。是基于硬件的第一层软件扩充,提供操作
系统
的最基本的
功能
,是操作系统工作的基础,它负责管理系统的进程、
内存
、
内核体系结构[1]设备
驱动
程序、文件和
网络
系统,决定着系统的性能和稳定性。[2]
现代
操作系统
设计中,为减少系统本身的开销,往往将一些与
硬件
紧密相关的(如中断处理程序、
设备驱动程序
等)、基本的、公共的、运行频率较高的模块(如时钟管理、
进程
调度等)以及
关键
性数据结构独立开来,使之常驻内存,并对他们进行保护。通常把这一部分称之为操作系统的
内核
。[3]
程序可以直接地被调入
计算机
中执行,这样的设计说明了设计者不希望提供任何硬件
抽象
和操作系统的支持,它常见于早期计算机系统的设计中。最终,一些辅助性程序,例如程序加载器和
调试器
,被设计到机器核心当中,或者固化在只读
存储器
里。这些变化发生时,操作系统内核的
概念
就渐渐明晰起来了。[4]
(概述图片来源:[5])
2历史发展
Linux的第一个公开版本是1991年10月的0.02版本,两个月以后,在1991年12月,
Linux
发布了0.11版本,这是第一个可以不依赖于
Minix
就可以使用的独立内核。
0.12版本发布一个月以后,在3月,
版本号
跳到了0.95,反映出系统正变得成熟,不仅如此,直到两年后,也就是1994年3月,具有
里程碑
意义的1.0.0才完成。
大约从这时起开始使用两“路”编号方法标注内核的开发,偶数号的内核
理解linux内核[6](比如1.0、2.2、2.4、2.6)是稳定的,“产品”型号,同时,奇数号的内核版本(1.1、2.3)是前沿的或者“发展中的”内核。直接最近,一个稳定的内核发布以后几个月就开始新内核的开发工作。然而,2.5的开发工作是在2.4完成后几十个月以后才开始的。[7]
post-halloween文档的大部分讨论内容是用户需要注意的主要改变,以及需要更新的系统工具(为了利用它们)。关心这一信息人的主要是那些期望提前了解2.6内核中有哪些内容的Linux发行商,还有终端用户,这可以让他们确定为了能利用新部件是否有需要升级的程序。
KernelJanitors项目保持了一个列表,内容是需要修复的较小
缺陷
和解决方法。这些缺陷解决方法中大部分是由于向内核打较大的补丁时需要改动很多部分代码而导致的,比如有些地方会影响设备驱动程序。那些新近从事内核开发的人开始时的工作可以选择列表中的条目,这样让他们可以通过小项目学习如何编写内核代码,同时有机会为社区做出贡献。
还有,在另一个预发布的项目中,JohnCherry追踪了在对每个已经发布的内核版本进行
编译
时发现的错误和警告。这些编译统计数字随着时间的流逝一直持续下降,而且,以系统的形式来发布这些结果使得所取得的进展一目了然。在很多情况下,可以像使用KernelJanitors列表一样来利用这些警告和错误消息中的一部分,因为编译错误通常是由小的缺陷引起的,需要一些努力去修复。
最后,还有AndrewMorton的“must-fix”列表。由于他已经被选定为2.6内核发布后的维护者,他运用他的特权概括地列出了那些他认为在最终的2.6内核发布前最迫切需要解决方案的问题。must-fix列表中包含了内核Bugzilla系统中的缺陷,需要完成的部件,以及其他已知的问题,这些问题如不解决将阻碍2.6发布。这一信息可以帮助指明在新内核发布前还需要哪些步骤;对那些关心这一万众期待的2.6内核发布何时能完成的人来说,它还可以提供有价值的信息。[8]
3内核分类
单内核
单内核
(Monolithic kernel),是个很大的
进程
。它的内部又能够被分为若干模块(或是层次或其他)。但是在运行的时候,它是个单独的二进制大映象。其模块间的通讯是通过直接调用其他模块中的函数实现的,而不是消息传递。 [9]
单内核结构在
硬件
之上定义了一个高阶的抽象界面,应用一组原语(或者叫
系统调用
)来实现操作系统的功能,例如
进程管理
,文件系统,和
存储管理
等等,这些功能由多个运行在核心态的模块来完成。
尽管每一个模块都是单独地服务这些操作,内核代码是高度集成的,而且难以编写正确。因为所有的模块都在同一个
内核空间
上运行,一个很小的bug都会使整个
系统崩溃
。然而,如果开发顺利,单内核结构就可以从运行效率上得到好处。
很多现代的单内核结构内核,如
Linux
和
FreeBSD
内核,能够在运行时将
Linux内核编程指南第3版[10]模块调入执行,这就可以使扩充内核的功能变得更简单,也可以使内核的核心部分变得更简洁。
单内核结构是非常有吸引力的一种设计,由于在同一个地址空间上实现所有低级操作的系统控制代码的复杂性的效率会比在不同地址空间上实现更高些。 单核结构正趋向于容易被正确设计,所以它的发展会比微内核结构更迅速些。
单内核结构的例子:传统的UNIX内核----例如
伯克利大学
发行的版本,Linux内核。[11]
微内核
微内核(Microkernelkernel)结构由一个非常简单的硬件抽象层和一组比较关键的原语或系统调用组成,这些原语仅仅包括了建立一个系统必需的几个部分,如
线程
管理,地址空间和
进程间通信
等。
微核的目标是将
系统服务
的实现和系统的基本操作规则分离开来。例如,进程的输入/输出锁定服务可以由运行在微核之外的一个服务组件来提供。这些非常模块化的用户态服务器用于完成操作系统中比较高级的操作,这样的设计使内核中最核心的部分的设计更简单。一个服务组件的失效并不会导致整个系统的崩溃,内核需要做的,仅仅是重新启动这个组件,而不必影响其它的部分
微内核将许多OS服务放入
分离
的
进程
,如文件系统,
设备驱动程序
,而进程通过消息传递调用OS服务。微内核结构必然是多线程的,第一代微内核,在核心提供了较多的服务,因此被称为'胖微内核',它的典型代表是
MACH
。它既是GNU HURD也是APPLE SERVER OS的核心,可以说,蒸蒸日上.第二代为
微内核
只提供最基本的
OS
服务,典型的OS是QNX,QNX在理论界很有名,被认为是一种先进的OS。[9]
微内核
只提供了很小一部分的硬件抽象,大部分功能由一种特殊的用户态
程序
:
服务器
来完成。微核经常被用于
机器人
和医疗器械的嵌入式设计中,因为它的系统的关键部分都处在相互分开的,被保护的存储空间中。这对于单核设计来说是不可能的,就算它采用了运行时加载模块的方式。
微内核的例子:
AIX
,
BeOS
,L4微内核系列,.
Mach
中用于GNU Hurd和
Mac OS X
,
Minix
,MorphOS,
QNX
,RadiOS,VSTa。[11]
混合内核
混合内核
它很像微内核结构,只不过它的的组件更多的在
核心态
中运行
freebsd内核详解[12],以获得更快的执行速度。
混合内核实质上是微内核,只不过它让一些微核结构运行在用户空间的代码运行在内核空间,这样让内核的运行效率更高些。这是一种妥协做法,设计者参考了微内核结构的系统运行速度不佳的理论。然而后来的实验证明,纯微内核的系统实际上也可以是高效率的。大多数
现代操作系统
遵循这种设计范畴,微软公司开发的
Windows
操作系统就是一个很好的例子。另外还有XNU,运行在苹果Mac OS X上的内核,也是一个混合内核。
混合内核的例子: BeOS 内核 ,
DragonFly BSD
,ReactOS 内核
Windows NT
、
Windows 2000
、
Windows XP
、
Windows Server 2003
以及
Windows Vista
等基于NT技术的操作系统。[13]
外内核
外内核系统,也被称为纵向结构操作系统,是一种比较极端的设计方法。[14]
外内核
这种内核不提供任何硬件抽象操作,但是允许为内核增加额外的
运行库
,通过这些运行库
应用程序
可以直接地或者接近直接地对硬件进行操作。
它的设计理念是让
用户程序
的设计者来决定硬件接口的设计。外内核本身非常的小,它通常只负责系统保护和
系统资源
复用相关的服务。
传统的内核设计(包括单核和
微核
)都对硬件作了抽象,把硬件资源或设备驱动程序都隐藏在硬件抽象层下。比方说,在这些系统中,如果分配一段物理
存储
,应用程序并不知道它的实际位置。
而外核的目标就是让应用程序直接请求一块特定的
物理
空间,一块特定的
磁盘
块等等。系统本身只保证被请求的资源当前是空闲的,应用程序就允许直接存取它。既然外核系统
freebsd内核详解[15]只提供了比较低级的硬件操作,而没有像其他系统一样提供高级的硬件抽象,那么就需要增加额外的运行库支持。这些运行库运行在外核之上,给用户程序提供了完整的功能。
理论上,这种设计可以让各种操作系统运行在一个外核之上,如Windows和Unix。并且设计人员可以根据运行效率调整系统的各部分功能。
外核设计还停留在研究阶段,没有任何一个
商业系统
采用了这种设计。几种概念上的操作系统正在被开发,如
剑桥大学
的Nemesis,
格拉斯哥大学
的Citrix系统和瑞士计算机科学院的一套系统。
麻省理工学院
也在进行着这类研究。[13]
4优点
应用测试
测试背景
过去,
Linux内核
测试方法围绕开放源代码开发模型进行。由于代码一经发布后就公开给其他开发者进行审查,因此从来没有出现过一个与其他形式的软件开发类似的正式的验证周期。这
如何编译一个内核[24]种方法背后的理论依据是“TheCathedralandtheBazaar”中所谓的“Linus法则”(请查阅参考资料以获得相关的参考),这一法则的内容为“众人的眼光是雪亮的”。换句话说,高力度的审查可以找出大部分真正的大问题。
然而实际上,内核有很多
复杂
的相互联系。即使进行了足够力度的审查,还是会漏过很多严重的缺陷。此外,最新的内核一经发布,终端用户可以(也经常是)下载并使用。2.4.0发布时,社区中很多人都提议进行更有组织的测试,以保证特定测试和代码审查的强度。有组织的测试包括运用
测试计划
、测试过程中的可重复性等等。使用所有的三种方法比最初只使用两种方法会带来更高的代码质量。[25]
测试项目
最早对Linux开始进行有组织测试的贡献者是Linux测试项目(LinuxTestProject,LTP)。这个项目的目的是通过更有组织的测试方法提高Linux的质量。这个测试项目的一部分是自动测试套件的开发。LTP开发的主要测试套件也叫做Linux测试项目。2.4.0内核发布时,LTP测试套件只有大约100个测试。随着2.4和2.5版本Linux的发展与成熟,LTP测试套件也正在发展和成熟。当前,Linux测试项目包括超过2000个测试,而且这个数字还在增长。[26]
回归测试
在2.5的开发周期中,Linux测试项目所采用的另一个
项目
是,用
LTP
测试套件对Linux内核执行持续多日的回归测试。人们用BitKeeper创建了一个实时的、集中的档案库,以随时可以获得Linux内核的
快照
。在没有使用BitKeeper和快照时,测试人员不得不等到内核发布后才可以开始测试。内核只要发生了改变,测试人员就可以进行测试。
使用自动化工具来执行持续多日的回归测试的另一个优点是,和上一次测试相比变化较小。如果发现了一个新的回归缺陷,通常会容易地检测出这个缺陷可能是哪个改变导致的。
同样,由于是最新的改变,因此它在开发者的脑海中印象还比较深——希望这能让他们更容易地记起并修订相应的代码。或许Linus法则应该有这样一个结论,有一些缺陷比其他缺陷更容易被发现,因为那些正是持续多日的内核回归测试所发现并处理的那些。在开发周期中和实际发布之前能够每天进行这些测试,这就使那些只关注完整发行版本的测试者可以将精力集中于更严重和耗时的缺陷。[27]
可扩展测试
另外一个名为开放源代码开发实验室(OpenSourceDevelopmentLabs,OSDL)的团队也为Linux测试做出了重要的贡献。2.4内核发布后不久,OSDL创建了一个叫做可扩展测试平台(ScalableTestPlatform,STP)的系统。STP是一个自动化的测试平台,让开发者和测试者可以运行OSDL硬件之上的系统所提供的测试。开发者甚至可以使用这个系统来测试他们自己的针对内核的补丁。可扩展测试平台简化了测试的步骤,因为
STP
可以构建内核、设置测试、运行测试,并收集结果。然后得到结果以进行深入地比较。很多人无法接触大型系统,比如具有8个处理器的SMP机器,而通过STP,任何人都可以在像这样的大型系统上运行测试,这个系统(STP)的另一个好处就在于此。[22]
追踪缺陷
自从2.4发布以来,对Linux内核的有组织测试最大的改进之一是缺陷追踪。过去,在Linux内核中发现的缺陷会报告给Linux内核邮件列表,报告给特定组件或者特定体系的邮件列表,或者直接报告给维护发现缺陷的那部分代码的个人。随着开发和测试Linux的人数的增加,这个系统的不足之处很快就暴露了出来。在以前,除非人们对缺陷的报告可以惊人地维持下去,缺陷经常被遗漏、遗忘或者忽略。
OSDL安装了一个缺陷追踪系统,来报告和
追踪
Linux内核的缺陷。系统经过了配置,这样当某个组件的缺陷被报告时,那个组件的维护者就会得到通知。维护者既可以接受并修复那个缺陷,或重新指定缺陷(如果最终确定实际上那是内核另外一部分的缺陷),也可以排除它(如果最终确定并不是真正的缺陷,比如错误配置的系统)。报告给邮件列表的缺陷还有丢失的危险,因为越来越多的
电子邮件
涌向那个列表。然而,在缺陷追踪系统中,始终有对每一个缺陷及其当前状态的记录。
转载
http://baike.baidu.com/link?url= ... v9wZLKfowi2c2mZjFWf
作者:
tm529140865
时间:
2013-11-17 10:26
linux下驱动和内核有相关性,linux下也可以用闭源驱动,但为什么绝大多数时候就是比不上windows下的驱动性能!
作者:
笨鸟弟弟
时间:
2013-11-17 10:41
tm529140865 发表于 2013-11-17 10:26
linux下驱动和内核有相关性,linux下也可以用闭源驱动,但为什么绝大多数时候就是比不上windows下的驱动性能 ...
这个问题很难回答你,,自己去感悟吧,,
欢迎光临 openKylin论坛 (https://forum.openkylin.top/)
Powered by Discuz! X3.3