1、- 0 -计算机操作系统论文学 院 : 数 学 与 计 算 机 科 学 学 院专 业 : 2010 级 计 算 机 科 学 与 技 术 2 班姓 名 : 罗 宗 孙 丽 欣 黄 思 宁 李 凌 茜日 期 : 2013 年 4 月 8 日- 1 -计 算 机 操 作 系 统 论 文 微 内 核 操 作 系 统引 言 : 操 作 系 统 ( Operating System, 简 称 OS) 是 计 算 机 系 统 的 重 要 组 成 部分 , 是 一 个 很 重 要 的 系 统 软 件 , 它 负 责 管 理 计 算 机 系 统 的 软 硬 件 资 源 和 整 个 计 算机 的 工 作 流 程
2、, 协 调 系 统 部 件 之 间 、 系 统 与 用 户 之 间 、 用 户 与 用 户 之 间 的 关 系 。但 是 , 随 着 操 作 系 统 的 新 技 术 不 断 出 现 功 能 不 断 增 加 , 有 很 多 网 络 攻 击 方 法 都 是从 寻 找 操 作 系 统 的 缺 陷 入 手 的 , 互 联 网 上 传 统 Unix 操 作 系 统 就 具 有 先 天 的 安 全隐 患 , 于 是 产 生 很 多 修 补 手 段 来 解 决 它 上 面 的 安 全 问 题 。 但 是 由 于 Unix 本 身 结构 的 原 因 , 在 很 多 修 补 方 案 下 , 仍 然 存 在 系
3、统 隐 患 。本 文 介 绍 了 一 些 关 于 微 内 核 的 相 关 知 识 , 可 以 有 助 于 从 根 本 上 解 决 操 作 系 统终 端 的 安 全 问 题 。关 键 词 : 操 作 系 统 微 内 核 安 全 性一 、 相 关 概 念内 核 是 操 作 系 统 的 核 心 代 码 , 且 运 行 于 内 核 模 式 下 。 单 内 核 ( Monolithic kernel) 是 内 核 一 种 组 织 方 法 , 内 核 的 组 织 方 法 有两 种 : 单 内 核 和 微 内 核 。 。如 果 内 核 的 所 有 模 块 都 在 同 一 进 程 中 , 就 称 为 单 内
4、核 ; 如 果 内 核 的 模 块 在 不同 进 程 中 , 就 称 为 微 内 核 。强 内 核 其 实 是 单 内 核 的 一 种 称 法单 内 核 是 一 个 很 大 的 进 程 。 它 的 内 部 又 可 以 被 分 为 若 干 模 块 ( 或 者 是 层 次 或其 它 ) 。 但 是 在 运 行 的 时 候 , 它 是 一 个 独 立 的 二 进 制 大 映 象 。 其 模 块 间 的 通 讯 是通 过 直 接 调 用 其 它 模 块 中 的 函 数 实 现 的 , 而 不 是 消 息 传 递 。微内核(英文中常译作-kernel 或者 micro kernel) 。是一种能够 -
5、2 -微内核提供必要服务的操作系统内核;其中这些必要的服务包括任务,线程,交互进程通信(IPC,Inter Process Communication)以及内存管理等等。所有服务(包括设备驱动)在用户模式下运行,而处理这些服务同处理其他的任何一个程序一样。因为每个服务只是在自己的地址空间运行。所以这些服务之间彼此之间都受到了保护。二、微内核操作系统的基本概念微内核操作系统(Microkernel Operating System)结构,是 20 世纪 80 年代后期发展起来的。现代操作系统设计中的一个突出思想是把操作系统中更多的成分和功能放到更高的层次(及用户模式)中去运行,而留下一个尽量小的
6、内核,用它来完成操作系统最基本的核心功能,这种技术变成为微内核技术。由于它能有效地支持多处理机运行,故非常适用于分布式系统环境。当前比较流行的、能支持多处理机运行的操作系统,几乎全部都采用了微内核结构,如卡耐基梅隆大学研制的 Mach OS,便属于微内核结构操作系统;又如当前广泛使用的Windows 操作系统,也采用了微内核结构。微内核包含的主要成分有:1)中断和异常处理机制;2)进程间通信机制;3)处理及调度机制;4)有关服务功能的基本机制。我们也可以从下面四个方面,对微内核操作系统进行描述。1) 足够小的内核在微内核操作系统中,内核是指精心设计的、能实现现代 OS 最基本的核心功能的部分。
7、微内核并非是一个完整的 OS,而只是操作系统中最基本的部分,它通常用于: 实现与硬件紧密相关的处理; 实现一些较基本的功能; 负责客户和服务器之间的通信。- 3 -它们只是为构建通用 OS 提供一个重要基础,这样就可以确保把操作系统内核做得很小。2) 基于客户/服务器模式由于客户/服务器(Client/Server)模式,具有非常多的优点,故在单机微内核操作系统中几乎无一例外地都采用客户/服务器模式,将操作系统中最基本的部分放入内核中,而把操作系统的绝大部分功能都放在微内核外面的一组服务器(进程) 中实现。例如用于提供对进程(线程)进行管理的进程(线程) 服务器,提供虚拟存储器管理功能的虚拟存
8、储器服务器,提供 I/O 设备管理的 I/O 设备管理服务器等,它们都是被作为进程来实现的,运行在用户态,客户与服务器之间是借助微内核提供的消息传递机制来实现信息交互的。3) 应用 “机制与策略分离”原理在现代操作系统的结构设计中,经常利用“机制与策略分离”的原理来构造 OS结构。所谓机制,是指实现某一功能的具体执行机构。而策略,则是在机制的基础上,借助于某些参数和算法来实现该功能的优化,或达到不同的功能目标。通常,机制处于一个系统的基层,而策略则处于系统的高层。在传统的 OS 中,将机制放在 OS 的内核的较低层,把策略放在内核的较高层次中。而在微内核操作系统中,通常将机制放在 OS 的微内
9、核中。正因为如此,才有可能将内核做得很小。4) 采用面向对象技术操作系统是一个极其复杂的大型软件系统,我们不仅可以通过结构设计来分解操作系统的复杂度,还可以基于面向对象技术中的“抽象”和“隐蔽”原则控制系统的复杂性,再进一步利用“对象” 、 “封装”和“继承”等概念来确保操作系统的“正确性” 、 “可靠性” 、 “易修改性” 、 “易扩展性”等,并提高操作系统的设计速度。正因为面向对象技术能带来如此多的好处,故面向对象技术被广泛应用于现代操作系统的设计中。3、微内核操作系统结构- 4 -在微内核结构下,系统的核心只有一个消息调度核心,所有的其他模块通过消息与其他模块互相联系,而通信通过消息调度
10、核心来传输。这样,真正具有系统用户权限的程序只有这个消息调度核心了,它是直接同各种硬件大交道的模块,所有的其他系统服务,如文件系统、内存管理、进程调度都运行在它之上。这样,系统权限的程序也只有 消息调度模块 ,其他的模块可以缩小它在原来 Unix系统中的权限了,就象一个国家的军队一样,各个军官拥有他本职范畴内的权力,只有非常少数军官拥有特权(这种特权军官必须存在,否则无法指挥大局) ,这样的军队系统被世界范围内公认为是最稳固的。这种操作系统的结构如图 1,文件管理模块内存管理模块进程管理模块A CB消息调度模块(内核层)I/O 管理模块应用程序管理模块图 1,具有安全权限限制的微内核操作系统结
11、构时钟、中断信号 I/O 硬件端口数据文件管理模块内存管理模块进程管理模块A CB消息调度模块(内核层)I/O 管理模块应用程序管理模块图 1,具有安全权限限制的微内核操作系统结构时钟、中断信号 I/O 硬件端口数据- 5 -在图 1 中,只有消息调度模块(内核层)具有系统权限,其他的服务与模块只有使其可以正常工作的最小权限。应用程序管理模块是以前的 Unix/Linux 系统所没有的,他主要负责应用程序的权限管理,A、 B、C 分别是各个应用程序。下面分别对各个模块的结构与功能作一个简单说明。消息调度模块:这是整个操作系统中具有最高系统权限的模块,它在系统中无所不能,负责管理各种硬件资源,处
12、理中断,I/O 端口,并把这些消息发送给相应的处理模块。它也是其他模块间相互通信的中转,也是整个系统的内核。这是,系统的内核不做任何与服务有关的操作,它只是一个消息转发者,也只有它才会和直接硬件打交道。消息调度模块拥有最高的系统权限,但是它不完成任何系统功能,这样也屏蔽了对系统恶意攻击者取得其他权限后,从而攻击消息调度模块的可能。进程管理模块、文件管理模块、内存管理模块、I/O 管理模块:与传统 Unix 系统中相应的功能模块类似,完成相应的功能。但是在微内核操作系统中,文件管理、内存管理、I/O 管理模块不在具有系统用户权限,而只具有与用户程序相同的执行权限,这样可以至少保证文件管理、内存管
13、理、I/O 管理的程序错误不会涉及到系统级的安全问题。进程管理模块被赋予比消息调度模块次一级的系统权限,这是因为可以运行多个进程管理模块,产生多个虚拟机。从原则上看,进程调度模块是代码比较简单,不容易出错的模块。进程管理模块中同样包括权限过滤的代码,这段代码必须保证完全真确,才能作为其他模块正常权限工作的保证。所以在保证程序质量的前提下,进程调度模块并不会轻易的受到攻击。由于其他系统服务模块已经没有系统权限了,所以安全问题已经好转很多。文件管理模块由于涉及文件操作,需要访问硬件,所有的操作由进程管理模块过滤,会很容易的去掉那些不符合权限要求的文件请求。在内存管理模块中,应该加入栈越界的代码,而
14、不象传统 Unix那样不做任何边界检查,这样象那些用 Strcpy 又不喜欢进行边界检查的程序就在也- 6 -不会收到更改返回地址的攻击了。现在即使这段代码非常复杂,也不会象传统巨型内核的 Unix 那样轻易的导致系统崩溃。I/O 管理一般不会成为攻击对象,在微内核结构中,它更加不可能成为攻击对象了,因为 I/O 管理程序运行在普通用户级别上。图 2 是这几个模块的结构和具有的功能,应用程序管理模块:这是在微内核操作系统中新增加的模块,负责对用户应用程序进行管理。 应用程序管理模块 把应用程序请求的系统调用排队放入一个队列后,向消息调度模块发送,用户程序不由进程管理模块直接控制,有利与进程管理
15、模块的简单性,保证进程管理模块的代码质量。而且,应用程序模块的编程 Bug 不会波及其他重要的系统服务模块。应用程序管理模块不进行权限的检测与控制,但是它可能接收进程管理模块发来的权限错误消息。四、微内核的基本功能 1) 进程 (线程 )管理大多数的微内核 OS,对于进程管理功能的实现,都采用“机制与策略分离”的原理。例如,为实现进程(线程)调度功能,须在进程管理中设置一个或多个进程(线1、 为上层模块提供一个虚拟机2、 传统 Unix 的进程调度3、 对上层的请求进行权限过滤1、 传统 Unix 的内存管理2、 边界检查,栈管理,堆管理进程管理模块 内存管理模块1、传统 Unix 的文件管理
16、文件管理模块1、传统 Unix 的 I/O 管理I/O 管理模块图 2,进程管理、内存管理、文件管理、I/O 管理的结构功能- 7 -程)优先级队列;能将指定优先级进程(线程)从所在队列中取出,并将其投入执行。由于这一部分属于调度功能的机制部分,应将它放入微内核中。应如何确定每类用户(进程 )的优先级,以及应如何修改它们的优先级等,都属于策略问题,可将它们放入微内核外的进程(线程)管理服务器中。2) 低级存储器管理通常在微内核中,只配置最基本的低级存储器管理机制。如用于实现将用户空间的逻辑地址变换为内存空间的物理地址的页表机制和地址变换机制,这一部分是依赖于机器的,因此放入微内核。而实现虚拟存
17、储器管理的策略,则包含应采取何种页面置换算法,采用何种内存分配与回收策略等,应将这部分放在微内核外的存储器管理服务器中去实现。 3) 中断和陷入处理大多数微内核操作系统都是将与硬件紧密相关的一小部分放入微内核中处理。此时微内核的主要功能,是捕获所发生的中断和陷入事件,并进行相应的前期处理。如进行中断现场保护,识别中断和陷入的类型,然后将有关事件的信息转换成消息后,把它发送给相关的服务器。由服务器根据中断或陷入的类型,调用相应的处理程序来进行后期处理。在微内核 OS 中是将进程管理、存储器管理以及 I/O 管理这些功能一分为二,属于机制的很小一部分放入微内核中,另外绝大部分放在微内核外的各种服务
18、器中来实现。事实上,其中大多数服务器都比微内核大。这进一步说明了为什么能在采用客户/ 服务器模式后,还能把微内核做得很小的原因。五、操作系统采用微内核的优点 1、易于扩充单块式和层次式操作系统, 增加新的功能十分费力,而且由于新功能的增加, 会使系统非常庞大和臃肿, 越来越难于使用。微内核操作系统的大部分功能都由核外的服务器提供, 因此在必要时可以增强已有服务器的功能或增加新的服务器, 在这种情况下, 既能扩展 OS 的功能, 又不会使操作系统臃肿和难以使用。增加新的服务器和修改已有的服务器, 都不会触及微内核, 从而保证了系统的稳定性。2、易于移植- 8 -基于微内核的操作系统, 由于与各种
19、处理器相关的不同代码与微内核是相互隔离的, 因此对这种系统只需作少量的改变, 就可以把它从一种处理器移植到另一种处理器上去运行。3、提高系统的可靠性在这种操作系统中, 每个服务器在分配给它的内存分区内以独立的进程方式运行, 因此它不会受到其它进程的影响;单个服务器出现故障时也不会引起系统其它部分发生崩溃或出现各种错误。此外,由于服务器运行在用户态,它们不能直接访问硬件或修改内核的存储区,这也提高了系统的可靠性。4、提供多种操作环境 Carnegie-Mellon 大学开发的 Mach 操作系统, 通过把不同的 API 环境作为用户服务态进程, 实现了在同一操作系统中支持不同的、不相容的 UNI
20、X 应用程序编程接口。Windows NT、Workplace OS 等操作系统用同一方法实现了在其系统中提供多种不同操作系统环境的目标。5、适宜于分布计算模式当微内核从某个进程接收到信息, 或由自己直接处理, 或将此信息传送到另一进程。由于微内核无需知道此信息是来自本地进程还是远地进程, 因此这一信息传递方式为远程过程调用(RPC)提供了良好的基础。微内核的信息传递机制使得本地或远地服务对用户一目了然。6、有助于多处理器系统的实现共享内存多处理器系统, 在每个处理器上只需运行一个小小的微内核, 而无需运行整个操作系统。7、支持实时任务内核实时响应速度快,系统开销小。国际上以微内核为基础的实时
21、 OS 的研究工作非常活跃,微内核 OS 已成为嵌入式控制系统的首选操作系统, 并在军事应用上有很大的潜力。客户/服务器模型的微内核操作系统的这些优点符合计算机系统的发展趋势, 能较好地满足用户的需求, 因此它代表了 90 年代操作系统的发展潮流。但是, 这种操作系统也还存在某些缺点。例如:信息传递不象传统 OS 的功能调用那- 9 -样迅速。在客户需要调用服务器时, 就需要向它发送信息, 服务器收到信息后执行服务, 然后用信息的形式将得到的结果送回该客户。这种工作方式增加了许多开销, 使响应变慢。因此, 优化信息传递功能就成了基于客户/服务器模式的微内核操作系统取得成功的关键因素。六、微内核
22、操作系统存在的问题 应当指出,在微内核 OS 中,由于采用了非常小的内核,以及客户/服务器模式和消息传递机制,这些虽给微内核 OS 带来了许多优点,但由此也使微内核 OS 存在着潜在的缺点。其中最主要的是,较之早期 OS,微内核 OS 的运行效率有所降低。效率降低的最主要的原因是,在完成一次客户对 OS 提出的服务请求时,需要利用消息实现多次交互和进行用户/内核模式及上下文的多次切换。然而,在早期的OS 中,用户进程在请求取得 OS 服务时,一般只需进行两次上下文的切换:一次是在执行系统调用后,由用户态转向系统态时;另一次是在系统完成用户请求的服务后,由系统态返回用户态时。在微内核 OS 中,
23、由于客户和服务器及服务器和服务器之间的通信,都需通过微内核,致使同样的服务请求至少需要进行四次上下文切换。第一次是发生在客户发送请求消息给内核,以请求取得某服务器特定的服务时;第二次是发生在由内核把客户的请求消息发往服务器时;第三次是当服务器完成客户请求后,把响应消息发送到内核时;第四次是在内核将响应消息发送给客户时。实际情况是往往还会引起更多的上下文切换。例如,当某个服务器自身尚无能力完成客户请求,而需要其它服务器的帮助时,其中的文件服务器还需要磁盘服务器的帮助,这时就需要进行八次上下文的切换。在微内核中,大部分内核都作为独立的进程在特权状态下运行,它们通过消息传递进行通讯,在典型情况下,每个概念模块都有一个进程。因此,如果在设计中有一个系统调用模块,那么就必然有一个相应的进程来接收系统调用,并且能够执行系统调用的其他进程(或模块)通讯以完成所需任务。在这些设计中,微内核部分经常只不过是一个消息转发站:当系统调用模块要给文件系统模块发送消息时,消息直接通过内核转发。这种方式有助于实现模块间的隔离。 (某些时候,模块也可以直接给其它模块传递消息。 )在一些微内核的设计