请教:QNX实现MMU的相关操作是在哪个部分?

继续看代码中,向各位大虾们请教几个问题:
1.QNX中实现数据隔离是通过MMU么,如果是应该包括MMU的初始化,创建内存映射,获得内存映射属性,获得逻辑地址对应的物理地址等操作,看代码,觉得这部分是在内存管理中memmgr进行实现的,不知道这样理解正确么?
2.进程管理,内存管理和内核在整个系统结构中位于一个层次么?他们之间是怎样一种关系?
3.QNX中的内核是运行在特权模式么?如果是,那内存管理,进程管理是在用户模式还是特权模式?

process management services – the microkernel and the process manager together form a unit (called procnto). The process manager portion is responsible for managing processes, memory, and the pathname space.

内存管理器负责物理、虚拟地址管理,你的理解是对的。

进程管理、内存管理理论上是内核外的一个特殊进程,它们不是内核的一部份。从源码上来说,只有ker/下面的那些是内核的一部份。从理论上来说,QNX可以配置成没有内存管理没有进程调度的实时执行体。但那样做了以后,message passing 就没有了意义,体现不出QNX的特点来了。但从系统的组织来说,进程管理,内存管理,命名空间管理都是内核外的特殊进程。

谢谢XTANG,这样理解就很清晰了!
你提到了message passing这块,我就想顺便问一下, QNX的消息传递是采用同步工作方式,看了一些资料,是这样说明的,一种配置是,当发送进程发送消息给接收进程,这两个进程可能不处于一个时间分区,当接收进程接收消息时,就将接收进程归入发送进程所在分区,所使用的时间也计入发送进程的时间片。
如果不这样配置,这种工作方式是否可以这样理解,当某个时间分区的进程给另一个时间分区的进程发送消息,发送进程发送完消息之后阻塞等待,由于该时刻接收进程所在分区的时间片没有到来,所以接收进程不能接收消息。只有等到接受进程所在分区的时间片到来,才能接收消息呢?

首先想说的是消息传递的同步工作方式,与时间分区技术是无关的两件事,以前没有时间分区时,消息传递也是同步的。

关于你的问题,举个例子:

如果有个文件系统进程,在分区S中;客户端进程a在分区A中请求文件服务;同时有b进程 在分区B中请求服务。

如果文件系统进程为a或b提供服务所花费的时间,是算在分区S上的,那么a就有机会连续不断地向文件系统提出请求(提个请求所花的时间是很短的,处理请求所花的时间一般比较长),从而导致文件系统用完所有分配给S的时间,然后就无法响应b的请求。这样a就可以“间接地”阻止b(或是任何其它进程)使用文件系统,无论这些进程的优先级,分区预算情况。这有点像网络中的DoS攻击,显然是不合理的。

实际时间分区技术里规定,文件系统为别人的请求提供服务时,所花费的时间全计算在提出请求的进程的分区里。也就是说,上述情况下,a可以连续不断地提请求,但所有的响应都算在分区A的预算里,A的预算很快会被用完,导致进程a无法继续获得CPU提出新的请求。这样做,保证了公平性,也保证服务器不会因为有进程不断请求服务,而无法响应别的请求。