浅析组件机制和操作系统的实现
2017-01-20代安明
代安明
摘 要:OSKit提供了各种功能模块。开发者可以根据自己的探究喜好或所要考虑的性能来使用这些模块,或用他们自己的模块来替代标准的OSKit模块。
关键词:组件机制;操作系统
组件技术是一种较新的软件开发技术。所谓组件,其实就是一种可部署软件的代码包,其中包括某些可执行模块。组件单独开发并作为软件单元使用,它具有明确的接口,软件就是通过这些接口调用组件所能提供的服务,多种组件可以联合起来构成更大型的组件乃至直接建立整个系统。
一、Oskit组件综述
Oskit的组件库提供了一般情况下更高层的功能,它通常只对外开放一些相关的公用调用接口。目标系统通过OSKit的面向对象的COM接口来和这些组件进行交互。OSKit所提供的组件包括:
(一)引导程序
大多数操作系统多有自身的启动加载机制,彼此互不兼容。这种加载机制的多样性并不是由于每个OS所要求的自举服务不同而引起,而是由于构建启动加载器的特定方式造成的。为了解决这个新问题,OSKit直接支持多启动标准,它的目的是提供一个简单而通用的启动加载器和OS内核间的接口,从而答应一个启动加载器加载任何兼容的OS。
在进行操作系统探究时,多启动标准非常有用,这其中的主要原因是启动加载器在加载内核自身的同时还具有加载附加文件或者启动模块的能力。在启动内核时,启动加载器提供给内核以下内容摘要:物理地址的列表、所有已加载的启动模块的大小,以及和每个模块相联系的由用户定义的字符串。这些启动模块和它们相联系的用户定义的字符串由内核解释。这样做的目的是为了通过提供内核启动时需要的数据,诸如初始化程序、设备驱动和文件系统服务器,来减轻内核启动的负担。
(二)核心支持库
OSKit核心支持库的主要用途是让客户OS更轻易访问硬件设施。它包含了一个较大的实用函数和符号定义的集合,该集合对于管理模式代码是非常具体的。在缺省情况下,核心支持库自动地做所有必要的工作,以便使处理器进入一个方便的执行环境,此时中断、陷阱、调试以及其他标准设施已经如预期的那样开始工作。该库在缺省情况下自动地定位所有随内核加载的启动模块,并保留它们所在的物理内存。接下来,应用程序可以很轻易使用它们。客户OS只需以标准C语言风格提供一个main()函数。一切都设置好以后,内核支持库将用所有参数和由启动加载器传递过来的环境变量来调用它。
(三)内存管理库
如同在一个标准C语言库中实现的malloc()一样,内存管理代码典型地用于用户空间。通常并不适用于内核。设备驱动经常需要分配特定类型的内存,并伴随具体的调整属性。为解决这些内存管理新问题,OSKit包含了两个简单而灵活的内存管理库。尽管这些库可以很轻易地应用在用户空间,但实际上它们是设计用来满足OS内核的需求。
(四)最小C语言库
成熟的OS内核一般都包含着相当数量的仅仅用来重新实现基本的C语言库函数如printf()和malloc()的代码。和此形成对比的是,OSKit提供了一个最小化C语言函数库,它围绕着最小化依靠性而不是最大化函数性和性能的原则来设计。
(五)调试支持
OSKit的一个最实用的好处是给定一个适当的硬件设置,它马上就能提供给OS开发者一个完全源代码级的内核调试环境。除了基本的调试器支持,OSKit也提供了一个内存分配调试库,它可以跟踪内存分配并检测一般的错误。这个库提供了和许多普通应用程序调试器相似的功能性,所不同的是它运行在由OSKit提供的最小内核环境中
(六)设备驱动支持
在OS开发和维护中最艰巨的一个任务是支持多种多样的I/O硬件。这些复杂的设备常会含有潜在的错误,而新硬件的发布又经常伴随着不兼容的软件接口。由于这些原因,OSKit采用了为现有内核开发的稳定的、经过充分测试的驱动程序。OSKit使用了一种封装技术,将现有的驱动程序代码基本上未加修改地合并到OSKit中。
(七)协议栈
OSKit提供了一个完整的TCP/IP网络协议栈。如同驱动程序一样,有关网络的代码也可以通过封装机制被合并进来。OSKit当前可以从Linux中获取网络设备驱动程序,它们是PC平台可获得的最大的免费资源。OSKit的网络组件继续于FreeBSD4.4,它通常被认为具有更多成熟的网络协议。这显示了使用封装机制将现有软件包装成灵活的组件的第二个优点摘要:即从不同的资源中获取最好的组件,并让它们一起被使用。
二、 结论
作为一个操作系统探究和开发的平台,OSKit大大减轻了操作系统探究和开发者的负担。它可以让开发人员避开复杂的底层,而把喜好集中和他们所感喜好的领域。开发者可以用自己编写的组件来取代OSKit中的部分组件,以满足自己特定的需要,从而丰富了操作系统的应用层。总之,OSKit满足了实际客户系统的需求,有助于操作系统的探究和开发。
参考文献:
[1]汤海京.基于面向对象操作系统开发平台(OSKit)的分析和程序设计.
[2]汤海京.OSKit的线程机制,2000年12月.