QNX简介

系统简介

QNX是一个分布式、可扩展、遵从POSIX规范的类Unix硬实时操作系统。
QNX为微内核的架构,微内核只提供进程调度、进程间通信、底层网络通信和中断处理四种服务。驱动程序、协议栈、文件系统、应用程序等都在微内核之外内存受保护的安全的用户空间内运行,组件之间能避免相互影响,在遇到故障时也能重启。

QNX系统架构图

QNX Neutrino通过两个基本的原则,达到了独一无二的有效性、模块化和简洁性:

  • 微内核架构
  • 基于消息的进程间通信

微内核架构

在微内核OS中,内核精简,只实现OS最基本的核心部分并提供相应的服务,基于这些服务可以扩展完整的OS功能。设计一个微内核OS的目标是模块化,而并非最小化。
微内核提供的IPC服务用于将操作系统本身“粘合”在一起,这些服务的性能和灵活性决定了系统最终的性能。可以使用IPC服务和其他附加的服务来扩展内核的功能。 用户编写的进程既可以作为应用程序,也可以作为底层OS功能来支持行业特定的应用程序。 操作系统本身变得“开放”并且易于扩展。 此外,用户编写的OS扩展也不会影响核心OS的基本可靠性。

QNX内存保护

对许多依照POSIX1.003.1标准实现的实时执行程序来说,它们的运行时环境通常是单进程、多线程的模型,线程之间没法做到内存保护,而这样的环境只是POSIX假设的多进程模型的一个子集,它不支持fork()函数。相比之下,QNX Neutrino利用MMU,在受保护的环境中实现了POSIX的线程模型。
一个真正的微内核会提供完整的内存保护,这个不仅适用于用户程序,也适用于OS组件,比如驱动程序、文件系统等。

针对内存保护,有以下几种情况:

  • 不提供内存保护:所有程序位于同一个地址空间,应用程序可以访问所有空间,效率较高,但是程序指针错误可能造成内核崩溃,典型的比如Nuttx平板模式。


    平板模式
  • 单内核OS提供部分内存保护:用户层和系统层进行了隔离,内核和各种驱动、协议栈在同一个地址空间,应用程序在单独空间。内核模块处于一个保护空间,效率较高,应用程序无法访问,系统的稳定性也得到提高。由于内核模块处于保护空间,调试会比较困难。比如Linux系统。


    单内核模式
  • 微内核OS提供完整的内存保护:内核处于一个被保护的地址空间,驱动程序、网络协议及应用程序等处于程序空间中。


    微内核模式

QNX Neutrino微内核

内核是操作系统的核心,在有些操作系统中,内核包含了很多功能,导致内核像是个完整的操作系统。而QNX的微内核是一个真正的内核,它非常小,并且只提供基本的服务:

  • 通过POSIX线程创建原语提供的线程服务;
  • 通过POSIX信号原语提供的信号服务;
  • 消息传递服务,微内核处理整个系统中所有线程之间的消息路由;
  • 通过POSIX线程同步原语提供的同步服务;
  • 调度服务,微内核使用各种POSIX实时调度策略来调度线程执行;
  • 定时器服务,微内核提供了丰富的POSIX定时器服务集;
  • 进程管理服务,微内核与进程管理器一起组成一个叫procnto的单元,进程管理器部分负责管理进程、内存,还有路径名空间。
    与线程不同,微内核本身不会被调度执行。处理器只在微内核中执行系统调用、异常、硬件中断响应等。

QNX Neutrino操作系统的微内核,管理一组协作的进程,如下图所示,这种结构不是一种层级的组织,更像是一个团队,因为不同的进程可以通过内核来协调交互。QNX Neutrino充当一个“软件总线”的角色,可以在需要的时候动态的插入和移除系统模块。


QNX Neutrino架构

进程及进程间通信

除了procnto单元提供的服务外,所有的系统服务都是通过标准的进程来处理的。一个配置丰富的QNX系统应该包括以下功能:

  • 文件系统管理器
  • 字符设备管理器
  • 图形用户界面
  • 本地网络管理器
  • TCP/IP

系统进程 vs 用户进程

系统进程与任何用户编写的进程本质上是不可区分的,它们使用相同的公共API和内核服务。正是这种架构也让QNX具备了无与伦比的可扩展性。由于大多数的操作系统服务由标准的系统进程提供,因此增强操作系统本身变得非常简单:只需编写新的程序来提供新的操作系统服务。实际上,操作系统和应用程序之间的界限可能会变得非常模糊,系统服务和应用程序之间唯一真正的区别是操作系统服务为客户管理资源。

假如你需要写一个数据库的服务器,这样一个进程怎么分类?
正如文件系统接受请求(通过消息)来打开文件和读写数据一样,数据库服务器也需要接受请求,尽管数据库服务器的请求可能更复杂,但是两者非常相似,需要提供API(由消息实现)给客户端进行资源访问。此外,它们都是独立的进程,可以由终端用户来编写,并且根据需要来进行启动和停止。
数据库服务器可能在某个任务中充当系统进程,而在另外的任务中充当应用户进程,但是这都不重要,重要的是QNX操作系统可以在不修改操作系统本身的标准组件的情况下,允许用户实现这样的进程,对于嵌入式开发人员来说,提供了很大的灵活性。

设备驱动程序允许操作系统和应用程序以通用的方式去访问低层的硬件(例如磁盘设备驱动器、网络接口)。虽然大多数的OS要求设备驱动程序与OS本身紧密绑定,但是QNX Neutrino的驱动程序能被当成一个标准的进程被启动和停止。因此,添加设备驱动程序不会影响OS的其他部分,可以像应用程序一样开发和调试驱动。

进程间通信

IPC(Interprocess Communication)进程间通信,是将应用程序设计成一组进程的关键,确保每个进程处理整体中的某一部分。QNX是第一个将消息传递作为IPC基本手段的商业操作系统,操作系统的强大、简单和优雅,在很大程度上归功于消息传递在整个系统中的完整集成。
在QNX Neutrino中,消息是从一个进程传递给另一个进程的字节包,消息的内容只对发送者和接收者有意义。
消息传递不仅允许进程相互传递数据,而且还提供了一种同步多个进程执行的方法。当进程发送、接收、回复消息时,它们会经历各种“状态变化”,这些“状态变化”,会影响它们的执行时间和时间长度。了解它们的优先级和状态,微内核可以尽可能有效的调度所有进程,最大限度来利用CPU资源。消息传递在整个系统中不断的起作用。
实时或关键任务,通常需要一套可靠的IPC机制,因为组成这些任务的进程之间关联很紧密。QNX Neutrino的消息传递设计所强加的规则,给应用程序带来了秩序和可靠性。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容