内核对象框架

本文分享自中移OneOS微信公众号《内核对象框架》。

内核是操作系统中最为基础也是最重要的部分。内核处于硬件抽象层之上,组件层之下,包括内核运行库、内核对象框架、实时内核等。操作系统内核架构如下图。

内核运行库:为了保证内核能够独立运行的一套小型的函数实现子集,包含内存拷贝,字符串处理等;

内核对象框架:用于管理和访问所有的内核对象,统一管理内核对象使系统具有更好的灵活性和可扩展性;

实时内核:包含任务管理、任务调度、任务间同步、任务间通信、内存管理、中断管理、时钟管理等,具体功能在下文扩展。

包括任务处理、软件定时器、信号量、邮箱和实时调度等相对完整的实时操作系统特性,最小的资源占用情况是3KB ROM,1.2KB RAM。

内核对象框架

用于统一管理和访问所有的内核对象。任务、互斥量、信号量、事件、消息队列、邮箱、内存堆、设备等都使用该框架管理。

对象容器

首先,系统对每一类内核对象初始化对应的对象容器,该容器包含对象链表及数量记录。

对象容器的数据结构如下:


struct os_object_info 
{ 
     enum os_object_type    type;        /* 对象类型 */ 
     os_list_node_t         object_list;  /* 对象链表 */ 
}

其中,type表示记录对象的类型,list是链表结构,用于保存相同类型的内核对象,新增和删除对象都是在链表上进行操作,保证了操作效率。

对象实例

将多种内核对象的相同属性抽象出一个基本结构,作为对象控制块,各内核对象均扩展自该基类,并根据具体类型增加相应私有属性。类似于面向对象的继承与派生的特性。

控制块结构如下:


struct os_object 
{ 
     char             name[OS_NAME_MAX];    /* 内核对象名称     */ 
     os_uint8_t     type;                   /* 内核对象类型    */ 
     os_uint8_t     flag;                   /* 内核对象的参数  */ 
     os_bool_t      is_static;              /* 内核对象内存标识 */
     os_list_node_t  list;                   /* 内核对象管理链表 */
};

每个内核对象的首部都包含该结构,成员is_static标识内核对象存储空间是用户静态定义还是通过内核动态申请,成员list用于与对象容器和兄弟对象进行连接。

OneOS是中国移动针对物联网领域推出的轻量级操作系统,具有可裁剪、跨平台、低功耗、高安全等特点,支持ARM Cortex-M/R/A、MIPS、RISC-V等主流CPU架构,兼容POSIX、CMSIS等标准接口,支持Micropython语言开发,提供图形化开发工具,能够有效提高开发效率并降低开发成本,帮助客户开发稳定可靠、安全易用的物联网应用。 官网地址:https://os.iot.10086.cn/
OneOS软件地址:http://www.oschina.net/p/cmcc-oneos
OneOS项目地址:https://gitee.com/cmcc-oneos/OneOS
OneOS技术交流群:158631242

{{o.name}}
{{m.name}}

猜你喜欢

转载自my.oschina.net/u/5443273/blog/5440007