raw-os如何配合linux用来打造实时linux的方案已经考虑过2年,考虑过几种方案,但是都不通用。这段时间考虑了一种可行的方案如下:
raw-os既然能在vc上模拟,为什么不能在 linux内核级别也去模拟呢?如果采用linux内核级别的api模拟只采用到一个核心调度函数,而且不使用到linux内核相关的其他一切内核函数,那么可以最大化的避免linux内核产生的实时性的问题。具体的做法可以如下:
假设在一个4核的cpu上跑linux。
1 单独指定一个cpu跑raw-os的linux内核模拟。其过程高度类似于vc下的raw-os仿真。
2 raw-os的linux内核仿真支层只能调用raw-os的内核函数,linux层的api一律不能调用。
3 通过cpu间的相互中断来同步和传递raw-os以及linux层间的消息和数据。
4 linux 用户态创建线程和进程的时候只能在另外的3个不相干的cpu上,这一点可能需要改一下内核调度这块。
5 中断分发的时候只分发相关的中断到raw-os模拟的那个cpu上,无关的中断走其它3个cpu.
多核smp架构之间的实时性是一个非常复杂的问题,时间可能会不稳定,所以利用一个单核跑rtos,分开来做实时性的理念是可行的。
以上的过程具体的好处是,可以实现相当高的实时性,内核最大关中断时间为linux的调度函数,这个值是确定的一个常数时间,内核最大关抢占的时间转化为raw-os的内核最大关抢占的时间。而且移植非常方便,避开了对底层cpu细节的移植等等,唯一需要移植的就是cpu核间中断,这种是非常简单的。砖头已经抛出,希望能引到玉。
|