The main difference in scheduling between QNX 4 and QNX Neutrino is that
scheduling is done by thread, not by process.
In QNX Neutrino, the highest-priority thread is chosen to run, regardless of what process itâ€™s in.
Why that became changed?
Which is the advantage?
In QNX always processes used (with hardly different time requirement opposite Threads)
Why most People uses thread and not process?
If the processor has a MMU unit, the process concept should be nevertheless preferably used?
Advantage of threads over seperate processes is that it’s easier to exchange data between threads than it is between processes, IMHO that’s the biggest advantage. However seperate processes are good too, because you tend to have to do less locking, and do not need to worry about using non-threadsafe functions.
Also, the thread concept is prevalent on other platforms, and makes porting easier.
QNX Neutrino needs an MMU, period, so does not really affect whether you use threads or seperate processes.
QNX4 schedules by thread also (the highest priority “thread” runs regardless of which “process space” it belongs to), the big difference between 4 & 6 is not with what is scheduled, but how OS resources are related to units of execution. In QNX6 it is predominantly a 1 to many relationship whilst in QNX4 it was predominantly a 1 to 1 relationship.
Since 1 to many is a superset of 1 to 1, there is no reason you can’t develop architectures under QNX6 exactly as you would under QNX4.
I agree with you that if you have an MMU there are few cases where you wouldn’t want to make use of it (by having separate processes rather than threads), but there are some cases where the synchronization overhead (both in terms of cycles and conceptual complexity) is outweighed by the performance benefit of increased parallelism. With POSIX threads QNX6 makes it easier to develop for these instances.
Certainly, there is no need to feel compelled to use threads over processes.