QNX 系统架构
QNX 体系结构
QNX 采用微内核的架构,微内核只提供进程调度、进程间通信、底层网络通信和中断处理四种服务。驱动程序、协议栈、文件系统、应用程序等都在微内核之外内存受保护的安全的用户空间内运行,组件之间能避免相互影响,在遇到故障时也能重启。
因此,在 QNX 中包含以下四个最基本的系统进程:
- ProcessManager(Proc)—— 进程管理器
- FilesystemManager(Fsys)—— 文件系统管理器
- DeviceManager(Dev)—— 设备管理器
- NetworkManager(Net)—— 网络管理器
QNX 是通过如下两个基本原理实现它独特的高效性、模块化和简易性。
- 微内核(microkernel architecture)
- 基于消息的进程间通信(message-based interprocess communication)
微内核有两个重要任务 —— 任务调度 和 消息传递。任务调度是指当进程的状态改变或者中断发生时进行调度;消息传递则需要处理操作系统所有进程间的消息传递 。关于这部分的更多介绍,请阅读《QNX Neutrino 微内核》和《QNX 进程间通信》。
QNX 概念定义
QNX 系统定义了一些抽象的概念,诸如任务、消息、资源和节点等。任务是一个可执行单元,它可通过消息等手段对资源进行操作和与其它任务进行通信。典型的资源有内存和文件。网络上不同节点的两个任务可以不关心它们的状态而很方便地进行通信。
任务
任务是一个可调度的执行单元,换句话说,任务是由执行代码和只能由该任务存取的私有数据组成。大多数时间任务是独立运行的,只有在与其它任务或资源同步时暂停一刻。操作系统基于轮巡方式或预先定义的优先级方式来调度机器上的任务。相同优先级的任务只能按时间片轮流运行。低优先级任务必须等高优先级任务的 I/O 操作或其它操作完成挂起后才能运行,而最高优先级任务准备就绪就可运行。如果高优先级任务一直在运行,低优先级任务就无法运行。
文件
文件系统将磁盘上文件按目录树方式组织起来。文件包含数据并且可驻存在任意目录层中。目录包含有关文件和其它目录信息,诸如它们的名字和存取权限。因此目录就象个“盒子”,可以达到任意深度。文件和目录都有唯一的名字。
QNX 实现了至少六种文件类型,其中五种是由文件系统管理器(Fsys)来管理的。这些文件类型是:
- 常规文件 —— 由可随机存取的一系列字节组成,无任何预定义的结构。
- 目录文件 —— 包含查找常规文件需要用到的位置信息,也包含每个常规文件的状态和属性信息。
- 符号链文件 —— 包含着指向一个文件或目录的路径名,使人们可以通过该符号链来实现对该文件或目录的存取。这类文件常被用来产生指向单个文件的多个路径。
- 管道和 FIFO 文件 —— 可用作共操作进程之间的 I/O 通道。
- 块特殊文件 —— 用于指向设备,如磁盘驱动器、磁带和磁盘驱动器分区等。有了这些文件,应用程序可在不需要知道设备的硬件特征情况下对设备进行方便的存取。
- 第六种文件类型 —— 字符特殊文件,由设备管理器负责管理。其它可能的文件类型则由其它管理器负责管理。
设备
一般来说,除了硬盘外,其它外围设备都称为设备。这包括系统控制台、终端、打印机、调制解调器等。QNX 的设备管理器(Dev)就是进程和这些设备之间的接口。系统中硬盘和节点是被编号的,而设备是被命名的。在 I/O 名字空间中,这些设备使用“/dev”作为它们名字的前缀,因此用户根据这一特点可以很容易的找到它们。例如,QNX 的一个控制台设备应有像下面这样的名字:/dev/con1。
节点
节点是一个独立的工作站,它是 QNX 的一个重要特征。在同一时刻,各节点可以共享服务器节点的资源,诸如打印机、硬盘等。节点间通过高速局域网连接在一起。从程序设计人员的角度,可将整个系统看成单一的虚拟机,而实际上这个虚拟机是由不同节点组成的。所有任务被看成是在虚拟机上运行的,所有文件都是可存取的。