漫谈QNX(1)--架构

2022-04-19 17:06:03 浏览数 (1)

说起Blackberry的QNX操作系统, 想必大家都听说过,但到底为什么QNX能如此有名?难道微软的Windows和Linux都不能与之抗衡?

美国NASA的太空接驳飞船也使用QNX操作系统

QNX采用微内核结构,也就是说,内核非常非常非常小。这样一方面启动速度非常快,另一方面安全性稳定性大大提高。

QNX构架是有一个微型内核,然后又包含许多相关进程。这样的好处是,即使有一个进程出错,也不会影响内核。

各个服务进程以及应用进程之间通过内部进程通信IPC的方式进行沟通,如下图:

QNX构架

那什么是进程(pid)呢?如下图:

Process的结构

进程包含自己的一些资源,比如说ID, 内存(代码和数据),计时器,等等..., 并且这些资源是被保护的,也就是说其他进程不能访问。

线程是什么?

一个线程就是一个执行流或者控制流。

它也有一些属性,比如:优先级, 调度算法,寄存器集合,CPU掩码(用于多核应用),等......

而所有的这些属性都会作用在正在运行的代码上。

1 Kernel

顾名思义,核心模块。因为它,系统的各个模块可以协作

其他程序可以通过kernel call的方式来调用核心模块,来执行kernel的代码

大部分的子系统,包括用户应用软件,互相通信都是通过kernel call的方式

kernel是系统的核心

kernel call是采用抢占的方式(pre-emptable)被调用的。好处是,响应新的事件速度会很快,不好是要花更多的时间去恢复到原来被打断的kernel call。

内核可以提供不同的服务,比如: 同步,时钟,进程间通信,调度等等

内核可以提供不同的服务

kernel提供的进程之间的通信种类有三种:

a. Messages, 进程间交换信息

b. Pulses,传递通知给进程

c. Signals, 中断进程,并让它做点别的事情

Messages

Pulses

Signals

事实上,kernel可以被想象成一个library, 并没有一直不停运行的循环进程(no while(1)). 只有在被调用的时候才运行。

2 Process Manager

procnto = Process manager Micarokernel

Communication with the Process Manager

Process Manager提供服务包括:

a. 捆绑一组threads一起进入process

b. 内存保护,内存空间管理,QNX使用虚拟内存地址

c. 路径名管理

d. process创建和结束

e. 一个idle线程在cpu上运行,当cpu空闲的时候

虚拟地址,物理地址,共享内之间的关系

3 Scheduling

Thread都有两个状态: blocked和runnable。

Thread都有优先级(0-255),kernel总是选择优先级最高的thread来执行。

Thread都有属于自己的调度算法,(Round-robin, FIFO等等)

Round-robin 该术语来源于含义为“带子”的法语词ruban,久而被讹用并成为惯用语。在17、18世纪时法国农民希望以请愿的方式抗议国王时,通常君主的反应是将请愿书中最前面的两至三人逮捕并处决,所以很自然地没有人希望自己的名字被列在前面。为了对付这种专制的报复,人们在请愿书底部把名字签成一个圈(如同一条环状的带子),这样就找不出打头的人,于是只能对所有参与者进行同样的惩罚。

4 Resource manager

资源管理,顾名思义,就是提供POSIX规范的接口来管理资源。比如open文件、read文件、写文件...

0 人点赞