嵌入式工程师心目中的微内核架构~

微内核是提供操作系统内核基本核心功能功能的操作系统版本。简单的说就是只提供操作系统的核心部分,比如任务调度,ipc,还有一些基本的内存管理。而其他的功能都是作为服务运行在操作系统之上,比如网络协议栈lwip,或者文件系统等等。这些服务是在操作系统之上的服务,所以只用和系统进行交互就可以了。

当应用了微内核开发之后,可以为嵌入式开发带来那些好处呢?一般做嵌入式开发都是在自己造轮子,这个轮子是圆的,还是方的,取决于具体的业务逻辑,但是微内核开发就是将这个轮子规范化,必须按照一定的模式去设计轮子,虽然做了规则限制,但是好处就是避免了很多人为的不合理的设计。微内核的特点在于微,所以其小巧的特点很适合在嵌入式上这种资源比较受限的场合下使用,并且由于使用了内存保护,这样设计出来的嵌入式的程序架构更加的可靠和稳定。

我认为做好一个微内核,有以下五个方面是不可缺少的。

1.mmu内存管理,内存保护

2.用户态应用程序的加载与运行

3.内核态与应用态程序的交互

4.进程间数据通信机制

5.系统服务与驱动框架

作为一个微内核系统,肯定要将程序分为内核态和应用态,因为往往对于服务程序来说,他们都是独占内存资源的,所以需要由mmu进行管理,而同时,用户态程序又是和内核态程序需要做到物理隔离的,这样保证应用程序crash后,内核程序也能够正常的运行,可以重启服务。

用户态程序的加载与运行,又会涉及到交叉编译工具的问题,因为要保证系统函数的统一性,所以在处理这些问题的时候,一般是选择同样的交叉编译工具链做内核与应用程序的开发。而之间却可以使用libc库进行构建。

内核态与用户态程序交互一般按照linux的方式都是通过系统调用进行,这里微内核也同样可以采用这样的模式。

作为嵌入式的rtos,ipc通信机制一般常用的是信号,邮箱,事件,消息队列,互斥量等等,这种就是在只有线程的情况下。如果做进程开发,肯定会少不了管道和共享内存的通信机制。

作为一个完全意义上的微内核,肯定是少不了系统服务和驱动框架的,这些都是最基本的东西,如何去做好微内核上的系统服务和驱动框架,一直都是在思考和探索的问题。我觉得系统服务本来也就是为系统服务的,所以只需要调用最基本的内核接口,实现了数据的处理功能,可以用黑盒子的模型来看,就是需要调用服务的应用程序,通过输入给系统服务一些数据,系统服务通过自己或者内核的基本功能,实现了数据的处理,然后将结果告诉用户。这种就是基本系统服务的设计思想。

而在微内核上的驱动框架,可以将其进行一定的框架设计。作为微内核,内存管理是内核部分进行的,而处于对系统的保护,一般应用程序处理驱动都需要向操作系统去申请访问的权限,在有了这个权限后,可以和写普通的rtt设备驱动框架一样,去操作设备,由于有了内存保护功能,所以即使在操作应用程序驱动过程,有了非法访问,也可以不会对整个系统造成破坏。

在设计驱动程序api接口的时候,也需要将其作为一个服务进程挂起,然后通过基本的api函数进行数据访问,按照文件的方式访问驱动,通过read,write,ioctl等基本操作进行访问可控制。

其实我觉得,未来嵌入式开发方向一定是属于不断完善的过程。如果系统做的很好,可以很大一定程度上降低嵌入式软件开发的门槛,而且软件也会更加的智能可控,甚至可以将微内核性能优化到极致,在cortex-m系列的芯片上也能够合理的进行应用程序的设计与开发。这是一个未来的趋势,也不可避免。

随着时代发展,嵌入式开发越来越趋近于智能化,大幅度降低由于人的思维误区造成的产品事故,而且也会很容易的设计出更加稳定产品,嵌入式的发展也是一个不断学习的过程,不断优化的过程。只有不断的总结和思考,才能跟得上时代的发展趋势,固步自封,闭关锁国,逃避学习新的知识终究会被尘封。


1.知情人爆国产天赐操作系统内幕

2.为什么Linux系统默认页大小是4KB?

3.c语言设计模式--状态模式(状态机)

4.C语言设计模式--简单工厂模式

5.驳《我国工业软件失去的30年》一文:生不出孩子怪天气

6.面向5G,中国移动重磅发布物联网操作系统——OneOS!

免责声明:本文系网络转载,版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。

你可能感兴趣的:(嵌入式工程师心目中的微内核架构~)