logo资料库

QNXNeutrinoRTOS系统架构_个人整理中文版.pdf

第1页 / 共239页
第2页 / 共239页
第3页 / 共239页
第4页 / 共239页
第5页 / 共239页
第6页 / 共239页
第7页 / 共239页
第8页 / 共239页
资料共239页,剩余部分请下载后查看
思 维 腾 飞 刘 杰(hnthinker) 目录 第 1 章 QNXNeutrinoRTOS 的哲学 .......................................................................................... 1 第 2 章 QNXNeutrino 微内核 ................................................................................................... 9 第 3 章进程间通信(IPC) ................................................................................................... 44 第 4 章仪器化微内核 ............................................................................................................. 78 第 5 章多核处理 ..................................................................................................................... 84 第 6 章进程管理 ..................................................................................................................... 92 第 7 章动态链接 ................................................................................................................... 117 第 8 章资源管理 ................................................................................................................... 123 第 9 章文件系统 ................................................................................................................... 134 第 10 章 PPS .......................................................................................................................... 163 第 11 章字符 I/O. ................................................................................................................. 167 第 12 章网络架构 ................................................................................................................. 176 第 13 章词汇表 ..................................................................................................................... 224 第 1 章 QNXNeutrinoRTOS 的哲学 QNXNeutrinoRTOS 的主要目标是以稳健,可扩展的形式提供开放系统 POSIXAPI,适用 于各种系统-从微小的,资源受限的嵌入式系统到高端分布式计算环境。操作系统支持多个 处理器系列,包括 x86 和 ARM。对于任务关键型应用程序,强大的体系结构也是基础,因 此操作系统可以灵活,完整地使用 MMU 硬件。 当然,仅仅设定这些目标并不能保证结果。我们邀请您阅读此系统架构指南,以了解 我们的实施方法以及为实现这些目标而选择的设计权衡。当您到达本指南的末尾时,我们 认为您同意 QNXNeutrino 是同类产品中第一个真正提供开放系统标准,广泛可扩展性和高 可靠性的 OS 产品。 根据一个流行的神话,如果你划伤 POSIX 操作系统,你会在表面下找到 UNIX!因此, POSIXOS 太大而且不适合嵌入式系统。 但事实是,POSIX 不是 UNIX。尽管 POSIX 标准植根于现有的 UNIX 实践,但 POSIX 工作 组根据“接口而非实现”明确定义了标准。
思 维 腾 飞 刘 杰(hnthinker) 由于标准中的精确规范以及 POSIX 测试套件的可用性,非传统的 OS 体系结构可以提供 POSIXAPI 而无需采用传统的 UNIX 内核。比较任何两个 POSIX 系统,它们看起来非常相似- 它们将具有许多相同的功能,实用程序等。但是在性能或可靠性方面,它们可能与夜晚和 白天不同。建筑有所不同。 尽管 QNXNeutrino 具有明显的非 UNIX 架构,但它实现了标准的 POSIXAPI。通过采用微 内核架构,操作系统可以根据需要以易于按比例缩小的形式提供此 API,以实现实时嵌入 式系统或逐步扩展。 由于您可以通过包含或省略提供所需功能的特定进程来轻松扩展微内核操作系统,因 此您可以将单个微内核操作系统用于比实时执行程序更广泛的用途。产品开发通常采用创 建“产品线”的形式,连续模型提供更多功能。使用微内核操作系统的开发人员可以根据 需要通过添加文件系统,网络,图形用户界面和其他技术轻松扩展系统,而不是被迫为每 个版本的产品更改操作系统。 这种可扩展方法的一些优点包括: •便携式应用程序代码(产品线成员之间) •用于开发整个产品系列的常用工具 •便携技能的开发人员 •缩短产品上市时间 实时应用程序开发的一个常见问题是每个实时操作系统都倾向于配备自己的专有 API。在没有行业标准的情况下,由于对实时市场的调查经常显示内部专有操作系统的大量 使用,因此竞争市场的发展并不是一个不寻常的状态。POSIX 代表了统一这个市场的机 会。在众多 POSIX 标准中,嵌入式系统开发人员最感兴趣的标准是: •1003.1-定义用于进程管理,设备 I/O,文件系统 I/O 和基本 IPC 的 API。这包含可能被 描述为 UNIXOS 的基本功能的内容,作为许多应用程序的有用标准。从 C 语言编程的角度 来看,ANSIX3J11C 被认为是一个起点,然后管理进程,文件和 tty 设备的各个方面都超出 了 ANSIC 指定的范围。 •RealtimeExtensions-定义一组基本 1003.1 标准的实时扩展。这些扩展包括信号量,优 先级进程调度,信号的实时扩展,高分辨率定时器控制,增强的 IPC 原语,同步和异步 I/O,以及对实时连续文件支持的建议。 •线程-进一步扩展 POSIX 环境,以包括在给定地址空间内创建和管理多个执行线程。 •其他实时扩展-定义了对实时标准的进一步扩展。描述了附加中断处理程序等设施。 •应用程序环境配置文件-定义 POSIX 环境的几个 AEP(实时 AEP,嵌入式系统 AEP 等) 以适应不同的嵌入式功能集。这些配置文件表示具有/不具有文件系统和其他功能的嵌入式 OS。
思 维 腾 飞 刘 杰(hnthinker) 除了采用行业标准的任何“潮流”动机外,将 POSIX 标准应用于嵌入式实时市场还有 几个特定的优势: 多个操作系统源 硬件制造商不愿意选择单一来源的硬件组件,因为如果该源停止生产则存在隐含的风 险。出于同样的原因,制造商不应仅仅因为他们的应用程序源代码不能移植到其他操作系 统而与单一来源的专有操作系统联系在一起。 通过构建 POSIX 标准的应用程序,开发人员可以使用来自多个供应商的操作系统。只 要开发人员避免使用特定于操作系统的扩展,应用程序源代码就可以轻松地从平台移植到 平台,从 OS 移植到操作系统。 开发人员的可移植性 使用通用 API 进行嵌入式开发,具有一个实时操作系统经验的程序员可以直接将其技 能集应用于涉及其他处理器和操作系统的其他项目。此外,具有 UNIX 或 POSIX 经验的程序 员可以轻松地在嵌入式实时系统上工作,因为实时操作系统 API 的非实时部分已经是熟悉 的领域。 发展环境 即使在交叉托管的开发环境中,API 仍然与嵌入式系统基本相同。无论特定主机 (Linux,Windows,...)还是目标(x86,ARM),程序员都不必担心特定于平台的字节 序,对齐或 I/O 问题。 操作系统的主要职责是管理计算机的资源。系统调度应用程序中的所有活动,将文件 写入磁盘,通过网络发送数据等等-应尽可能无缝,透明地协同工作。 某些环境要求比其他环境更严格的资源管理和调度。例如,实时应用程序依赖于操作 系统来处理多个事件,并确保系统在可预测的时间限制内响应这些事件。操作系统响应越 快,实时应用程序就越能满足其截止日期的“时间”。 QNXNeutrinoRTOS 是嵌入式实时应用的理想选择。它可以扩展到非常小的尺寸,并提 供多任务,线程,优先级驱动的抢占式调度和快速上下文切换-嵌入式实时系统的所有基本 组成部分。此外,操作系统通过 POSIX 标准 API 提供这些功能;为了实现一个小系统,没有 必要放弃标准。 QNXNeutrino 也非常灵活。开发人员可以轻松定制操作系统以满足其应用程序的需 求。从具有少量小模块的微内核“裸机”配置到为数百名用户提供服务的全功能网络系 统,您可以自由地设置系统以仅使用您需要的资源来解决手头的工作。 QNXNeutrino 通过两个基本原则实现了其独特的效率,模块化和简单性: •微内核架构
思 维 腾 飞 刘 杰(hnthinker) •基于消息的进程间通信 流行语常常落后于时尚。无论条款是否合适,供应商都倾向于热情地将当天的流行语 应用于他们的产品。 术语“微内核”已成为时尚。尽管许多新操作系统被称为“微内核”(甚至是“超微 内核”),但如果没有明确的定义,这个术语可能并不意味着很多。 让我们试着定义这个词。微内核操作系统的结构是一个微小的内核,它提供了一组可 选协作进程所使用的最小服务,这反过来又提供了更高级别的操作系统功能。微内核本身 缺少文件系统和操作系统通常需要的许多其他服务;这些服务由可选流程提供。 设计微内核操作系统的真正目标不仅仅是“缩小”。微内核操作系统体现了提供操作 系统功能的方法的根本变化。模块化是关键,尺寸只是副作用。要将任何内核称为“微内 核”仅仅因为它恰好是小的就完全错过了这一点。由于微内核提供的 IPC 服务用于将操作 系统本身“粘合”在一起,因此这些服务的性能和灵活性决定了最终操作系统的性能。除 了那些 IPC 服务之外,微内核与实时执行者大致相当,无论是在提供的服务还是在实时性 能方面。 微内核与执行者的不同之处在于如何使用 IPC 服务通过附加的服务提供过程来扩展内 核的功能。由于 OS 是由微内核管理的协作流程团队实现的,因此用户编写的流程既可以 作为应用程序,也可以作为扩展特定于行业的应用程序的底层 OS 功能的流程。操作系统 本身变得“开放”并且易于扩展。此外,用户编写的 OS 扩展不会影响核心 OS 的基本可靠 性。 许多实时管理人员实施 POSIX1003.1 标准的难点在于,他们的运行时环境通常是单进 程,多线程模型,在线程之间具有不受保护的内存。这样的环境只是 POSIX 假设的多进程 模型的一个子集;它不能支持 fork()函数。相比之下,QNXNeutrino 充分利用 MMU 在受 保护的环境中提供完整的 POSIX 流程模型。 如下图所示,真正的微内核提供完整的内存保护,不仅适用于用户应用程序,还适用 于 OS 组件(设备驱动程序,文件系统等): 图 1:传统管理没有提供内存保护。
思 维 腾 飞 刘 杰(hnthinker) 图 2:在单片操作系统中,系统进程没有保护。 图 3:微内核提供完整的内存保护。 QNXOS 的第一个版本于 1981 年发布。随着每个连续的产品修订,我们将以前产品代 的经验应用到最新版本,即迄今为止最强大,可扩展的操作系统。我们相信,经过时间考 验的经验使 QNXNeutrinoRTOS 能够利用其消耗的有限资源提供其功能。 操作系统作为一个流程团队 QNXNeutrino 实时操作系统由一个管理一组协作过程的小型微内核组成。 如下图所示,结构看起来更像团队而不是层次结构,因为几个等级的“玩家”通过协 调内核相互交互。
思 维 腾 飞 刘 杰(hnthinker) 图 4:QNXNeutrinoRTOS 架构。 QNXNeutrino 充当一种“软件总线”,可让您在需要时动态插入/拔出 OS 模块。 一个真正的内核 内核是任何操作系统的核心。在某些系统中,“内核”包含许多功能,无论从哪个角 度来看,它都是整个操作系统! 但我们的微内核确实是一个内核。首先,就像实时执行者的内核一样,它非常小。其 次,它只致力于一些基本服务: •通过 POSIX 线程创建原语进行线程服务 •通过 POSIX 信号原语提供信号服务 •消息传递服务-微内核处理整个系统中所有线程之间所有消息的路由。 •通过 POSIX 线程同步原语的同步服务。 •调度服务-微内核使用各种 POSIX 实时调度策略调度线程以执行。 •定时器服务-微内核提供丰富的 POSIX 定时器服务。 •流程管理服务-微内核和流程管理器共同组成一个单元(称为 procnto)。进程管理器 部分负责管理进程,内存和路径名空间。
思 维 腾 飞 刘 杰(hnthinker) 与线程不同,微内核本身永远不会被安排执行。处理器仅在显式内核调用,异常或响 应硬件中断的结果下在微内核中执行代码。 系统流程 除强制性微内核/进程管理器模块(procnto)提供的服务外,所有 OS 服务都通过标准 进程处理。 配置丰富的系统可能包括以下内容: •文件系统管理员 •角色设备管理员 •本地网络管理员 •TCP/IP 系统进程与用户编写的进程 系统进程基本上与任何用户编写的程序无法区分-它们使用可用于任何(适当特权的) 用户进程的相同公共 API 和内核服务。 正是这种架构为 QNXNeutrinoRTOS 提供了无与伦比的可扩展性。由于大多数 OS 服务 都是由标准系统进程提供的,因此增加操作系统本身非常简单:只需编写新程序即可提供 新的 OS 服务。 实际上,操作系统和应用程序之间的界限可能变得非常模糊。系统服务和应用程序之 间唯一真正的区别是 OS 服务为客户端管理资源。 假设你已经编写了一个数据库服务器-这个过程应该如何分类?就像文件系统接受请求 (通过消息)来打开文件和读取或写入数据一样,数据库服务器也是如此。虽然对数据库 服务器的请求可能更复杂,但两个服务器非常相同,因为它们提供客户端用来访问资源的 API(由消息实现)。两者都是独立的进程,可以由最终用户编写,并根据需要启动和停 止。 数据库服务器可能在一次安装时被视为系统进程,在另一次安装时被视为应用程序。 真的没关系!重要的是,操作系统允许干净地实现这些过程,而无需修改操作系统本身的 标准组件。对于创建自定义嵌入式系统的开发人员,这提供了灵活性,可以在对应用程序 唯一有用的方向上扩展操作系统,而无需访问操作系统源代码。 设备驱动程序 设备驱动程序允许 OS 和应用程序以通用方式利用底层硬件(例如,磁盘驱动器,网 络接口)。
思 维 腾 飞 刘 杰(hnthinker) 虽然大多数操作系统要求设备驱动程序紧密绑定到操作系统本身,但 QNXNeutrino 的 设备驱动程序可以作为标准进程启动和停止。因此,添加设备驱动程序不会影响操作系统 的任何其他部分-驱动程序可以像任何其他应用程序一样进行开发和调试。 当多个线程同时运行时(如在典型的实时多任务环境中),操作系统必须提供允许它 们相互通信的机制。进程间通信(IPC)是将应用程序设计为一组协作进程的关键,其中每 个进程处理一个明确定义的整体部分。 操作系统提供了一组简单但功能强大的 IPC 功能,大大简化了开发由协作流程组成的 应用程序的工作。有关更多信息,请参阅进程间通信(IPC)(p.67)一章。 QNXNeutrino 作为消息传递操作系统 QNXNeutrino 是第一个利用消息传递作为 IPC 基本手段的商业操作系统。操作系统的大 部分功能,简洁性和优雅性在整个系统中完全集成了消息传递方法。 在 QNXNeutrino 中,消息是从一个进程传递到另一个进程的一个字节。操作系统对消 息的内容没有特殊含义-消息中的数据对于消息的发送者及其接收者具有意义,但对于其他 人而言。 消息传递不仅允许进程相互传递数据,还提供了同步多个进程执行的方法。当他们发 送,接收和回复消息时,进程会经历各种“状态变化”,这些变化会影响它们运行的时间 和持续时间。了解其状态和优先级后,微内核可以尽可能高效地调度所有进程,以充分利 用可用的 CPU 资源。因此,这种单一,一致的方法-消息传递-在整个系统中始终可操作。 实时和其他任务关键型应用程序通常需要可靠的 IPC 形式,因为构成此类应用程序的 过程是如此强烈地相互关联。QNXNeutrino 的消息传递设计强加的规则有助于为应用程序 带来顺序和更高的可靠性。 在最简单的形式中,局域网提供了一种在多个互连的计算机之间共享文件和外围设备 的机制。QNXNeutrino 远远超出了这个简单的概念,并将整个网络集成到一个单一的同类 资源中。 网络中任何计算机上的任何线程都可以直接使用任何其他计算机上的任何资源。从应 用程序的角度来看,本地或远程资源之间没有区别-不需要在应用程序中构建特殊设施以允 许它们使用远程资源。 用户可以访问网络上任何位置的文件,利用任何外围设备,并在网络上的任何计算机 上运行应用程序(前提是他们具有适当的权限)。进程可以在整个网络中的任何位置以相 同的方式进行通信。同样,操作系统的无处不在的消息传递 IPC 解释了这种流畅,透明的 网络。 单机模型
分享到:
收藏