本文分享自中移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